2011-04-19  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Simon Fraser.

        WebPreferences in WebKit1 should have CanvasUsesAcceleratedDrawing set to NO by default
        https://bugs.webkit.org/show_bug.cgi?id=58936

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

2011-04-19  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Rename lengthReceived to encodedDataLength/dataLength
        https://bugs.webkit.org/show_bug.cgi?id=58883

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

2011-04-18  Jia Pu  <jpu@apple.com>

        Reviewed by Mark Rowe.

        WebKit needs to stop importing <AppKit/NSTextChecker.h>
        https://bugs.webkit.org/show_bug.cgi?id=58798
        <rdar://problem/9294938>

        Use public header <AppKit/NSSpellChecker.h> instead.

        * WebCoreSupport/CorrectionPanel.h:
        * WebCoreSupport/CorrectionPanel.mm:
        (correctionIndicatorType):
        (CorrectionPanel::show):
        (CorrectionPanel::dismissInternal):
        (CorrectionPanel::handleAcceptedReplacement):
        * WebCoreSupport/WebEditorClient.mm:
        * WebView/WebView.mm:

2011-04-17  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Timothy Hatcher.

        Stop using -[NSString initWithContentsOfFile:]
        https://bugs.webkit.org/show_bug.cgi?id=58763

        -[NSString initWithContentsOfFile:] was deprecated in 10.4, so we should stop using it.

        * WebView/WebView.mm:
        (leakMailQuirksUserScriptContents):
        (leakOutlookQuirksUserScriptContents):

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

        <http://webkit.org/b/58463> Switch HTTP pipelining from user default to private setting
        <rdar://problem/9268729>

        Reviewed by Dan Bernstein.

        This replaces support for the WebKitEnableHTTPPipelining user
        default with methods on the WebCore::ResourceRequest class in
        WebCore, the WebView class in WebKit1, and the WebContext class
        in WebKit2.  It also removes support for the
        WebKitForceHTTPPipeliningPriorityHigh user default which was not
        needed.

        * WebView/WebView.mm:
        (+[WebView(WebPrivate) _HTTPPipeliningEnabled]): Added.
        (+[WebView(WebPrivate) _setHTTPPipeliningEnabled:]): Added.
        * WebView/WebViewPrivate.h:
        (+[WebView(WebPrivate) _HTTPPipeliningEnabled]): Added declaration.
        (+[WebView(WebPrivate) _setHTTPPipeliningEnabled:]): Added declaration.

2011-04-17  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Dan Bernstein.

        Assign to self in WebInspectorWindowController constructors
        https://bugs.webkit.org/show_bug.cgi?id=58749

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

2011-04-17  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Timothy Hatcher.

        Move WebNodeHighlighter into its own file
        https://bugs.webkit.org/show_bug.cgi?id=58746

        Extract this class into its own file alongside the
        other WebNodeHighlight files. In doing so do some
        cleanup on WebInspectorClient removing some methods
        that were never called.

        * WebCoreSupport/WebInspectorClient.mm:
        (WebInspectorClient::WebInspectorClient): style fix.
        * WebInspector/WebNodeHighlighter.h: Added.
        * WebInspector/WebNodeHighlighter.mm: Added.
        (-[WebNodeHighlighter initWithInspectedWebView:]): call super init.
        (-[WebNodeHighlighter dealloc]):
        (-[WebNodeHighlighter highlightNode:]):
        (-[WebNodeHighlighter hideHighlight]):
        (-[WebNodeHighlighter didAttachWebNodeHighlight:]):
        (-[WebNodeHighlighter willDetachWebNodeHighlight:]):

2011-04-15  Jia Pu  <jpu@apple.com>

        Reviewed by Dan Bernstein.

        [Mac] WebKit needs to convert the bounding box of autocorrected word to view coordinate.
        https://bugs.webkit.org/show_bug.cgi?id=58717

        Convert the bounding box from window coordinate to view coordinate, which is expected by NSCorrectionPanel.

        * WebCoreSupport/CorrectionPanel.mm:
        (CorrectionPanel::show):

2011-04-15  Shishir Agrawal  <shishir@chromium.org>

        Reviewed by James Robinson.

        Add a flag to guard Page Visibility API changes.
        https://bugs.webkit.org/show_bug.cgi?id=58464

        * Configurations/FeatureDefines.xcconfig:

2011-04-15  Oliver Hunt  <oliver@apple.com>

        GC allocate Structure
        https://bugs.webkit.org/show_bug.cgi?id=58483

        Rolling r83894 r83827 r83810 r83809 r83808 back in with
        a workaround for the gcc bug seen by the gtk bots

        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        * Plugins/Hosted/ProxyInstance.mm:
        (WebKit::ProxyRuntimeMethod::createStructure):
        * Plugins/Hosted/ProxyRuntimeObject.h:
        (WebKit::ProxyRuntimeObject::createStructure):

2011-04-14  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Dan Bernstein.

        WebKit2: Password field input does not switch to ASCII-compatible source
        https://bugs.webkit.org/show_bug.cgi?id=58583
        <rdar://problem/9059651>

        Now that WebCore doesn't set secure input mode, WebKit has to. Happily, it already has the
        necessary logic, needed to return a nil text input context when in password fields.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView close]): If the view is still enforcing secure event mode, stop.
        (-[WebHTMLView windowDidBecomeKey:]): Call _updateSecureInputState.
        (-[WebHTMLView windowDidResignKey:]): Ditto.
        (-[WebHTMLView becomeFirstResponder]): Call _updateSecureInputState. It's a bit tricky
        because the first responder is still different an this point, so set a boolean variable to
        let _updateSecureInputState know what's going on.
        (-[WebHTMLView resignFirstResponder]): Disable secure event mode if it's on.
        (-[WebHTMLView _updateSecureInputState]): Update HIToolbox secure event input state and
        allowed input sources accorsing to current selection.
        (-[WebHTMLView _updateSelectionForInputManager]): Call _updateSecureInputState.

2011-04-15  Sam Weinig  <sam@webkit.org>

        Reviewed by Maciej Stachowiak.

        Make mac WebKit1 use the default localization strategy
        https://bugs.webkit.org/show_bug.cgi?id=58628

        * WebCoreSupport/WebPlatformStrategies.h:
        * WebCoreSupport/WebPlatformStrategies.mm:
        Remove the localization strategy code. The equivalent is now
        in WebCore/platform/DefaultLocalizationStrategy.cpp.

2011-04-15  Anna Cavender  <annacc@chromium.org>

        Reviewed by Eric Carlson.

        Renaming TRACK feature define to VIDEO_TRACK
        https://bugs.webkit.org/show_bug.cgi?id=53556

        * Configurations/FeatureDefines.xcconfig:

2011-04-14  Pratik Solanki  <psolanki@apple.com>

        Reviewed by David Kilzer.

        Set minimum priority for fast lane connections
        https://bugs.webkit.org/show_bug.cgi?id=58353

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Support for new WKSI method WKSetHTTPPipeliningMinimumFastLanePriority.

2011-04-13  Sam Weinig  <sam@webkit.org>

        Reviewed by Gavin Barraclough.

        WebKit2 doesn't keep overlay scrollers shown while scroll gesture held
        <rdar://problem/9260518>

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):
        Initialize new WKSI functions.

2011-04-13  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/58172> Fix -Wcast-align warning in WebBasePluginPackage.mm

        Reviewed by Anders Carlsson.

        Fixes the following warning with -Wcast-align enabled:

            Source/WebKit/mac/Plugins/WebBasePluginPackage.mm:402:21:{402:21-402:93}{402:39-402:93}: error: cast from 'uint8_t *' (aka 'unsigned char *') to 'struct fat_arch *' increases required alignment from 1 to 4 [-Werror,-Wcast-align,3]
                         archs = (struct fat_arch*)((uint8_t*)rawData.data() + sizeof(struct fat_header));
                                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

        * Plugins/WebBasePluginPackage.mm:
        (-[WebBasePluginPackage isNativeLibraryData:]): Added
        COMPILE_ASSERT() to make sure our pointer math is valid.
        Removed cast to (uint8_t*) and divide sizeof(struct fat_header)
        by sizeof(uint32_t) to fix the pointer math.  Replaced C-style
        casts with reinterpret_cast.

2011-04-12  Enrica Casucci  <enrica@apple.com>

        Reviewed by Alexey Proskuryakov.

        Infinite recursion in WebHTMLView executeSavedKeypressCommands.
        https://bugs.webkit.org/show_bug.cgi?id=58382
        <rdar://problem/9239370>

        Execution of some editing commands could trigger a call to selectedRange that
        internally calls executeSavedKeypressCommands creating an infinite recursion.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _executeSavedKeypressCommands]): Added a flag to avoid recursion.
        (-[WebHTMLView _interpretKeyEvent:savingCommands:]): Added flag initialization.

2011-04-12  Alice Liu  <alice.liu@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=58292
        Provide new setting to allow site icon loading despite disabling automatic image loading in general.

        * WebView/WebPreferenceKeysPrivate.h: Add preference key.
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]): Initialize to false.
        (-[WebPreferences setLoadsSiteIconsIgnoringImageLoadingPreference:]): Added.
        (-[WebPreferences loadsSiteIconsIgnoringImageLoadingPreference]): Added.
        * WebView/WebPreferencesPrivate.h: Add setter/getter definitions.
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]): Add to settings that get propagated upon changes. 

2011-04-11  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Maciej Stachowiak.

        WebKit2: Safari doesn't respect cmd-arrows (and variations) as custom keyboard shortcuts
        https://bugs.webkit.org/show_bug.cgi?id=58175
        <rdar://problem/9060555>

        * WebView/WebFrameView.mm: (-[WebFrameView keyDown:]): Added a comment explaining how this
        should be changed to match WebKit2.

2011-04-06  Timothy Hatcher  <timothy@apple.com>

        Fix a bug where the context menu does not show in PDF documents if there is no
        UI delegate or the UI delegate does not respond to the context menu selector.

        https://webkit.org/b/57958

        Reviewed by Darin Adler.

        * WebView/WebView.mm:
        (-[WebView _menuForElement:defaultItems:]): CallUIDelegate returns nil
        if UIDelegate is nil or doesn't respond to the selector. So check that
        here to distinguish between using defaultMenuItems or the delegate
        really returning nil to say "no context menu".

2011-04-11  Jer Noble  <jer.noble@apple.com>

        Unreviewed; roll out unintentional change to WebFullScreenController.mm.

        * WebView/WebFullScreenController.mm:
        (-[WebFullScreenController enterFullscreen:]):

2011-04-08  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        A few heap-related renames and file moves.
        
        WeakGCPtr<T> => Weak<T>
        Global<T> => Strong<T>
        collector/ => heap/
        collector/* => heap/*
        runtime/WeakGCPtr.h => heap/Weak.h
        
        (Eventually, even more files should move into the heap directory. Like
        Heap.h and Heap.cpp, for example.)

        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::LocalObjectMap::idForObject):
        (WebKit::NetscapePluginInstanceProxy::LocalObjectMap::forget):
        (WebKit::NetscapePluginInstanceProxy::evaluate):
        * WebView/WebScriptDebugger.h:

2011-04-08  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        WebKit2: Safari doesn't respect cmd-arrows (and variations) as custom keyboard shortcuts
        https://bugs.webkit.org/show_bug.cgi?id=58175
        <rdar://problem/9060555>

        * WebView/WebFrameView.mm: (-[WebFrameView keyDown:]): Added a comment explaining how this
        should be changed to match WebKit2.

2011-04-08  Alpha Lam  <hclam@chromium.org>

        Unreviewed, rolling out r83335.
        http://trac.webkit.org/changeset/83335
        https://bugs.webkit.org/show_bug.cgi?id=53556

        GTK and QT bots are broken

        * Configurations/FeatureDefines.xcconfig:

2011-04-07  Anna Cavender  <annacc@chromium.org>

        Reviewed by Eric Carlson.

        Setup ENABLE(TRACK) feature define
        https://bugs.webkit.org/show_bug.cgi?id=53556

        * Configurations/FeatureDefines.xcconfig:

2011-04-08  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin Adler.

        -[WebView setPreferences:] can take a lot of time if loading lots of webviews at once
        https://bugs.webkit.org/show_bug.cgi?id=58128
        <rdar://problem/9244553>
        
        The root of the problem here was an O(N^2) issue - each WebView,
        upon having its preferences initialized, would broadcast a
        notification that was listened to by all other WebViews sharing
        its preferences.
        
        To maintain the API contract, I split the notification into two,
        one that is for public API consumption, and the other which is for
        internal use only. Changes that don't need to be picked up by
        other WebViews broadcast the public notification only. And we
        avoid WebView broadcasting a notification just to get itself to
        update.

        * Misc/WebIconDatabase.mm:
        (-[WebIconDatabase _startUpIconDatabase]):
        (-[WebIconDatabase _shutDownIconDatabase]):
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView viewWillMoveToWindow:]):
        (-[WebBaseNetscapePluginView viewWillMoveToSuperview:]):
        (-[WebBaseNetscapePluginView viewDidMoveToWindow]):
        (-[WebBaseNetscapePluginView viewWillMoveToHostWindow:]):
        * WebView/WebPreferences.mm:
        (-[WebPreferences initWithIdentifier:]):
        (-[WebPreferences _setStringValue:forKey:]):
        (-[WebPreferences _setIntegerValue:forKey:]):
        (-[WebPreferences _setFloatValue:forKey:]):
        (-[WebPreferences _setBoolValue:forKey:]):
        (-[WebPreferences _setLongLongValue:forKey:]):
        (-[WebPreferences _setUnsignedLongLongValue:forKey:]):
        (-[WebPreferences _postPreferencesChangedNotification]):
        (-[WebPreferences _postPreferencesChangedAPINotification]):
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:usesDocumentViews:]):
        (-[WebView _preferencesChangedNotification:]):
        (-[WebView _preferencesChanged:]):
        (-[WebView setUsesPageCache:]):
        (+[WebView initialize]):
        (-[WebView setPreferences:]):
        (-[WebView _keyboardUIMode]):
        * WebView/WebViewInternal.h:

2011-04-07  Andrew Scherkus  <scherkus@chromium.org>

        Revert ENABLE_TRACK patch due to compile failures.

        * Configurations/FeatureDefines.xcconfig:

2011-04-07  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Anders Carlsson.

        REGRESSION (WebKit2): Reverse conversion doesn't work in Kotoeri
        https://bugs.webkit.org/show_bug.cgi?id=58066
        <rdar://problem/8965302>

        * WebView/WebHTMLRepresentation.mm:
        (-[WebHTMLRepresentation attributedStringFrom:startOffset:to:endOffset:]):
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView attributedSubstringFromRange:]):
        (-[WebHTMLView attributedString]):
        (-[WebHTMLView selectedAttributedString]):
        Updated for editingAttributedStringFromRange: now taking a WebCore::Range instead of DOMRange.

2011-04-07  Andy Estes  <aestes@apple.com>

        Reviewed by Darin Adler.

        REGRESSION (r64712): Microsoft Outlook 2011: original message contents
        not included when replying to an email.
        https://bugs.webkit.org/show_bug.cgi?id=57794
        
        Outlook populates a reply message by creating an empty WebView and
        using DOM API to populate the WebView's empty document with content
        from the original message. It expects the initial empty document to
        simply be "<html></html>", and it proceeds to dynamically create and
        append a BODY node and add the original message content as a child of
        that node. Outlook then takes the innerHTML of the frame's first body
        element and copies it into a *new* document that is displayed and
        edited in the reply message window.
        
        Due to implementing the HTML5 tree building algorithm in r64712,
        initial empty documents went from being "<html></html>" to being
        "<html><head></head><body></body></html>". Outlook still dynamically
        creates a BODY node to parent the original message content, but this
        BODY node duplicates the one created by the tree builder. When Outlook
        then takes the innerHTML of the first body element to populate the
        reply message window it gets the empty body element created by the
        parser, not the one it created with the original message content.
        
        Fix this by injecting a user script into the initial empty document
        that removes the HEAD and BODY nodes created by the parser. This
        ensures that the BODY created by Outlook is the only BODY in the
        document.

        * Misc/OutlookQuirksUserScript.js: Added.
        * WebView/WebView.mm:
        (leakMailQuirksUserScriptContents):
        (-[WebView _injectMailQuirksScript]):
        (needsOutlookQuirksScript):
        (leakOutlookQuirksUserScriptContents):
        (-[WebView _injectOutlookQuirksScript]):
        (-[WebView _commonInitializationWithFrameName:groupName:usesDocumentViews:]):

2011-04-06  Dai Mikurube  <dmikurube@chromium.org>

        Reviewed by David Levin.

        Add QUOTA build flag for unified quota API
        https://bugs.webkit.org/show_bug.cgi?id=57918

        * Configurations/FeatureDefines.xcconfig: Added QUOTA build flag

2011-04-06  Robert Sesek  <rsesek@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Move code duplicated between the WebKit/mac and WebKit2 down to WebCore because Chromium will need it too
        https://bugs.webkit.org/show_bug.cgi?id=54969

        * WebView/WebFrame.mm:
        (-[WebFrame _convertToNSRange:]): Moved duplicated code to WebCore
        (-[WebFrame _characterRangeAtPoint:]): Moved duplicated code to WebCore

2011-04-05  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        Move attributedStringFromRange down to WebCore
        https://bugs.webkit.org/show_bug.cgi?id=57905

        * Misc/WebNSAttributedStringExtras.h: Removed.
        * Misc/WebNSAttributedStringExtras.mm: Removed.
        * WebView/WebHTMLRepresentation.mm:
        (-[WebHTMLRepresentation attributedStringFrom:startOffset:to:endOffset:]):
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _writeSelectionWithPasteboardTypes:toPasteboard:cachedAttributedString:]):
        (-[WebHTMLView attributedSubstringFromRange:]):
        (-[WebHTMLView attributedString]):
        (-[WebHTMLView selectedAttributedString]):
        * WebView/WebPDFView.mm:
        (-[WebPDFView writeSelectionWithPasteboardTypes:toPasteboard:]):

2011-04-04  MORITA Hajime  <morrita@google.com>

        Reviewed by Ryosuke Niwa.

        [Refactoring] SpellCheckingResult should be replaced with TextCheckingResult
        https://bugs.webkit.org/show_bug.cgi?id=56085

        Removed NSTextCheckingResult to SpellCheckingResult convertion, and extracted
        NSTextCheckingResult to TextCheckingResult convertio from checkTextOfParagraph method.
        for requestCheckingOfString method.
        
        * WebCoreSupport/WebEditorClient.h:
        * WebCoreSupport/WebEditorClient.mm:
        (toCoreTextCheckingResults):
        (WebEditorClient::checkTextOfParagraph):
        (-[WebEditorSpellCheckResponder initWithSender:WebCore::sequence:types:WebCore::results:]):
        (-[WebEditorSpellCheckResponder perform]):
        (WebEditorClient::requestCheckingOfString):
        * WebView/WebFrame.mm:
        (-[WebFrame markersForSelectionStartAsText]):
        * WebView/WebFramePrivate.h:

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

        Didn't mean to land this.

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

2011-04-04  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/57384> CFNetwork and WebCore load priorities should match

        Reviewed by Alexey Proskuryakov.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Added initialization for
        wkSetHTTPPipeliningMaximumPriority().

2011-04-04  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Dan Bernstein.

        REGRESSION (WebKit2): Caps-Lock indicator sometimes doesn't appear in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=51230
        <rdar://problem/8780989>

        * WebView/WebHTMLView.mm: (-[WebHTMLView flagsChanged:]): Moved Caps Lock handling from
        WebKits to WebCore, because WebKit shouldn't be smart.

2011-04-01  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        REGRESSION: Assertion failure when executing a complex custom key binding
        https://bugs.webkit.org/show_bug.cgi?id=57681

        * WebView/WebHTMLView.mm: (-[WebHTMLView hasMarkedText]): There is no need to execute saved
        commands when they can't possibly change the result.

2011-04-01  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Shockwave plug-in doesn't accept mouse events
        https://bugs.webkit.org/show_bug.cgi?id=57653
        <rdar://problem/8483273>

        Fix an unrelated bug found by the added test.

        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView convertFromX:andY:space:toX:andY:space:]):
        Make sure to always set destX and destY.

2011-04-01  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        Make WebKit2 text input handling more like WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=57649

        * WebView/WebFrameInternal.h: Expose _convertToDOMRange for use in WebHTMLView.
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _executeSavedKeypressCommands]): Renamed, since these are not editor commands.
        (-[WebHTMLView _interpretKeyEvent:savingCommands:]): Updated for the renamed _executeSavedKeypressCommands.
        (-[WebHTMLView characterIndexForPoint:]): Ditto.
        (-[WebHTMLView firstRectForCharacterRange:]): Ditto.
        (-[WebHTMLView selectedRange]): Ditto.
        (-[WebHTMLView markedRange]): Ditto.
        (-[WebHTMLView attributedSubstringFromRange:]): Ditto.
        (-[WebHTMLView hasMarkedText]): Ditto.
        (-[WebHTMLView unmarkText]): Ditto.
        (-[WebHTMLView setMarkedText:selectedRange:]): Ditto. Changed the comment about the argument
        type into an assertion. Removed resetting interpretKeyEventsParameters to 0, as we shouldn't
        be able to call text input protocol methods from here (and we didn't even reset it back on
        return). Changed to retrieve all data before starting to apply actions to better match WK2 code.
        (-[WebHTMLView insertText:]): Ditto.

2011-04-01  Timothy Hatcher  <timothy@apple.com>

        Make momentum scroll event latching work in WebKit2 on Mac.

        <rdar://problem/8751861>

        Reviewed by Darin Adler.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Remove IsLatchingWheelEvent, add GetNSEventMomentumPhase.
        * WebView/WebDynamicScrollBarsView.mm:
        (-[WebDynamicScrollBarsView scrollWheel:]): Use WKGetNSEventMomentumPhase to set isLatchingEvent.

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

        Reviewed by Anders Carlsson.

        Assertion failure in -[WebHTMLView _handleStyleKeyEquivalent:]
        https://bugs.webkit.org/show_bug.cgi?id=26667

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _handleStyleKeyEquivalent:]): Handle the case where WebView is
        nil rather than asserting that it is non-nil. One case where WebView will be nil
        is when the frame is closed, but in any case where it is nil, the correct thing
        to do is to not try to handle the style key.

2011-03-31  Alexey Proskuryakov  <ap@apple.com>

        Patch by John Harvey, reviewed and tweaked by me.

        <rdar://problem/8644403> Should notify TSM that plug-ins would show a bottom input window for marked text.

        * Plugins/Hosted/WebTextInputWindowController.m:
        (-[WebTextInputPanel _interpretKeyEvent:string:]):

2011-03-31  Evan Martin  <evan@chromium.org>

        Reviewed by Eric Seidel.

        <title> should support dir attribute
        https://bugs.webkit.org/show_bug.cgi?id=50961

        Update to new FrameLoaderClient interface.

        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::dispatchDidReceiveTitle):
        (WebFrameLoaderClient::setTitle):

2011-03-30  Dominic Cooney  <dominicc@google.com>

        Reviewed by Dimitri Glazkov.

        Adds layoutTestController.shadowRoot accessor to Mac DRT.
        https://bugs.webkit.org/show_bug.cgi?id=57415

        * DOM/WebDOMOperations.mm:
        (-[DOMElement _shadowRoot:]):
        * DOM/WebDOMOperationsPrivate.h:

2011-03-30  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        WebHTMLView shouldn't resend noop: commands
        https://bugs.webkit.org/show_bug.cgi?id=57504
        <rdar://problem/9209390>

        * WebView/WebHTMLView.mm: (-[WebHTMLView _executeSavedEditingCommands]): Filter out NOOPs,
        which we get e.g. when handling Cmd-key combos.

2011-03-30  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        REGRESSION (r82320): Spacebar no longer pages down
        https://bugs.webkit.org/show_bug.cgi?id=57423
        <rdar://problem/9207702>

        Also includes some unrelated cleanup that I had in my tree.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _interpretKeyEvent:savingCommands:]): Added an assertion that the event is
        being dispatched to the right frame.
        (-[WebHTMLView setMarkedText:selectedRange:]): Use 0 for a pointer, not NULL.
        (-[WebHTMLView doCommandBySelector:]): Update eventInterpretationHadSideEffects with "|=".
        Even if this specific command hasn't been handled, that doesn't nullify side effects from
        previous commands.
        (-[WebHTMLView insertText:]): Besides looking at the return value of insertText() to fix the
        bug, removed setting _private->interpretKeyEventsParameters to 0. I don't see any way for
        another WebHTMLView NSTextInput method to be called from within insertText:, so no one is
        going to look at it.

2011-03-30  Sam Weinig  <sam@webkit.org>

        Reviewed by Brady Eidson.

        WebKit2: Attempting to view css file from url causes it to download
        <rdar://problem/9102611>
        https://bugs.webkit.org/show_bug.cgi?id=57501

        * WebView/WebHTMLRepresentation.h:
        * WebView/WebHTMLRepresentation.mm:
        (+[WebHTMLRepresentation unsupportedTextMIMETypes]):
        * WebView/WebHTMLView.mm:
        (+[WebHTMLView unsupportedTextMIMETypes]):
        Re-factor unsupportedTextMIMETypes to pull from WebCore's
        MIMETypeRegistry, so that the list can be shared with WebKit2.

2011-03-29  Beth Dakin  <bdakin@apple.com>

        Reviewed by Maciej Stachowiak.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=57408 
        webkit-min-device-pixel-ratio media query doesn't work post-SnowLeopard 
        -and corresponding-
        <rdar://problem/8665411>

        * Misc/WebNSControlExtras.m:
        (-[NSControl sizeToFitAndAdjustWindowHeight]):
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::scaleFactor):
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView viewDidMoveToWindow]):
        (-[WebHTMLView attachRootLayer:]):

2011-03-29  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        Make validation message bubble testable
        https://bugs.webkit.org/show_bug.cgi?id=57290

        * WebView/WebView.mm:
        (-[WebView _preferencesChangedNotification:]): Copy the private value of
          the timer magnification to WebCore::Settings.
        (-[WebView validationMessageTimerMagnification]): Added.
        (-[WebView setValidationMessageTimerMagnification:]): Added.
        * WebView/WebViewData.h: Declare a member for the timer magnification.
        * WebView/WebViewData.mm:
        (-[WebViewPrivate init]): Initialize the timer magnification.
        * WebView/WebViewPrivate.h:
          Declare a setter and a getter for the timer magnification.

2011-03-29  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        [Mac] Enable interactive-validation tests on Mac DRT
        https://bugs.webkit.org/show_bug.cgi?id=57308

        * WebView/WebView.mm:
        (-[WebView _preferencesChangedNotification:]):
          Convey a WebView flag for interactive validation to WebCore::Settings.
        (-[WebView interactiveFormValidationEnabled]): Added.
        (-[WebView setInteractiveFormValidationEnabled:]): Added.
        * WebView/WebViewData.h: Add interactiveFormValidationEnabled.
        * WebView/WebViewData.mm:
        (-[WebViewPrivate init]): Initialize interactiveFormValidationEnabled.
        * WebView/WebViewPrivate.h: Add setter and getter for interactiveFormValidationEnabled.

2011-03-29  Timothy Hatcher  <timothy@apple.com>

        Update the order of the context menu to better match AppKit on Mac.

        <rdar://problem/9054893>

        Reviewed by John Sullivan.

        * DefaultDelegates/WebDefaultContextMenuDelegate.mm:
        (-[WebDefaultUIDelegate webView:contextMenuItemsForElement:defaultMenuItems:]): Update the order of items.
        * WebCoreSupport/WebPlatformStrategies.h:
        * WebCoreSupport/WebPlatformStrategies.mm:
        (WebPlatformStrategies::contextMenuItemTagLookUpInDictionary): Added argument for selected string.

2011-03-29  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=57379
        Clean up WK1 key event handling logic

        No bugs knowingly fixed, but this makes the code more consistent.

        * WebView/WebHTMLView.mm:
        (struct WebHTMLViewInterpretKeyEventsParameters): Renamed eventWasHandled to
        eventInterpretationHadSideEffects, because "handled" doesn't really mean much.
        (-[WebHTMLView _executeSavedEditingCommands]): Factored out from _interpretKeyEvent for use
        from other functions. We need to execute saved commands when an input method asks for current
        state, because providing stale state could confuse it.
        (-[WebHTMLView _interpretKeyEvent:savingCommands:]): Heavily commented, and updated for other
        changes.
        (-[WebHTMLView characterIndexForPoint:]): Call _executeSavedEditingCommands, because otherwise,
        the answer would be stale.
        (-[WebHTMLView firstRectForCharacterRange:]): Ditto.
        (-[WebHTMLView selectedRange]): Ditto.
        (-[WebHTMLView markedRange]): Ditto.
        (-[WebHTMLView attributedSubstringFromRange:]): Ditto.
        (-[WebHTMLView hasMarkedText]): Ditto.
        (-[WebHTMLView unmarkText]): Call _executeSavedEditingCommands, because otherwise, we'd be
        operating on stale data. Also, updated for eventWasHandled renaming.
        (-[WebHTMLView setMarkedText:selectedRange:]): Ditto.
        (-[WebHTMLView doCommandBySelector:]): Removed special handling for noop:. I verified that
        it's no longer needed for bug 14522, presumably due to WebCore level changes. It was also
        fragile, because there is no guarantee about when noop: is sent (also, a custom key binding
        could have a noop: as one of its commands, although that's hardly practical).
        Added the same "from input method" logic that we have in insertText: - I don't know of any
        IMs that call this method, but we clearly need to execute it as part of IM processing when
        there is marked text.
        (-[WebHTMLView insertText:]): Removed a confusing check for [text length]. Always set
        eventInterpretationHadSideEffects to true, becasue there is no reason to try multiple times
        if current selection isn't editable. This is different from doCommandBySelector:, where we
        need to give super class a chance to handle the event if our processing fails.
        Removed a nonsense "consumedByIM = true" assignment - we no longer need it now that the
        return value of _interpretKeyEvent is computed differently.

2011-03-28  Adele Peterson  <adele@apple.com>

        Reviewed by Eric Seidel.

        Fix for <rdar://problem/9112694> REGRESSION (r79411): "Check grammar with spelling" context menu doesn't check as you type
        https://bugs.webkit.org/show_bug.cgi?id=57173

        * WebView/WebFrame.mm:
        (-[WebFrame hasSpellingMarker:length:]): Call new selectionStartHasMarkerFor method instead of selectionStartHasSpellingMarkerFor.
        (-[WebFrame hasGrammarMarker:length:]): Call new selectionStartHasMarkerFor method.
        * WebView/WebFramePrivate.h: Add hasGrammarMarker so grammar marking can be tested.

2011-03-28  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=57260
        Clean up text input code a little

        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::handleKeyboardEvent):
        (WebEditorClient::handleInputMethodKeydown):
        * WebView/WebHTMLViewInternal.h:
        Renamed _interceptEditingKeyEvent:shouldSaveCommand:, becasue it doesn't really intercept
        anything. It's just a version it interpretKeyEvents: that tells us whether it was handled,
        and also possibly saves resulting commands for later execution.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _interpretKeyEvent:savingCommands:]): Changed to use early return. Changed
        return value in case platformEvent is null to be less mysterious. Moved receivedNOOP from
        WebHTMLViewPrivate to WebHTMLViewInterpretKeyEventsParameters, as this is just part of event
        handling state, like the other booleans there. Don't call interpretKeyEvents: again simply
        because the first call resulted in no saved commands, becasue it's confusing and apparently
        useless (I couldn't find any broken behavior).
        (-[WebHTMLView unmarkText]): Cleaned upo BOOL vs. bool constants.
        (-[WebHTMLView setMarkedText:selectedRange:]): Ditto.
        (-[WebHTMLView doCommandBySelector:]): Ditto.
        (-[WebHTMLView insertText:]): Ditto.

        * WebView/WebViewInternal.h: There was no _interceptEditingKeyEvent:shouldSaveCommand:
        method on WebView.

2011-03-27  Jer Noble  <jer.noble@apple.com>

        Reviewed by Maciej Stachowiak.

        Full Screen: disable keyboard access by default
        https://bugs.webkit.org/show_bug.cgi?id=56684

        Take into account whether keyboard access was requested when deciding whether full
        screen mode is supported.

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::supportsFullScreenForElement):
        * WebView/WebView.mm:
        (-[WebView _supportsFullScreenForElement:WebCore::withKeyboard:]):
        * WebView/WebViewInternal.h:

2011-03-26  Jer Noble  <jer.noble@apple.com>

        Reviewed by Eric Carlson.

        Enable the Full Screen API by default in WebKit/mac and WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=56956

        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]): Default the WebKitFullScreenEnabled preference to true.

2011-03-25  Andy Estes  <aestes@apple.com>

        Reviewed by Adele Peterson.

        REGRESSION (r70748): latest nightly builds kills AC_QuickTime.js
        https://bugs.webkit.org/show_bug.cgi?id=49016

        Update objectContentType() implementation to handle the
        shouldPreferPlugInsForImages flag.

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

2011-03-24  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r81939.
        http://trac.webkit.org/changeset/81939
        https://bugs.webkit.org/show_bug.cgi?id=57084

        Rolling out 81939, as it's causing a number of app cache test
        failures. (Requested by jernoble on #webkit).

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

2011-03-23  Jer Noble  <jer.noble@apple.com>

        Reviewed by Maciej Stachowiak.

        Application Cache should save audio/ and video/ mime types as flat files
        https://bugs.webkit.org/show_bug.cgi?id=53784
        <rdar://problem/8932473>

        No new tests.

        Initialize the AppCache Total size quotas with the values for WebKitPreferences
        upon startup.

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

2011-03-24  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r81916 and r81917.
        http://trac.webkit.org/changeset/81916
        http://trac.webkit.org/changeset/81917
        https://bugs.webkit.org/show_bug.cgi?id=57071

        broke a test on platforms that do not have QuickTime installed
        (Requested by estes on #webkit).

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

2011-03-24  Andy Estes  <aestes@apple.com>

        Reviewed by Darin Adler.

        REGRESSION (r70748): latest nightly builds kills AC_QuickTime.js
        https://bugs.webkit.org/show_bug.cgi?id=49016

        Update objectContentType() implementation to handle the
        shouldPreferPlugInsForImages flag.

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

2011-03-24  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Ensure that all compilation takes place within a dynamic global object scope
        https://bugs.webkit.org/show_bug.cgi?id=57054

        * WebView/WebScriptDebugDelegate.mm:
        (-[WebScriptCallFrame evaluateWebScript:]): Updated for signature change.

2011-03-24  Jia Pu  <jpu@apple.com>

        Reviewed by Darin Adler.

        Dismissed reversion suggestion is incorrectly learned.
        https://bugs.webkit.org/show_bug.cgi?id=57039

        CorrectionPanel should always use [NSSpellChecker dismissCorrectionBubbleForView].
        [NSSpellChecker cancelCorrectionBubbleForView] is reserved for situation where correction panel
        is dismissed explicitly by ESC key or clicking the dimiss button. Misusing these causes
        incorrect automatic learning.

        * WebCoreSupport/CorrectionPanel.mm:
        (CorrectionPanel::dismissInternal):

2011-03-24  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/56993> ENABLE_PLUGIN_PROXY_FOR_VIDEO should be defined to 0 on Mac OS X

        Reviewed by Joseph Pecoraro.

        * Plugins/WebPluginContainerPrivate.h: Changed value of
        ENABLE_PLUGIN_PROXY_FOR_VIDEO from 1 to 0.

2011-03-23  Jia Pu  <jpu@apple.com>

        Reviewed by Darin Adler.

        Hook up new AppKit autocorrection UI with WK2.
        https://bugs.webkit.org/show_bug.cgi?id=56055
        <rdar://problem/8947463>

        Please see WebCore/ChangeLog for detail.

        * WebCoreSupport/CorrectionPanel.h: Added.
        (CorrectionPanel::isShowing):
        * WebCoreSupport/CorrectionPanel.mm: Added.
        (correctionBubbleType):
        (CorrectionPanel::CorrectionPanel):
        (CorrectionPanel::~CorrectionPanel):
        (CorrectionPanel::show):
        (CorrectionPanel::dismiss):
        (CorrectionPanel::dismissSoon):
        (CorrectionPanel::dismissInternal):
        (CorrectionPanel::recordAutocorrectionResponse):
        * WebCoreSupport/WebEditorClient.h:
        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::WebEditorClient):
        (WebEditorClient::showCorrectionPanel):
        (WebEditorClient::dismissCorrectionPanel):
        (WebEditorClient::dismissCorrectionPanelSoon):
        (WebEditorClient::recordAutocorrectionResponse):
        * WebView/WebView.mm:
        (-[WebView handleCorrectionPanelResult:]):
        * WebView/WebViewPrivate.h:

2011-03-23  Enrica Casucci  <enrica@apple.com>

        Reviewed by Alexey Proskuryakov.

        Services menu item to convert selected Simplified/Traditional Chinese Text is not working.
        https://bugs.webkit.org/show_bug.cgi?id=56974
        <rdar://problem/8284642>

        This fixes a regression introduced by http://trac.webkit.org/changeset/61794
        where readSelectionFromPasteboard was accidentally removed.
        This method and writeSelectionToPasteboard are needed to support Mac OS X
        services.
        
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _pasteAsPlainTextWithPasteboard:]): Added.
        (-[WebHTMLView readSelectionFromPasteboard:]): Added.

2011-03-23  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        Change IconDatabase opening to allow for arbitrary filenames
        https://bugs.webkit.org/show_bug.cgi?id=56977

        * Misc/WebIconDatabase.mm:
        (-[WebIconDatabase _startUpIconDatabase]):

2011-03-22  Anton D'Auria  <adauria@apple.com>

        Reviewed by Alexey Proskuryakov.

        Add +[WebApplicationCache getOriginsWithCache]
        https://bugs.webkit.org/show_bug.cgi?id=56722

        Call existing WebCore::ApplicationCacheStorage::getOriginsWithCache API.

        * WebCoreSupport/WebApplicationCache.h:
        * WebCoreSupport/WebApplicationCache.mm:
        (+[WebApplicationCache originsWithCache]):

2011-03-22  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        OBJECT element with DivX source is always downloaded
        https://bugs.webkit.org/show_bug.cgi?id=56879

        * Plugins/WebBasePluginPackage.mm:
        (-[WebBasePluginPackage getPluginInfoFromPLists]):
        Always try to split every element in the "WebPluginExtensions" array, since the DivX plug-in
        specifies multiple file extensions in a single element.

2011-03-22  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/8648311> and https://bugs.webkit.org/show_bug.cgi?id=56876
        WK2 Icon DB: Expand IconDatabaseClient interface and move it to the main thread

        Note that while the new client calls always come through on the main thread, our mechanisms to
        route dispatches to the main thread are still valid and will still work.

        Update to the new IconDatabaseClient interface:
        * WebCoreSupport/WebIconDatabaseClient.h:
        * WebCoreSupport/WebIconDatabaseClient.mm:
        (WebIconDatabaseClient::didRemoveAllIcons):
        (WebIconDatabaseClient::didImportIconURLForPageURL):
        (WebIconDatabaseClient::didImportIconDataForPageURL):
        (WebIconDatabaseClient::didChangeIconForPageURL):
        (WebIconDatabaseClient::didFinishURLImport):

2011-03-22  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Simon Fraser.

        Have WebKit push acceleratedDrawing preferences to settings
        https://bugs.webkit.org/show_bug.cgi?id=56792

        * WebView/WebView.mm:

2011-03-21  Nate Chapin  <japhet@chromium.org>

        Reviewed by Brady Eidson.

        Expose a preference to use caching quirks for QuickLook,
        and use it if the QuickLook framework is loaded.

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

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

2011-03-21  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        AX: showContextMenu not working in WK2
        https://bugs.webkit.org/show_bug.cgi?id=56734

        Implement showContextMenu() so accessibility related code can call this
        independent of whether WK1 or WK2 is running.

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

2011-03-21  Chang Shu  <cshu@webkit.org>

        Reviewed by Alexey Proskuryakov.

        REGRESSION (r79953): Can't type in MS Outlook 2011
        https://bugs.webkit.org/show_bug.cgi?id=56665

        r79953 removed the WebView level editablity which is persistent no matter whether
        underlying document itself is changed and editability gets lost. The resolution is to
        set this WebView editable value to WebCore. This avoids the callback from WebCore to
        WebKit which was the main goal in r79953 to improve performance.

        * WebView/WebView.mm:
        (-[WebView setEditable:]):
        (-[WebView isEditable]):

2011-03-19  Anton D'Auria  <adauria@apple.com>

        Reviewed by Alexey Proskuryakov.

        ApplicationCacheGroup is not obsolete after being deleted via ApplicationCacheStorage::deleteEntriesForOrigin
        https://bugs.webkit.org/show_bug.cgi?id=56415
        
        Use new ApplicationCache API to delete all cache for an origin.

        * WebCoreSupport/WebApplicationCache.h:
        * WebCoreSupport/WebApplicationCache.mm:
        (+[WebApplicationCache deleteOrigin:]):

2011-03-17  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=56425
        More groundwork for WebKit2 IconDatabase

        Update already-used function names:
        * Misc/WebIconDatabase.mm:
        (-[WebIconDatabase iconForURL:withSize:cache:]):
        (-[WebIconDatabase iconURLForURL:]):
        * WebView/WebView.mm:
        (-[WebView _dispatchDidReceiveIconFromWebFrame:]):

2011-03-18  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: implement inspector session storage.
        https://bugs.webkit.org/show_bug.cgi?id=56643

        * WebCoreSupport/WebInspectorClient.h:
        * WebCoreSupport/WebInspectorClient.mm:
        (WebInspectorClient::saveSessionSetting):
        (WebInspectorClient::loadSessionSetting):
        (WebInspectorFrontendClient::saveSessionSetting):
        (WebInspectorFrontendClient::loadSessionSetting):
        (-[WebInspectorWindowController inspectorClient]):

2011-03-17  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Fixed a leak seen on the buildbot.

        * WebCoreSupport/WebInspectorClient.mm:
        (WebInspectorClient::openInspectorFrontend): Smart pointers are smart.

2011-03-16  Jeff Johnson  <github@lapcatsoftware.com>

        Reviewed by Alexey Proskuryakov.

        Logic error in -[WebHTMLView close]
        https://bugs.webkit.org/show_bug.cgi?id=56445

        Page is always nil at this point, because [self _webView] is nil,
        so the conditional code is never run.

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

2011-03-16  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        WK2: Need to propagate enhanced accessibility flag from UI -> web process
        https://bugs.webkit.org/show_bug.cgi?id=56379

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

2011-03-15  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        Make Structure creation require a JSGlobalData
        https://bugs.webkit.org/show_bug.cgi?id=56438

        Mechanical change to make all Structure creation use a JSGlobalData&

        * Plugins/Hosted/ProxyInstance.mm:
        (WebKit::ProxyRuntimeMethod::createStructure):
        * Plugins/Hosted/ProxyRuntimeObject.h:
        (WebKit::ProxyRuntimeObject::createStructure):

2011-03-15  Alexey Proskuryakov  <ap@apple.com>

        Forgot to save a modification to this file when committing.

        * WebCoreSupport/WebKeyGenerator.mm: Changed "Apple Computer" to "Apple" in copyright header.

2011-03-15  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        REGRESSION (WebKit2): keygen element doesn't work
        https://bugs.webkit.org/show_bug.cgi?id=56402
        <rdar://problem/9006545>

        * WebCoreSupport/WebKeyGenerator.h:
        * WebCoreSupport/WebKeyGenerator.m: Removed.
        * WebCoreSupport/WebKeyGenerator.mm: Copied from Source/WebKit/mac/WebCoreSupport/WebKeyGenerator.m.
        (+[WebKeyGenerator sharedGenerator]):
        (toWebCertificateParseResult):
        WebCore no longer needs WebKeyGenerator. Safari still does need a part of it, so keeping
        this misnamed and misplaced code for now.

        * WebCoreSupport/WebPlatformStrategies.h:
        * WebCoreSupport/WebPlatformStrategies.mm:
        (WebPlatformStrategies::keygenMenuItem512):
        (WebPlatformStrategies::keygenMenuItem1024):
        (WebPlatformStrategies::keygenMenuItem2048):
        (WebPlatformStrategies::keygenKeychainItemName):
        Added strings used by keygen.

        * WebCoreSupport/WebSystemInterface.mm: (InitWebCoreSystemInterface): Initialize a WebCore
        pointer to a function used by keygen.

        * WebView/WebFrameView.mm: (-[WebFrameView initWithFrame:]): WebKeyGenerator can be lazily
        initialized now.

2011-03-15  Beth Dakin  <bdakin@apple.com>

        Reviewed by Simon Fraser.

        WebKit part of <rdar://problem/9075624> Overlay scrollbars slow down PLT by 6%

        New WebKitystemInterface function to force the scrollbars to flash
        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

2011-03-15  Ilya Sherman  <isherman@chromium.org>

        Reviewed by Tony Chang.

        Autofilled form elements are assigned fixed background color but not text color
        https://bugs.webkit.org/show_bug.cgi?id=48382

        * DOM/WebDOMOperations.mm:
        (-[DOMHTMLInputElement _setAutofilled:]): Added (wrapper).
        * DOM/WebDOMOperationsPrivate.h:

2011-03-15  Adam Roben  <aroben@apple.com>

        Fix a leak in WebStorageTrackerClient::dispatchDidModifyOrigin

        Fixes <http://webkit.org/b/56385> SecurityOrigin leaks seen in
        WebStorageTrackerClient::dispatchDidModifyOrigin

        Reviewed by Antti Koivisto.

        * Storage/WebStorageTrackerClient.mm:
        (WebStorageTrackerClient::dispatchDidModifyOriginOnMainThread): Adopt the reference passed
        to us by dispatchDidModifyOrigin.
        (WebStorageTrackerClient::dispatchDidModifyOrigin): Added a comment and removed an
        unnecessary cast.

2011-03-15  Kevin Ollivier  <kevino@theolliviers.com>

        Reviewed by Darin Adler.

        Introduce WTF_USE_EXPORT_MACROS, which will allow us to put shared library import/export
        info into the headers rather than in export symbol definition files, but disable it on 
        all platforms initially so we can deal with port build issues one port at a time.
        
        https://bugs.webkit.org/show_bug.cgi?id=27551

        * WebKitPrefix.h:

2011-03-14  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=56320
        Remove HistoryItem::icon() and the WebCore dependency on "IconDatabaseBase::defaultIcon()"

        * History/WebHistoryItem.mm:
        (-[WebHistoryItem icon]): This far-future FIXME is now irrelevant.

2011-03-13  Pratik Solanki  <psolanki@apple.com>

        Reviewed by Brady Eidson.

        Make adjustMIMETypeIfNecessary use CFNetwork directly
        https://bugs.webkit.org/show_bug.cgi?id=55912

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Support for new WKSI functions.

2011-03-12  Mark Rowe  <mrowe@apple.com>

        Fix the 32-bit build.

        * Carbon/CarbonWindowAdapter.mm:
        (-[CarbonWindowAdapter initWithCarbonWindowRef:takingOwnership:disableOrdering:carbon:]): Use a more appropriate format specifier.
        (-[CarbonWindowAdapter _carbonWindowClass]): Ditto.

2011-03-11  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders Carlsson

        <rdar://problem/8648311> and https://bugs.webkit.org/show_bug.cgi?id=56216
        Rework disabled IconDatabase builds while allowing for a pluggable icon database implementation.

        * Misc/WebIconDatabase.mm:
        (+[WebIconDatabase _checkIntegrityBeforeOpening]): Call these static methods on IconDatabase::, not iconDatabase().
        (-[WebIconDatabase _startUpIconDatabase]): Ditto.
        (importToWebCoreFormat):

2011-03-11  Anton D'Auria  <adauria@apple.com>

        Reviewed and landed by Brady Eidson.

        https://bugs.webkit.org/show_bug.cgi?id=51878
        Add WebKit1 API to view and delete local storage

        * Storage/WebStorageManager.mm: Added.
        (+[WebStorageManager sharedWebStorageManager]):
        (-[WebStorageManager origins]):
        (-[WebStorageManager deleteAllOrigins]):
        (-[WebStorageManager deleteOrigin:]):
        (-[WebStorageManager syncLocalStorage]):
        (-[WebStorageManager syncFileSystemAndTrackerDatabase]):
        (storageDirectoryPath):
        (WebKitInitializeStorageIfNecessary):
        * Storage/WebStorageManagerInternal.h: Added.
        * Storage/WebStorageManagerPrivate.h: Added.
        * Storage/WebStorageTrackerClient.h: Added.
        * Storage/WebStorageTrackerClient.mm: Added.
        (WebStorageTrackerClient::sharedWebStorageTrackerClient):
        (WebStorageTrackerClient::WebStorageTrackerClient):
        (WebStorageTrackerClient::~WebStorageTrackerClient):
        (WebStorageTrackerClient::dispatchDidModifyOriginOnMainThread):
        (WebStorageTrackerClient::dispatchDidModifyOrigin):
        * WebCoreSupport/WebSecurityOrigin.mm:
        (-[WebSecurityOrigin protocol]):
        (-[WebSecurityOrigin host]):
        (-[WebSecurityOrigin databaseIdentifier]):
        (-[WebSecurityOrigin domain]):
        (-[WebSecurityOrigin _initWithWebCoreSecurityOrigin:]):
        * WebCoreSupport/WebSecurityOriginPrivate.h:
        * WebKit.exp:
        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:usesDocumentViews:]):

2011-03-10  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/9117047>
        Don't paint more than 60 times per second even when scrolling

        * WebView/WebClipView.mm:
        (-[WebClipView _immediateScrollToPoint:]):

2011-03-09  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Simon Fraser.

        Plumb through settings for accelerated drawing for canvas
        https://bugs.webkit.org/show_bug.cgi?id=56039

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

2011-03-10  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Tony Chang.

        VisiblePosition's next and previous should take an enum instead of a boolean
        https://bugs.webkit.org/show_bug.cgi?id=56135

        SelectionController::isAll now takes EditingBoundaryCrossingRule instead of
        StayInEditableContent.

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

2011-03-09  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Adam Roben.

        Use the Cookie Storage from the Private Browsing Storage Session directly
        https://bugs.webkit.org/show_bug.cgi?id=55986

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

2011-03-08  Darin Adler  <darin@apple.com>

        Reviewed by Timothy Hatcher.

        Promote a method used outside WebKit from internal to private
        https://bugs.webkit.org/show_bug.cgi?id=55949

        * Misc/WebNSPasteboardExtras.mm: Removed an unused category declaration.
        Minor tweak, not directly related to the rest of this patch.

        * WebView/WebFrame.mm:
        (-[WebFrame _computePageRectsWithPrintScaleFactor:pageSize:]): Moved
        this method from the internal category into the private category.
        Streamlined the code a bit.

        * WebView/WebFrameInternal.h: Removed _computePageRects method.
        * WebView/WebFramePrivate.h: Added _computePageRects method.

2011-03-07  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        selectionHasStyle and selectionStartHasStyle should use EditingStyle
        https://bugs.webkit.org/show_bug.cgi?id=55902

        selectionHasStyle now takes a property id and a value instead of a CSSMutableStyleDeclaration.

        * WebView/WebHTMLView.mm: Removed unused selectionHasStyle.
        (-[WebHTMLView validateUserInterfaceItemWithoutDelegate:]): Calls Editor::selectionHasStyle.

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

        LLVM Compiler build fix.

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

2011-03-07  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        AX: WK1 needs to use ScrollView attachment for AXScrollArea, WK2 does not
        https://bugs.webkit.org/show_bug.cgi?id=55706

        Make sure WebDynamicScrollBarsView appear in the AX tree in WK1 (since this object
        returns the scroll bar objects).
        Make the accessibilityRoot object be the web area in WK1 because WebDynamicScrollBarsView
        will expect that as its child, instead of the WebCore ScrollView object.

        * WebView/WebDynamicScrollBarsView.mm:
        (-[WebDynamicScrollBarsView accessibilityIsIgnored]):
        * WebView/WebFrame.mm:
        (-[WebFrame accessibilityRoot]):

2011-03-07  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Replace WebKit2's decidePolicyForMIMEType with decidePolicyForResponse
        https://bugs.webkit.org/show_bug.cgi?id=55827

        Renamed FrameLoaderClient::dispatchDecidePolicyForMIMEType to dispatchDecidePolicyForResponse
        and pass the entire response, instead of just the MIMEType.

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

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

        LLVM Compiler build fix.

        * DOM/WebDOMOperations.mm:
        (-[DOMHTMLInputElement _setValueForUser:]):

2011-03-06  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Sam Weinig.

        WebKit2: Use CFNetwork Sessions API.
        https://bugs.webkit.org/show_bug.cgi?id=55435.

        When Private Browsing is enabled, use cookies from a in-memory cookie storage based on the
        Private Browsing Storage Session.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):
        Add support for using the new WKSI functions in WebCore.

2011-03-05  Ilya Sherman  <isherman@chromium.org>

        Reviewed by Darin Adler.

        HTMLInputElement::setValue() should schedule change event when the element is focused
        In service of https://code.google.com/p/chromium/issues/detail?id=42716
        https://bugs.webkit.org/show_bug.cgi?id=53160

        * DOM/WebDOMOperations.mm:
        (-[DOMHTMLInputElement _setValueForUser:]): Expose HTMLInputElement::setValueForUser() to tests
        * DOM/WebDOMOperationsPrivate.h:
        * WebView/WebViewInternal.h:

2011-03-04  Jia Pu  <jpu@apple.com>

        Reviewed by Darin Adler.

        On Mac, the bounding box sent to EditorClient::showCorrectionPanel() is incorrect when the correction occurs in an iframe.
        https://bugs.webkit.org/show_bug.cgi?id=55717
        <rdar://problem/9018127>

        With the change in WebCore, the bounding box passed into EditorClient::showCorrectionPanel()
        is already in window coordinate. We don't need to do further conversion anymore.

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

2011-03-04  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Maciej Stachowiak.

        WebKit2: Use CFNetwork Sessions API.
        https://bugs.webkit.org/show_bug.cgi?id=55435.

        When Private Browsing is enabled, get the cached url response from the cache associated with
        the Private Browsing Storage Session.

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

2011-03-03  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Get rid of Page::globalHistoryItem
        https://bugs.webkit.org/show_bug.cgi?id=55738

        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::updateGlobalHistoryItemForPage):
        Get the current history item and update it using -[WebView _setGlobalHistoryItem:].
    
        * WebView/WebView.mm:
        (-[WebView _globalHistoryItem]):
        (-[WebView _setGlobalHistoryItem:]):
        Set _globalHistoryItem ivar.

        * WebView/WebViewData.h:
        * WebView/WebViewData.mm:
        Add _globalHistoryItem ivar.

2011-03-03  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=55721
        Global IconDatabase should be returned by reference, not as a pointer

        * Misc/WebCoreStatistics.mm:
        (+[WebCoreStatistics iconPageURLMappingCount]):
        (+[WebCoreStatistics iconRetainedPageURLCount]):
        (+[WebCoreStatistics iconRecordCount]):
        (+[WebCoreStatistics iconsWithDataCount]):
        * Misc/WebIconDatabase.mm:
        (-[WebIconDatabase init]):
        (-[WebIconDatabase iconForURL:withSize:cache:]):
        (-[WebIconDatabase iconURLForURL:]):
        (-[WebIconDatabase defaultIconWithSize:]):
        (-[WebIconDatabase retainIconForURL:]):
        (-[WebIconDatabase releaseIconForURL:]):
        (-[WebIconDatabase isEnabled]):
        (-[WebIconDatabase setEnabled:]):
        (-[WebIconDatabase removeAllIcons]):
        (+[WebIconDatabase _checkIntegrityBeforeOpening]):
        (-[WebIconDatabase _startUpIconDatabase]):
        (-[WebIconDatabase _applicationWillTerminate:]):
        (-[WebIconDatabase _resetCachedWebPreferences:]):
        (importToWebCoreFormat):
        * WebView/WebView.mm:
        (-[WebView _dispatchDidReceiveIconFromWebFrame:]):

2011-03-03  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Adam Roben.

        WebKit2: Use CFNetwork Sessions API.
        https://bugs.webkit.org/show_bug.cgi?id=55435.

        Set the Private Browsing Storage Session on requests when Private Browsing is enabled.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):
        Support using WKCopyRequestWithStorageSession in WebCore.

2011-03-02  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        REGRESSION (WebKit2): Tab keys no longer observe Full Keyboard Access
        https://bugs.webkit.org/show_bug.cgi?id=55633
        <rdar://problem/8963023>

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        Removed tabsToLinks(). Mac WebKit already implements keyboardUIMode().

        * WebView/WebView.mm: (-[WebView _retrieveKeyboardUIModeFromPreferences:]):
        Removed an incorrect comment. We actually get a value of 2 on Snow Leopard, and we don't
        require both bits to be set. The rest of the comment might be wrong too, but I'm not sure,
        so I've preserved it.

2011-03-02  Jessie Berlin  <jberlin@apple.com>

        Rubber-stamped by Dan Bernstein.

        Fix crashes in private browsing tests in WK1 on Snow Leopard.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):
        Put the INIT call for wkCreatePrivateStorageSession outside of the
        #if !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD) && !defined(BUILDING_ON_SNOW_LEOPARD)
        guards.

2011-03-02  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Adam Roben.

        WebKit2: Use CFNetwork Sessions API.
        https://bugs.webkit.org/show_bug.cgi?id=55435.

        Add the ability to create a Private Browsing Storage Session.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):
        Support calling wkCreatePrivateStorageSession from WebCore.

2011-03-02  Daniel Cheng  <dcheng@chromium.org>

        Reviewed by David Levin.

        Add feature define for data transfer items
        https://bugs.webkit.org/show_bug.cgi?id=55510

        * Configurations/FeatureDefines.xcconfig:

2011-03-02  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Fix remaining localization issues by piping all localized strings through WebCore's
        localization bottleneck.
        <rdar://problem/8728860>

        * DefaultDelegates/WebDefaultContextMenuDelegate.mm:
        (-[WebDefaultUIDelegate menuItemWithTag:target:representedObject:]):
        * Misc/WebKitErrors.m:
        * Misc/WebLocalizableStringsInternal.h: Added.
        * Misc/WebLocalizableStringsInternal.mm: Added.
        (WebLocalizedStringInternal):
        * Panels/WebAuthenticationPanel.m:
        (-[WebAuthenticationPanel setUpForChallenge:]):
        * Plugins/Hosted/NetscapePluginHostManager.mm:
        (WebKit::NetscapePluginHostManager::spawnPluginHost):
        * WebCoreSupport/WebEditorClient.mm:
        (undoNameForEditAction):
        * WebCoreSupport/WebInspectorClient.mm:
        (WebInspectorFrontendClient::updateWindowTitle):
        (-[WebInspectorWindowController validateUserInterfaceItem:]):
        * WebCoreSupport/WebKeyGenerator.m:
        (-[WebKeyGenerator strengthMenuItemTitles]):
        (-[WebKeyGenerator signedPublicKeyAndChallengeStringWithStrengthIndex:challenge:pageURL:]):
        * WebCoreSupport/WebPlatformStrategies.mm:
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView validateUserInterfaceItemWithoutDelegate:]):
        * WebView/WebPDFView.mm:
        (-[WebPDFView menuForEvent:]):

2011-03-01  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        Part of WebKit2: Need a way to send notifications to client when cookies change
        https://bugs.webkit.org/show_bug.cgi?id=55427
        <rdar://problem/9056027>
        
        Add stubs for CookiesStrategy on Mac WebKit1.

        * WebCoreSupport/WebPlatformStrategies.h:
        * WebCoreSupport/WebPlatformStrategies.mm:
        (WebPlatformStrategies::createCookiesStrategy):
        (WebPlatformStrategies::notifyCookiesChanged):

2011-03-01  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Eric Carlson.

        [GStreamer] support in mac video fullscreen controller
        https://bugs.webkit.org/show_bug.cgi?id=52280

        Factored the code to configure the video overlay in a new private
        method of the controller and added GStreamer support to it.

        * WebView/WebVideoFullscreenController.h:
        * WebView/WebVideoFullscreenController.mm:
        (-[WebVideoFullscreenController setupVideoOverlay:]):
        (-[WebVideoFullscreenController windowDidLoad]):
        (-[WebVideoFullscreenController setMediaElement:WebCore::]):
        (-[WebVideoFullscreenController windowDidExitFullscreen]):

2011-02-23  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Timothy Hatcher.

        All Console Messages should be passed to ChromeClients.
        https://bugs.webkit.org/show_bug.cgi?id=54926

        Add a new private UIDelegate method, -webView:addMessageToConsole:withSource:,
        which supersedes -webView:addMessageToConsole if it exists. The new delegate
        does not filter to only JavaScript originated console messages. The old
        delegate is left around for clients that expect filtered messages, like
        DashCode and older versions of Safari.

        The dictionary message passed to the delegate now includes more information
        about the message source, type, and level.

        * WebCoreSupport/WebChromeClient.mm:
        (stringForMessageSource):
        (stringForMessageType):
        (stringForMessageLevel):
        (WebChromeClient::addMessageToConsole):
        * WebView/WebUIDelegatePrivate.h:

2011-03-01  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Ryosuke Niwa.

        Stop instantiating legacy editing Positions in VisiblePosition
        https://bugs.webkit.org/show_bug.cgi?id=52919

        Changing usage of legacy VisiblePosition constructor. Since we were dealing
        with positions from DOM Ranges, we're guaranteed a parent-anchored position.

        * WebView/WebFrame.mm:
        (-[WebFrame _caretRectAtPosition:affinity:]):
        * WebView/WebFrameInternal.h:
        * WebView/WebTextCompletionController.mm:
        (-[WebTextCompletionController doCompletion]):

2011-03-01  Sam Weinig  <sam@webkit.org>

        Reviewed by Timothy Hatcher.

        WebKit2 needs to be made localizable
        https://bugs.webkit.org/show_bug.cgi?id=55483

        * WebCoreSupport/WebPlatformStrategies.mm:
        Use WebCore's localizedString function instead of WebLocalizableStrings
        since WebCore is now responsible for localization.

2011-02-25 Steve Block <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        Bridge.h should not include BridgeJSC.h
        https://bugs.webkit.org/show_bug.cgi?id=55212

        Include BridgeJSC.h directly instead.

        * Plugins/Hosted/ProxyInstance.h:
        * Plugins/Hosted/WebHostedNetscapePluginView.mm:

2011-02-28  Chang Shu  <cshu@webkit.org>

        Reviewed by Ryosuke Niwa.

        Remove the support of Frame::isContentEditable and its dependencies.
        https://bugs.webkit.org/show_bug.cgi?id=54292

        Remove the WebKit side implementation. Make WebKit support depend on Document::inDesignMode.

        * WebCoreSupport/WebEditorClient.h:
        * WebCoreSupport/WebEditorClient.mm:
        * WebView/WebView.mm:
        (-[WebView setEditable:]):
        (-[WebView isEditable]):
        * WebView/WebViewData.h:

2011-02-28  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Make ScopeChainNode GC allocated
        https://bugs.webkit.org/show_bug.cgi?id=55283

        More updates for the absence of the ScopeChain class

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

2011-02-26  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Pavel Feldman.

        DumpRenderTree should reset frame opener between tests.
        https://bugs.webkit.org/show_bug.cgi?id=54874

        Added clearOpener method to WebFramePrivate.

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

2011-02-26  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r79764.
        http://trac.webkit.org/changeset/79764
        https://bugs.webkit.org/show_bug.cgi?id=55295

        "broke Chromium builds" (Requested by rniwa on #webkit).

        * WebView/WebFrame.mm:
        * WebView/WebFramePrivate.h:

2011-02-26  Yongjun Zhang  <yongjun_zhang@apple.com>

        Reviewed by David Kilzer.

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

        Add a resource load delegate method to query if WebCore should paint the default broken image for failed images.

        Add a new resource load client method (shouldPaintBrokenImage).  WebKit client can decide if WebCore
        should paint the default broken image when an image fails to load or decode.  The method also passes the
        URL of the failed image.

        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::shouldPaintBrokenImage):
        * WebView/WebDelegateImplementationCaching.h:
        * WebView/WebDelegateImplementationCaching.mm: Added case for passing one object.
        (CallResourceLoadDelegateReturningBoolean):
        * WebView/WebResourceLoadDelegatePrivate.h:
        * WebView/WebView.mm:
        (-[WebView _cacheResourceLoadDelegateImplementations]):

2011-02-26  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Pavel Feldman.

        DumpRenderTree should reset frame opener between tests.
        https://bugs.webkit.org/show_bug.cgi?id=54874

        Added clearOpener method to WebFramePrivate.

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

2011-02-25  Mark Rowe  <mrowe@apple.com>

        <rdar://problem/8902546> Build fix.

        * Misc/QuickDrawCompatibility.h:

2011-02-24  Anders Carlsson  <andersca@apple.com>

        Fix clang build.

        * WebCoreSupport/WebKeyGenerator.m:
        (toWebCertificateParseResult):
        (-[WebKeyGenerator addCertificatesToKeychainFromData:]):
        * WebView/WebTextCompletionController.mm:

2011-02-24  Peter Kasting  <pkasting@google.com>

        Reviewed by Eric Seidel.

        Drop the "U; " encryption level from the User Agent string.
        https://bugs.webkit.org/show_bug.cgi?id=54566

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

2011-02-24  Andrew Wilson  <atwilson@chromium.org>

        Unreviewed, rolling out r79570.
        http://trac.webkit.org/changeset/79570
        https://bugs.webkit.org/show_bug.cgi?id=54874

        Breaks chromium build because glue/mocks/mock_web_frame.h/cc
        was not updated

        * WebView/WebFrame.mm:
        * WebView/WebFramePrivate.h:

2011-02-24  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Alexey Proskuryakov.

        DumpRenderTree should reset frame opener between tests.
        https://bugs.webkit.org/show_bug.cgi?id=54874

        Added clearOpener method to WebFramePrivate.

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

2011-02-22  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Alexey Proskuryakov.

        Drop the language tag part from the User Agent string
        https://bugs.webkit.org/show_bug.cgi?id=54560

        * WebView/WebView.mm:
        (+[WebView _standardUserAgentWithApplicationName:]): Drop the
        language tag part.

2011-02-22  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders Carlsson.

        Part of <rdar://problem/8762042> and https://bugs.webkit.org/show_bug.cgi?id=54514
        API to view and delete Application Cache data by origin.

        * WebCoreSupport/WebApplicationCache.mm:
        (+[WebApplicationCache deleteAllApplicationCaches]): Move this implementation into WebCore itself.

2011-02-17  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Kent Tamura.

        Rename Position::node() to Position::deprecatedNode()
        https://bugs.webkit.org/show_bug.cgi?id=54622

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

2011-02-17  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Kent Tamura.

        Rename Position::node() to Position::deprecatedNode()
        https://bugs.webkit.org/show_bug.cgi?id=54622
        
        Done the rename.

        * WebView/WebFrame.mm:
        (-[WebFrame _smartDeleteRangeForProposedRange:]): Since newStart and newEnd are parent-anchored,
        use containerNode() and offsetInContainerNode() instead of deprecated member functions.

2011-02-18  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        Bug 54786 - Devirtualize JSCell::classInfo()

        Instead of making a virtual function call, add a pointer to the ClassInfo
        onto Structure.

        This removes a virtual function call, and paves the way towards removing all
        the createStructure methods, and StructureFlags/AnonymousSlotCount properties
        (these should be able to move onto ClassInfo).

        Calls to Structure::create must now pass a pointer to the ClassInfo for the
        structure. All objects now have a ClassInfo pointer, non-object cell types
        still do not.

        Changes are most mechanical, involving three steps:
            * Remove virtual classInfo() methods.
            * Add &s_info parameter to calls to Structure::create.
            * Rename ClassInfo static members on classes from 'info' to 's_info',
              for consistency.

        * Plugins/Hosted/ProxyInstance.mm:
        (WebKit::ProxyRuntimeMethod::ProxyRuntimeMethod):
        (WebKit::ProxyRuntimeMethod::createStructure):
        * Plugins/Hosted/ProxyRuntimeObject.h:
        (WebKit::ProxyRuntimeObject::createStructure):
        * Plugins/Hosted/ProxyRuntimeObject.mm:
        (WebKit::ProxyRuntimeObject::ProxyRuntimeObject):
        * WebView/WebView.mm:
        (aeDescFromJSValue):

2011-02-19  Brian Ryner  <bryner@chromium.org>

        Reviewed by Adam Barth.

        Add missing #include of DocumentLoader.h, needed since the transitive
        include through Document.h is removed.
        https://bugs.webkit.org/show_bug.cgi?id=50489

        * WebView/WebFrame.mm:

2011-02-19  Charlie Reis  <creis@chromium.org>

        Reviewed by Mihai Parparita.

        Ensure loading has stopped in HistoryController::goToItem
        https://bugs.webkit.org/show_bug.cgi?id=54517

        Add a FrameLoaderClient callback for whether to stop loading before goToItem.

        Test: http/tests/navigation/forward-to-fragment-fires-onload.html

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::shouldStopLoadingForHistoryItem): Added.
        * WebCoreSupport/WebFrameLoaderClient.h:

2011-02-16  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=54244
        
        Convert the line box tree to floating point and eliminate font rounding hacks.  This patch removes all of the rounding
        hacks from the Font code and makes sure all Font APIs involving width measurement and width offsets use floats.
        
        The line box tree's x, y and logicalWidth members have all been converted to floats and all of the line box APIs have
        been changed as well.
        
        In terms of pixel adjustments, overflow is using an enclosing model (so it will be enclosingIntRect of a line box's x/y/width/height).
        
        Background and border painting is using a rounding model, so borders and backgrounds will round to the nearest pixel when painting.
        
        Replaced elements still snap to integer positions on lines, and they use a rounding model as well, although their underlying line boxes
        still have a precise floating point position.

        Justification will now allow subpixel positioning to occur as well.  Platforms that don't support subpixel positioning should already
        be rounding justification spacing in their font code.

        Many layout test results change on Mac, since rounding hacks were used there and are now gone.

        * Misc/WebKitNSStringExtras.mm:
        (-[NSString _web_drawAtPoint:font:textColor:allowingFontSmoothing:]):
        (-[NSString _web_widthWithFont:]):

2011-02-10  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Adam Roben.

        HTML5 <details> and <summary>: localized text
        https://bugs.webkit.org/show_bug.cgi?id=54260

        The method defaultDetailsSummaryText was added to LocalizationStrategy class. It is used to
        provide the default label to be used by a <details> tag that has no <summary> child.

        * WebCoreSupport/WebPlatformStrategies.h:
        * WebCoreSupport/WebPlatformStrategies.mm:
        (WebPlatformStrategies::defaultDetailsSummaryText):

2011-02-16  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Simon Fraser.

        Allow acceleratesDrawing for WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=54511

        Plumb through preference for accelerated drawing.
        
        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        (-[WebPreferences acceleratedDrawingEnabled]):
        (-[WebPreferences setAcceleratedDrawingEnabled:]):
        * WebView/WebPreferencesPrivate.h:

2011-02-15  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/54505> Move -[WebDynamicScrollBarsView inProgrammaticScroll] to WebDynamicScrollBarsViewInternal.h

        Reviewed by Darin Adler.

        * WebView/WebDynamicScrollBarsView.h:
        (-[WebDynamicScrollBarsView inProgrammaticScroll]): Removed
        declaration.
        * WebView/WebDynamicScrollBarsView.mm:
        (-[WebDynamicScrollBarsView inProgrammaticScroll]): Moved
        implementation into correct category.
        * WebView/WebDynamicScrollBarsViewInternal.h:
        (-[WebDynamicScrollBarsView inProgrammaticScroll]): Added
        declaration.
        * WebView/WebHTMLView.mm: Included
        WebDynamicScrollBarsViewInternal.h instead of
        WebDynamicScrollBarsView.h.

2011-02-14  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough and Geoff Garen.

        Refactor handles and weak pointers to become nicer and more automatic
        https://bugs.webkit.org/show_bug.cgi?id=54415

        Update to use Global<> instead of ProtectedPtr, and refactored slightly
        to get global data to places it's needed for when we're assigning to
        Global<>s

        * ForwardingHeaders/collector/handles/Global.h: Added.
        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::LocalObjectMap::get):
        (WebKit::NetscapePluginInstanceProxy::LocalObjectMap::idForObject):
        (WebKit::NetscapePluginInstanceProxy::LocalObjectMap::forget):
        (WebKit::NetscapePluginInstanceProxy::getWindowNPObject):
        (WebKit::NetscapePluginInstanceProxy::getPluginElementNPObject):
        (WebKit::NetscapePluginInstanceProxy::evaluate):
        (WebKit::NetscapePluginInstanceProxy::invoke):
        (WebKit::NetscapePluginInstanceProxy::invokeDefault):
        (WebKit::NetscapePluginInstanceProxy::construct):
        (WebKit::NetscapePluginInstanceProxy::addValueToArray):
        * WebView/WebScriptDebugger.h:
        * WebView/WebScriptDebugger.mm:
        (WebScriptDebugger::WebScriptDebugger):

2011-02-15  Jia Pu  <jpu@apple.com>

        Reviewed by Darin Adler.

        Autocorrection should respect undo.
        https://bugs.webkit.org/show_bug.cgi?id=52221
        <rdar://problem/8663399>

        Please see WebCore/ChangeLog for detailed description.

        * WebCoreSupport/WebEditorClient.h: Updated for the new function declared in EditorClient.

        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::recordAutocorrectionResponse): Ditto.

        * WebView/WebFrame.mm:
        (-[WebFrame _replaceSelectionWithFragment:selectReplacement:smartReplace:matchStyle:]):
             Adopted new signature of ReplaceSelectionCommand::create().

2011-02-15  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/54485> Fix spelling of -inProgramaticScroll

        Reviewed by Darin Adler.

        * WebView/WebDynamicScrollBarsView.h:
        * WebView/WebDynamicScrollBarsView.mm:
        (-[WebDynamicScrollBarsView inProgrammaticScroll]): Renamed from
        -inProgramaticScroll.
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _frameOrBoundsChanged]): Corrected method name.

2011-02-15  Kenneth Russell  <kbr@google.com>

        Reviewed by Darin Fisher.

        Allow controlling minimum DOMTimer interval on a per-page basis
        https://bugs.webkit.org/show_bug.cgi?id=54312

        Added needed methods to implement LayoutTestController's new
        setMinimumTimerInterval method.

        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:usesDocumentViews:]):
        (+[WebView _defaultMinimumTimerInterval]):
        (-[WebView _setMinimumTimerInterval:]):
        * WebView/WebViewPrivate.h:

2011-02-11  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        A little more encapsulation for the heap: Removed CollectorHeapIterator
        https://bugs.webkit.org/show_bug.cgi?id=54298

        * Misc/WebCoreStatistics.mm:
        (+[WebCoreStatistics javaScriptProtectedObjectTypeCounts]):
        (+[WebCoreStatistics javaScriptObjectTypeCounts]): Updated for new typedef.

2011-02-10  Nate Chapin  <japhet@chromium.org>

        Reviewed by Adam Barth.

        Update calls to DocumentWriter.
        https://bugs.webkit.org/show_bug.cgi?id=50489

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

2011-02-10  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Anders Carlsson.

        AX: AX needs to stop using WebCoreViewFactory
        https://bugs.webkit.org/show_bug.cgi?id=54153

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

2011-02-10  Peter Varga  <pvarga@webkit.org>

        Reviewed by Csaba Osztrogonác.

        Remove PCRE source from trunk
        https://bugs.webkit.org/show_bug.cgi?id=54188

        * ForwardingHeaders/pcre/pcre.h: Removed.

2011-02-09  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: follow up on InspectorAgent split -
        removing unnecessary methods from InspectorController.
        https://bugs.webkit.org/show_bug.cgi?id=54093

        * WebInspector/WebInspector.mm:
        (-[WebInspector showConsole:]):
        (-[WebInspector stopProfilingJavaScript:]):

2011-02-08  Dan Bernstein  <mitz@apple.com>

        Reviewed by Jon Honeycutt and Maciej Stachowiak.

        <rdar://problem/8959420> Find in Mail no longer cycles around

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView searchFor:direction:caseSensitive:wrap:startInSelection:]): Set
        the wrap option according to the flag.

2011-02-08  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r77980.
        http://trac.webkit.org/changeset/77980
        https://bugs.webkit.org/show_bug.cgi?id=54043

        "Crashes on Windows and Linux..." (Requested by leviw on
        #webkit).

        * WebView/WebFrame.mm:
        (-[WebFrame _caretRectAtNode:offset:affinity:]):
        * WebView/WebFrameInternal.h:
        * WebView/WebTextCompletionController.mm:
        (-[WebTextCompletionController doCompletion]):

2011-02-08  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Ryosuke Niwa.

        Stop instantiating legacy editing Positions in VisiblePosition
        https://bugs.webkit.org/show_bug.cgi?id=52919

        Changing usage of legacy VisiblePosition constructor. Since we were dealing
        with positions from DOM Ranges, we're guaranteed a parent-anchored position.

        * WebView/WebFrame.mm:
        (-[WebFrame _caretRectAtPosition:affinity:]):
        * WebView/WebFrameInternal.h:
        * WebView/WebTextCompletionController.mm:
        (-[WebTextCompletionController doCompletion]):

2011-02-08  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Remove orphan code from old parser
        https://bugs.webkit.org/show_bug.cgi?id=53984

        * WebCoreSupport/WebChromeClient.h:

2011-02-02  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: move InspectorController's methods from InspectorAgent to InspectorController.

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

        Minor change enforced by major changes in WebCore/inspector/InspectorController.

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

2011-02-07  Enrica Casucci  <enrica@apple.com>

        Reviewed Adam Roben and Darin Adler.

        WebKit2: drag and drop support on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=52775

        Removed createDragImageForLink from DragClient.

        * WebCoreSupport/WebDragClient.h:
        * WebCoreSupport/WebDragClient.mm:
        (WebDragClient::startDrag):

2011-02-03  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: remove settings related methods from InspectorClient
        https://bugs.webkit.org/show_bug.cgi?id=53686

        * WebCoreSupport/WebInspectorClient.h:
        * WebCoreSupport/WebInspectorClient.mm:
        (WebInspectorClient::openInspectorFrontend):
        (WebInspectorFrontendClient::WebInspectorFrontendClient):

2011-02-03  James Kozianski  <koz@chromium.org>

        Reviewed by Dimitri Glazkov.

        Add navigator.registerProtocolHandler behind a flag.
        https://bugs.webkit.org/show_bug.cgi?id=52609

        * Configurations/FeatureDefines.xcconfig:

2011-02-03  Adam Langley  <agl@chromium.org>

        Reviewed by Adam Barth.

        Plumb mixed script URL to FrameLoaderClient
        https://bugs.webkit.org/show_bug.cgi?id=52384

        Regressions covered by http/tests/security/mixedContent/*

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

2011-02-03  Beth Dakin  <bdakin@apple.com>

        Reviewed by Sam Weinig.

        Fix for <rdar://problem/8944544> Ability to animate track
        for WKPainter scrollers

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

2011-02-02  Mark Rowe  <mrowe@apple.com>

        Reviewed by Beth Dakin.

        <rdar://problem/8928367> Crash when loading canvas pages inside HTMLCanvasElement::createImageBuffer().

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Add some missing initializers.

2011-02-02  Steve Lacey  <sjl@chromium.org>

        Reviewed by Eric Carlson.

        Implement basic media statistics on media elements.
        https://bugs.webkit.org/show_bug.cgi?id=53322

        * Configurations/FeatureDefines.xcconfig:

2011-02-01  Sam Weinig  <sam@webkit.org>

        Reviewed by Beth Dakin.

        Part 2 for <rdar://problem/8492788>
        Adopt WKScrollbarPainterController

        Use header detection to define scrollbar painting controller #define.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

2011-02-01  David Hyatt  <hyatt@apple.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=53520
        
        Remove the physical terminology from IntRect and FloatRect.
        
        Now that we have flipped RenderBlocks for vertical-rl and horizontal-bt writing modes,
        we need to update our terminology to be more accurate.

        I'm borrowing a page from AppKit here (which also supports flipped NSViews) and
        renaming right() and bottom() to maxX() and maxY().  These terms remain accurate
        even for flipped rectangles.

        * WebView/WebHTMLView.mm:
        (setNeedsDisplayInRect):

2011-02-01  Beth Dakin  <bdakin@apple.com>

        Reviewed by Sam Weinig.

        Fix for <rdar://problem/8492788> Adopt WKScrollbarPainterController

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

2011-02-01  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=46422, make printing and pagination work
        with vertical text.

        Change printing functions to check writing-mode and properly swap width and height
        as needed.

        * WebView/WebDynamicScrollBarsView.mm:
        (-[WebDynamicScrollBarsView setScrollOrigin:updatePositionAtAll:immediately:]):
        * WebView/WebFrame.mm:
        (-[WebFrame _computePageRectsWithPrintScaleFactor:pageSize:]):
        * WebView/WebFrameInternal.h:
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _web_setPrintingModeRecursive]):
        (-[WebHTMLView _web_clearPrintingModeRecursive]):
        (-[WebHTMLView _web_setPrintingModeRecursiveAndAdjustViewSize]):
        (-[WebHTMLView _beginPrintModeWithMinimumPageWidth:height:maximumPageWidth:]):
        (-[WebHTMLView _beginPrintModeWithPageWidth:height:shrinkToFit:]):
        (-[WebHTMLView _endPrintMode]):
        (-[WebHTMLView _beginScreenPaginationModeWithPageSize:shrinkToFit:]):
        (-[WebHTMLView _endScreenPaginationMode]):
        (-[WebHTMLView layoutToMinimumPageWidth:height:maximumPageWidth:adjustingViewSize:]):
        (-[WebHTMLView _setPrinting:minimumPageLogicalWidth:logicalHeight:maximumPageLogicalWidth:adjustViewSize:paginateScreenContent:]):
        (-[WebHTMLView adjustPageHeightNew:top:bottom:limit:]):
        (-[WebHTMLView _scaleFactorForPrintOperation:]):
        (-[WebHTMLView setPageWidthForPrinting:]):
        (-[WebHTMLView knowsPageRange:]):

2011-01-31  Oliver Hunt  <oliver@apple.com>

        Convert markstack to a slot visitor API
        https://bugs.webkit.org/show_bug.cgi?id=53219

        rolling r77098, r77099, r77100, r77109, and
        r77111 back in, along with a few more Qt fix attempts.

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

2011-01-30  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed, rolling out r77098, r77099, r77100, r77109, and
        r77111.
        http://trac.webkit.org/changeset/77098
        http://trac.webkit.org/changeset/77099
        http://trac.webkit.org/changeset/77100
        http://trac.webkit.org/changeset/77109
        http://trac.webkit.org/changeset/77111
        https://bugs.webkit.org/show_bug.cgi?id=53219

        Qt build is broken

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

2011-01-30  Oliver Hunt  <oliver@apple.com>

        Convert markstack to a slot visitor API
        https://bugs.webkit.org/show_bug.cgi?id=53219

        rolling r77006 and r77020 back in.

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

2011-01-28  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.

        Some more Heap cleanup.
        https://bugs.webkit.org/show_bug.cgi?id=53357

        Updated for JavaScriptCore changes.

        * Misc/WebCoreStatistics.mm:
        (+[WebCoreStatistics memoryStatistics]):

2011-01-28  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r77006 and r77020.
        http://trac.webkit.org/changeset/77006
        http://trac.webkit.org/changeset/77020
        https://bugs.webkit.org/show_bug.cgi?id=53360

        "Broke Windows tests" (Requested by rniwa on #webkit).

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

2011-01-27  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        Convert markstack to a slot visitor API
        https://bugs.webkit.org/show_bug.cgi?id=53219

        Update to new marking api

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

2011-01-28  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        <select> can't display right-to-left (rtl) languages
        https://bugs.webkit.org/show_bug.cgi?id=19785

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::selectItemWritingDirectionIsNatural): Changed to return false.
        (WebChromeClient::selectItemAlignmentFollowsMenuWritingDirection): Added. Returns true.

2011-01-27  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r76891.
        http://trac.webkit.org/changeset/76891
        https://bugs.webkit.org/show_bug.cgi?id=53280

        Makes every layout test crash (Requested by othermaciej on
        #webkit).

        * Misc/WebIconDatabase.mm:
        (-[ThreadEnabler threadEnablingSelector:]):
        (importToWebCoreFormat):

2011-01-27  Nate Chapin  <japhet@chromium.org>

        Reviewed by Adam Barth.

        Use Document::url() instead of FrameLoader::url().
        https://bugs.webkit.org/show_bug.cgi?id=41165

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

2011-01-27  Dan Bernstein  <mitz@apple.com>

        Rubber-stamped by Anders Carlsson.

        Reverted an accidental change in r76561.

        * WebView/WebHTMLView.mm:

2011-01-26  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/53192> Add experimental support for HTTP pipelining in CFNetwork
        <rdar://problem/8821760>

        Reviewed by Antti Koivisto.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Added initialization for
        GetHTTPPipeliningPriority and SetHTTPPipeliningPriority.

2011-01-26  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin Adler.

        Fix for <rdar://problem/8895140> Adopt WKScrollbar metrics 
        when using WKScrollbars.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

2011-01-25  Darin Adler  <darin@apple.com>

        Reviewed by Anders Carlsson.

        WebKit is using CSBackupSetItemExcluded incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=53095
        rdar://problem/8790540

        * Misc/WebIconDatabase.mm:
        (importToWebCoreFormat): Removed code that was calling CSBackupSetItemExcluded.
        It was incorrect, and this responsibility has been moved to WebCore.

2011-01-24  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Eric Seidel.

        Change ENABLE_3D_CANVAS to ENABLE_WEBGL
        https://bugs.webkit.org/show_bug.cgi?id=53041

        * Configurations/FeatureDefines.xcconfig:

2011-01-25  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: remove "attached" state related methods from InspectorAgent
        https://bugs.webkit.org/show_bug.cgi?id=53086

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

2011-01-23  Dan Bernstein  <mitz@apple.com>

        Reviewed by John Sullivan.

        <rdar://problem/6097826> Mail's cursor does not become a resize cursor when moving mouse from scrolled email to the horizontal splitter

        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::setCursor): If the current cursor comes from a cursor rect, do not override it.

2011-01-22  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=52473
        Auto-scaling to avoid orphans is broken, remove dysfunctional code

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _setPrinting:minimumPageWidth:height:maximumPageWidth:adjustViewSize:paginateScreenContent:]):
        (-[WebHTMLView _scaleFactorForPrintOperation:]):
        (-[WebHTMLView knowsPageRange:]):

2011-01-21  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Jon Honeycutt.

        Fix the build when using Clang by removing some unused variables.

        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView updateAndSetWindow]):
        * WebView/WebFullScreenController.mm:
        (-[WebFullScreenController enterFullscreen:]):
        (-[WebFullScreenController exitFullscreen]):

2011-01-21  Chris Rogers  <crogers@google.com>

        Reviewed by Darin Fisher.

        Add run-time enable support for the web audio API
        https://bugs.webkit.org/show_bug.cgi?id=52741

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

2011-01-20  John Sullivan  <sullivan@apple.com>

        Reviewed by Mark Rowe.

        Shift-tab doesn't cycle through fields in http authentication panel
        https://bugs.webkit.org/show_bug.cgi?id=52850

        * Panels/English.lproj/WebAuthenticationPanel.nib/designable.nib:
        * Panels/English.lproj/WebAuthenticationPanel.nib/keyedobjects.nib:
        Re-wired the key loop so that there aren't two views with the same nextKeyView.

2011-01-20  Beth Dakin  <bdakin@apple.com>

        Reviewed by Geoffrey Garen.

        Fix for <rdar://problem/8890255>

        Allow WebKitSystemInterface to draw scrollbars 
        when appropriate.
        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

2011-01-19  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Sam Weinig.

        GraphicsLayers in subframes can get sync'd multiple times
        https://bugs.webkit.org/show_bug.cgi?id=52489

        * WebView/WebView.mm:
        (-[WebView _syncCompositingChanges]): syncCompositingStateRecursive()
        was renamed to syncCompositingStateIncludingSubframes().

2011-01-19  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Would like script debugging protocol method to differentiate between caught and uncaught exceptions
        https://bugs.webkit.org/show_bug.cgi?id=52104
        rdar://problem/8704226

        * WebView/WebDelegateImplementationCaching.h:
        Fix type of second integer in CallScriptDebugDelegate function overload
        to be int to match the actual Objective-C method. Added a new overload
        that includes a BOOL in the right place. Added a boolean named
        exceptionWasRaisedExpectsHasHandlerFlag.

        * WebView/WebDelegateImplementationCaching.mm:
        (CallDelegate): Added overloads as above.
        (CallScriptDebugDelegate): Ditto.

        * WebView/WebScriptDebugDelegate.h: Added new method with the additional
        boolean argument. Marked the old method informally deprecated.

        * WebView/WebScriptDebugger.mm:
        (WebScriptDebugger::exception): Added code to call with or without the
        boolean depending on exceptionWasRaisedExpectsHasHandlerFlag.

        * WebView/WebView.mm:
        (-[WebView _cacheScriptDebugDelegateImplementations]): Set up the
        exceptionWasRaisedExpectsHasHandlerFlag. Also fixed old code that was not
        guaranteed to set didParseSourceExpectsBaseLineNumber to NO.

2011-01-19  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Mihai Parparita.

        Perform some forward declaration
        https://bugs.webkit.org/show_bug.cgi?id=52522

        * Misc/WebKitNSStringExtras.mm:

2011-01-19  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: [JSC] scripts have incorrect starting line (always 1).
        https://bugs.webkit.org/show_bug.cgi?id=52721

        * WebView/WebScriptDebugger.h:
        * WebView/WebScriptDebugger.mm:
        (toNSString):
        (WebScriptDebugger::sourceParsed):

2011-01-19  Levi Weintraub  <leviw@google.com>

        Reviewed by Ryosuke Niwa.

        Updating to use Position::parentAnchoredEquivalent instead of
        the old htmlediting rangeCompliantEquivalent.

        remove rangeCompliantEquivalent and replace it with Position methods
        https://bugs.webkit.org/show_bug.cgi?id=25057

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

2011-01-18  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        REGRESSION: A problem with Voiceover and finding links
        https://bugs.webkit.org/show_bug.cgi?id=52324

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

2011-01-17  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/52596> Add missing DOMDocument/DOMDocumentFragment headers to Xcode project

        Reviewed by Dan Bernstein.

        * MigrateHeaders.make: Copy DOMDocumentFragmentPrivate.h and
        DOMDocumentPrivate.h to the PrivateHeaders directory.

2011-01-17  Enrica Casucci  <enrica@apple.com>

        Reviewed by Alexey Proskuryakov.

        Drag and drop support: refactoring of image from link and image from selection
        https://bugs.webkit.org/show_bug.cgi?id=52496

        This work cleans up the Mac code and makes it more similar to the Windows implementation,
        avoiding the use of an NSView when the FrameView can be used.
        The refactoring is a necessary step towards the complete support of drag and drop
        in WebKit2.

        * WebCoreSupport/WebDragClient.mm:
        (WebDragClient::createDragImageForLink): Added.
        * WebView/WebHTMLView.mm: Removed dragImageFromLink and dragImageFromURL.
        * WebView/WebHTMLViewPrivate.h: Removed dragImageFromLink and dragImageFromURL.

2011-01-17  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: simplify debugger enabling routine.
        https://bugs.webkit.org/show_bug.cgi?id=52472

        * WebInspector/WebInspector.mm:
        (-[WebInspector startDebuggingJavaScript:]):

2011-01-16  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        Assertion failure (!inSetWindow) with in-process plug-in in plugins/destroy-on-setwindow.html
        https://bugs.webkit.org/show_bug.cgi?id=52550

        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView setWindowIfNecessary]): Removed the assertion, making sure
        that inSetWindow remains YES until we exit the top-level setWindowIfNecessary.

2011-01-16  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Issues with iframes and plugins when the WebView is scaled.
        <rdar://problem/6213380>
        
        When _scaleWebView has been called on a WebView, iframes
        in WebKit1 render and hit-test incorrectly, and plug-ins don't scale up.
        This is caused by AppKit NSViews not playing nicely with the scale
        applied through style.
        
        Work around most of these issues by adjusting the bounds size
        of widgets to allow iframe contents to paint with the correct scale,
        and fix various places in the code where we relied on coordinate
        transforms via NSViews (which ignore CSS transforms).

        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView updateAndSetWindow]):
        * WebView/WebFrameView.mm:
        (-[WebFrameView setBoundsSize:]):

2011-01-16  Beth Dakin  <bdakin@apple.com>

        Reviewed by Kevin Decker.

        Fix for <rdar://problem/8871204>

        Don't try to save elasticity state. Just rely on
        NSScrollElasticityAutomatic to restore the correct state.
        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::WebFrameLoaderClient):
        (WebFrameLoaderClient::dispatchDidFirstLayout):
        (WebFrameLoaderClient::provisionalLoadStarted):

2011-01-14  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Plugins render incorrectly with transformed ancestors
        https://bugs.webkit.org/show_bug.cgi?id=52507
        
        -[NSView visibleRect] gives the wrong answer if there are CSS transforms
        in the ancestor chain of a plugin.
        
        So use of this method with calls to -actualVisibleRectInWindow, which
        maps rects through the render tree to compute the correct rect,
        clipping via windowClipRect() if necessary.
        
        Not testable, because doing so relies on the behavior of some
        plugins, which stop rendering if setWindow passes an empty rect.

        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView updateAndSetWindow]):
        * Plugins/WebBaseNetscapePluginView.h:
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView actualVisibleRectInWindow]):
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView saveAndSetNewPortStateForUpdate:]):

2011-01-14  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by Antti Koivisto.

        Rename cache() to memoryCache()
        https://bugs.webkit.org/show_bug.cgi?id=52433

        * Misc/WebCache.mm:
        (+[WebCache statistics]):
        (+[WebCache setDisabled:]):
        (+[WebCache isDisabled]):
        * WebView/WebView.mm:
        (+[WebView _setCacheModel:]):

2011-01-13  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Split out a MarkedSpace strategy object from Heap.
        https://bugs.webkit.org/show_bug.cgi?id=52421

        * Misc/WebCoreStatistics.mm:
        (+[WebCoreStatistics memoryStatistics]): Updated for class move.

2011-01-14  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        WebKit/mac part of <rdar://problem/8441312> Crash in -[NSView _invalidateGStatesForTree]

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _invalidateGStatesForTree]): Override this NSView method, and bracket the call
        to the superclass implementation with suspending WebCore Widget hierarchy updates. This ensures
        that the NSView tree doesn’t change from under AppKit as it traverses it.

2011-01-14  Beth Dakin  <bdakin@apple.com>

        Reviewed by Mark Rowe.

        Fix for <rdar://problem/7793902> Artifacts when scrolling
        page in Safari while page is loading

        Call setDrawsBackground:YES on the scrollView in 
        dispatchDidFirstLayout() rather than waiting until
        frameLoadCompleted(). Also suspend scrolling elasticity
        between provisionalLoadStarted() and dispatchDidFirstLayout()
        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::WebFrameLoaderClient):
        (WebFrameLoaderClient::dispatchDidFirstLayout):
        (WebFrameLoaderClient::provisionalLoadStarted):

2011-01-12  Enrica Casucci  <enrica@apple.com>

        Reviewed by Darin Adler.

        WebKit2: Add support for drag and drop
        https://bugs.webkit.org/show_bug.cgi?id=52343
        <rdar://problem/7660558>
        
        The DragData class has been extended to provide
        additional context from the application (keyboard state, modal windows, etc.)
        as well as information of the drag pasteboard being used.
        These are the changes to align the behavior for WebKit.

        * WebView/WebView.mm:
        (-[WebView applicationFlags:]): Added.
        (-[WebView draggingEntered:]): Added parameter to the DragData constructor.
        (-[WebView draggingUpdated:]): Added parameter to the DragData constructor.
        (-[WebView draggingExited:]): Added parameter to the DragData constructor.
        (-[WebView performDragOperation:]): Added parameter to the DragData constructor.

2011-01-12  Beth Dakin  <bdakin@apple.com>

        Reviewed by Anders Carlsson.

        Add-on for https://bugs.webkit.org/show_bug.cgi?id=52309 
        Expose fixed layout through WebKit SPI
        -and corresponding-
        <rdar://problem/8844464>

        And now with getters!
        * WebView/WebView.mm:
        (-[WebView _useFixedLayout]):
        (-[WebView _fixedLayoutSize]):
        * WebView/WebViewPrivate.h:

2011-01-12  Beth Dakin  <bdakin@apple.com>

        Reviewed by Anders Carlsson.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=52309 Expose
        fixed layout through WebKit SPI
        -and corresponding-
        <rdar://problem/8844464>

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

2011-01-07  Enrica Casucci  <enrica@apple.com>

        Reviewed by Alexey Proskuryakov.

        Paste and drag and drop use different code paths to interact with the pasteboard.
        https://bugs.webkit.org/show_bug.cgi?id=52093
        The change consists in a refactoring of the code to have only one class that
        deals with the pasteboard on Mac.

        * WebCoreSupport/WebEditorClient.h:
        * WebCoreSupport/WebEditorClient.mm: Added two methods to provide to WebCore functionality
        exposed by NSURLExtras.
        (WebEditorClient::canonicalizeURL):
        (WebEditorClient::canonicalizeURLString):
        * WebCoreSupport/WebPasteboardHelper.h: Removed.
        * WebCoreSupport/WebPasteboardHelper.mm: Removed.
        * WebView/WebHTMLView.mm: Removed comment.
        * WebView/WebView.mm: The following methods have been changed to use the new DragData
        constructor that doesn't use the WebPasteboardHelper reference.
        (-[WebView draggingEntered:]):
        (-[WebView draggingUpdated:]):
        (-[WebView draggingExited:]):
        (-[WebView performDragOperation:]):

2011-01-09  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Forward declare some headers where possible
        https://bugs.webkit.org/show_bug.cgi?id=52133

        * WebView/WebFrame.mm:

2011-01-09  Xianzhu Wang <phnixwxz@gmail.com>

        Reviewed by Darin Fisher.

        https://bugs.webkit.org/show_bug.cgi?id=41441
        createWindow method should only do window-creating without URL navigation

        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::createWindow):

2011-01-08  Dan Bernstein  <mitz@apple.com>

        Try to fix the Leopard build.

        * WebView/WebFullScreenController.mm:

2011-01-07  Jer Noble  <jer.noble@apple.com>

        Yet another Leopard build fix: NSRect and CGRect are not inter-
        changable in 32-bit.  
        
        * WebView/WebFullScreenController.mm:
        (-[WebFullScreenController exitFullscreen]):

2011-01-07  Jer Noble  <jer.noble@apple.com>

        Fix the Leopard build: Replace CoreAnimation SL-only functions
        with Leopard equivalents.

        * WebView/WebFullScreenController.mm:
        (+[CATransaction setDisableActions:]):
        (+[CATransaction setAnimationDuration:]):
        (-[WebFullScreenController _animationDuration]):
        (-[WebFullscreenWindow initWithContentRect:styleMask:backing:defer:]):

2010-12-21  Jer Noble  <jer.noble@apple.com>

        Reviewed by Simon Fraser.

        Implement WebKit Full Screen support.
        https://bugs.webkit.org/show_bug.cgi?id=49481
        rdar://problem/8247444

        Support the new fullscreen Chrome client requests.  WebView will pass
        through these requests to a WebFullscreenController.

        * WebCoreSupport/WebChromeClient.h: Add fullScreenRendererChanged().
        * WebView/WebView.mm:
        (-[WebView _supportsFullScreenForElement:WebCore::]): Check to see if the fullscreen pref has been enabled.
        (-[WebView _enterFullScreenForElement:WebCore::]): Create a WebFullScreenController.
        (-[WebView _exitFullScreenForElement:WebCore::]): Request that the WebFullScreenController exit fullscreen.
        (-[WebView _fullScreenRendererChanged:WebCore::]): Notify the WebFullScreenController that its renderer has changed.
        * WebView/WebViewData.h: Add ivar newFullscreenController.

2010-12-17  Jer Noble  <jer@kokode.apple.com>

        Reviewed by Simon Fraser.

        Implement WebKit Full Screen support.
        https://bugs.webkit.org/show_bug.cgi?id=49481
        rdar://problem/8247444
        
        This patch implements the FullScreen APIs using the new RenderFullScreen renderer and the new
        Document client APIs. The RenderFullScreen renderer's CALayer is hosted in a new, fullscreen
        window, and a custom CAAnimation animates that layer between the initial screen rect of the
        full screen element, to its final value. WebFullscreenController will swap the WebView out of
        its original window, and into the fullscreen window. The controller will replace the WebView
        with a placeholder view, so that if the placeholder moves or resized while the WebView is
        absent, the WebView will move back to the correct location when exiting fullscreen.

        * WebView/WebFullscreenController.h: Added.
        * WebView/WebFullscreenController.mm: Added.
        (-[WebFullscreenController windowDidExitFullscreen:]):  Close the fullscreen window.
        (-[WebFullscreenController windowDidEnterFullscreen:]): Swap the webView back into the fullscreen window. 
        (-[WebFullscreenController animationDidStop:finished:]): Call windowDid{Exit|Enter}FullScreen as appropriate.
        (-[WebFullscreenController applicationDidResignActive:]):
        (-[WebFullscreenController applicationDidChangeScreenParameters:]): Resize the fullscreen window to match
            the new screen parameters.
        (-[WebFullscreenController enterFullscreen:]):  Set up the animation that will take the fullscreen element
            from its original screen rect into fullscreen.
        (-[WebFullscreenController exitFullscreen]): Swap the webView back into its original window.
            Set up the animation that will take the fullscreen element back into its original screen
            rect.
        (-[WebFullscreenController _updatePowerAssertions]): Now checks _isAnyMoviePlaying to determine 
            whether to disable screensaver and sleep.
        (-[WebFullscreenController _isAnyMoviePlaying]): Walks through the sub-tree starting at the fullscreen element
            looking for HTMLVideoElements; returns whether any are found to be playing.
        (-[WebFullscreenController _animationDuration]): Returns the current animation duration, affected by control
            and shift keys.
        (-[WebFullscreenWindow canBecomeKeyWindow]): Allow the window to become key.
        (-[WebFullscreenWindow keyDown:]): Handle the 'Esc' key.
        (-[WebFullscreenWindow cancelOperation:]): Request to exit fullscreen.
        (-[WebFullscreenWindow rendererLayer]): Convenience accessor.
        (-[WebFullscreenWindow setRendererLayer:]): Ditto.
        (-[WebFullscreenWindow backgroundLayer]): Ditto.
        (-[WebFullscreenWindow animationView]): Ditto.
        (MediaEventListener::MediaEventListener): Implements the EventListener protocol.
        (MediaEventListener::handleEvent): Tells its delegate to _updatePowerAssertions.
        
2011-01-07  James Robinson  <jamesr@chromium.org>

        Revert "Implement mozilla's animationTime property"
        https://bugs.webkit.org/show_bug.cgi?id=51952

        This approach isn't quite right.

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

2011-01-06  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Geoff Garen.

        Bug 52035 - Unregistering DOMWrapperWorlds is unsafe

        The method DOMWrapperWorld::unregisterWorld() effectively calls the DOMWrapperWorld's
        destructor early, in order to release wrappers once we know we no longer intend to use them.
        Whilst it is okay to have a method to throw away wrappers (assuming we know we're willing to
        lose any state stored on them) it is not okay to deregister the world from the JSGlobalData.
        A sequence of events that triggers the bug would look like this:

        (1) Create a DOMWrapperWorld.
        (2) Register a timer in the world.
        (3) Call unregisterWorld() on the world.
        (4) Timer goes off, code is executed in the world, creates a Node not attached to a Document.
        (5) We attempt to lookup a wrapper map for the world on the JSGlobalData, but because we've
            called forgetWorld() none exists.
        (6) Attempt to add a wrapper to a NULL map.

        Fix the problem by not removing the JSGlobalData's wrapper map until the world really goes away.

        * WebView/WebScriptWorld.mm:
        (-[WebScriptWorld unregisterWorld]):

2011-01-04  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Sam Weinig.

        WK2: Support Accessibility
        https://bugs.webkit.org/show_bug.cgi?id=51859

        Use rootObject() method to get top of AX tree.

        * WebCoreSupport/WebFrameLoaderClient.h:
        (WebFrameLoaderClient::accessibilityRemoteObject):
        * WebView/WebFrame.mm:
        (-[WebFrame setAccessibleName:]):
        (-[WebFrame accessibilityRoot]):
        * WebView/WebFrameInternal.h:
        * WebView/WebFramePrivate.h:
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView accessibilityAttributeValue:]):
        (-[WebHTMLView accessibilityFocusedUIElement]):
        (-[WebHTMLView accessibilityHitTest:]):
        (-[WebHTMLView _accessibilityParentForSubview:]):

2011-01-04  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/51889> WebFrameLoaderClient::createMediaPlayerProxyPlugin() should use WebCore::PluginInfo.name

        Reviewed by Eric Carlson.

        This originally broke in r61581.  It is inside an
        ENABLE(PLUGIN_PROXY_FOR_VIDEO) macro, so it didn't break the Mac
        build then.

        * WebCoreSupport/WebFrameLoaderClient.mm: Call
        (WebFrameLoaderClient::createMediaPlayerProxyPlugin): Updated to
        use WebCore::PluginInfo.name instead of
        -[WebBasePluginPackage name].

2011-01-02  Dan Bernstein  <mitz@apple.com>

        Rubber-stamped by Simon Fraser.

        <rdar://problem/8812159> Update copyright strings

        * Info.plist:

2010-12-29  Dan Bernstein  <mitz@apple.com>

        Reviewed by Ada Chan.

        <rdar://problem/8758191> REGRESSION (r72887): Mail crashes when doing searches in a message due to method name conflict
        https://bugs.webkit.org/show_bug.cgi?id=51717

        Renamed -findString:options: to -_findString:options: in the WebDocumentOptionsSearching
        protocol to avoid conflict with -[WebHTMLView(MailExtras) findString:options:] which Mail defines.

        * WebView/WebDocumentInternal.h:
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView searchFor:direction:caseSensitive:wrap:startInSelection:]):
        (-[WebHTMLView _findString:options:]):
        * WebView/WebView.mm:
        (findString):

2010-12-28  Daniel Bates  <dbates@rim.com>

        Reviewed by Sam Weinig.

        Substitute // MARK: for compiler-specific #pragma mark
        https://bugs.webkit.org/show_bug.cgi?id=51657

        For consistency, we should substitute "// MARK:" for compiler-
        specific "#pragma mark" in the source files for the Mac port.

        * History/WebHistory.mm:
        * Plugins/WebBaseNetscapePluginView.mm:
        * Plugins/WebNetscapePluginView.mm:
        * WebCoreSupport/WebInspectorClient.mm:
        * WebCoreSupport/WebSecurityOrigin.mm:
        * WebView/WebPDFView.mm:
        * WebView/WebVideoFullscreenController.mm:
        * WebView/WebVideoFullscreenHUDWindowController.mm:

2010-12-23  Yongjun Zhang  <yongjun_zhang@apple.com>

        Reviewed by Darin Adler.

        WebKit crashes at DebuggerCallFrame::functionName() if m_callFrame is the top global callframe.
        https://bugs.webkit.org/show_bug.cgi?id=38535

        WebScriptDebugger in WebKit has empty implementations for willExecuteProgram and didExecuteProgram.  As a result,
        if the top call frame is from a program, WebKitScriptDebugger doesn't record that callframe as the top frame, and
        WebScriptDebugger's callframe stack is wrong from this point.  That could cause crash if we trying to access the top
        call frame from this stack when an exception throws because the saved top frame could be invalid.

        To fix that, we need to maintain the call frame stack in willExecuteProgram and didExecuteProgram, as we did in
        callEvent and returnEvent.

        * WebView/WebScriptDebugger.mm:
        (WebScriptDebugger::willExecuteProgram):
        (WebScriptDebugger::didExecuteProgram):

2010-12-22  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        WebKit2 needs to mirror the frame tree in the UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=51546

        - Add client functions to notify that a frame has been added or
          removed from the page cache.

        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::didSaveToPageCache):
        (WebFrameLoaderClient::didRestoreFromPageCache):

2010-12-22  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        Editor.h doesn't need to include SelectionController.h
        https://bugs.webkit.org/show_bug.cgi?id=51441

        Renamed SelectionController::EDirection to SelectionDirection.

        * WebView/WebFrame.mm:
        (-[WebFrame _rangeByAlteringCurrentSelection:SelectionController::direction:granularity:]):
        Takes SelectionDirection instead of SelectionController::EDirection.
        * WebView/WebFrameInternal.h:
        * WebView/WebTextCompletionController.mm:
        (-[WebTextCompletionController doCompletion]): Calls _rangeByAlteringCurrentSelection:SelectionController.

2010-12-22  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler.

        Cache snapshots of plug-ins before painting, to avoid script running during painting
        https://bugs.webkit.org/show_bug.cgi?id=51493

        When FrameView is asked to do a flattening paint (e.g. when Safari snapshots,
        or when printing), plug-ins which otherwise use the CA rendering model
        are sent a paint event. Some plug-ins may run script while handling this event,
        or out of process plug-ins may process queued requests at this time. Running
        script while inside layout or painting can have bad consequences, because it
        can result in arbitrary changes to the render tree.
        
        This patch avoids sending plug-ins paint events inside of painting. Instead,
        we ask the plug-ins to cache a snapshot before we paint, and then the software
        paint simply draws that snapshot.

        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView drawRect:]): If we have a cached snapshot,
        draw it. Also only send the snapshot message to the plugin proxy if we
        know we're snapshotting, since even if creating the snapshot image failed,
        we still don't want to call to the plug-in.

        * Plugins/WebBaseNetscapePluginView.h: Add a retained NSImage member for the snapshot.
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView cacheSnapshot]): Create an image and draw the snapshot into it.
        (-[WebBaseNetscapePluginView clearCachedSnapshot]): Clear the snapshot.

        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView drawRect:]): If we have a cached snapshot, use it.
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (NetscapePluginWidget::notifyWidget): Implement notifyWidget() and use it
        to cache and clear the snapshots.

2010-12-21  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Darin Adler.

        -[WebBasePluginPackage isNativeLibraryData:] integer underflows on zero-sized data
        https://bugs.webkit.org/show_bug.cgi?id=51431
        <rdar://problem/8791757>

        * Plugins/WebBasePluginPackage.mm:
        (-[WebBasePluginPackage isNativeLibraryData:]): Change an arithmetic expression so
        it doesn't underflow.

2010-12-16  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Cameron Zwarich.

        REGRESSION(r74172): 125 java tests fail on Mac
        https://bugs.webkit.org/show_bug.cgi?id=51214

        The regression was caused by an incorrectly adding sizeof(struct fat_header)
        to a pointer for uint32_t as supposed to uint8_t.

        Fixed the bug by explicitly casting it to uint8_t* before the addition.

        * Plugins/WebBasePluginPackage.mm:
        (-[WebBasePluginPackage isNativeLibraryData:]):

2010-12-15  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Darin Adler.

        Clang -Wcast-align gives an error in WebBasePluginPackage.mm
        https://bugs.webkit.org/show_bug.cgi?id=51144

        Fix an alignment issue. OSSwapInt32 takes data that is 32-bit aligned on ARM, but
        we were calling it on a byte array 32 bits at a time. While this is okay in practice,
        since TCMalloc won't give us a non-32-bit aligned block array of bytes and Vector's
        inline storage is at the beginning of the Vector, it is still better to fix this
        and silence the warning.

        * Plugins/WebBasePluginPackage.mm:
        (swapIntsInHeader):
        (-[WebBasePluginPackage isNativeLibraryData:]):

2010-12-14  Mark Rowe  <mrowe@apple.com>

        Reviewed by Sam Weinig.

        <http://webkit.org/b/51064> Reproducible crash inside WebCore::MediaPlayerPrivateQTKit::createQTMovie when loading <video>

        * History/WebHistoryItem.mm:
        (-[WebHistoryItem description]): Test whether the string is empty rather than incorrectly
        always including the target in the output.

2010-12-13  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=50953
        DNS Prefetch should be an opt-in feature

        * WebView/WebPreferences.mm: (+[WebPreferences initialize]): Changed default to false.

2010-12-13  Mike Thole  <mthole@apple.com>

        Rubber-stamped by John Sullivan.

        https://bugs.webkit.org/show_bug.cgi?id=50956
        WebAuthenticationPanel.nib appears to have a cut-off sentence
        
        Replace the sentence fragment in the sheet layout with "<-- do not localize -->" style text.
        The contents of this text field are updated dynamically before the sheet is displayed.

        * Panels/English.lproj/WebAuthenticationPanel.nib/designable.nib:
        * Panels/English.lproj/WebAuthenticationPanel.nib/keyedobjects.nib:

2010-12-13  Antti Koivisto  <antti@apple.com>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=50758
        <rdar://problem/8722094> 
        Defer loading print stylesheets
        
        Expose SPI for DRT for making resources load serially. This is useful for testing resource load order.

        * WebView/WebView.mm:
        (+[WebView _setLoadResourcesSerially:forHost:]):
        * WebView/WebViewPrivate.h:

2010-12-09  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Simon Fraser.

        Adopt new CG API for canvas
        https://bugs.webkit.org/show_bug.cgi?id=50591

        * WebCoreSupport/WebSystemInterface.mm:

2010-10-28  MORITA Hajime  <morrita@google.com>

        Reviewed by Ojan Vafai.

        spellcheck does not check pasted text
        https://bugs.webkit.org/show_bug.cgi?id=40092

        Added asynchronous spell checking API to WebEditorClient using
        -[NSSpellChecker requestCheckingOfString].
        Note that WebEditorSpellCheckResponder is a small class to receive
        requested spell-checking result. Note that this feature is
        disabled at default.
        
        Also added [WebPreferences setAsynchronousSpellCheckingEnabled:] to 
        enable the feature from LayoutTestController.

        * WebCoreSupport/WebEditorClient.h:
        * WebCoreSupport/WebEditorClient.mm:
        (-[WebEditorSpellCheckResponder initWithSender:WebCore::sequence:results:]):
        (-[WebEditorSpellCheckResponder perform]):
        (toCoreSpellingResult):
        (-[WebEditorSpellCheckResponder WTF::WebCore::]):
        (WebEditorClient::requestCheckingOfString):
        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        (-[WebPreferences setAsynchronousSpellCheckingEnabled:]):
        (-[WebPreferences asynchronousSpellCheckingEnabled]):
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChangedNotification:]):

2010-12-09  Anders Carlsson  <andersca@apple.com>

        Fix a bug uncovered by clang++.

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

2010-12-09  Anders Carlsson  <andersca@apple.com>

        Clang++ build fixes.

        Silence a couple of warnings.

        * WebView/WebFrame.mm:
        (-[WebFrame _stringByEvaluatingJavaScriptFromString:forceUserGesture:]):
        (-[WebFrame _stringByEvaluatingJavaScriptFromString:withGlobalObject:inScriptWorld:]):
        * WebView/WebTextCompletionController.mm:
        (-[WebTextCompletionController filterKeyDown:]):

2010-12-09  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=48545, Home/End, PgUp, PgDown should respect
        writing-mode.  This first part of the patch just patches Mac WebKit 1 views.

        * WebView/WebFrameView.mm:
        (-[WebFrameView _isVerticalDocument]):
        (-[WebFrameView _isFlippedDocument]):
        (-[WebFrameView _scrollToEndOfDocument]):
        (-[WebFrameView _pageInBlockProgressionDirection:]):
        (-[WebFrameView scrollPageUp:]):
        (-[WebFrameView scrollPageDown:]):

2010-12-08  Andy Estes  <aestes@apple.com>

        Reviewed by Darin Adler.

        Enable pre-HTML5 parser quirks for Apple Mail.app
        https://bugs.webkit.org/show_bug.cgi?id=50727

        * WebView/WebView.mm:
        (-[WebView _needsPreHTML5ParserQuirks]): Return true if the embedding
        application is Mail.app.

2010-12-08  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by John Sullivan.

        REGRESSION: r73429-r73490: Some Contextual menu items non-functional, such as Open Link in New Tab
        https://bugs.webkit.org/show_bug.cgi?id=50683
        
        If our context menu item already has an action, don't overwrite the action with the context menu
        forwarder.

        * WebView/WebHTMLView.mm:
        (setMenuItemTarget):

2010-12-08  Anders Carlsson  <andersca@apple.com>

        Remove an unused variable.

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

2010-12-07  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by John Sullivan.

        Layering Violation in ContextMenu - member variable of type HitTestResult
        https://bugs.webkit.org/show_bug.cgi?id=50586
        
        Update users of ContextMenu and ContextMenuController to match where the new functions 
        are located.

        * WebCoreSupport/WebContextMenuClient.mm:
        (WebContextMenuClient::getCustomMenuFromDefaultItems):
        (WebContextMenuClient::contextMenuItemSelected):
        * WebView/WebHTMLView.mm:
        (-[WebMenuTarget validateMenuItem:]):

2010-12-07  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by John Sullivan.

        Part of Layering Violation in ContextMenu
        https://bugs.webkit.org/show_bug.cgi?id=50586
        
        Move WebMenuTarget from ContextMenuMac to here, because having it in ContextMenuMac
        was a layering violation. Also, make sure we set the menu item targets for all menu
        items before showing them, because the ContextMenu constructor doesn't do that anymore.

        * WebView/WebHTMLView.mm:
        (+[WebMenuTarget sharedMenuTarget]): Moved from ContextMenuMac.mm.
        (-[WebMenuTarget WebCore::]): Ditto.
        (-[WebMenuTarget setMenuController:WebCore::]): Ditto.
        (-[WebMenuTarget forwardContextMenuAction:]): Ditto.
        (-[WebMenuTarget validateMenuItem:]): Ditto.

        (setMenuItemTarget): Sets the target of the NSMenuItem to the shared WebMenuTarget.
        (setMenuTargets): Recursively iterates over all NSMenuItems in an NSMenu (including
            submenus), and calls setMenuItemTarget on them.
        (-[WebHTMLView menuForEvent:]): Call setMenuTarget on all the menu items before adding
            them to the menu.

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

        Reviewed by Sam Weinig.

        Pass security origin to make local file decision correctly
        https://bugs.webkit.org/show_bug.cgi?id=48603

        * WebView/WebPDFView.mm:
        (-[WebPDFView PDFViewWillClickOnLink:withURL:]): Pass security origin.

2010-12-07  Martin Robinson  <mrobinson@igalia.com>

        Unreviewed, rolling out r73392.
        http://trac.webkit.org/changeset/73392
        https://bugs.webkit.org/show_bug.cgi?id=50489

        This commit caused crashes on the GTK+ bots

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

2010-12-07  Kenichi Ishibashi  <bashi@google.com>

        Reviewed by Kent Tamura.

        Let HTMLObjectElement be a form associated element
        https://bugs.webkit.org/show_bug.cgi?id=48821

        Modified to use FormAssociatedElement instead of HTMLFormControlElement.

        * WebView/WebHTMLRepresentation.mm:
        (-[WebHTMLRepresentation elementWithName:inForm:]): Modified to use
        FormAssociatedElement instead of HTMLFormControlElement.
        (-[WebHTMLRepresentation controlsInForm:]): Ditto.

2010-12-06  Nate Chapin  <japhet@chromium.org>

        Reviewed by Adam Barth.

        Update calls to DocumentWriter.
        https://bugs.webkit.org/show_bug.cgi?id=50489

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

2010-12-06  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Share code between Mac (CA) and Windows (CACF) GraphicsLayer implementations
        https://bugs.webkit.org/show_bug.cgi?id=49388

        Got rid of GraphicsLayer::nativeLayer() call, replacing it with 
        GraphicsLayer::platformLayer().

        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::attachRootGraphicsLayer):

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

        Reviewed by Sam Weinig.

        WebKit part of <rdar://problem/8145955> Add text search API for counting/marking/highlighting matches in a range
        https://bugs.webkit.org/show_bug.cgi?id=50530

        * WebView/WebDocumentInternal.h: Added a DOMRange parameter to -countMatchesForText:options:limit:markMatches:
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView countMatchesForText:inDOMRange:options:limit:markMatches:]): Added DOMRange parameter,
        which is passed through to WebCore.
        * WebView/WebPDFView.mm:
        (isFrameInRange): Added this helper function.
        (-[WebPDFView countMatchesForText:inDOMRange:options:limit:markMatches:]): Added DOMRange parameter and
        a check if the frame is in the range.
        * WebView/WebView.mm:
        (-[WebView countMatchesForText:options:highlight:limit:markMatches:]): Now calls the inDOMRange: version.
        (-[WebView countMatchesForText:inDOMRange:options:highlight:limit:markMatches:]): Added DOMRange
        parameter, which is passed to document views' -countMatchesForText:inDOMRange:options:limit:markMatches:.
        * WebView/WebViewPrivate.h:

2010-12-03  Sam Weinig  <sam@webkit.org>

        Reviewed by Maciej Stachowiak.

        Enable <a ping> for Mac/Windows/WebKit2 builds
        <rdar://problem/8504473>
        https://bugs.webkit.org/show_bug.cgi?id=50488

        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]): Enable "HyperlinkAuditing" by default.

2010-12-03  Jia Pu  <jpu@apple.com>

        Reviewed by Darin Adler.

        Need to move all code that applies correction into correction panel callback.
        https://bugs.webkit.org/show_bug.cgi?id=50426
        <rdar://problem/8720832>

        * WebCoreSupport/WebEditorClient.h: Adopted new signature of dismissCorrectionPanel.

        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::~WebEditorClient): Adopted new signature of dismissCorrectionPanel.
        (WebEditorClient::showCorrectionPanel): Added more user dictionary learning code.
        (WebEditorClient::dismissCorrectionPanel): Adopted new signature of dismissCorrectionPanel.

2010-12-02  Simon Fraser  <simon.fraser@apple.com>

        Revert r73217 and r73227 because of continued bustage.

        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::attachRootGraphicsLayer):

2010-12-02  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Share code between Mac (CA) and Windows (CACF) GraphicsLayer implementations
        https://bugs.webkit.org/show_bug.cgi?id=49388

        Got rid of GraphicsLayer::nativeLayer() call, replacing it with 
        GraphicsLayer::platformLayer().

        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::attachRootGraphicsLayer):

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

        Reviewed by Beth Dakin.

        <rdar://problem/8708730> Objects reported as being leaked due to lack of autorelease pool

        * Misc/WebNSFileManagerExtras.m:
        (setMetaData): Create an autorelease pool for the duration of the thread body.

2010-12-02  John Knottenbelt  <jknotten@chromium.org>

        Reviewed by Steve Block.

        Move requestGeolocationPermissionForFrame to GeolocationClient
        https://bugs.webkit.org/show_bug.cgi?id=50061

        This change facilitates client-based geolocation implementation by
        bringing together permission control into the geolocation client
        interface.

        Move method ChromeClient::requestGeolocationPermissionForFrame to
        GeolocationClient::requestPermission, and supporting class
        WebGeolocationPolicyListener. The moved code is unchanged except
        that requestPermission now takes only one argument (Geolocation*)
        and the Frame parameter is retrieved from the Geolocation object.

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        * WebCoreSupport/WebGeolocationClient.h:
        (WebGeolocationClient::cancelPermissionRequest):
        * WebCoreSupport/WebGeolocationClient.mm:
        (WebGeolocationClient::requestPermission):
        (-[WebGeolocationPolicyListener initWithGeolocation:]):
        (-[WebGeolocationPolicyListener allow]):
        (-[WebGeolocationPolicyListener deny]):

2010-12-02  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Eric Carlson.

        Style Fixes in WebPluginController
        https://bugs.webkit.org/show_bug.cgi?id=50397

        * Plugins/WebPluginController.mm:
        (-[WebPluginController startAllPlugins]):
        (-[WebPluginController stopAllPlugins]):

2010-12-02  John Sullivan  <sullivan@apple.com>

        Reviewed by Adam Roben.
        
        Slightly speculative fix for:

        <rdar://problem/8712674>
        <https://bugs.webkit.org/show_bug.cgi?id=50393>
        setStringValue: sometimes called with nil in [WebAuthenticationPanel setUpForChallenge]        

        * Panels/WebAuthenticationPanel.m:
        (-[WebAuthenticationPanel setUpForChallenge:]):
        If the realm is nil, use @"" instead.

2010-12-01  Jia Pu  <jpu@apple.com>

        Reviewed by Darin Adler.

        Support multiple correction candidates panel for misspelled word on Mac OS X.
        https://bugs.webkit.org/show_bug.cgi?id=50137
        <rdar://problem/8568059>

        This patch is for supporting multiple correction suggestion panel on Mac OS X.
        The behavior and implementation is similar to that of reversion candiate panel.

        * WebCoreSupport/WebEditorClient.h: Adopted new signatures defined in base class.

        * WebCoreSupport/WebEditorClient.mm:  Adopted new signatures defined in base class.
          Added code to handle new multiple suggestion canidate panel type.
        (WebEditorClient::showCorrectionPanel):
        (WebEditorClient::getGuessesForWord):

2010-12-01  David Hyatt  <hyatt@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=46645
        
        Part 1 of making scrolling work with vertical text. This patch generalizes the scrollOriginX concept
        recently added for horizontal RTL documents and applies it to writing modes as well.  Now the
        scrollOrigin is a point, since you can start off locked to the bottom or locked to the right.
        
        This patch also fixes numerous bugs with the scrollOrigin code using native Mac NSScrollViews and
        makes them behave the same as the cross-platform code (allowing for cross-platform results to be
        landed).

        * WebView/WebDynamicScrollBarsView.mm:
        (-[WebDynamicScrollBarsView adjustForScrollOriginChange]):
        (-[WebDynamicScrollBarsView updateScrollers]):
        (-[WebDynamicScrollBarsView reflectScrolledClipView:]):
        (-[WebDynamicScrollBarsView setScrollOrigin:updatePosition:]):
        (-[WebDynamicScrollBarsView scrollOrigin]):
        * WebView/WebFrameView.mm:
        (-[WebFrameView _scrollToBeginningOfDocument]):
        (-[WebFrameView _scrollToEndOfDocument]):

2010-11-29  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        WebKit Mac part of <rdar://problem/8650085> adding word-prefix search options to the text search API.
        https://bugs.webkit.org/show_bug.cgi?id=50038
        Based on a patch from Darin Adler.

        * WebView/WebDocumentInternal.h: Removed -markAllMatchesForText:caseSensitive:limit: and
        replaced -countMatchesForText:caseSensitive:limit:markMatches: with a WebFindOptions-based
        method. Declared a WebDocumentOptionsSearching protocol with a new -findString:options:
        method. Made WebHTMLView conform to the new protocol.
        * WebView/WebHTMLView.mm:
        (coreOptions): Added. Converts WebFindOptions to WebCore FindOptions.
        (-[WebHTMLView searchFor:direction:caseSensitive:wrap:startInSelection:]): Changed to use
        -findString:options:.
        (-[WebHTMLView countMatchesForText:options:limit:markMatches:]): Changed to use WebFindOptions.
        (-[WebHTMLView findString:options:]): Added. Calls through to WebCore::Editor::findString().
        * WebView/WebPDFView.mm:
        (-[WebPDFView countMatchesForText:options:limit:markMatches:]): Changed to use WebFindOptions.
        * WebView/WebView.mm:
        (-[WebView markAllMatchesForText:caseSensitive:highlight:limit:]): Now calls through to
        -countMatchesForText:options:highlight:limit:markMatches.
        (-[WebView countMatchesForText:caseSensitive:highlight:limit:markMatches:]): Ditto.
        (-[WebView searchFor:direction:caseSensitive:wrap:startInSelection:]): Now calls through to
        -findString:options:.
        (incrementFrame): Changed to use WebFindOptions.
        (findString): Added this helper method that performs the search using the best supported
        method for the document view.
        (-[WebView findString:options:]): Changed -searchFor::::: into this.
        (-[WebView canMarkAllTextMatches]):
        (-[WebView countMatchesForText:options:highlight:limit:markMatches:]): Updated to use
        WebFindOptions.
        (-[WebView unmarkAllTextMatches]): Updated for change to incrementFrame.
        (-[WebView rectsForTextMatches]): Ditto.
        * WebView/WebViewPrivate.h: Added WebFindOptions, -findString:options:, and WebFindOptions version
        of countMatchesForText:.

2010-11-29  Jeremy Moskovich  <jeremy@chromium.org>

        Reviewed by David Hyatt.

        Right-to-left pages should be scrollable to reveal left overflow.
        https://bugs.webkit.org/show_bug.cgi?id=23556

        Set and get the original x-axis scroll position and reset scroll position on HOME/END key press.
        Modify WebFrameView to support setting the initial horizontal scroller's thumb position to the right for
        pages with a left overflow.

        * WebView/WebDynamicScrollBarsView.h:
        * WebView/WebDynamicScrollBarsView.mm:
        (-[WebDynamicScrollBarsView inProgramaticScroll]):
        (-[WebDynamicScrollBarsView refreshInitialScrollbarPosition]):
        (-[WebDynamicScrollBarsView updateScrollers]):
        (-[WebDynamicScrollBarsView reflectScrolledClipView:]):
        (-[WebDynamicScrollBarsView setScrollOriginX:]):
        (-[WebDynamicScrollBarsView scrollOriginX]):
        * WebView/WebFrameView.mm:
        (-[WebFrameView _scrollToBeginningOfDocument]):
        (-[WebFrameView _scrollToEndOfDocument]):
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _frameOrBoundsChanged]):

2010-11-22  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Tony Chang.

        SelectionController::typingStyle() should return EditingStyle*
        https://bugs.webkit.org/show_bug.cgi?id=49813

        Changed the return value of SelectionController::typingStyle() to EditingStyle*.
        Also added SelectionController::copyTypingStyle() to copy the typing style
        as an instance of CSSMutableStyleDeclaration.

        No tests are added since this is no behavioral change.

        * WebView/WebFrame.mm:
        (-[WebFrame _typingStyle]): Calls SelectionController::copyTypingStyle()

2010-11-19  Michael Saboff  <msaboff@apple.com>

        Reviewed by Sam Weinig

        Remove DOMSVGAnimatedPathData.h from all: target to fix build.

        * MigrateHeaders.make:

2010-11-19  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Convert SVGPathSeg/SVGPathSegList to the new SVGPropertyTearOff concept
        https://bugs.webkit.org/show_bug.cgi?id=49580

        * WebView/WebRenderLayer.mm: Add missing StyledElement.h include.

2010-11-18  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Adam Roben.

        <rdar://problem/8602509&8602717&8602724> Enable compaction support.

        * Configurations/WebKit.xcconfig:

2010-11-18  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r72288.
        http://trac.webkit.org/changeset/72288
        https://bugs.webkit.org/show_bug.cgi?id=49730

        'krit attempted to do that, but revert got stuck' (Requested
        by antonm on #webkit).

        * WebView/WebRenderLayer.mm:

2010-11-17  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Convert SVGPathSeg/SVGPathSegList to the new SVGPropertyTearOff concept
        https://bugs.webkit.org/show_bug.cgi?id=49580

        * WebView/WebRenderLayer.mm: Add missing StyledElement.h include.

2010-11-16  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Geoff Garen.

        <rdar://problem/8624267> Leak creating offscreen webview running fast/dom tests

        Make a static provider for WebDeviceOrientationProviderMock.  The old code allocated a new WebDeviceOrientationProviderMock for 
        every WebView, and the WebKit API doesn't support that ownership model.

        * WebView/WebDeviceOrientationProviderMock.h:
        * WebView/WebDeviceOrientationProviderMock.mm:
        (+[WebDeviceOrientationProviderMock shared]):

2010-11-16  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=11004
        
        font-size:0 is ignored.  Remove the minimum font size of 1 in CSSStyleSelector.
        Change the pref value for minimum font size from 1 to 0.  Make sure to never use the NSFont's size,
        since it doesn't honor a size of 0.  Instead pass the size in to the FontPlatformData(NSFont*) version
        of the constructor rather than using [NSFont pointSize].

        https://bugs.webkit.org/show_bug.cgi?id=49582
        
        Negative leading is not handled correctly.  There are two bugs here.  The first is that
        maxAscent and maxDescent can be negative, so we need a notion of whether or not we have
        set them before so that we can allow them to be < 0.
        
        The second issue is that we should understand where fonts will end up relative to
        our baseline (excluding line height), and only allow those boxes to impact ascent and
        descent if the actual font box (without factoring in line height) is above or below the
        root line box baseline.

        Added fast/css/negative-leading.html
        
        These two bug fixes have to land together to keep the Acid 3 test rendering correctly.

        * Misc/WebKitNSStringExtras.mm:
        (-[NSString _web_drawAtPoint:font:textColor:allowingFontSmoothing:]):
        (-[NSString _web_widthWithFont:]):
        * Misc/WebStringTruncator.mm:
        (fontFromNSFont):
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):

2010-11-16  Anders Carlsson  <andersca@apple.com>

        Fix clang++ build.

        * WebCoreSupport/WebFrameLoaderClient.mm:

2010-11-14  Kent Tamura  <tkent@chromium.org>

        Reviewed by Andreas Kling.

        KeyboardEvent::keyIdentifier() should return "const String&"
        https://bugs.webkit.org/show_bug.cgi?id=49426

        * WebCoreSupport/WebEditorClient.mm:
        (selectorForKeyEvent):
          Change the type of a variable to have keyIdentifier(); String -> const String&

2010-11-12  John Knottenbelt  <jknotten@chromium.org>

        Reviewed by Steve Block.

        Rename GeolocationControllerClient to GeolocationClient.
        https://bugs.webkit.org/show_bug.cgi?id=49259

        * WebCoreSupport/WebGeolocationClient.h: Renamed from WebKit/mac/WebCoreSupport/WebGeolocationControllerClient.h.
        (WebGeolocationClient::webView):
        (WebGeolocationClient::setEnableHighAccuracy):
        * WebCoreSupport/WebGeolocationClient.mm: Renamed from WebKit/mac/WebCoreSupport/WebGeolocationControllerClient.mm.
        (WebGeolocationClient::WebGeolocationClient):
        (WebGeolocationClient::geolocationDestroyed):
        (WebGeolocationClient::startUpdating):
        (WebGeolocationClient::stopUpdating):
        (WebGeolocationClient::lastPosition):
        * WebKit.order:
        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:usesDocumentViews:]):

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

        Reviewed by Simon Fraser.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=49356 
        -[WebView _scaleWebView:] should take and origin and scroll the 
        document
        -and corresponding-
        <rdar://problem/8643921>

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

2010-11-10  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by David Hyatt.

        HTML5 Ruby support should be mandatory feature
        https://bugs.webkit.org/show_bug.cgi?id=49272

        Remove Ruby as optional feature.

        * Configurations/FeatureDefines.xcconfig:

2010-11-08  Ned Holbrook  <nholbrook@apple.com>

        Reviewed by Adam Barth.

        Avoid CFAttributedString creation in ComplexTextController by adopting UniChar provider SPI.
        https://bugs.webkit.org/show_bug.cgi?id=48886

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

2010-11-08  Nate Chapin  <japhet@chromium.org>

        Unreviewed, build fix.

        Clumsy typo in r71562.

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

2010-11-08  Nate Chapin  <japhet@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Interface changes in https://bugs.webkit.org/show_bug.cgi?id=27165

        * Plugins/Hosted/HostedNetscapePluginStream.mm:
        (WebKit::HostedNetscapePluginStream::start): Move duplicate code into NetscapePluginStreamLoader
        * Plugins/WebNetscapePluginStream.mm:
        (WebNetscapePluginStream::start): Move duplicate code into NetscapePluginStreamLoader
        * WebView/WebView.mm:
        (-[WebView _dispatchPendingLoadRequests]): Use resourceLoadScheduler() instead of cache()->loader().

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

        Reviewed by Dan Bernstein.

        Plug-in views should not assume that plugins are RenderEmbeddedObjects
        https://bugs.webkit.org/show_bug.cgi?id=49196
        <rdar://problem/8638467>

        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView pluginHostDied]):

2010-11-08  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=48685
        Notify UI process about focused frame

        Added an empty implementation of the new ChromeClient method.

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

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

        Build fix.

        * MigrateHeaders.make:

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

        Reviewed by Adam Roben.

        Remove use of HIGetScaleFactor
        https://bugs.webkit.org/show_bug.cgi?id=49186
        <rdar://problem/8618410>

        Scale factors can vary on a display-by-display basis and it doesn't make sense
        to compute scale factor event coordinates like this.

        * Plugins/WebNetscapePluginEventHandlerCarbon.mm:
        (getCarbonEvent):

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

        Reviewed by Sam Weinig.

        Allow applets to participate in accelerated compositing
        https://bugs.webkit.org/show_bug.cgi?id=49117
        <rdar://problem/8625819>
        
        If Java is being loaded via the Netscape Plugin API, create a
        NetscapePluginWidget so that it has an implementation of platformLayer().
        
        Also clean up by using early returns.

        * WebCoreSupport/WebFrameLoaderClient.mm:

2010-11-07  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Rename Cache to MemoryCache
        https://bugs.webkit.org/show_bug.cgi?id=49159

        * Misc/WebCache.mm:
        (+[WebCache statistics]):
        * WebCoreSupport/WebDeviceOrientationClient.mm:
        (WebDeviceOrientationClient::setController):
        * WebView/WebView.mm:

2010-11-05  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=49100
        ASSERT([self window]) fails in -[WebBaseNetscapePluginView restartTimers]

        * Plugins/WebBaseNetscapePluginView.mm: (-[WebBaseNetscapePluginView restartTimers]):
        Removed the assertion. Multiple callers provide no guarantee that the plug-in is still alive
        (see bug comments), and there seems to be no harm in executing this function in that case.

2010-11-05  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Move resumeAnimations/suspendAnimations from Frame to AnimationController.
        https://bugs.webkit.org/show_bug.cgi?id=49073

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

2010-11-04  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=49008
        <rdar://problem/7906226> Frequent crashes on mail.yahoo.co.jp

        Callers of NetscapePluginInstanceProxy::waitForReply() are not prepared to be deleted during
        the call, unless it returns 0. There are two reasons for NetscapePluginInstanceProxy to be
        deleted during wait:
        - plugin crashed;
        - plugin was stopped (e.g. due to a DOM modification performed by another reply that came in
        while waiting).

        We didn't recognize the latter.

        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WebKit::PluginDestroyDeferrer::~PluginDestroyDeferrer):
        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        (WebKit::NetscapePluginInstanceProxy::waitForReply):
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::didCallPluginFunction):

2010-11-05  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Make suspendAnimations/resumeAnimations and setCSSAnimations traverse through subframes and remember state
        https://bugs.webkit.org/show_bug.cgi?id=46945

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

2010-11-04  Jia Pu  <jpu@apple.com>

        Reviewed by Dan Bernstein.

        reversion bubble in WebViews
        https://bugs.webkit.org/show_bug.cgi?id=47630
        <rdar://problem/8530960>

        This patch is to add reversion to correction panel. Please see WebCore/ChangeLog for detail.

        * WebCoreSupport/WebEditorClient.h: Adopted new signature of base class method.
        * WebCoreSupport/WebEditorClient.mm: Adopted new signature of base class method. And code
          change to use new reversion API in AppKit.
        (WebEditorClient::WebEditorClient):
        (WebEditorClient::~WebEditorClient):
        (WebEditorClient::respondToChangedSelection):
        (WebEditorClient::showCorrectionPanel):
        (WebEditorClient::dismissCorrectionPanel):
        (WebEditorClient::isShowingCorrectionPanel):

2010-11-04  Mike Thole  <mthole@apple.com>

        Reviewed by Dan Bernstein.

        Title for images should use localized numerals
        https://bugs.webkit.org/show_bug.cgi?id=49017

        * WebCoreSupport/WebPlatformStrategies.mm:
        (WebPlatformStrategies::imageTitle): Use localized numerals on Snow Leopard or newer.

2010-11-02  Daniel Bates  <dbates@rim.com>

        Reviewed by Adam Barth.

        For unnamed frames, window.name returns a generated name
        https://bugs.webkit.org/show_bug.cgi?id=6751

        Part 1 of 2.

        Substitute FrameTree::uniqueName() for FrameTree::name() in the Mac port. 

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

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

        Reviewed by Anders Carlsson.

        <rdar://problem/7660547> and https://bugs.webkit.org/show_bug.cgi?id=48699
        Context menu support for WebKit 2.

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

2010-10-29  Daniel Bates  <dbates@rim.com>

        No review, rolling out 70971.
        http://trac.webkit.org/changeset/70971
        https://bugs.webkit.org/show_bug.cgi?id=6751

        Rolling out changeset 70971 <http://trac.webkit.org/changeset/70971> since
        it caused layout test failures on all bots. In particular, the
        child count in a generated frame name differs after this patch. We need
        to look into this further.

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

2010-10-28  Antonio Gomes  <agomes@rim.com>

        Reviewed by Ojan Vafai.

        Needs a "LinuxEditingBehavior", perhaps with a better name
        https://bugs.webkit.org/show_bug.cgi?id=36627

        Added the corresponding GTK+ setting to WebCore's EditingUnixBehavior: WebKitEditingUnixBehavior.

        * WebView/WebFrame.mm:
        (core):
        * WebView/WebPreferencesPrivate.h:

2010-10-29  Daniel Bates  <dbates@rim.com>

        Reviewed by Adam Barth.

        For unnamed frames, window.name returns a generated name
        https://bugs.webkit.org/show_bug.cgi?id=6751

        Modified Mac-port to use FrameTree::uniqueName().

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

2010-10-29  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Change BackForwardList clients to use BackForwardListImpl to prepare for further refactoring
        https://bugs.webkit.org/show_bug.cgi?id=48574

        * History/WebBackForwardList.mm:
        Use BackForwardListImpl.

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

        Rubber-stamped by Sam Weinig.

        Comment for usesDocumentViews explains it backwards. This flag is true in ToT, and we do
        create views for subframes.

        * WebView/WebViewData.h: Double negation is better than a lie.

2010-10-27  Jer Noble  <jer.noble@apple.com>

        Reviewed by Darin Adler.

        Full screen video in Safari (still) exits full-screen if you switch to another 
        app on a multi-display system.
        https://bugs.webkit.org/show_bug.cgi?id=47364
        <rdar://problem/8382299>
        
        The FullScreen window does not technically close when it deactivates, but the 
        two NSWindows that make up the FullScreen feature should not hide when deactivated.
        
        * WebView/WebVideoFullscreenController.mm:
        (createBackgroundFullscreenWindow): Do not set hidesOnDeactivate.
        (-[WebVideoFullscreenWindow initWithContentRect:styleMask:backing:defer:]): Ditto.
        * WebView/WebVideoFullscreenHUDWindowController.mm:
        (-[WebVideoFullscreenHUDWindow initWithContentRect:styleMask:backing:defer:]): Ditto.

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

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=48576
        Let WebKit2 client know when a frame is a frameset

        Added a blank implementation of the new FrameLoaderClient method.

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

2010-10-29  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Adam Roben and David Kilzer.

        Fix and cleanup of build systems
        https://bugs.webkit.org/show_bug.cgi?id=48342

        * Configurations/FeatureDefines.xcconfig: Remove unnecessary ENABLE_SANDBOX.

2010-10-28  Dan Bernstein  <mitz@apple.com>

        Reviewed by Mark Rowe.

        LLVM compiler build fix

        * Misc/WebDownload.mm:
        (-[WebDownload initWithRequest:delegate:]): Changed the delegate type from id to
        id<NSURLDownloadDelegate> to match the method signature in NSURLDownload.

2010-10-28  Ivan Krstić  <ike@apple.com>

        Reviewed by Mark Rowe.

        Remove unused experimental proxied panel interface.
        <rdar://problem/7237059>

        * Plugins/Hosted/NetscapePluginHostManager.h:
        * Plugins/Hosted/NetscapePluginHostManager.mm:
        (WebKit::NetscapePluginHostManager::hostForPlugin):
        (WebKit::NetscapePluginHostManager::spawnPluginHost):
        (WebKit::NetscapePluginHostManager::instantiatePlugin):
        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        * Plugins/Hosted/WebKitPluginClient.defs:
        * Plugins/Hosted/WebKitPluginHost.defs:
        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):
        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        * WebView/WebPreferencesPrivate.h:

2010-10-27  Pratik Solanki  <psolanki@apple.com>

        Reviewed by Darin Adler.

        Improve memSize calculation in [WebView _setCacheModel]
        https://bugs.webkit.org/show_bug.cgi?id=48484

        * WebView/WebView.mm:
        (roundUpToPowerOf2): Added. Utility function to calculate the nearest power of 2.
        (+[WebView _setCacheModel:]): Update memSize calculation to set it to the next
        bigger power of 2. Also update WebCore cache settings.

2010-10-26  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        WebKitTestRunner needs to support layoutTestController.dumpBackForwardList
        https://bugs.webkit.org/show_bug.cgi?id=42322
        rdar://problem/8193631

        WebKitTestRunner needs to support layoutTestController.clearBackForwardList
        https://bugs.webkit.org/show_bug.cgi?id=42333
        rdar://problem/8193643

        * History/WebBackForwardList.mm:
        (core): Return BackForwardListImpl.
        (kit): Take BackForwardListImpl.
        (-[WebBackForwardList initWithBackForwardList:]): Use BackForwardListImpl.
        (-[WebBackForwardList dealloc]): Ditto.
        (-[WebBackForwardList finalize]): Ditto.
        (-[WebBackForwardList description]): Ditto.
        (-[WebBackForwardList setPageCacheSize:]): Ditto.
        (-[WebBackForwardList pageCacheSize]): Ditto.
        * History/WebBackForwardListInternal.h: Ditto.
        * WebView/WebFrameView.mm:
        (-[WebFrameView keyDown:]): Ditto.
        * WebView/WebView.mm:
        (-[WebView initWithCoder:]): Ditto.
        (-[WebView encodeWithCoder:]): Ditto.
        (-[WebView backForwardList]): Ditto.
        (-[WebView setMaintainsBackForwardList:]): Ditto.

2010-10-27  Chris Rogers  <crogers@google.com>

        Reviewed by Chris Marrin.

        Add ENABLE_WEB_AUDIO feature enable flag (initially disabled) to build-webkit
        https://bugs.webkit.org/show_bug.cgi?id=48279

        * Configurations/FeatureDefines.xcconfig:

2010-10-27  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin Adler.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=48385 Add WebKit 
        SPI to scale a WebView
        -and corresponding-
        <rdar://problem/8107667>

        This patch adds SPI to Mac WebKit that scales the page by the given 
        scale factor.

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

2010-10-27  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        REGRESSION (r70335): Incorrect article layout in Safari Reader
        https://bugs.webkit.org/show_bug.cgi?id=48436

        * Misc/WebKitVersionChecks.h: Added WEBKIT_FIRST_VERSION_WITH_GET_MATCHED_CSS_RULES_RESTRICTIONS.
        * WebView/WebView.mm:
        (-[WebView _needsUnrestrictedGetMatchedCSSRules]): Added. Returns YES for Safari linked against
        versions of WebKit that did not have the cross-origin restrictions in getMatchedCSSRules().
        (-[WebView _preferencesChangedNotification:]): Call Settings::setCrossOriginCheckInGetMatchedCSSRulesDisabled()
        based on the above.

2010-10-18  Jer Noble  <jer.noble@apple.com>

        Reviewed by Eric Carlson.

        Safari fullscreen media element tickles when it should not.
        
        https://bugs.webkit.org/show_bug.cgi?id=47861

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

2010-10-26  Jenn Braithwaite  <jennb@chromium.org>

        Reviewed by Dmitry Titov.

        Resource tracking failure when trying to move a frame between documents
        https://bugs.webkit.org/show_bug.cgi?id=44713

        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::didTransferChildFrameToNewDocument):
        Empty method.
        (WebFrameLoaderClient::transferLoadingResourceFromPage):
        Update resource tracking for a resource load that has been transferred
        to a new page.

2010-10-25  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Remove exec and globalData arguments from jsNumber
        https://bugs.webkit.org/show_bug.cgi?id=48270

        Mechanical removal of exec parameter to jsNumber

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

2010-10-24  Dan Bernstein  <mitz@apple.com>

        Reviewed by Anders Carlsson.

        Expose HitTestResult::absoluteMediaURL() via WebKit API
        https://bugs.webkit.org/show_bug.cgi?id=48219

        * Misc/WebElementDictionary.mm:
        (+[WebElementDictionary initializeLookupTable]): Map WebElementMediaURLKey to
        _absoluteMediaURL.
        (-[WebElementDictionary _absoluteMediaURL]): Added. Returns absoluteMediaURL().
        * WebKit.exp: Export WebElementMediaURLKey.
        * WebView/WebView.mm: Define WebElementMediaURLKey.
        * WebView/WebViewPrivate.h: Declare WebElementMediaURLKey.

2010-10-24  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        Removed deprecated methods from the WebHTMLHighlighter private protocol.

        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::customHighlightRect): Call -highlightRectForLine:representedNode:
        unconditionally.
        (WebChromeClient::paintCustomHighlight): Call
        -paintHighlightForBox:onLine:behindText:entireLine:representedNode: unconditionally.
        * WebView/WebHTMLViewPrivate.h:

2010-10-23  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Sam Weinig.

        Unify globalData APIs
        https://bugs.webkit.org/show_bug.cgi?id=47969

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::evaluate):
        (WebKit::NetscapePluginInstanceProxy::invoke):
        (WebKit::NetscapePluginInstanceProxy::invokeDefault):
        (WebKit::NetscapePluginInstanceProxy::construct):
        * WebView/WebScriptDebugDelegate.mm:
        (-[WebScriptCallFrame evaluateWebScript:]):

2010-10-23  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/48186> Remove unneeded WebHTMLRepresentationInternal.h header

        Reviewed by Sam Weinig.

        The only method defined in WebHTMLRepresentationInternal.h is
        also defined in WebHTMLRepresentation.h, so use that instead.

        * WebView/WebHTMLRepresentationInternal.h: Removed.

2010-10-23  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=48083
        <rdar://problem/8489082> Need WebKit2 API for private browsing (48083)

        * WebCoreSupport/WebSystemInterface.mm: (InitWebCoreSystemInterface): Initialize the new method.

2010-10-22  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        WebKit2 needs to pass the current event modifier flags when requesting a new window
        https://bugs.webkit.org/show_bug.cgi?id=48140

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::createWindow):
        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::dispatchCreatePage):
        Add NavigationAction parameter.

2010-10-21  Andy Estes  <aestes@apple.com>

        Reviewed by Eric Carlson.

        WebKit shouldn't load a plug-in based on file extension if a MIME type
        is specified.
        https://bugs.webkit.org/show_bug.cgi?id=48046

        If a MIME type is specified in an object or embed element, and that MIME
        type isn't supported by an installed plug-in, WebKit shouldn't attempt
        to find a plug-in based on the file extension of the url attribute.
        Doing so can lead to cases where a plug-in is loaded that can't handle
        resources of the MIME type specified by the author.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::createPlugin): Only check for a pluginPackage by
        extension if MIME type is the empty string.

2010-10-20  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Composited elements drawn twice when WebView is layer-backed
        https://bugs.webkit.org/show_bug.cgi?id=48024
        <rdar://problem/7916580>
        
        When drawing content in a layer-backed WebView, WebFrame's test
        for drawing to a bitmap succeeded, causing us to paint flattened
        compositing layers into the view. They would also be rendered
        by the normal compositing path, resulting in double rendering.
        
        Fix this by detecting when the WebHTMLView is being drawn into
        a layer, and avoiding flattening in that case.

        * WebView/WebFrame.mm:
        (-[WebFrame _showFlattenedCompositingLayers:]):
        (-[WebFrame _drawRect:contentsOnly:]):
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView drawLayer:inContext:]):
        (-[WebHTMLView _web_isDrawingIntoLayer]):
        * WebView/WebHTMLViewInternal.h:

2010-10-20  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by David Levin.

        Repost the DatabaseTracker notifications to the main thread, if needed.
        https://bugs.webkit.org/show_bug.cgi?id=40655

        * Storage/WebDatabaseTrackerClient.mm:
        (DidModifyOriginData::dispatchToMainThread):
        (DidModifyOriginData::DidModifyOriginData):
        (DidModifyOriginData::dispatchDidModifyOriginOnMainThread):
        (WebDatabaseTrackerClient::dispatchDidModifyOrigin):
        (WebDatabaseTrackerClient::dispatchDidModifyDatabase):

2010-10-20  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler.

        REGRESSION(r67568-r67643): Some HTML/CSS renders upside down and backwards on Leopard
        https://bugs.webkit.org/show_bug.cgi?id=47369
        
        r46947 added code that limits the size of the layer-backed view on Leopard when
        the page height exceeds 4096px (later adjusted to 2048px in r48401).
        
        Later, r67576 altered the geometry flipping behavior to push the geometry flipping
        down into WebKit. However, the code that adjusts the hosting layer's sublayer transform
        to account for layer-backed view size-limiting was not fixed at the same time.
        This change corrects that.

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

2010-10-19  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/8508422> Compositing layers aren't always displayed correctly in layer-backed WebViews
        
        AppKit has some special code to prevent it meddling with view's layers
        under layer-backed WebViews. When a layer-backed WebView became composited,
        this caused our layer to remain zero-sized. Fix this by manually
        setting the geometry for our layer, if the WebHTMLView has a layer.
        
        This does not seem to be a problem if the WebView becomes layer-backed, or
        stops being layer-backed after the WebView starts using compositing.

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

2010-10-20  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        Merge ColorSpace and ImageColorSpace enums
        https://bugs.webkit.org/show_bug.cgi?id=47922

        Renamed ColorSpace enum entries DeviceColorSpace and sRGBColorSpace to ColorSpaceDeviceRGB and ColorSpaceSRGB
        to follow webkit style rules.

        * Misc/WebKitNSStringExtras.mm:
        (-[NSString _web_drawAtPoint:font:textColor:allowingFontSmoothing:]):

2010-10-19  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=47933
        <rdar://problem/8494337> navigator.language doesn't work in WebKit2

        * Misc/WebNSUserDefaultsExtras.mm: Moved code for computing default language to WebCore.
        We need to keep _webkit_preferredLanguageCode for Safari.

        * WebCoreSupport/WebSystemInterface.mm: (InitWebCoreSystemInterface):
        Initialize wkCopyCFLocalizationPreferredName.

        * WebCoreSupport/WebViewFactory.mm: Removed defaultLanguage. WebCore was the only caller.

2010-10-18  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by David Kilzer.

        https://bugs.webkit.org/show_bug.cgi?id=47864
        Convert WebNSUserDefaultsExtras.m to .mm

        Also, fixed some issues in the process:
        - removed locking, which was only necessary when this code was in Foundation;
        - fixed notification center observer to actually work (previously, it picked up changes
        when application preferences changed, not when system language did);
        - removed unused NSString category;
        - updated style.

        * Misc/WebNSUserDefaultsExtras.m: Removed.
        * Misc/WebNSUserDefaultsExtras.mm: Copied from WebKit/mac/Misc/WebNSUserDefaultsExtras.m.
        (createHTTPStyleLanguageCode):
        (+[NSUserDefaults _webkit_defaultsDidChange]):
        (addLanguageChangeObserver):
        (+[NSUserDefaults _webkit_preferredLanguageCode]):

2010-10-18  Stuart Morgan  <stuartmorgan@chromium.org>

        Reviewed by Eric Seidel.

        Switch to using the new Carbon NPAPI event declarations, and remove
        the old ones.

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

        * Plugins/WebNetscapePluginEventHandlerCarbon.mm:
        (WebNetscapePluginEventHandlerCarbon::mouseEntered):
        (WebNetscapePluginEventHandlerCarbon::mouseExited):
        (WebNetscapePluginEventHandlerCarbon::mouseMoved):
        (WebNetscapePluginEventHandlerCarbon::focusChanged):

2010-10-18  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: disable private browsing for inspector
        https://bugs.webkit.org/show_bug.cgi?id=47827

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

2010-10-14  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: inspector settings/properties/states management
        should be extracted into separate class.

        We have a lot of flags/values in InspectorController.
        Some flags are persisting into profile.
        Others are part of inspector state for frontend.
        All these flags should keep their values after navigation.
        It'd be better to extract these flags/values into separate
        class which will care about theirs lifetime.

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

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

2010-10-13  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=43987
        Switch XMLHttpRequest, FileReader, and FileReaderSync to use a Stringbuilder
        to construct their internal result string.  Remove ScriptString (this is now
        redundant).

        * WebCoreSupport/WebFrameLoaderClient.mm:

2010-10-12  Andy Estes  <aestes@apple.com>

        Rubber-stamped by Darin Adler.

        Check in some cleanup from the previous commit.

        * WebView/WebView.mm:
        (leakMailQuirksUserScriptPath): Renamed to indicate that this function
        leaks an NSString.
        (-[WebView _injectMailQuirksScript]): Moved a static initialization from
        a separate class method into the only method that used it and removed
        the now-unnecessary class method.

2010-10-12  Eric Seidel  <eric@webkit.org>

        Reviewed by Darin Adler.

        REGRESSION (new parser): Leopard/Tiger Mail <head>/<body> quirk is gone
        https://bugs.webkit.org/show_bug.cgi?id=45693

        Re-implement this former WebCore parser quirk as a
        Mac-only userscript-based quirk.  As far as I can tell
        from Darin's description this should satisfy Mail's needs.

        * Misc/MailQuirksUserScript.js: Added.
        * WebView/WebView.mm:
        (+[WebView _mailQuirksUserScript]):
        (-[WebView _injectMailQuirksScript]):
        (-[WebView _commonInitializationWithFrameName:groupName:usesDocumentViews:]):

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

        Reviewed by Sam Weinig.

        Add 'didDraw' callback for framerate tracking
        https://bugs.webkit.org/show_bug.cgi?id=47478

        Add a callback at the end of -[WebHTMLView drawRect:] so
        a delegate can get notified when a draw happens.
        
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView drawRect:]):
        * WebView/WebUIDelegatePrivate.h:

2010-10-11  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Remove WebIconFetcher from WebKit and IconFetcher from WebCore
        https://bugs.webkit.org/show_bug.cgi?id=47523

        Remove all traces of the WebKit WebIconFetcher class. It's SPI that nobody uses.

        * Misc/WebIconFetcher.h: Removed.
        * Misc/WebIconFetcher.mm: Removed.
        * Misc/WebIconFetcherInternal.h: Removed.
        * WebView/WebFrame.mm:
        * WebView/WebFramePrivate.h:

2010-10-11  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Darin Adler.

        Add Private API for creating a WebKit2 WebSerializedScriptValue from the internal
        representation of a WebKit1 WebSerializedJSValue.
        https://bugs.webkit.org/show_bug.cgi?id=47439

        * WebView/WebSerializedJSValue.mm:
        (-[WebSerializedJSValue internalRepresentation]):
        * WebView/WebSerializedJSValuePrivate.h:

2010-10-07  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Sam Weinig.

        Add Private API for creating a WebKit1 WebSerializedJSValue from the internal
        representation of a WebKit2 WebSerializedScriptValue.
        https://bugs.webkit.org/show_bug.cgi?id=47390

        * WebView/WebSerializedJSValue.mm:
        (-[WebSerializedJSValue initWithInternalRepresentation:]):
        Set the WebSerializedJSValuePrivate's WebCore::SerializedScriptValue to be the passed in
        internal representation.
        * WebView/WebSerializedJSValuePrivate.h: Added.

2010-10-07  Antonio Gomes  <agomes@rim.com>

        Reviewed by Simon Fraser.

        [Mac] [DRT] implement setSpatialNavigationEnabled
        https://bugs.webkit.org/show_bug.cgi?id=47291

        Added the needed bits to make it possible to enabled spatial navigation
        for the Mac port. For now it is being only used by DRT.

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

2010-10-07  Jer Noble  <jer.noble@apple.com>

        Fix the Leopard 64-bit build.

        * Configurations/WebKit.xcconfig: Add CoreServices.framework/Frameworks to the 
            framework search path.
        * WebView/WebVideoFullscreenController.mm: Explicitly import <OSStatus/Power.h>.

2010-10-06  Jer Noble  <jer.noble@apple.com>

        Reviewed by Darin Adler.

        Screensaver starts while watching fullscreen playback.
        https://bugs.webkit.org/show_bug.cgi?id=47299
        <rdar://problem/8478956>

        To disable the Screen Saver, we need to periodically call UpdateSystemActivity().  

        * WebView/WebVideoFullscreenController.h: Added _tickleTimer.
        * WebView/WebVideoFullscreenController.mm:
        (-[WebVideoFullscreenController dealloc]): Invalidate _tickleTimer.
        (-[WebVideoFullscreenController _enableTickleTimer]): Create _tickleTimer. 
        (-[WebVideoFullscreenController _disableTickleTimer]): Invalidate _tickleTimer.
        (-[WebVideoFullscreenController _tickleTimerFired]): Call UpdateSystemActivity().
        (-[WebVideoFullscreenController updatePowerAssertions]): Call _enableTickleTimer 
            or _disableTickleTimer.

2010-10-05  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Martin Robinson.

        check for ENABLE(GLIB_SUPPORT) in WebView
        https://bugs.webkit.org/show_bug.cgi?id=46788

        Use ENABLE(GLIB_SUPPORT) in WebView to guard the glib runloop observer.

        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:usesDocumentViews:]):
        (-[WebView _close]):
        * WebView/WebViewData.h:
        * WebView/WebViewInternal.h:

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

        Fix Snow Leopard build.

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

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

        Reviewed by Dan Bernstein.

        Add proxy server query function proxyServersForURL and change the Mac plug-in code to use it
        https://bugs.webkit.org/show_bug.cgi?id=47022
        <rdar://problem/8504712>

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::getProxy):
        * Plugins/WebBaseNetscapePluginView.h:
        * Plugins/WebBaseNetscapePluginView.mm:
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView getVariable:forURL:value:length:]):

2010-09-30  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Remove remaining calls to deprecatedParseURL
        https://bugs.webkit.org/show_bug.cgi?id=26599

        * DOM/WebDOMOperations.mm:
        (-[DOMDocument URLWithAttributeString:]):
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::createPlugin):
        Call stripLeadingAndTrailingHTMLSpaces instead of deprecatedParseURL.

2010-09-30  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        -[DOMDocument _documentRange] throws an exception if there is no document element
        https://bugs.webkit.org/show_bug.cgi?id=46934
        <rdar://problem/8169260>

        If there is no document element, just return an empty range. Otherwise we'll try to call
        Range::selectNode with a null Node which will throw a NOT_FOUND exception.

        * DOM/WebDOMOperations.mm:
        (-[DOMDocument _documentRange]):

2010-09-30  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Make 2D accelerated canvas rendering build on Mac
        https://bugs.webkit.org/show_bug.cgi?id=46007
        
        Added ACCELERATED_2D_CANVAS to FeatureDefines

        * Configurations/FeatureDefines.xcconfig:

2010-09-30  Dan Bernstein  <mitz@apple.com>

        Reviewed by John Sullivan.

        Add printing SPI allowing full control over shrink-to-fit
        https://bugs.webkit.org/show_bug.cgi?id=46877

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _beginPrintModeWithMinimumPageWidth:height:maximumPageWidth:]): Added.
        * WebView/WebHTMLViewPrivate.h:

2010-09-28  Johnny Ding  <jnd@chromium.org>

        Reviewed by Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=41292
        Some windowed plugins did not handle events through EventHandler, so we
        never set right gesture state for those events.
        This change is to set right allowPopupsFromPlugin flag to current
        execution frame, so WeKit can always get right gesture state on Mac.
        From Mac Snow Leopard, the plugin is run under "WebKitPluginHost,app"
        process, that process passes the allowPopupsFromPlugin flag to
        WKPCEvaluate(in NetscapePluginHostProxy.mm), then flag is set in
        NetscapePluginInstanceProxy::evaluate.

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

2010-09-28  Jenn Braithwaite  <jennb@chromium.org>

        Reviewed by Dmitry Titov.

        Added oldPage param to FrameLoaderClient::didTransferChildFrameToNewDocument.
        https://bugs.webkit.org/show_bug.cgi?id=46663

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

2010-09-26  Antonio Gomes  <agomes@rim.com>

        Reviewed by Kenneth Rohde Christiansen.

        DRT/Mac nodesFromRect support

        [Mac][DRT] Implement LayoutTestController::nodesFromRect
        https://bugs.webkit.org/show_bug.cgi?id=46580

        Implement nodesFromRect as a private method to access non-exposed Document
        methods, similarly to computedStyleIncludingVisitedInfo.

        * WebView/WebView.mm: Added JSDocument.h and JSNodeList.h to the include list.
        These headers makes it possible to:
        1) Get a Document off of a JSDocument;
        2) Call toJS function, defined in JSNodeList.cpp|h so we can convert RefPtr<NodeList>
        gotten from Document::nodesFromRect to JS bindings.
        (-[WebView _nodesFromRect:forDocument:x:y:hPadding:vPadding:ignoreClipping:]):
        * WebView/WebViewPrivate.h: Added nodesFromRect method to access methods of the
        Document class not exposed to JavaScript. It works similarly to computedStyleIncludingVisitedInfo.

2010-09-24  Jia Pu  <jpu@apple.com>

        Reviewed by Dan Bernstein.

        automaticSpellingCorrectionEnabled isn't updated.
        https://bugs.webkit.org/show_bug.cgi?id=46486
        <rdar://problem/8475212>

        * WebView/WebView.mm:
        (+[WebView initialize]): Should update "automaticSpellingCorrectionEnabled"
          instead of "automaticTextReplacementEnabled".

2010-09-23  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=46380
        REGRESSION: Crash when downloading a file

        Downloading cannot be tested in DRT.

        * Misc/WebNSFileManagerExtras.m: (-[NSFileManager _webkit_setMetadataURL:referrer:atPath:]):
        Don't copy null strings.

2010-09-24  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: CRASH at node highlight on MAC Safari.
        1) run-safari --debug
        2) open inspector
        3) open elements panel
        4) hover mouse over elements panel items multiple times
        5) CRASH
        Looks like it is a race condition. WebNodeHighlightView doesn't check
        the pointer to WebNodeHighligh object and it can be nil.

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

        * WebInspector/WebNodeHighlightView.mm:
        (-[WebNodeHighlightView drawRect:]):

2010-09-23  Andy Estes  <aestes@apple.com>

        Reviewed by Darin Adler.

        REGRESSION (r61285): some Dashboard widgets are always invisible due to
        HTML parser changes.
        https://bugs.webkit.org/show_bug.cgi?id=46435

        Enable pre-HTML5 parser quirks if Dashboard is in backward compatibility
        mode.

        * WebView/WebView.mm:
        (-[WebView _needsPreHTML5ParserQuirks]): Renamed from
        shouldUsePreHTML5ParserQuirks(). Return true if
        WebCore::Settings::usesDashboardCompatibilityMode() is true.
        (-[WebView _preferencesChangedNotification:]):
        (-[WebView _setDashboardBehavior:to:]): Enable pre-HTML5 parser quirks
        if Dashboard behavior is set to backward compatibility mode.

2010-09-23  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Simon Fraser.

        Reduce minimum DOMTimer interval
        https://bugs.webkit.org/show_bug.cgi?id=45362

        * WebView/WebView.mm:
        Updating set interval call to use Settings' static version inside
        one time init block.

2010-09-22  Andy Estes  <aestes@apple.com>

        Reviewed by Darin Adler.

        REGRESSION (r61285): Microsoft Entourage 2008 does not invoke My Day window
        https://bugs.webkit.org/show_bug.cgi?id=46334

        Microsoft My Day loads scripts using self-closing script tags, markup
        which is incompatible with the HTML5 parser. Enable parser quirks for
        this application.

        * WebView/WebView.mm:
        (shouldUsePreHTML5ParserQuirks): Return true if the application is
        Microsoft My Day and was linked against a version of WebKit prior to the
        introduction of the HTML5 parser.

2010-09-23  Nate Chapin  <japhet@chromium.org>

        Reviewed by Darin Fisher.

        Add hyperlink auditing settings (i.e., <a ping>).
        https://bugs.webkit.org/show_bug.cgi?id=30458

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

2010-09-22  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=43667
        ASSERT failure in NetscapePluginInstanceProxy::disconnectStream

        Test: plugins/get-javascript-url.html

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::evaluateJavaScript): Add the stream to m_streams, just
        like any other one.

2010-09-21  Darin Adler  <darin@apple.com>

        Reviewed by Anders Carlsson.

        Fix some Objective-C GC problems and use RetainPtr instead of HardRetain/Release
        https://bugs.webkit.org/show_bug.cgi?id=46220

        * Misc/WebNSFileManagerExtras.m:
        (setMetaData): Use CFRelease instead of HardRelease.
        (-[NSFileManager _webkit_setMetadataURL:referrer:atPath:]): Use CFStringCreateCopy
        instead of -[NSObject copy] combined with HardRetainWithNSRelease.

2010-09-22  Balazs Kelemen  <kb@inf.u-szeged.hu>

        Reviewed by Kenneth Rohde Christiansen.

        PluginStrategy should satisfy the needs of Qt
        https://bugs.webkit.org/show_bug.cgi?id=45857
        No new functionality so no new tests.

        * WebCoreSupport/WebPlatformStrategies.h:
        * WebCoreSupport/WebPlatformStrategies.mm:
        (WebPlatformStrategies::getPluginInfo):

2010-09-22  Paul Knight  <pknight@apple.com>

        Reviewed by Simon Fraser.

        -[WebView _scheduleCompositingLayerSync] should wake the run loop
        https://bugs.webkit.org/show_bug.cgi?id=46226

        Call CFRunLoopWakeUp to make sure the run loop is not sleeping, which could delay layer painting.

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

2010-09-21  Andy Estes  <aestes@apple.com>

        Reviewed by Darin Adler.

        REGRESSION (r61285): AIM 2.1.296: Code rendered as text in Welcome screen
        https://bugs.webkit.org/show_bug.cgi?id=46134

        AIM clients linked against versions of WebKit prior to the introduction
        of the HTML5 parser contain markup incompatible with the new parser.
        Enable parser quirks in this case to remain compatible with these
        clients.

        * WebView/WebView.mm:
        (shouldUsePreHTML5ParserQuirks): Returns true if the embedding
        application is AIM and was linked against a version of WebKit prior to
        the introduction of the HTML5 parser, or if the
        WebKitPreHTML5ParserQuirks WebPreference is enabled.
        (-[WebView _preferencesChangedNotification:]): Call
        WebCore::Settings::setUsePreHTML5ParserQuirks().

2010-09-21  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        DeviceOrientationClient and DeviceMotionClient should have controllerDestroyed() methods
        https://bugs.webkit.org/show_bug.cgi?id=45891

        Implements WebDeviceOrientationClient::deviceOrientationControllerDestroyed to delete the client.

        * WebCoreSupport/WebDeviceOrientationClient.h:
        * WebCoreSupport/WebDeviceOrientationClient.mm:
        (WebDeviceOrientationClient::deviceOrientationControllerDestroyed):

2010-09-20  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Eric Carlson.

        [GTK] enhanced context menu for media elements
        https://bugs.webkit.org/show_bug.cgi?id=45021

        New localized strings for the media element context-menu.

        * WebCoreSupport/WebPlatformStrategies.h:
        * WebCoreSupport/WebPlatformStrategies.mm:
        (WebPlatformStrategies::contextMenuItemTagOpenVideoInNewWindow):
        (WebPlatformStrategies::contextMenuItemTagOpenAudioInNewWindow):
        (WebPlatformStrategies::contextMenuItemTagCopyVideoLinkToClipboard):
        (WebPlatformStrategies::contextMenuItemTagCopyAudioLinkToClipboard):
        (WebPlatformStrategies::contextMenuItemTagToggleMediaControls):
        (WebPlatformStrategies::contextMenuItemTagToggleMediaLoop):
        (WebPlatformStrategies::contextMenuItemTagEnterVideoFullscreen):
        (WebPlatformStrategies::contextMenuItemTagMediaPlay):
        (WebPlatformStrategies::contextMenuItemTagMediaPause):
        (WebPlatformStrategies::contextMenuItemTagMediaMute):

2010-09-20  Andy Estes  <aestes@apple.com>

        Reviewed by Adam Barth.

        REGRESSION (HTML5 Parser): Pages broken due to <tag<tag> parsing changes
        https://bugs.webkit.org/show_bug.cgi?id=40961

        Implement WebKitUsePreHTML5ParserQuirks preference.

        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]): Default WebKitUsePreHTML5ParserQuirks to
        false.
        (-[WebPreferences usePreHTML5ParserQuirks]):
        (-[WebPreferences setUsePreHTML5ParserQuirks:]):
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChangedNotification:]): Update WebCore::Settings
        with the value of WebKitUsePreHTML5ParserQuirks when a preference
        changes.

2010-09-20  Enrica Casucci  <enrica@apple.com>

        Reviewed by Sam Weinig.

        Pasteboard doesn't work in WebKit2.
        https://bugs.webkit.org/show_bug.cgi?id=42317
        <rdar://problem/7660537>

        Some changes to fix style inconsistencies.
        Added OBJC 2.0 style enumeration.
        
        * WebCoreSupport/WebEditorClient.h:
        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::userVisibleString):
        (createExcludedElementsForAttributedStringConversion):
        (WebEditorClient::documentFragmentFromAttributedString): Changed parameter to be
        a Vector of RefPtr.
        (WebEditorClient::setInsertionPasteboard):
        (WebEditorClient::pasteboardTypesForSelection):

2010-09-17  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=45993, convert printing to the new pagination model.

        Make printing store the page height in the RenderView and push that into the layout state to
        use the new pagination model.  The old pagination model is retained because it is still used
        for embedded WebViews.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _adjustedBottomOfPageWithTop:bottom:limit:]):

2010-09-17  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        REGRESSION (r60104): Zoom level is unexpectedly reset on page reload
        https://bugs.webkit.org/show_bug.cgi?id=42863

        * WebView/WebView.mm:
        (-[WebView _setZoomMultiplier:isTextOnly:]):
        Call functions on Frame instead of FrameView.

2010-09-17  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Simon Fraser.

        Reduce minimum DOMTimer interval
        https://bugs.webkit.org/show_bug.cgi?id=45362

        * WebView/WebView.mm: Added in a call to set the mimimum allowed DOMTimer to 4ms.

2010-09-17  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Add WebKitAccelerated2dCanvasEnabled flag to WebKit for Mac
        https://bugs.webkit.org/show_bug.cgi?id=45911

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

2010-09-17  Jia Pu  <jpu@apple.com>

        Reviewed by Dan Bernstein.

        WebKit should use system wide spell checking preference when application specific one isn't set.
        https://bugs.webkit.org/show_bug.cgi?id=45789
        <rdar://problem/8416041>

        * WebView/WebView.mm:
        (+[WebView initialize]): Use system wide autocorrection and text substitution preferences
          when the application level preferences are not set.

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

        Reviewed by Darin Adler.

        <rdar://problem/8395558>
        https://bugs.webkit.org/show_bug.cgi?id=45938
        _web_makePluginViewsPerformSelector:: mutates subviews array while iterating it

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _web_makePluginSubviewsPerformSelector:withObject:]):
        Converted from -[NSArray _web_makePluginViewsPerformSelector:withObject:]. The old method
        was only ever called on the result of -[WebHTMLView subviews]. By moving that knowledge into
        this helper method, it can't be used incorrectly. Now it makes a copy of [WebHTMLView subviews]
        before enumerating it, to ensure that the selector can't mutate the array being enumerated.
        (-[WebHTMLView viewWillMoveToHostWindow:]):
        Updated for _web_makePluginSubviewsPerformSelector:: signature change.
        (-[WebHTMLView viewDidMoveToHostWindow]):
        Ditto.

2010-09-16  Darin Adler  <darin@apple.com>

        Reviewed by Andreas Kling.

        Reduce use of HTMLInputElement::inputType so we can remove it later
        https://bugs.webkit.org/show_bug.cgi?id=45903

        * WebView/WebHTMLRepresentation.mm:
        (-[WebHTMLRepresentation elementDoesAutoComplete:]): Use isPasswordField.
        (-[WebHTMLRepresentation elementIsPassword:]): Use isPasswordField.

2010-09-16  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Darin Adler.

        Always use a valid string when setting WebKitUserStyleSheetLocationPreferenceKey.
        https://bugs.webkit.org/show_bug.cgi?id=41510

        This prevents usage of nil value, which would cause an uncaught exception.

        * WebView/WebPreferences.mm:
        (-[WebPreferences setUserStyleSheetLocation:]):

2010-09-16  Dan Bernstein  <mitz@apple.com>

        Reverted the previous change because r67628 has been reverted.

        * WebCoreSupport/WebPlatformStrategies.h:
        * WebCoreSupport/WebPlatformStrategies.mm:

2010-09-16  Dan Bernstein  <mitz@apple.com>

        Build fix after r67628. Added context menu item localizable strings for the items
        added in r67628, following equivalent menu items in Mac OS X when possible. However,
        this set of menu items does not make much sense for Mac OS X, and this should be
        addressed separately.

        * WebCoreSupport/WebPlatformStrategies.h:
        * WebCoreSupport/WebPlatformStrategies.mm:
        (WebPlatformStrategies::contextMenuItemTagOpenMediaInNewWindow):
        (WebPlatformStrategies::contextMenuItemTagCopyMediaLinkToClipboard):
        (WebPlatformStrategies::contextMenuItemTagToggleMediaControls):
        (WebPlatformStrategies::contextMenuItemTagToggleMediaLoop):
        (WebPlatformStrategies::contextMenuItemTagEnterVideoFullscreen):
        (WebPlatformStrategies::contextMenuItemTagMediaPlay):
        (WebPlatformStrategies::contextMenuItemTagMediaPause):
        (WebPlatformStrategies::contextMenuItemTagMediaMute):
        (WebPlatformStrategies::contextMenuItemTagMediaUnMute):

2010-09-16  Eric Uhrhane  <ericu@chromium.org>

        Reviewed by Jian Li.

        Unify FILE_SYSTEM and FILE_WRITER enables under the name FILE_SYSTEM.
        https://bugs.webkit.org/show_bug.cgi?id=45798

        * Configurations/FeatureDefines.xcconfig:

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

        Reviewed by Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=44715
        maps.google.com flips upside down when zooming map using trackpad in WebKit2 on Mac

        Move geometry flipping to platform-specific code.

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

2010-09-14  Jia Pu  <jpu@apple.com>

        Reviewed by Dan Bernstein.

        Only intercept ESC key press when autocorrection UI is visible.
        https://bugs.webkit.org/show_bug.cgi?id=45071

        * WebCoreSupport/WebEditorClient.h: Added declaration of isShowingCorrectionPanel(),
          which provides an inteface to query whether autocorrection panel is shown.

        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::WebEditorClient): Defined a constant, InvalidCorrectionPanelTag,
          for invalid correction panel tag. Replaced -1 with this constant.
        (WebEditorClient::dismissCorrectionPanel): Ditto
        (WebEditorClient::isShowingCorrectionPanel): Query whether autocorrection panel is shown.

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

        Reviewed by John Sullivan.

        Part of <rdar://problem/8420003>.  Make it possible to override the version number used in linked-in-or-after checks.

        * Misc/WebKitVersionChecks.h: Remove two unused functions from the header and add a method to set the overriden version.
        * Misc/WebKitVersionChecks.m:
        (WebKitLinkedOnOrAfter):
        (setWebKitLinkTimeVersion): Set the overridden version.
        (WebKitLinkTimeVersion): Return the overridden version if set, otherwise do the old thing.
        * WebView/WebPreferences.mm:
        (+[WebPreferences setWebKitLinkTimeVersion:]): Call through to set the overridden version.
        * WebView/WebPreferencesPrivate.h:

2010-09-14  Eric Seidel  <eric@webkit.org>

        Unreviewed, reverting changes r67451 and r67451.
        Broke lots of builders.

        Only intercept ESC key press when autocorrection UI is visible.
        https://bugs.webkit.org/show_bug.cgi?id=45071

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

2010-09-14  Jia Pu  <jpu@apple.com>

        Reviewed by Dan Bernstein.

        Only intercept ESC key press when autocorrection UI is visible.
        https://bugs.webkit.org/show_bug.cgi?id=45071

        * WebCoreSupport/WebEditorClient.h: Added declaration of isShowingCorrectionPanel(),
          which provides an inteface to query whether autocorrection panel is shown.

        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::WebEditorClient): Defined a constant, InvalidCorrectionPanelTag,
          for invalid correction panel tag. Replaced -1 with this constant.
        (WebEditorClient::dismissCorrectionPanel): Ditto
        (WebEditorClient::isShowingCorrectionPanel): Query whether autocorrection panel is shown.

2010-09-13  Darin Adler  <darin@apple.com>

        Reviewed by Adam Barth.

        Preparation for eliminating deprecatedParseURL
        https://bugs.webkit.org/show_bug.cgi?id=45695

        * DOM/WebDOMOperations.mm:
        (-[DOMDocument webFrame]): Get rid of unneeded local variable.
        (-[DOMDocument URLWithAttributeString:]): Remove unhelpful comment.

2010-09-13  Enrica Casucci  <enrica@apple.com>

        Reviewed by Sam Weinig.

        Paste should be implemented in WebCore like Copy and Cut for Mac also.
        https://bugs.webkit.org/show_bug.cgi?id=45494
        <rdar://problem/7660537>

        On the Mac platform, the implementation of the paste operation is all done
        at the WebKit level. In order to support it on WebKit2 it is necessary to
        refactor the code and move this functionality at the level of WebCore like
        we already have on Windows.
        The original code relies on some in AppKit functions that call back into
        WebKit causing problems in WebKit2. All this functionality has been moved
        at the level of the editor client where it can be dealt with appropriately.

        * WebCoreSupport/WebEditorClient.h:
        * WebCoreSupport/WebEditorClient.mm:
        (excludedElementsForAttributedStringConversion):
        (WebEditorClient::documentFragmentFromAttributedString): Added.
        (WebEditorClient::setInsertionPasteboard):
        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::canShowMIMETypeAsHTML): Re-implemented at the level
        of the editor client.
        * WebView/WebHTMLView.mm: Removed paste method.

2010-09-13  John Sullivan  <sullivan@apple.com>

        Reviewed by Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=45677
        [WebView canMarkAllTextMatches] can crash if called after [WebView close]
        
        <rdar://problem/8404890>

        * WebView/WebView.mm:
        (-[WebView canMarkAllTextMatches]):
        Return NO immediately if the webview has already been closed. This was an overlooked
        case from the fix for 45175.

2010-09-10  MORITA Hajime  <morrita@google.com>

        Reviewed by Tony Chang.

        [Chromium] Implement textInputController.hasSpellingMarker() for Chromium
        https://bugs.webkit.org/show_bug.cgi?id=45441

        Moved the actual logic of hasSpellingMarker into WebCore to share
        it with other ports.

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

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

        Reviewed by Sam Weinig.

        Make SecurityOrigin::canDisplay an instance function
        https://bugs.webkit.org/show_bug.cgi?id=45219

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

2010-09-10  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Remove unnecessary constraint in WebCore of choosing either text zoom or full page zoom.
        Precursor to <rdar://problem/7660657>
        https://bugs.webkit.org/show_bug.cgi?id=45522

        * WebView/WebView.mm:
        (-[WebView _preferencesChangedNotification:]):
        (-[WebView _setZoomMultiplier:isTextOnly:]):
        (-[WebView _realZoomMultiplierIsTextOnly]):
        * WebView/WebViewData.h:
        * WebView/WebViewData.mm:
        (-[WebViewPrivate init]):
        Move tracking of text only zoom here from WebCore.

2010-09-10  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Alexey Proskuryakov.

        Refactor JavaScriptCore memory statistics so that WebKit doesn't need to know about the JIT and
        other implementation details of JavaScriptCore.  Necessary to fix PPC build.
        
        https://bugs.webkit.org/show_bug.cgi?id=45528

        * Misc/WebCoreStatistics.mm:
        (+[WebCoreStatistics memoryStatistics]):

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

        Reviewed by Sam Weinig.

        Move some Dashboard stuff from WebCore to WebKit along with a bit more FrameMac cleanup
        https://bugs.webkit.org/show_bug.cgi?id=45582

        * MigrateHeaders.make: Removed WebDashboardRegion.h from the set of header to copy.

        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::dashboardRegionsChanged): Changed this to call
        -[WebView _dashboardRegions] so we don't have two copies of that code.

        * WebView/WebDashboardRegion.h: Copied from WebCore/page/mac/WebDashboardRegion.h.
        * WebView/WebDashboardRegion.mm: Copied from WebCore/page/mac/WebDashboardRegion.m.

        * WebView/WebView.mm:
        (-[WebView _dashboardRegions]): Moved the code from Frame::dashboardRegions here.

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

        Reviewed by Darin Fisher.

        Move code from WebKit-layer to DocumentLoader
        https://bugs.webkit.org/show_bug.cgi?id=45569

        This code is the most confused, but now should be a bit cleaner.
        There's still a magical fake-setting for creating renderers that needs
        to be cleaned up, but we can do that in a separate patch.

        * WebView/WebFrame.mm:
        (-[WebFrame _commitData:]):
        * WebView/WebFrameInternal.h:
        * WebView/WebHTMLRepresentation.mm:
        (-[WebHTMLRepresentation receivedData:withDataSource:]):
        (-[WebHTMLRepresentation finishedLoadingWithDataSource:]):

2010-09-09  Darin Adler  <darin@apple.com>

        Reviewed by Adam Barth.

        Move functions from Frame to SelectionController as planned
        https://bugs.webkit.org/show_bug.cgi?id=45508

        * WebView/WebFrame.mm:
        (-[WebFrame _selectionGranularity]):
        (-[WebFrame _insertParagraphSeparatorInQuotedContent]):
        (-[WebFrame _typingStyle]):
        (-[WebFrame _replaceSelectionWithFragment:selectReplacement:smartReplace:matchStyle:]):
        * WebView/WebHTMLRepresentation.mm:
        (-[WebHTMLRepresentation currentForm]):
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView jumpToSelection:]):
        (-[WebHTMLView centerSelectionInVisibleArea:]):
        (-[WebHTMLView _canSmartCopyOrDelete]):
        (-[WebHTMLView _lookUpInDictionaryFromMenu:]):
        (-[WebHTMLView selectionRect]):
        (-[WebHTMLView selectionTextRects]):
        (-[WebHTMLView selectionImageRect]):
        * WebView/WebView.mm:
        (-[WebView setEditable:]):
        Call functions on selection().

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

        Reviewed by Eric Seidel.

        Main resource bytes shouldn't bounce through FrameLoader
        https://bugs.webkit.org/show_bug.cgi?id=45496

        Now return the bytes to the DocumentLoader.

        Previously, we were checking the document for null.  However, Frame can
        never have a null document, so this check is no longer needed.

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

2010-09-09  John Therrell  <jtherrell@apple.com>

        Reviewed by Alexey Proskuryakov.

        Added statistics sampling and reporting for JavaScriptCore's RegisterFile and ExecutableAllocator classes
        https://bugs.webkit.org/show_bug.cgi?id=45134

        Added ability to enable new JavaScriptCore statistics sampling and reporting for RegisterFile 
        and ExecutableAllocator classes. Added reporting of JavaScriptCore's stack committed memory 
        and JIT code committed memory statistics to WebCoreStatistics memoryStatistics.

        * Misc/WebCoreStatistics.mm:
        (+[WebCoreStatistics memoryStatistics]):
        Added statistics reporting for JSC RegisterFile and ExecutableAllocator.

2010-09-09  Jer Noble  <jer.noble@apple.com>

        Reviewed by Mark Rowe.

        Use of ENABLE macro in WebUIDelegatePrivate.h breaks use from outside WebKit
        <rdar://problem/8412657>

        * WebView/WebUIDelegatePrivate.h: Use ENABLE_FULLSCREEN_API instead of ENABLE(FULLSCREEN_API)

2010-09-08  Darin Adler  <darin@apple.com>

        Reviewed by Adam Barth.

        Move functions from Frame to Editor as planned
        https://bugs.webkit.org/show_bug.cgi?id=45218

        * WebView/WebFrame.mm:
        (-[WebFrame _selectedString]):
        (-[WebFrame _firstRectForDOMRange:]):
        (-[WebFrame _markDOMRange]):
        (-[WebFrame _setTypingStyle:withUndoAction:]):
        * WebView/WebHTMLRepresentation.mm:
        (-[WebHTMLRepresentation finishedLoadingWithDataSource:]):
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _selectionStartFontAttributesAsRTF]):
        (-[WebHTMLView toggleBaseWritingDirection:]):
        (-[WebHTMLView searchFor:direction:caseSensitive:wrap:startInSelection:]):
        (-[WebHTMLView countMatchesForText:caseSensitive:limit:markMatches:]):
        (-[WebHTMLView setMarkedTextMatchesAreHighlighted:]):
        (-[WebHTMLView markedTextMatchesAreHighlighted]):
        * WebView/WebView.mm:
        (-[WebView setEditable:]):
        Changed call sites to use editor().

2010-09-08  MORITA Hajime  <morrita@google.com>

        Reviewed by Ojan Vafai.

        spellcheck does not check pasted text
        https://bugs.webkit.org/show_bug.cgi?id=40092

        Implemented async spell-check APIs on WebEditorClient.
        The implementations are using [NSSpellChecker requestCheckingOfString]
        which is available only on Mac OS 10.6 or later.
        
        Note that [NSSpellChecker requestCheckingOfString] could invoke
        the callback block on on of their worker thread, so we need to
        return the result to the main thread where WebCore is running.
        For that purpose, we made WebEditorSpellCheckResponder class.
        
        Test: editing/spelling/spellcheck-pasted-text-001.html
        
        * WebCoreSupport/WebEditorClient.h:
        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::isAsynchronousSpellCheckingEnabled): Added.
        (-[WebEditorSpellCheckResponder initWithSender:WebCore::sequence:results:]): Added.
        (-[WebEditorSpellCheckResponder perform]): Added.
        (WebEditorClient::requestCheckingOfString): Added.
        * WebView/WebFramePrivate.h:

2010-09-08  MORITA Hajime  <morrita@google.com>

        Reviewed by Tony Chang.

        spelling underline gets lost on backspace
        https://bugs.webkit.org/show_bug.cgi?id=41423

        Switched to use a anchorNode of the selection instead of a focused
        node for finer control of node selection in spellingNode():
        With the focused node, we cannot select other nodes but the first
        child of that node. In some case, we need to inspect these.

        The API is only for LayoutTests, and the change is compatible for
        existing test cases.
        
        * WebView/WebFrame.mm:
        (spellingNode):

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

        Rubber-stamped by Eric Seidel.

        Rename DocLoader to CachedResourceLoader because that's what it does.

        * WebView/WebFrame.mm:

2010-09-07  Anders Carlsson  <andersca@apple.com>

        Reviewed by Oliver Hunt.

        Fix clang++ build.

        * Misc/WebLocalizableStrings.h:
        Fix a struct/tag mismatch.

        * WebView/WebDeviceOrientationProviderMock.mm:
        (-[WebDeviceOrientationProviderMock init]):
        Remove stray semicolon.

        * WebView/WebViewData.h:
        Remove unused class forward declaration.

2010-09-07  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/8381749> -Wcast-align warning emitted when building with clang

        Remove the -Wcast-align-warning since it isn't really useful, and clang is more aggressive about warning than gcc.
        
        * Configurations/Base.xcconfig:

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

        Reviewed by Darin Adler.

        Rename SecurityOrigin::canLoad to canDisplay
        https://bugs.webkit.org/show_bug.cgi?id=45214

        Propagate name change.

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

2010-09-03  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        Reviewed by Darin Adler.

        Add NetworkingContext to avoid layer violations
        https://bugs.webkit.org/show_bug.cgi?id=42292

        Add Mac's specific implementation of FrameNetworkingContext.

        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        * WebCoreSupport/WebFrameNetworkingContext.mm:
        (WebFrameNetworkingContext::needsSiteSpecificQuirks):
        (WebFrameNetworkingContext::localFileContentSniffingEnabled):
        (WebFrameNetworkingContext::scheduledRunLoopPairs):
        (WebFrameNetworkingContext::blockedError):

2010-09-03  John Sullivan  <sullivan@apple.com>

        Reviewed by Dan Bernstein.
        
        https://bugs.webkit.org/show_bug.cgi?id=45175
        [WebView unmarkAllTextMatches] will crash if the webview is already closed

        Made this and related methods robust against being called when the WebView is closed.

        * WebView/WebView.mm:
        (-[WebView markAllMatchesForText:caseSensitive:highlight:limit:]):
        Bail out if the WebView is closed.
        (-[WebView countMatchesForText:caseSensitive:highlight:limit:markMatches:]):
        Ditto.
        (-[WebView unmarkAllTextMatches]):
        Ditto.
        (-[WebView rectsForTextMatches]):
        Ditto.

2010-09-03  Hironori Bono  <hbono@chromium.org>

        Reviewed by Kent Tamura.

        Adds textInputController.hasSpellingMarker() to avoid using pixel tests for spellchecking tests
        and implements it for Mac.
        https://bugs.webkit.org/show_bug.cgi?id=41832

        * WebView/WebFrame.mm: Implemented [WebFrame hasSpellingMarker:length:].
        (spellingNode):
        (-[WebFrame hasSpellingMarker:length:]):
        * WebView/WebFramePrivate.h: Added [WebFrame hasSpellingMarker:length:] so TextInputController can use it.

2010-09-02  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        REGRESSION: Crash occurs at objc_msgSend when closing a window that is displaying the web inspector
        https://bugs.webkit.org/show_bug.cgi?id=44230

        * WebCoreSupport/WebInspectorClient.h:
        * WebCoreSupport/WebInspectorClient.mm:
        (WebInspectorFrontendClient::closeWindow):
        (WebInspectorFrontendClient::disconnectFromBackend):
        (-[WebInspectorWindowController windowShouldClose:]):
        (-[WebInspectorWindowController destroyInspectorView:]):

2010-09-02  Steve Block  <steveblock@google.com>

        Reviewed by Adam Barth.

        Hook up LayoutTestController.setMockDeviceOrientation() on Mac.
        https://bugs.webkit.org/show_bug.cgi?id=43181

        This patch hooks up the mock device orientation client on Mac for use
        in DumpRenderTree.

        The patch adds a new WebDeviceOrientationClient for Mac. This client acts
        as a proxy to either a real or mock device orientation provider, both of
        which implement a new WebDeviceOrientationProvider interface.

        The provider is created by the embedder and passed to the WebView, from
        where WebDeviceOrientationClient can access it.

        The mock provider, WebDeviceOrientationProviderMock, is a wrapper around
        the existing WebCore mock.

        * WebCoreSupport/WebDeviceOrientationClient.h: Added.
        * WebCoreSupport/WebDeviceOrientationClient.mm: Added.
        (WebDeviceOrientationClient::WebDeviceOrientationClient):
        (WebDeviceOrientationClient::setController):
        (WebDeviceOrientationClient::startUpdating):
        (WebDeviceOrientationClient::stopUpdating):
        (WebDeviceOrientationClient::lastOrientation):
        * WebKit.exp:
        * WebView/WebDeviceOrientation.h: Added.
        * WebView/WebDeviceOrientation.mm: Added.
        (-[WebDeviceOrientation initWithCoreDeviceOrientation:WebCore::]):
        (core):
        (-[WebDeviceOrientation initWithCanProvideAlpha:alpha:canProvideBeta:beta:canProvideGamma:gamma:]):
        (-[WebDeviceOrientation dealloc]):
        * WebView/WebDeviceOrientationInternal.h: Added.
        * WebView/WebDeviceOrientationProvider.h: Added.
        * WebView/WebDeviceOrientationProviderMock.h: Added.
        * WebView/WebDeviceOrientationProviderMock.mm: Added.
        (-[WebDeviceOrientationProviderMockInternal setOrientation:]):
        (-[WebDeviceOrientationProviderMockInternal setController:]):
        (-[WebDeviceOrientationProviderMockInternal startUpdating]):
        (-[WebDeviceOrientationProviderMockInternal stopUpdating]):
        (-[WebDeviceOrientationProviderMockInternal lastOrientation]):
        (-[WebDeviceOrientationProviderMock init]):
        (-[WebDeviceOrientationProviderMock dealloc]):
        (-[WebDeviceOrientationProviderMock setOrientation:]):
        (-[WebDeviceOrientationProviderMock setController:]):
        (-[WebDeviceOrientationProviderMock startUpdating]):
        (-[WebDeviceOrientationProviderMock stopUpdating]):
        (-[WebDeviceOrientationProviderMock lastOrientation]):
        * WebView/WebDeviceOrientationProviderMockInternal.h: Added.
        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:usesDocumentViews:]):
        (-[WebView _setDeviceOrientationProvider:]):
        (-[WebView _deviceOrientationProvider]):
        * WebView/WebViewData.h:
        * WebView/WebViewPrivate.h:

2010-09-01  Jia Pu  <jpu@apple.com>

        Reviewed by Dan Bernstein.

        Add support for autocorrection UI on Mac OS X.
        https://bugs.webkit.org/show_bug.cgi?id=44958
        <rdar://problem/7326847>

        See detailed high level description in WebCore/ChangeLog.

        * WebCoreSupport/WebEditorClient.h: Added new member methods declared in
          EditorClient. Added m_correctionPanelTag to store the ID of current autocorrection UI object.

        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::WebEditorClient): Initialize m_correctionPanelTag.
        (WebEditorClient::~WebEditorClient): Make sure the autocorrection UI is
          dismissed before destroying the object.
        (WebEditorClient::respondToChangedSelection): Dismiss autocorrection UI whenever the selection changes.
        (WebEditorClient::showCorrectionPanel): Show autocorrection UI.
        (WebEditorClient::dismissCorrectionPanel): Dismiss autocorrection UI.

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

        Reviewed by Adam Roben.

        <rdar://problem/8374711> WebKit needs to compile without access to QuickDraw private headers.

        * Carbon/HIViewAdapter.m:
        * Carbon/HIWebView.mm:
        * Misc/QuickDrawCompatibility.h: Added.
        * Plugins/WebNetscapePluginView.mm:

2010-08-31  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=44863, disentangle style recalc from layout, so that
        the former can occur in more places without having to do the latter.

        Eliminate Mac-specific code for style re-application and recursive layout/style updating in 
        favor of the cross-platform code that all the other ports use.

        * Carbon/HIWebView.mm:
        (Draw):
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::forceLayout):
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _propagateDirtyRectsToOpaqueAncestors]):
        (-[WebHTMLView viewWillDraw]):
        (-[WebHTMLView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:]):
        (-[WebHTMLView _recursiveDisplayAllDirtyWithLockFocus:visRect:]):
        (-[WebHTMLView _recursive:displayRectIgnoringOpacity:inContext:topView:]):
        (-[WebHTMLView reapplyStyles]):
        (-[WebHTMLView layoutToMinimumPageWidth:height:maximumPageWidth:adjustingViewSize:]):
        (-[WebHTMLView setNeedsToApplyStyles:]):
        (-[WebHTMLView _setPrinting:minimumPageWidth:height:maximumPageWidth:adjustViewSize:paginateScreenContent:]):
        (-[WebHTMLView _layoutIfNeeded]):
        (-[WebHTMLView _web_updateLayoutAndStyleIfNeededRecursive]):
        * WebView/WebHTMLViewInternal.h:
        * WebView/WebView.mm:
        (-[WebView _viewWillDrawInternal]):

2010-08-31  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Add ability to count text matches without marking
        https://bugs.webkit.org/show_bug.cgi?id=43996

        Safari needs to be able to count text matches without triggering lots of repainting.
        Rename markAllMatchesForText: to countMatchesForText: and add a markMatches:
        parameter.  For backwards compatibility markAllMatchesForText: calls
        countMatchesForText: and passes YES for markMatches:.

        * WebView/WebDocumentInternal.h:
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView markAllMatchesForText:caseSensitive:limit:]):
        (-[WebHTMLView countMatchesForText:caseSensitive:limit:markMatches:]):
        * WebView/WebPDFView.mm:
        (-[WebPDFView markAllMatchesForText:caseSensitive:limit:]):
        (-[WebPDFView countMatchesForText:caseSensitive:limit:markMatches:]):
        * WebView/WebView.mm:
        (-[WebView markAllMatchesForText:caseSensitive:highlight:limit:]):
        (-[WebView countMatchesForText:caseSensitive:highlight:limit:markMatches:]):
        * WebView/WebViewPrivate.h:

2010-08-31  Darin Adler  <darin@apple.com>

        Reviewed by Anders Carlsson.

        * WebInspector/WebInspectorFrontend.mm:
        (-[WebInspectorFrontend initWithFrontendClient:]): Remove a stray semicolon.

2010-08-30  Mark Rowe  <mrowe@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/8369736> WebKit build fails.

        Temporarily add some extra includes in order to get things building again until <rdar://problem/8374711> is addressed.

        * Carbon/HIViewAdapter.m:
        * Carbon/HIWebView.mm:
        * Plugins/WebNetscapePluginView.mm:

2010-08-30  Andy Estes  <aestes@apple.com>

        Reviewed by Darin Adler.

        REGRESSION (r66156): Sites using AppleConnect for authentication fail to log in.
        https://bugs.webkit.org/show_bug.cgi?id=44865

        After http://trac.webkit.org/changeset/66156, sites using the AppleConnect plug-in
        for authentication fail to log in. This is due to a bug in AppleConnect that r66156
        exposed, but since this will have a significant impact on users of WebKit nightly
        builds, a plugin-specific hack should be added while the underlying issue is being
        addressed.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::createPlugin): Convert plug-in parameter names to lowercase
        if the plugin is of type 'application/x-snkp'.

2010-08-27  Jer Noble  <jer.noble@apple.com>

        Reviewed by Eric Carlson.

        text/plain non-video files cause <video> to hang (while reading them?)
        https://bugs.webkit.org/show_bug.cgi?id=44212
        
        Add the new WebKitSystemInterface function WKQTMovieDisableComponent to
        the initialization routine.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Initialize WKQTMovieDisableComponent.

2010-08-30  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r66198.
        http://trac.webkit.org/changeset/66198
        https://bugs.webkit.org/show_bug.cgi?id=44856

        It made tests crash on Qt bot (Requested by Ossy_ on #webkit).

        * WebCoreSupport/WebInspectorClient.h:
        * WebCoreSupport/WebInspectorClient.mm:
        (WebInspectorFrontendClient::closeWindow):
        (-[WebInspectorWindowController windowShouldClose:]):
        (-[WebInspectorWindowController destroyInspectorView]):

2010-08-28  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Make an internal method used by Apple Mail into SPI
        https://bugs.webkit.org/show_bug.cgi?id=44832
        rdar://problem/5748951

        * WebView/WebFrame.mm:
        (-[WebFrame _smartInsertForString:replacingRange:beforeString:afterString:]): Moved this method
        from the internal section to the private section.
        * WebView/WebFrameInternal.h: Moved the method declaration out of here.
        * WebView/WebFramePrivate.h: Moved the method declaration in here.

2010-08-27  Jer Noble  <jer.noble@apple.com>

        Reviewed by Eric Carlson.

        Add JavaScript API to allow a page to go fullscreen.
        rdar://problem/6867795

        Added chrome client overrides which support entering and exiting full screen.  A new preference has
        been added (setFullScreenEnabled:) to control at runtime whether full screen support is enabled 
        (defaults to disabled).  Added a new WebKitFullScreenListener callback object which notifies WebCore
        when the chrome has started/finished its full screen animation.

        * Configurations/FeatureDefines.xcconfig:
        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::supportsFullscreenForElement):
        (WebChromeClient::enterFullscreenForElement):
        (WebChromeClient::exitFullscreenForElement):
        (-[WebKitFullScreenListener initWithElement:]):
        (-[WebKitFullScreenListener webkitWillEnterFullScreen]):
        (-[WebKitFullScreenListener webkitDidEnterFullScreen]):
        (-[WebKitFullScreenListener webkitWillExitFullScreen]):
        (-[WebKitFullScreenListener webkitDidExitFullScreen]):
        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        (-[WebPreferences setFullScreenEnabled:]):
        (-[WebPreferences fullScreenEnabled]):
        * WebView/WebUIDelegatePrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChangedNotification:]):

2010-08-27  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=44788, implement HTML5-compliant doctype switching.

        Rename the various modes to match the HTML5 specification:
            ParseMode -> CompatibilityMode
            CompatMode -> QuirksMode
            AlmostStrictMode -> LimitedQuirksMode
            StrictMode -> NoQuirksMode
            
        Remove the htmlHacks() accessor from RenderStyle and make rendering code just go to the document
        instead.  This makes switching modes avoid forcing all RenderStyles to detect as changed.
        
        Clean up user stylesheets to minimize style recalculation when the mode is switched.
        
        Fix bugs with the propagation of correct modes in the HTML5 parser.  Make sure the
        dummy document created for fragment parsing properly inherits the real document's CompatibilityMode.
        Make sure the tree builder properly changes the insertion mode to "BeforeHTML" after handling
        a doctype token.
        
        determineParseMode -> setCompatibilityModeFromDoctype, and it now implements the HTML5 algorithm
        precisely.

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

2010-08-27  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        REGRESSION: Crash occurs at objc_msgSend when closing a window that is displaying the web inspector
        https://bugs.webkit.org/show_bug.cgi?id=44230

        * WebCoreSupport/WebInspectorClient.h:
        * WebCoreSupport/WebInspectorClient.mm:
        (WebInspectorFrontendClient::closeWindow):
        (WebInspectorFrontendClient::disconnectFromBackend):
        (-[WebInspectorWindowController windowShouldClose:]):
        (-[WebInspectorWindowController destroyInspectorView:]):

2010-08-26  Yury Semikhatsky  <yurys@chromium.org>

        Unreviewed. Revert r66103 since Qt tests are failing.

        * WebCoreSupport/WebInspectorClient.h:
        * WebCoreSupport/WebInspectorClient.mm:
        (WebInspectorFrontendClient::closeWindow):
        (-[WebInspectorWindowController windowShouldClose:]):
        (-[WebInspectorWindowController destroyInspectorView]):

2010-08-26  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        REGRESSION: Crash occurs at objc_msgSend when closing a window that is displaying the web inspector
        https://bugs.webkit.org/show_bug.cgi?id=44230

        * WebCoreSupport/WebInspectorClient.h:
        * WebCoreSupport/WebInspectorClient.mm:
        (WebInspectorFrontendClient::closeWindow):
        (WebInspectorFrontendClient::disconnectFromBackend):
        (-[WebInspectorWindowController windowShouldClose:]):
        (-[WebInspectorWindowController destroyInspectorView:]):

2010-08-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Remove HTML5 parser testing infrastructure now that we don't need it
        https://bugs.webkit.org/show_bug.cgi?id=44581

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

2010-08-24  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver Hunt.

        Paste event fires twice for mac WebKit
        <rdar://problem/8094611>
        https://bugs.webkit.org/show_bug.cgi?id=44535

        The mac implementation of paste in WebKit was accidentally calling 
        Editor::tryDHTMLPaste twice, once in -[WebHTMLView paste:] and once
        in Editor::pasteAsPlainText (which is called -[WebHTMLView paste:]).
        Use the new pasteAsPlainTextBypassingDHTML function to bypass the
        second call.

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

2010-08-24  Daniel Cheng  <dcheng@chromium.org>

        Reviewed by Eric Seidel.

        [chromium] Generate drag images for HTML elements and selections.
        https://bugs.webkit.org/show_bug.cgi?id=43449

        Fix up calls to Frame::nodeImage, which has a new signature.

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

2010-08-23  Mike Thole  <mthole@apple.com>

        Reviewed by Dan Bernstein.

        WebPDFView should remove itself as the delegate of its PDFView before being dealloced
        https://bugs.webkit.org/show_bug.cgi?id=44441

        * WebView/WebPDFView.mm:
        (-[WebPDFView dealloc]): Set the PDFView's delegate to nil.

2010-08-22  Daniel Bates  <dbates@rim.com>

        Reviewed by Eric Seidel.

        Encapsulate document marker management into DocumentMarkerController
        https://bugs.webkit.org/show_bug.cgi?id=44383

        Modify call sites in the Apple Mac port to use DocumentMarkerController.

        No functionality was changed, so no new tests.

        * WebView/WebFrame.mm:
        (-[WebFrame _unmarkAllBadGrammar]):
        (-[WebFrame _unmarkAllMisspellings]):
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView unmarkAllTextMatches]):
        (-[WebHTMLView rectsForTextMatches]):

2010-08-19  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/44285> Fix compilation with NETSCAPE_PLUGIN_API disabled

        Reviewed by Joseph Pecoraro.

        * Plugins/Hosted/HostedNetscapePluginStream.mm: Changed
        USE(PLUGIN_HOST_PROCESS) to
        USE(PLUGIN_HOST_PROCESS) && ENABLE(NETSCAPE_PLUGIN_API).
        * Plugins/Hosted/NetscapePluginHostManager.mm: Ditto.
        * Plugins/Hosted/NetscapePluginHostProxy.mm: Ditto.
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm: Ditto.
        * Plugins/Hosted/ProxyInstance.mm: Ditto.
        * Plugins/Hosted/WebHostedNetscapePluginView.mm: Ditto.
        * WebCoreSupport/WebChromeClient.mm: Ditto.
        (WebChromeClient::createWindow):
        * WebCoreSupport/WebFrameLoaderClient.mm: Ditto.
        (WebFrameLoaderClient::dispatchCreatePage):
        * WebView/WebHTMLView.mm:
        (needsCursorRectsSupportAtPoint): Added #if
        ENABLE(NETSCAPE_PLUGIN_API) and #endif macros as needed.
        * WebView/WebView.mm:
        (+[WebView _isNodeHaltedPlugin:]): Ditto.
        (+[WebView _hasPluginForNodeBeenHalted:]): Ditto.
        (+[WebView _restartHaltedPluginForNode:]): Ditto.

2010-08-17  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        Reviewed by Darin Adler.

        Add NetworkingContext to avoid layer violations
        https://bugs.webkit.org/show_bug.cgi?id=42292

        Preparation: Just add the files to the build system.

        * WebCoreSupport/WebFrameNetworkingContext.h: Added.
        Placeholder with tentative code that might be changed when landing
        the rest of it.
        * WebCoreSupport/WebFrameNetworkingContext.mm: Added.
        Empty placeholder for now.

2010-08-17  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        Navigating back/forward during a modal dialog causes a crash when the modal dialog is dismissed.
        <rdar://problem/8313579> and https://bugs.webkit.org/show_bug.cgi?id=44131

        * WebView/WebView.mm:
        (-[WebView canGoBack]): Return false if loads are deferred.
        (-[WebView canGoForward]): Ditto.

2010-08-14  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Pavel Feldman.

        Web Inspector: -[WebInspector attach] and detach should work
        https://bugs.webkit.org/show_bug.cgi?id=43924

        For actions that relate only to the Web Inspector's Frontend
        window (actions on the InspectorFrontendClient) the new Obj-C
        wrapper class WebInspectorFrontend can be used. For now, this
        is just attach and detach.

        * WebCoreSupport/WebInspectorClient.mm:
        (WebInspectorClient::openInspectorFrontend): setup and attach the WebInspectorFrontend to the WebInspector.
        * WebInspector/WebInspector.h:
        * WebInspector/WebInspector.mm:
        (-[WebInspector dealloc]):
        (-[WebInspector attach:]): delegate to the frontend.
        (-[WebInspector detach:]): delegate to the frontend.
        (-[WebInspector setFrontend:]):
        * WebInspector/WebInspectorFrontend.h: Added.
        * WebInspector/WebInspectorFrontend.mm: Added.
        (-[WebInspectorFrontend initWithFrontendClient:]):
        (-[WebInspectorFrontend attach]):
        (-[WebInspectorFrontend detach]):
        * WebInspector/WebInspectorPrivate.h:

2010-08-13  Gavin Barraclough  <barraclough@apple.com>

        Rubber stamped by Sam Weinig.
        Switch String::/UString::ascii() to return a CString.

        * Plugins/Hosted/ProxyInstance.mm:
        (WebKit::ProxyInstance::methodsNamed):
        (WebKit::ProxyInstance::fieldNamed):

2010-08-13  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig

        Unify UString::UTF8String() & String::utf8() methods,
        remove UString::cost() & make atArrayIndex a free function.

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

2010-08-12  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r65295.
        http://trac.webkit.org/changeset/65295
        https://bugs.webkit.org/show_bug.cgi?id=43950

        It broke 4 sputnik tests (Requested by Ossy on #webkit).

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

2010-08-12  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig

        Unify UString::UTF8String() & String::utf8() methods,
        remove UString::cost() & make atArrayIndex a free function.

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

2010-08-12  Jeremy Orlow  <jorlow@chromium.org>

        Revert for now
        https://bugs.webkit.org/show_bug.cgi?id=43794 

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

2010-08-10  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Adam Barth.

        Some settings are linked to the PageGroup not the Page.  Create a new class for those.
        https://bugs.webkit.org/show_bug.cgi?id=43794

        Change WebView to use the new GroupSettings class rather than Settings for the
        settings that moved.  This is sub-optimal since the settings aren't really
        per-view, but we can't really change the API at this point.

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

2010-08-11  Gavin Barraclough  <barraclough@apple.com>

        Rubber stamps by Darin Adler & Sam Weinig.

        Bug 43867 - Some UString cleanup

        Change JSC::UString data(), size(), and from(), to characters(), length(), and number() to match WTF::String.
        Move string concatenation methods to a new header to simplify down UString.h.  Remove is8Bit().

        * WebView/WebScriptDebugger.mm:
        (toNSString):

2010-08-10  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=43806, add ability to paginate screen content.
        
        Add SPI for entering and exiting screen pagination mode.  This is similar to printing mode but it can be done for on-screen
        content.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _web_setPrintingModeRecursive]):
        (-[WebHTMLView _web_clearPrintingModeRecursive]):
        (-[WebHTMLView _web_setPrintingModeRecursiveAndAdjustViewSize]):
        (-[WebHTMLView _beginPrintModeWithPageWidth:height:shrinkToFit:]):
        (-[WebHTMLView _endPrintMode]):
        (-[WebHTMLView _isInScreenPaginationMode]):
        (-[WebHTMLView _beginScreenPaginationModeWithPageSize:shrinkToFit:]):
        (-[WebHTMLView _endScreenPaginationMode]):
        (-[WebHTMLView reapplyStyles]):
        (-[WebHTMLView _setPrinting:minimumPageWidth:height:maximumPageWidth:adjustViewSize:paginateScreenContent:]):
        (-[WebHTMLView adjustPageHeightNew:top:bottom:limit:]):
        (-[WebHTMLView setPageWidthForPrinting:]):
        * WebView/WebHTMLViewPrivate.h:

2010-08-10  Gavin Barraclough  <barraclough@apple.com>

        Build fix (update more includes)

        * Plugins/Hosted/NetscapePluginHostManager.h:

2010-08-10  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Oliver Hunt.

        Add suspendAnimations/resumeAnimation API to DRT
        https://bugs.webkit.org/show_bug.cgi?id=43733
        
        Mac specific API. Plumbs suspendAnimations/resumeAnimations down to WebCore.

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

2010-08-10  Gavin Barraclough  <barraclough@apple.com>

        Rubber stamped by Sam Weinig

        Bug 43817 - Remove UString::Rep
        UString::Rep has for a long time been replaced by UStringImpl (Rep
        remaining as a typedef).  UStringImpl has since been removed too
        (unified with StringImpl). Remove Rep, rename rep() to impl() and
        m_rep to m_impl.  Also add impl() method to Identifier, and rename
        its UString member from _ustring to m_string.

        * Plugins/Hosted/ProxyInstance.mm:
        (WebKit::ProxyInstance::methodsNamed):
        (WebKit::ProxyInstance::fieldNamed):

2010-08-06  Gavin Barraclough  <barraclough@apple.com>

        Rubber stamped by Sam Weinig

        Bug 43594 - Add string forwards to Forward.h
        This allows us to remove forward declarations for these classes from
        WebCore/WebKit (a step in moving these class from WebCore:: to WTF::).

        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        * Plugins/WebBaseNetscapePluginView.h:
        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebIconDatabaseClient.h:
        * WebCoreSupport/WebPluginHalterClient.h:
        * WebView/WebViewInternal.h:

2010-08-04  MORITA Hajime  <morrita@google.com>

        Reviewed by Tony Chang.

        Pasting should fire textInput event.
        https://bugs.webkit.org/show_bug.cgi?id=42958

        On paste, invoke Editor instead of direct command invocation,
        which allows dispatching events before actual paste.

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

2010-08-06  Yongjun Zhang  <yongjun_zhang@apple.com>

        Reviewed by Eric Seidel.

        add "const" to WebChromeClient::webView().
        https://bugs.webkit.org/show_bug.cgi?id=43631

        Change WebChromeClient::webView() to be const because ChromeClient::didReceiveViewportArguments
        is const method now, and calling webView() inside port-specific didReceiveViewportArguments
        implementation fails compiling if webView() is not const.

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

2010-08-06  Jessie Berlin  <jberlin@apple.com>

        Roll out http://trac.webkit.org/changeset/64801, which broke the Safari Windows Build.
        Unreviewed.

        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        * Plugins/WebBaseNetscapePluginView.h:
        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebIconDatabaseClient.h:
        * WebCoreSupport/WebPluginHalterClient.h:
        * WebView/WebViewInternal.h:

2010-08-05  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by David Kilzer.

        Remove Invalid Asserts for Application Cache Quotas
        https://bugs.webkit.org/show_bug.cgi?id=43585

        Removed Invalid ASSERTs that would always happen for quotas
        that were not noQuota().

        * WebView/WebPreferences.mm:
        (-[WebPreferences applicationCacheTotalQuota]):
        (-[WebPreferences applicationCacheDefaultOriginQuota]):

2010-08-05  Gavin Barraclough  <barraclough@apple.com>

        Rubber stamped by Sam Weinig

        Bug 43594 - Add string forwards to Forward.h
        This allows us to remove forward declarations for these classes from
        WebCore/WebKit (a step in moving these class from WebCore:: to WTF::).

        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        * Plugins/WebBaseNetscapePluginView.h:
        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebIconDatabaseClient.h:
        * WebCoreSupport/WebPluginHalterClient.h:
        * WebView/WebViewInternal.h:

2010-08-05  Jian Li  <jianli@chromium.org>

        Reviewed by David Levin.

        Unify blob related feature defines to ENABLE(BLOB).
        https://bugs.webkit.org/show_bug.cgi?id=43081

        * Configurations/FeatureDefines.xcconfig:

2010-08-03  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by David Kilzer.

        Limit ApplicationCache Total and Per-Origin Storage Capacity (Quotas)
        https://bugs.webkit.org/show_bug.cgi?id=40627

        Part 6 - LayoutTest and Cleanup

        * WebCoreSupport/WebApplicationCache.h:
        * WebCoreSupport/WebApplicationCache.mm:
        (+[WebApplicationCache setMaximumSize:]): refactor out deleting the application caches.
        (+[WebApplicationCache deleteAllApplicationCaches]): delete application caches.

2010-08-03  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by David Kilzer.

        Limit ApplicationCache Total and Per-Origin Storage Capacity (Quotas)
        https://bugs.webkit.org/show_bug.cgi?id=40627

        Part 5 - Refactor Quota Management in WebSecurityOrigin into Managers

        Per-Origin quotas exist for Databases and Application Caches. Clients
        given a WebSecurityOrigin have the ability to set the quota for any
        per-origin quota type. This puts quota management into an interface
        and WebSecurityOrigin allows access to quota managers for the
        different types of quotas.

        This also deprecates the old methods on WebSecurityOrigin. They are
        left in for now to prevent breaking older clients.

          The WebQuotaManager interface allows querying and modifying a
          per-origin quota. This is implemented for both Databases and
          Application Caches.

        * Misc/WebQuotaManager.h: Added. Interface for quota management (usage, quota, setQuota).
        * Storage/WebDatabaseQuotaManager.h: Added.
        * Storage/WebDatabaseQuotaManager.mm: Added.
        (-[WebDatabaseQuotaManager origin]):
        (-[WebDatabaseQuotaManager usage]):
        (-[WebDatabaseQuotaManager quota]):
        (-[WebDatabaseQuotaManager setQuota:]):
        * Storage/WebDatabaseSecurityOrigin.h: Removed.
        * Storage/WebDatabaseSecurityOrigin.mm: Removed.
        * WebCoreSupport/WebApplicationCacheQuotaManager.h: Added.
        * WebCoreSupport/WebApplicationCacheQuotaManager.mm: Added.
        (-[WebApplicationCacheQuotaManager origin]):
        (-[WebApplicationCacheQuotaManager usage]):
        (-[WebApplicationCacheQuotaManager quota]):
        (-[WebApplicationCacheQuotaManager setQuota:]):
        * WebCoreSupport/WebSecurityOriginPrivate.h: Added a category to access managers. Deprecated old methods.

          Remove the WebSecurityOrigin sub-classes. Managers are better.

        * WebCoreSupport/WebApplicationCacheSecurityOrigin.h: Removed.
        * WebCoreSupport/WebApplicationCacheSecurityOrigin.mm: Removed.

          Create the managers lazily. Change old style calls to make use
          of the managers.

        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::exceededDatabaseQuota):
        (WebChromeClient::reachedApplicationCacheOriginQuota):
        * WebCoreSupport/WebSecurityOrigin.mm:
        (-[WebSecurityOrigin applicationCacheQuotaManager]):
        (-[WebSecurityOrigin databaseQuotaManager]):
        (-[WebSecurityOrigin dealloc]): release the managers if they exist.

2010-08-03  Alex Milowski  <alex@milowski.com>

        Reviewed by Beth Dakin.

        Changed the ENABLE_MATHML value to enable MathML by default.

        * Configurations/FeatureDefines.xcconfig:

2010-08-02  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders Carlsson.

        Add VisitedLinkStrategy for each platform to implement
        https://bugs.webkit.org/show_bug.cgi?id=43393

        * WebCoreSupport/WebPlatformStrategies.h:
        * WebCoreSupport/WebPlatformStrategies.mm:
        (WebPlatformStrategies::createVisitedLinkStrategy):
        (WebPlatformStrategies::isLinkVisited): Call back into PageGroup's visited links.
        (WebPlatformStrategies::addVisitedLink): Ditto.

2010-07-27  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Darin Fisher.

        PopupMenu refactoring in preparation to WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=42592

        As ChromeClient was made responsible for providing PopupMenu and SearchPopupMenu
        instances, concrete classes that inherit from ChromeClient needed to be changed to
        implement the new methods.

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::selectItemWritingDirectionIsNatural):
        (WebChromeClient::createPopupMenu):
        (WebChromeClient::createSearchPopupMenu):

2010-08-02  Jeremy Orlow  <jorlow@chromium.org>

        Speculative revert of 64425 due to Chromium instability
        https://bugs.webkit.org/show_bug.cgi?id=43347

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:

2010-07-27  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Darin Fisher.

        PopupMenu refactoring in preparation to WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=42592

        As ChromeClient was made responsible for providing PopupMenu and SearchPopupMenu
        instances, concrete classes that inherit from ChromeClient needed to be changed to
        implement the new methods.

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::selectItemWritingDirectionIsNatural):
        (WebChromeClient::createPopupMenu):
        (WebChromeClient::createSearchPopupMenu):

2010-07-31  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r64422.
        http://trac.webkit.org/changeset/64422
        https://bugs.webkit.org/show_bug.cgi?id=43304

        Build fixes are needed for Snow Leopard and Windows.
        (Requested by lca on #webkit).

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:

2010-07-27  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Darin Fisher.

        PopupMenu refactoring in preparation to WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=42592

        As ChromeClient was made responsible for providing PopupMenu and SearchPopupMenu
        instances, concrete classes that inherit from ChromeClient needed to be changed to
        implement the new methods.

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::selectItemWritingDirectionIsNatural):
        (WebChromeClient::createPopupMenu):
        (WebChromeClient::createSearchPopupMenu):

2010-07-31  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/43300> Simplify variables in *.xcconfig files after adding iOS support

        Reviewed by Darin Adler.

        * Configurations/WebKit.xcconfig: Extracted
        PRODUCTION_FRAMEWORKS_DIR and PRODUCTION_ROOT variables.

2010-07-30  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/8257783> Short documents may print a second blank page
        https://bugs.webkit.org/show_bug.cgi?id=43271

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _web_setPrintingModeRecursive]): Updated for additional height parameter
        to _setPrinting:minimumPageWidth:height:maximumPageWidth:adjustViewSize:.
        (-[WebHTMLView _web_clearPrintingModeRecursive]): Ditto.
        (-[WebHTMLView _web_setPrintingModeRecursiveAndAdjustViewSize]): Ditto.
        (-[WebHTMLView _beginPrintModeWithPageWidth:height:shrinkToFit:]): Added height parameter,
        which is scaled and passed on to _setPrinting:minimumPageWidth:height:maximumPageWidth:adjustViewSize:.
        (-[WebHTMLView _endPrintMode]): Updated for additional height parameter to
        _setPrinting:minimumPageWidth:height:maximumPageWidth:adjustViewSize:.
        (-[WebHTMLView layoutToMinimumPageWidth:height:maximumPageWidth:adjustingViewSize:]): Added
        height parameter, which is passed on to FrameView::forceLayoutForPagination().
        (-[WebHTMLView layout]): Updated for additional height parameter.
        (-[WebHTMLView _setPrinting:minimumPageWidth:height:maximumPageWidth:adjustViewSize:]): Added height
        parameter, which is passed on to -layoutToMinimumPageWidth:height:maximumPageWidth:adjustViewSize:.
        (-[WebHTMLView adjustPageHeightNew:top:bottom:limit:]): Updated for additional height
        parameter.
        (-[WebHTMLView setPageWidthForPrinting:]): Ditto.
        (-[WebHTMLView knowsPageRange:]): Pass the available height on the page on to
        _setPrinting:minimumPageWidth:height:maximumPageWidth:adjustViewSize.
        * WebView/WebHTMLViewPrivate.h: 

2010-07-30  Joseph Pecoraro  <joepeck@webkit.org>

        Fix for tests that broke after r64400. Tracking a more
        ideal solution in https://bugs.webkit.org/show_bug.cgi?id=40627

        Switch the interface back to (unsigned long long), and move
        the WebDatabaseSecurityOrigin implementation up into WebSecurityOrigin.
        The subclasses' implementations were not getting called.

        * Storage/WebDatabaseSecurityOrigin.mm:
        * WebCoreSupport/WebApplicationCacheSecurityOrigin.mm:
        (-[WebApplicationCacheSecurityOrigin quota]):
        (-[WebApplicationCacheSecurityOrigin setQuota:]):
        * WebCoreSupport/WebSecurityOrigin.mm:
        (-[WebSecurityOrigin usage]):
        (-[WebSecurityOrigin quota]):
        (-[WebSecurityOrigin setQuota:]):
        * WebCoreSupport/WebSecurityOriginPrivate.h:

2010-07-30  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by David Kilzer.

        Limit ApplicationCache Total and Per-Origin Storage Capacity (Quotas)
        https://bugs.webkit.org/show_bug.cgi?id=40627

        Part 4 - Client Notification when the Quota is Reached

        Notify the WebKit client when the per-origin quota is reached
        via a delegate method reachedApplicationCacheOriginQuota.

          Refactor the WebSecurityOrigin class to be generic enough to
          allow quota management of both Databases or Application Caches
          via subclasses.

        * Storage/WebDatabaseSecurityOrigin.h: Added.
        * Storage/WebDatabaseSecurityOrigin.mm: Added.
        (-[WebDatabaseSecurityOrigin quota]):
        (-[WebDatabaseSecurityOrigin setQuota:]):
        * WebCoreSupport/WebApplicationCacheSecurityOrigin.h: Added.
        * WebCoreSupport/WebApplicationCacheSecurityOrigin.mm: Added.
        (-[WebApplicationCacheSecurityOrigin quota]):
        (-[WebApplicationCacheSecurityOrigin setQuota:]):
        * Storage/WebSecurityOrigin.mm: Removed. (Moved to WebCoreSupport)
        * Storage/WebSecurityOriginPrivate.h: Removed. (Moved to WebCoreSupport)
        * WebCoreSupport/WebSecurityOrigin.mm: Added.
        (-[WebSecurityOrigin usage]): to be implemented by subclasses.
        (-[WebSecurityOrigin quota]): to be implemented by subclasses.
        (-[WebSecurityOrigin setQuota:]): to be implemented by subclasses.
        * WebCoreSupport/WebSecurityOriginInternal.h: Renamed from WebKit/mac/Storage/WebSecurityOriginInternal.h.
        * WebCoreSupport/WebSecurityOriginPrivate.h: Added.

          Turn the notification into a WebUI Delegate to call. Following
          the example of Databases.

        * DefaultDelegates/WebDefaultUIDelegate.m:
        (-[WebDefaultUIDelegate webView:exceededApplicationCacheOriginQuotaForSecurityOrigin:]):
        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::exceededDatabaseQuota): use the Databases Security Origin subclass.
        (WebChromeClient::reachedApplicationCacheOriginQuota): use the Application Cache Security Origin subclass.
        * WebView/WebUIDelegatePrivate.h:

2010-07-30  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by David Kilzer.

        Limit ApplicationCache Total and Per-Origin Storage Capacity (Quotas)
        https://bugs.webkit.org/show_bug.cgi?id=40627

        Part 1 - Add Total and Per-Origin Quota Preferences.

        Allow the application cache total size to be a preference, and
        add a new preference for the default per-origin quota.

          Storage quotas were int64_t (long long). Boilerplate for
          these types added for consistency.

        * Misc/WebNSDictionaryExtras.h:
        * Misc/WebNSDictionaryExtras.m:
        (-[NSMutableDictionary _webkit_setLongLong:forKey:]):
        * WebCoreSupport/WebApplicationCache.h: setters and accessors for WebCore's cacheStorage.
        * WebCoreSupport/WebApplicationCache.mm:
        (+[WebApplicationCache maximumSize:]):
        (+[WebApplicationCache setMaximumSize:]):
        (+[WebApplicationCache defaultOriginQuota]):
        (+[WebApplicationCache setDefaultOriginQuota:]):
        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]): defaults to noQuota for both preferences.
        (-[WebPreferences _longLongValueForKey:]):
        (-[WebPreferences _setLongLongValue:forKey:]):
        (-[WebPreferences applicationCacheTotalQuota]):
        (-[WebPreferences setApplicationCacheTotalQuota:]):
        (-[WebPreferences applicationCacheDefaultOriginQuota]):
        (-[WebPreferences setApplicationCacheDefaultOriginQuota:]):
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChangedNotification:]): respect updates to the preferences.

2010-07-30  Andy Estes  <aestes@apple.com>

        Reviewed by David Kilzer.

        Add Xcode support for compiling WebKit against iOS SDKs.
        https://bugs.webkit.org/show_bug.cgi?id=42796

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:
        * Configurations/FeatureDefines.xcconfig:
        * Configurations/Version.xcconfig:
        * Configurations/WebKit.xcconfig:

2010-07-26  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        Page clients should be passed to Page constructor via structure of pointers
        https://bugs.webkit.org/show_bug.cgi?id=42834

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

2010-07-27  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by Ojan Vafai.

        Add FILE_SYSTEM build flag for FileSystem API
        https://bugs.webkit.org/show_bug.cgi?id=42915

        * Configurations/FeatureDefines.xcconfig:

2010-07-27  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        Client-based Geolocation does not pass enableHighAccuracy option to controller and client
        https://bugs.webkit.org/show_bug.cgi?id=40374

        Stub out setEnableHighAccuracy method for the Mac port.

        * WebCoreSupport/WebGeolocationControllerClient.h:
        (WebGeolocationControllerClient::setEnableHighAccuracy):

2010-07-22  Sam Weinig  <sam@webkit.org>

        Reviewed by Maciej Stachowiak.

        Fix for <rdar://problem/8222626>
        Send textDidChangeInTextField delegate callback only in response to typing or other forms of user text input.

        The function name no longer perfectly matches the behavior, but I didn't want to break any existing clients. Maybe we
        should migrate to a new function name eventually

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

2010-07-22  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=42836
        Add localized strings stubs for WebKit2.

        - Convert WebKit (mac) to use a LocalizationStrategy rather than the WebCoreViewFactory
          for localized strings.

        Gets us below 200 tests failing in WebKitTestRunner.

        * WebCoreSupport/WebContextMenuClient.mm:
        (fixMenusReceivedFromOldClients): Use LocalizedStrings rather than the factory.
        * WebCoreSupport/WebPlatformStrategies.h:
        * WebCoreSupport/WebPlatformStrategies.mm:
        * WebCoreSupport/WebViewFactory.mm:

2010-07-21  Brady Eidson  <beidson@apple.com>

        Reviewed by Geoffrey Garen.

        Break out "scheme registration" functionality from SecurityOrigin to a SchemeRegistry
        https://bugs.webkit.org/show_bug.cgi?id=42783

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

2010-07-21  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Anders Carlsson.

        Composited layers don't scroll in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=42771

        Prep work: FrameView::scrollPositionChanged() sounds like a generic "did scroll" bottleneck,
        but this is deceiving. It's only every called on one platform (Mac) when the NSScrollView gets
        scrolled, so rename it to FrameView::scrollPositionChangedViaPlatformWidget().

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

2010-07-21  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Simon Fraser.

        Update plug-in proxy backed <video> and <audio> elements.
        https://bugs.webkit.org/show_bug.cgi?id=42770
        <rdar://problem/7963467>

        * Plugins/WebPluginController.h:
        * Plugins/WebPluginController.mm:
        (-[WebPluginController dealloc]): Release _viewsNotInDocument.
        (-[WebPluginController stopAllPlugins]): Stop plug-ins not in the document.
        (-[WebPluginController pluginViewCreated:]): New, add a View (plug-in) to _viewsNotInDocument.
        (+[WebPluginController pluginViewHidden:]): New, remove the view (plug-in) from pluginViews.
        (-[WebPluginController addPlugin:]): Remove the new plug-in from _viewsNotInDocument.

        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::createPlugin): Remove PLUGIN_PROXY_FOR_VIDEO code, the media
        player proxy plug-in should never be allocated by this method.
        (WebFrameLoaderClient::createMediaPlayerProxyPlugin): New, allocate a media player proxy.

        * WebView/WebView.mm:
        (-[WebView _videoProxyPluginForMIMEType:]): New. Identical to _pluginForMIMEType except it doesn't
        consider the arePlugInsEnabled preference.
        * WebView/WebViewInternal.h:


2010-07-19  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=42118
        Disable WebGL on Leopard for now. 

        LayoutTests fail on some graphics hardware on Leopard because one of the features we use,
        GL_ARB_framebuffer_object, is not universally available in Leopard like it is in
        SnowLeopard. This will allow LayoutTests to pass on Leopard until we add logic to use a
        software OpenGL driver on machines without this support.

        * Configurations/FeatureDefines.xcconfig:

2010-07-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Move PluginWidget to WebKit
        https://bugs.webkit.org/show_bug.cgi?id=42530

        * Plugins/WebBaseNetscapePluginView.h:
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView pluginLayer]):
        Add default pluginLayer implementation.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (PluginWidget::PluginWidget):
        (PluginWidget::invalidateRect):
        Move the guts of PluginWidget here from WebCore.
        
        (NetscapePluginWidget::platformLayer):
        Get the layer from the plug-in view.

2010-07-18  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/42522> Add missing (id) return type to Obj-C methods

        Reviewed by Dan Bernstein.

        * Carbon/CarbonWindowAdapter.mm:
        (-[NSWindow(HIWebFrameView) _initContent:styleMask:backing:defer:contentView:]):
        (-[CarbonWindowAdapter _destroyRealWindow:]):
        (-[CarbonWindowAdapter _clearModalWindowLevel]):
        * Misc/WebIconDatabase.mm:
        (-[WebIconDatabase init]):
        * Misc/WebNSPasteboardExtras.mm:
        (-[NSFilePromiseDragSource initWithSource:]):
        * WebView/WebHTMLRepresentation.mm:
        (-[WebHTMLRepresentation init]):
        * WebView/WebPreferences.mm:
        (-[WebPreferences init]):
        * WebView/WebView.mm:
        (-[WebView UIDelegate]):
        (-[WebView resourceLoadDelegate]):
        (-[WebView downloadDelegate]):
        (-[WebView policyDelegate]):
        (-[WebView frameLoadDelegate]):

2010-07-16  Zhe Su  <suzhe@chromium.org>

        Reviewed by Darin Adler.

        REGRESSION(r61484): Broke focus behaviour on Qt and probably other platforms
        https://bugs.webkit.org/show_bug.cgi?id=42253

        Dummy implementation of EditorClient::willSetInputMethodState.

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

2010-07-16  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        Part of <rdar://problem/7233974> Deprecate +[WebView _setShouldUseFontSmoothing:]
        https://bugs.webkit.org/show_bug.cgi?id=29355

        * Misc/WebKitNSStringExtras.h:
        * Misc/WebKitNSStringExtras.mm:
        (-[NSString _web_drawAtPoint:font:textColor:]): Now calls through to
        -_web_drawAtPoint:font:textColor:allowingFontSmoothing: passing YES for the last
        parameter.
        (-[NSString _web_drawAtPoint:font:textColor:allowingFontSmoothing:]): Added
        allowingFontSmoothing:. If font smoothing is not allowed, sets the font smoothing
        mode to antialiased. Otherwise, sets it to auto.
        (-[NSString _web_drawDoubledAtPoint:withTopColor:bottomColor:font:]): Instead of
        changing the font smoothing setting in the graphics context, call
        -_web_drawAtPoint:font:textColor:allowingFontSmoothing: passing NO for the last
        parameter.

2010-07-16  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Remove semicolons from Objective-C method declarations.

        * WebView/WebRenderLayer.mm:
        (+[WebRenderLayer nameForLayer:]):
        (+[WebRenderLayer compositingInfoForLayer:]):

2010-07-16  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Make JS memory stats available via 'Performance' object (Web Timing).
        This statistics is populated only if 'WebKitMemoryInfoEnabled'
        preference is set.

        'console.memory' is kept until Web Timing object becomes visible by
        default (currently it is hidden under compile-time flag).  These stats
        are guarded with the same preference.

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

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

2010-07-15  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Darin Adler.

        Printing test results differ between machines, we should use ImageDiff instead
        https://bugs.webkit.org/show_bug.cgi?id=20011

        * Misc/WebCoreStatistics.h:
        * Misc/WebCoreStatistics.mm:
        (-[WebFrame printToCGContext:cgContext:pageWidthInPixels:]):

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

        Reviewed by Darin Adler.

        [Mac] Implement LayoutTestController::markerTextForListItem()
        https://bugs.webkit.org/show_bug.cgi?id=37929

        Implements support for markerTextForListItem in the Mac port.

        * DOM/WebDOMOperations.mm:
        (+[DOMElement _DOMElementFromJSContext]): Added.
        (-[DOMElement _markerTextForListItem]): Added.
        * DOM/WebDOMOperationsPrivate.h:

2010-07-14  Simon Fraser  <simon.fraser@apple.com>

        Fix non-ACCELERATED_COMPOSITING build.

        * WebView/WebRenderLayer.mm:
        (+[WebRenderLayer compositingInfoForLayer:]):

2010-07-14  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by John Sullivan.

        <rdar://problem/8186963> Expose information about compositing layers.

        Use RenderLayerBacking::compositingLayerType() to add more information about compositing to
        WebRenderLayer, via a compositingInfo property. Also show element classnames.
        
        Also add separator items between the various z-order lists.
        
        * WebView/WebRenderLayer.h:
        * WebView/WebRenderLayer.mm:
        (+[WebRenderLayer nameForLayer:]):
        (+[WebRenderLayer compositingInfoForLayer:]):
        (-[WebRenderLayer initWithRenderLayer:]):
        (-[WebRenderLayer initWithName:]):
        (-[WebRenderLayer initWithWebFrame:]):
        (-[WebRenderLayer dealloc]):
        (-[WebRenderLayer buildDescendantLayers:]):
        (-[WebRenderLayer compositingInfo]):
        (-[WebRenderLayer isComposited]):
        (-[WebRenderLayer isSeparator]):

2010-07-14  Darin Adler  <darin@apple.com>

        Another try at fixing the Tiger build.

        Avoid non-ASCII in source files to keep Tiger compiler happy.

        * WebView/WebRenderLayer.mm:
        (+[WebRenderLayer nameForLayer:]): Use %C for the non-ASCII characters.

2010-07-14  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=42232
        Make changing Cursors work in WebKit2.

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::setCursor):
        * WebView/WebView.mm:
        Implement cursor changing at the WebKit level for the sake of WebKit2.
        This functionality is being moved from WidgetMac.mm.
        (+[WebView _pointingHandCursor]):
        Update to use platformCursor() instead of impl().

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

        Fix Tiger build.

        Avoid non-ASCII in souce files to keep Tiger compiler happy.

        * WebView/WebRenderLayer.mm:
        (+[WebRenderLayer nameForLayer:]):

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

        Reviewed by Dan Bernstein.

        <rdar://problem/8186963> Expose RenderLayer hierarchy via Obj-C for debugging.

        Add a WebRenderLayer class that reflects the RenderLayer tree into a hierarchy
        of Objective-C objects suitable for display in an outline view.
        
        * WebKit.exp: Export the WebRenderLayer Objective-C class.
        * WebView/WebRenderLayer.h: Added.
        * WebView/WebRenderLayer.mm: Added.

2010-07-07  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Darin Adler.

        Prevent assertion/duplicate loads for non-deferred subtitute-data loads

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

        MainResourceLoader uses the member m_initialRequest to store requests for future
        deferred loads. When doing the actual load in handleDataLoadNow(), we therefore
        have to clear this request so that subsequent entries into the loader will not
        start yet another load.

        This can happen as a result of a PageGroupLoadDeferrer going out of scope when
        returning from Chrome::runJavaScriptAlert(), which calls setDeferredLoading(false),
        but only in the case of using both substitute-data and non-deferred main resource
        load together. That's why two new DRT functions were added:

         * queueLoadHTMLString()
         * setDeferMainResourceLoad()

        The change adds DRT hooks for Mac, Win and Qt for these two functions. For Mac
        and Win the hook uses new SPI in WebDataSource. For Qt a new static member was
        added to the FrameLoaderClientQt and accessed though DumpRenderTreeSupportQt.

        * WebView/WebDataSource.mm:
        (-[WebDataSource _setDeferMainResourceDataLoad:]):
        * WebView/WebDataSourcePrivate.h:

2010-07-13  Philippe Normand  <pnormand@igalia.com>

        Rubber-stamped by Xan Lopez.

        Updated the copyright headers of the files modified in r62476.

        * WebView/WebView.mm:
        * WebView/WebViewData.h:
        * WebView/WebViewInternal.h:

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

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=13075
        XMLHttpRequest with failed authentication should set status to 401

        https://bugs.webkit.org/show_bug.cgi?id=6871
        <rdar://problem/3363403> 401 error page is never shown

        * Panels/WebPanelAuthenticationHandler.m:
        (-[WebPanelAuthenticationHandler startAuthentication:window:]): Updated a comment - this
        code cancels loading, not authentication (canceling authentication means telling to
        continue without credentials).
        (-[WebPanelAuthenticationHandler _authenticationDoneWithChallenge:result:]): If there were
        no credentials provided, tell to continue without any. There may be alternative content
        returned with 401.

2010-07-09  Leon Clarke  <leonclarke@google.com>

        Reviewed by Adam Barth.

        add support for link prefetching
        https://bugs.webkit.org/show_bug.cgi?id=3652

        * Configurations/FeatureDefines.xcconfig:

2010-07-08  Aaron Boodman  <aa@chromium.org>

        Reviewed by Timothy Hatcher.

        Add the ability for user scripts and user styles to affect just the top frame.

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

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

2010-07-08  Adele Peterson  <adele@apple.com>

        Reviewed by Jon Honeycutt, Adam Roben, and Darin Adler.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=41721
        <rdar://problem/8158561> Missing plug-in indicator should have a pressed state

        Implement shouldMissingPluginMessageBeButton.

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

2010-07-08  Brady Eidson  <beidson@apple.com>

        Reviewed by Tim Hatcher.

        <rdar://problem/8136327> - Crash in Entourage calling WebCache method from background thread

        * Misc/WebCache.mm:
        (+[WebCache setDisabled:]): Forward the call to the main thread if called from a background thread.

        * Misc/WebNSObjectExtras.h:
        * Misc/WebNSObjectExtras.mm:
        (+[NSObject _webkit_invokeOnMainThread]): Add a class version of the main thread invoker.

2010-07-08  Mike Thole  <mthole@apple.com>

        Reviewed by Darin Adler.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=41896
        Crash under allScriptsInPDFDocument() in WebPDFDocumentExtras.mm for certain PDFs

        * WebView/WebPDFDocumentExtras.mm:
        (allScriptsInPDFDocument): Null-check 'data', as CGPDFStreamCopyData() may have returned 0.

2010-07-08  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=41826
        Convert BackForwardList to an abstract base class and add BackForwardListImpl
        as the concrete implementation of it.

        * History/WebBackForwardList.mm:
        (-[WebBackForwardList init]):
        (-[WebBackForwardList setPageCacheSize:]):
        (-[WebBackForwardList pageCacheSize]):

2010-07-07  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=41772
        Add basic piping for BackForwardControllerClient.

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

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

        Reviewed by Sam Weinig.

        Change requestURL to a KURL.
        https://bugs.webkit.org/show_bug.cgi?id=41775

        * Plugins/WebNetscapePluginStream.h:
        (WebNetscapePluginStream::setRequestURL):
        * Plugins/WebNetscapePluginStream.mm:
        (WebNetscapePluginStream::pluginCancelledConnectionError):
        (WebNetscapePluginStream::errorForReason):
        (WebNetscapePluginStream::startStream):
        (WebNetscapePluginStream::didReceiveResponse):
        (WebNetscapePluginStream::destroyStream):

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

        Reviewed by Sam Weinig.

        Rename the WebBaseNetscapePluginStream.cpp and .h files to WebNetscapePluginStream.cpp and .h to match the class name.

        * Plugins/WebNetscapePluginStream.h: Renamed from WebKit/mac/Plugins/WebBaseNetscapePluginStream.h.
        * Plugins/WebNetscapePluginStream.mm: Renamed from WebKit/mac/Plugins/WebBaseNetscapePluginStream.mm.

2010-07-06  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Simon Fraser.

        Expose URL matching from WebUserContentURLPattern
        https://bugs.webkit.org/show_bug.cgi?id=41726
        <rdar://problem/7910144>

        We previously had a way to construct WebUserContentURLPattern
        instances via WebKit, but no way for callers to perform matching.
        This patch adds the matchesURL functionality to allow for this.

        * Misc/WebUserContentURLPattern.h: Added matchesURL.
        * Misc/WebUserContentURLPattern.mm:
        (-[WebUserContentURLPattern matchesURL:]): Added. Calls through to WebCore::UserContentURLPattern::matches.

2010-06-23  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Eric Carlson.

        [GStreamer] on Mac OS use a runloop observer to process the glib context iterations
        https://bugs.webkit.org/show_bug.cgi?id=35747

        If VIDEO and GSTREAMER are enabled, make the WebView start a
        runloop observer that will trigger the glib main context
        iterations. Those are needed by the GStreamer player only at the
        moment but could later be used for other GLib-dependant components
        if required.

        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:usesDocumentViews:]):
        (-[WebView _close]):
        (-[WebView _clearGlibLoopObserver]):
        (glibContextIterationCallback):
        (-[WebView _scheduleGlibContextIterations]):
        * WebView/WebViewData.h:
        * WebView/WebViewInternal.h:

2010-07-03  Jon Honeycutt  <jhoneycutt@apple.com>

        The missing plug-in indicator should be clickable

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

        From an original patch by Kevin Decker.

        Reviewed by Darin Adler.

        * WebCoreSupport/WebChromeClient.h:
        Declare an override of missingPluginButtonClicked().

        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::missingPluginButtonClicked):
        Call the UIDelegate's method.

        * WebView/WebUIDelegatePrivate.h:
        Declare didPressMissingPluginButton.

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

        Provide a WebView preference to disable DNS prefetching.

        https://bugs.webkit.org/show_bug.cgi?id=28825
        rdar://problem/7181249

        Reviewed by Darin Adler.

        * WebView/WebPreferenceKeysPrivate.h: Added WebKitDNSPrefetchingEnabledPreferenceKey.
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]): Set WebKitDNSPrefetchingEnabledPreferenceKey to YES.
        (-[WebPreferences isDNSPrefetchingEnabled]): Added. Return WebKitDNSPrefetchingEnabledPreferenceKey's value.
        (-[WebPreferences setDNSPrefetchingEnabled:]): Added. Set WebKitDNSPrefetchingEnabledPreferenceKey's value.
        * WebView/WebPreferencesPrivate.h: Added isDNSPrefetchingEnabled and setDNSPrefetchingEnabled:.
        * WebView/WebView.mm:
        (-[WebView _preferencesChangedNotification:]): Call WebCore::Settings::setDNSPrefetchingEnabled.

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

        Reviewed by Anders Carlsson.

        <rdar://problem/8148656> <https://bugs.webkit.org/show_bug.cgi?id=41431>
        REGRESSION (r49411): Various crashes due to JavaScript execution during plug-in destruction

        Strengthen m_inDestroy "swipe under the carpet" fix.

        * Plugins/Hosted/NetscapePluginInstanceProxy.h: Added a long comment about m_inDestroy, and
        changed it to static.

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::NetscapePluginInstanceProxy): m_inDestroy is now
        static, so we don't initialize it in constructor.
        (WebKit::NetscapePluginInstanceProxy::destroy): Assert that we aren't already destroying
        some plug-in.
        (WebKit::NetscapePluginInstanceProxy::evaluate): This function accidentally lacked an
        m_inDestroy check in r42789.

2010-06-29  Zoltan Herczeg  <zherczeg@webkit.org>

        Reviewed by Nikolas Zimmermann.

        Add ConvolveMatrixElement to MigrateHeaders.make
        https://bugs.webkit.org/show_bug.cgi?id=5861

        * MigrateHeaders.make:

2010-06-23  John Gregg  <johnnyg@google.com>

        Reviewed by Kent Tamura.

        add ENABLE_DIRECTORY_UPLOAD build support
        https://bugs.webkit.org/show_bug.cgi?id=41100

        * Configurations/FeatureDefines.xcconfig:

2010-06-28  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Make it possible to test the new HTML5 TreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=41276

        Adam was concerned that someone might make their port
        depend on this setting (I guess we had some trouble with that
        with the HTML5Parser setting), so I littered the code with warnings.

        test-html5-parser now tests this code path.

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

2010-06-25  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by Shinichiro Hamaji.

        Improve default value handling for page format properties.
        https://bugs.webkit.org/show_bug.cgi?id=41150

        * Misc/WebCoreStatistics.h:
        * Misc/WebCoreStatistics.mm:
        (-[WebFrame pageSizeAndMarginsInPixels:pageNumber:width:height:marginTop:marginRight:marginBottom:]):

2010-06-26  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Dimitri Glazkov.

        Add an ENABLE_WEB_TIMING option for enabling Web Timing support.
        https://bugs.webkit.org/show_bug.cgi?id=38924

        * Configurations/FeatureDefines.xcconfig:

2010-06-24  Jer Noble  <jer.noble@apple.com>

        Reviewed by Eric Carlson.

        Full-screened content doesn't keep the display on: Safari not grabbing a power assertion?
        https://bugs.webkit.org/show_bug.cgi?id=40939
        rdar://problem/7996172
        
        Take a IOKit power assertion when playing video in fullscreen mode.  Release the
        assertion when paused in fullscreen mode, and when exiting fullscreen mode.

        * WebView/WebVideoFullscreenController.h:
        * WebView/WebVideoFullscreenController.mm:
        (-[WebVideoFullscreenController windowDidExitFullscreen]): Call updatePowerAssertions.
        (-[WebVideoFullscreenController windowDidEnterFullscreen]): Call updatePowerAssertions.
        (-[WebVideoFullscreenController _disableIdleDisplaySleep]):
        (-[WebVideoFullscreenController _enableIdleDisplaySleep]):
        (-[WebVideoFullscreenController _disableIdleSystemSleep]):
        (-[WebVideoFullscreenController _enableIdleSystemSleep]):
        (-[WebVideoFullscreenController updatePowerAssertions]): Call _(enable|disable)Idle(System|Display)sleep depending on current playback rate and fullscreen status.
        (-[WebVideoFullscreenController rateChanged:]): Call updatePowerAssertions.

2010-06-24  Jer Noble  <jer.noble@apple.com>

        Reviewed by Darin Adler.

        Playing movie full screen on second monitor hides menu bar and title bar on main monitor
        https://bugs.webkit.org/show_bug.cgi?id=40933
        rdar://problem/7858452
        
        Remove all references to GetSystemUIMode and SetSystemUIMode.  Replace these calls with 
        [NSApplication setPresentationOptions:].  Do not auto-hide the menu bar if the fullscreen
        screen is does not contain the menu-bar.  Do not auto-hide the dock if the fullscreen screen
        is both not the menu-bar screen and not the dock screen.

        * WebView/WebVideoFullscreenController.mm:
        (-[WebVideoFullscreenController windowDidLoad]): Register the applicationDidChangeScreenParameters: listener.
        (-[WebVideoFullscreenController windowDidExitFullscreen]): Calls updateMenuAndDockForFullscreen.
        (-[WebVideoFullscreenController windowDidEnterFullscreen]): Calls updateMenuAndDockForFullscreen.
        (-[WebVideoFullscreenController applicationDidChangeScreenParameters:]):  New notification handler; catches NSApplicationDidChangeScreenParameters.
        (-[WebVideoFullscreenController updateMenuAndDockForFullscreen]): Hide/show the menu-bar and dock according to the fullscreen window's screen.

2010-06-24  Jer Noble  <jer.noble@apple.com>

        Reviewed by Eric Carlson.

        Full screen video in Safari exits full-screen if you switch to another app
        https://bugs.webkit.org/show_bug.cgi?id=40635
        rdar://problem/7885101

        Implement the following rules for exiting full screen when switching apps:
        1. If the system has a single screen, switching apps will cause Safari to exit full-screen.
        2. Otherwise, if the full-screen screen is the "main screen" (the one with the title bar), 
           switching apps will cause Safari to exit full-screen.
        3. Overriding rules 1 & 2, if the full-screen screen is not on the "current space", 
           switching apps will NOT cause Safari to exit full-screen.

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

2010-06-24  Adele Peterson  <adele@apple.com>

        Reviewed by Sam Weinig.

        Updated fix for <rdar://problem/8093680> "Paste and Match Style" should fire paste events
        https://bugs.webkit.org/show_bug.cgi?id=41085

        * WebView/WebHTMLView.mm: Use the WebCore command system for the pasteAsPlainText selector.
        Also remove internal methods that no one is using.

2010-06-24  Damian Kaleta  <dkaleta@apple.com>

        Reviewed by Sam Weinig.

        Added an ObjC wrapper to Node::renderRect(bool&).

        * DOM/WebDOMOperations.mm:
        (-[DOMNode _renderRect:]):
        * DOM/WebDOMOperationsPrivate.h:

2010-06-24  Adele Peterson  <adele@apple.com>

        Reviewed by Eric Carlson.

        Fix for <rdar://problem/8093680> "Paste and Match Style" should fire paste events
        https://bugs.webkit.org/show_bug.cgi?id=41085

        * WebView/WebHTMLView.mm: (-[WebHTMLView pasteAsPlainText:]): Reuse code in WebCore
        which does everything done here and also fires paste events.

2010-06-23  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by Shinichiro Hamaji.

        Implement page format data programming interface.
        Add methods for testing.
        https://bugs.webkit.org/show_bug.cgi?id=37538

        * Misc/WebCoreStatistics.h:
        * Misc/WebCoreStatistics.mm:
        (-[WebFrame isPageBoxVisible:]):
        (-[WebFrame pageAreaRectInPixels:]):
        (-[WebFrame preferredPageSizeInPixels:]):

2010-06-22  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Get rid of more USE_LIBDISPATCH code.

        * Plugins/Hosted/NetscapePluginHostProxy.h:

2010-06-22  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Get rid of the USE_LIBDISPATCH code.

        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WebKit::NetscapePluginHostProxy::NetscapePluginHostProxy):
        (WebKit::NetscapePluginHostProxy::~NetscapePluginHostProxy):

2010-06-22  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Wean NetscapePluginHostManager of any knowledge about WebNetscapePluginPackage
        https://bugs.webkit.org/show_bug.cgi?id=41006

        * Plugins/Hosted/NetscapePluginHostManager.h:
        * Plugins/Hosted/NetscapePluginHostManager.mm:
        (WebKit::NetscapePluginHostManager::hostForPlugin):
        (WebKit::NetscapePluginHostManager::spawnPluginHost):
        (WebKit::NetscapePluginHostManager::instantiatePlugin):
        (WebKit::NetscapePluginHostManager::createPropertyListFile):
        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView createPlugin]):
        * Plugins/WebNetscapePluginPackage.mm:
        (-[WebNetscapePluginPackage createPropertyListFile]):

2010-06-21  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Fix an off-by-one bug I introduced.

        * Plugins/WebNetscapePluginPackage.mm:
        (-[WebNetscapePluginPackage getPluginInfoFromResources]):

2010-06-21  Nate Chapin  <japhet@chromium.org>

        Reviewed by Adam Barth.

        FrameLoader cleanup: Split high level subframe and plugin
        loading functions into a separate class.
        https://bugs.webkit.org/show_bug.cgi?id=40453

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

2010-06-21  Anders Carlsson  <andersca@apple.com>

        Another Tiger build fix.

        * Plugins/WebNetscapePluginPackage.mm:
        (-[WebNetscapePluginPackage _tryLoad]):

2010-06-21  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        More WebBasePluginPackage cleanup
        https://bugs.webkit.org/show_bug.cgi?id=40944

        * Plugins/Hosted/HostedNetscapePluginStream.mm:
        (WebKit::HostedNetscapePluginStream::pluginCancelledConnectionError):
        * Plugins/Hosted/NetscapePluginHostManager.mm:
        (WebKit::NetscapePluginHostManager::spawnPluginHost):
        * Plugins/WebBaseNetscapePluginStream.mm:
        (WebNetscapePluginStream::pluginCancelledConnectionError):
        * Plugins/WebBaseNetscapePluginView.mm:
        (WebHaltablePlugin::pluginName):
        * Plugins/WebBasePluginPackage.h:
        * Plugins/WebBasePluginPackage.mm:
        (-[WebBasePluginPackage initWithPath:]):
        (-[WebBasePluginPackage _objectForInfoDictionaryKey:]):
        (-[WebBasePluginPackage getPluginInfoFromPLists]):
        (-[WebBasePluginPackage load]):
        (-[WebBasePluginPackage dealloc]):
        (-[WebBasePluginPackage finalize]):
        (-[WebBasePluginPackage pluginInfo]):
        (-[WebBasePluginPackage supportsExtension:]):
        (-[WebBasePluginPackage supportsMIMEType:WebCore::]):
        (-[WebBasePluginPackage MIMETypeForExtension:]):
        (-[WebBasePluginPackage isJavaPlugIn]):
        (-[WebBasePluginPackage versionNumber]):
        (-[WebBasePluginPackage WebCore::]):
        * Plugins/WebNetscapePluginPackage.mm:
        (-[WebNetscapePluginPackage openResourceFile]):
        (-[WebNetscapePluginPackage closeResourceFile:]):
        (-[WebNetscapePluginPackage getPluginInfoFromResources]):
        (-[WebNetscapePluginPackage _initWithPath:]):
        (-[WebNetscapePluginPackage _applyDjVuWorkaround]):
        (-[WebNetscapePluginPackage _tryLoad]):
        (-[WebNetscapePluginPackage supportsSnapshotting]):
        (-[WebNetscapePluginPackage _unloadWithShutdown:]):
        * Plugins/WebPluginDatabase.mm:
        (-[WebPluginDatabase refresh]):
        (-[WebPluginDatabase _removePlugin:]):
        * Plugins/WebPluginPackage.mm:
        (-[WebPluginPackage initWithPath:]):
        (-[WebPluginPackage load]):
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::createPlugin):
        * WebCoreSupport/WebPlatformStrategies.mm:
        (WebPlatformStrategies::getPluginInfo):

2010-06-21  Anders Carlsson  <andersca@apple.com>

        Another PowerPC build fix.

        * Plugins/WebNetscapePluginPackage.mm:
        (-[WebNetscapePluginPackage openResourceFile]):
        (-[WebNetscapePluginPackage _tryLoad]):

2010-06-21  Anders Carlsson  <andersca@apple.com>

        Try to fix the PowerPC build.

        * Plugins/WebNetscapePluginPackage.mm:
        (-[WebNetscapePluginPackage _tryLoad]):

2010-06-21  Nate Chapin  <japhet@chromium.org>

        Reviewed by Adam Barth.

        Update relevant calls into FrameLoader to make use of 
        FrameLoaderStateMachine.
        https://bugs.webkit.org/show_bug.cgi?id=39695

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::transitionToCommittedForNewPage):
        * WebView/WebFrame.mm:
        (-[WebFrame _firstLayoutDone]):

2010-06-21  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Dan Bernstein.

        Chromium/Mac build fix.

        * WebCoreSupport/WebSystemInterface.mm: Change the order of wtf/Platform.h include to let other 
            headers smell it.

2010-06-21  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Make all of WebKit build with clang++

        * DefaultDelegates/WebDefaultPolicyDelegate.m:
        (-[WebDefaultPolicyDelegate webView:decidePolicyForMIMEType:request:frame:decisionListener:]):
        * Plugins/Hosted/NetscapePluginHostManager.mm:
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView resolvedURLStringForURL:target:]):
        * WebView/WebDynamicScrollBarsView.mm:
        (-[WebDynamicScrollBarsView setSuppressLayout:]):
        * WebView/WebHTMLRepresentation.mm:
        * WebView/WebNavigationData.mm:
        (-[WebNavigationData initWithURLString:title:originalRequest:response:hasSubstituteData:clientRedirectSource:]):
        * WebView/WebPDFRepresentation.mm:
        (-[WebPDFRepresentation setDataSource:]):
        (-[WebPDFRepresentation receivedData:withDataSource:]):
        (-[WebPDFRepresentation receivedError:withDataSource:]):
        * WebView/WebResource.mm:
        (-[WebResource description]):
        * WebView/WebSerializedJSValue.mm:
        (-[WebSerializedJSValue initWithValue:context:exception:]):
        * WebView/WebVideoFullscreenController.mm:
        (-[WebVideoFullscreenController WebCore::]):
        (-[WebVideoFullscreenController setMediaElement:WebCore::]):
        (-[WebVideoFullscreenController setDelegate:]):
        (-[WebVideoFullscreenController enterFullscreen:]):
        * WebView/WebView.mm:
        (-[WebView _openFrameInNewWindowFromMenu:]):
        (-[WebView _geolocationDidChangePosition:]):

2010-06-21  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Remove unused dictionary ivars from WebBasePluginPackage
        https://bugs.webkit.org/show_bug.cgi?id=40928

        * Plugins/WebBasePluginPackage.h:
        * Plugins/WebBasePluginPackage.mm:
        (-[WebBasePluginPackage getPluginInfoFromPLists]):
        (-[WebBasePluginPackage dealloc]):
        * Plugins/WebNetscapePluginPackage.mm:
        (-[WebNetscapePluginPackage getPluginInfoFromResources]):

2010-06-21  Dan Bernstein  <mitz@apple.com>

        Build fix

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

2010-06-21  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        WebKit part of implementing the 'hyphens' and 'hyphenate-character' properties
        https://bugs.webkit.org/show_bug.cgi?id=10228

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Initialize wkGetHyphenationLocationBeforeIndex.

2010-06-21  Satish Sampath  <satish@chromium.org>

        Reviewed by Steve Block.

        Speech Input Patch 0: Added compilation argument to conditionally compile pending patches.
        https://bugs.webkit.org/show_bug.cgi?id=40878

        * Configurations/FeatureDefines.xcconfig:

2010-06-20  Anders Carlsson  <andersca@apple.com>

        Fix Tiger build.

        * Plugins/WebNetscapePluginPackage.mm:

2010-06-20  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Get rid of the old MIMETypes getter method
        https://bugs.webkit.org/show_bug.cgi?id=40898

        * Plugins/WebBasePluginPackage.h:
        * Plugins/WebBasePluginPackage.mm:
        (-[WebBasePluginPackage supportsExtension:]):
        (-[WebBasePluginPackage supportsMIMEType:WebCore::]):
        (-[WebBasePluginPackage MIMETypeForExtension:]):
        * Plugins/WebPluginDatabase.mm:
        (-[WebPluginDatabase refresh]):
        (-[WebPluginDatabase _removePlugin:]):

2010-06-20  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Remove bogus const qualifiers.

        * WebCoreSupport/WebPasteboardHelper.h:
        * WebCoreSupport/WebPasteboardHelper.mm:
        (WebPasteboardHelper::urlFromPasteboard):
        (WebPasteboardHelper::plainTextFromPasteboard):
        (WebPasteboardHelper::fragmentFromPasteboard):

2010-06-20  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Get rid of the extensionToMIME mapping in WebBasePluginPackage
        https://bugs.webkit.org/show_bug.cgi?id=40897

        Instead of using the extensionToMIME mutable dictionary, use the MIME types vector.
        While this makes lookup of MIME types based on extensions linear instead of constant,
        the number of extensions per plug-in is too small for it to matter.

        * Plugins/WebBasePluginPackage.h:
        * Plugins/WebBasePluginPackage.mm:
        (-[WebBasePluginPackage initWithPath:]):
        (-[WebBasePluginPackage dealloc]):
        (-[WebBasePluginPackage supportsExtension:]):
        (-[WebBasePluginPackage MIMETypeForExtension:]):
        (-[WebBasePluginPackage setMIMEToExtensionsDictionary:]):

2010-06-20  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Add a MimeClassInfo Vector to WebBasePluginPackage
        https://bugs.webkit.org/show_bug.cgi?id=40896

        * Plugins/WebBasePluginPackage.h:
        * Plugins/WebBasePluginPackage.mm:
        (-[WebBasePluginPackage getPluginInfoFromPLists]):
        (-[WebBasePluginPackage WebCore::]):
        * Plugins/WebNetscapePluginPackage.mm:
        (-[WebNetscapePluginPackage getPluginInfoFromResources]):
        * WebCoreSupport/WebPlatformStrategies.mm:
        (WebPlatformStrategies::getPluginInfo):

2010-06-20  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Move the NSBundle ivar to WebPluginPackage
        https://bugs.webkit.org/show_bug.cgi?id=40894

        * Plugins/WebBasePluginPackage.h:
        * Plugins/WebBasePluginPackage.mm:
        (-[WebBasePluginPackage initWithPath:]):
        (-[WebBasePluginPackage _objectForInfoDictionaryKey:]):
        (-[WebBasePluginPackage getPluginInfoFromPLists]):
        (-[WebBasePluginPackage load]):
        (-[WebBasePluginPackage dealloc]):
        * Plugins/WebNetscapePluginPackage.mm:
        (-[WebNetscapePluginPackage _initWithPath:]):
        * Plugins/WebPluginPackage.h:
        * Plugins/WebPluginPackage.mm:
        (-[WebPluginPackage initWithPath:]):
        (-[WebPluginPackage dealloc]):
        (-[WebPluginPackage viewFactory]):
        (-[WebPluginPackage load]):

2010-06-20  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Remove -[WebBasePluginPackage bundle]
        https://bugs.webkit.org/show_bug.cgi?id=40892

        Add -[WebBasePluginPackage bundleIdentifier] and switch clients over to it.
        
        Move the supportsSnapshotting method over to the plug-in package.
        
        * Plugins/Hosted/NetscapePluginHostManager.mm:
        (WebKit::NetscapePluginHostManager::hostForPackage):
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView initWithFrame:pluginPackage:URL:baseURL:MIMEType:attributeKeys:attributeValues:loadManually:element:WebCore::]):
        (-[WebBaseNetscapePluginView supportsSnapshotting]):
        * Plugins/WebBasePluginPackage.h:
        * Plugins/WebBasePluginPackage.mm:
        (-[WebBasePluginPackage isQuickTimePlugIn]):
        (-[WebBasePluginPackage isJavaPlugIn]):
        (-[WebBasePluginPackage WebCore::]):
        Call bundleIdentifier directly instead of asking the bundle 
        * Plugins/WebNetscapePluginPackage.h:
        * Plugins/WebNetscapePluginPackage.mm:
        (-[WebNetscapePluginPackage supportsSnapshotting]):
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView setAttributeKeys:andValues:]):
        (-[WebNetscapePluginView _createPlugin]):
        * Plugins/WebPluginDatabase.mm:
        (checkCandidate):

2010-06-20  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Change some WebPluginDabase ivars to use WebCore::String instead of NSString.
        https://bugs.webkit.org/show_bug.cgi?id=40869
        
        Re-land r61459, with extra null-checks in WebFrameLoaderClient.

        * Plugins/Hosted/NetscapePluginHostManager.mm:
        (WebKit::NetscapePluginHostManager::spawnPluginHost):
        * Plugins/WebBasePluginPackage.h:
        * Plugins/WebBasePluginPackage.mm:
        (-[WebBasePluginPackage initWithPath:]):
        (-[WebBasePluginPackage getPluginInfoFromPLists]):
        (-[WebBasePluginPackage dealloc]):
        (-[WebBasePluginPackage name]):
        (-[WebBasePluginPackage path]):
        (-[WebBasePluginPackage filename]):
        (-[WebBasePluginPackage pluginDescription]):
        (-[WebBasePluginPackage description]):
        (-[WebBasePluginPackage isJavaPlugIn]):
        * Plugins/WebNetscapePluginPackage.mm:
        (-[WebNetscapePluginPackage getPluginInfoFromResources]):
        (-[WebNetscapePluginPackage _tryLoad]):
        (-[WebNetscapePluginPackage _unloadWithShutdown:]):
        * Plugins/WebPluginPackage.mm:
        (-[WebPluginPackage load]):
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::createPlugin):

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

        Unreviewed, rolling out r61459.
        http://trac.webkit.org/changeset/61459
        https://bugs.webkit.org/show_bug.cgi?id=40869

        Seems to have broken two tests on the Tiger buildbot:

        dom/html/level2/html/AppletsCollection.html
        plugins/qt-qwidget-plugin.html

        Anders wasn't on #webkit...

        * Plugins/Hosted/NetscapePluginHostManager.mm:
        (WebKit::NetscapePluginHostManager::spawnPluginHost):
        * Plugins/WebBasePluginPackage.h:
        * Plugins/WebBasePluginPackage.mm:
        (-[WebBasePluginPackage initWithPath:]):
        (-[WebBasePluginPackage getPluginInfoFromPLists]):
        (-[WebBasePluginPackage dealloc]):
        (-[WebBasePluginPackage name]):
        (-[WebBasePluginPackage path]):
        (-[WebBasePluginPackage filename]):
        (-[WebBasePluginPackage pluginDescription]):
        (-[WebBasePluginPackage setName:]):
        (-[WebBasePluginPackage setPath:]):
        (-[WebBasePluginPackage setPluginDescription:]):
        (-[WebBasePluginPackage description]):
        (-[WebBasePluginPackage isJavaPlugIn]):
        * Plugins/WebNetscapePluginPackage.mm:
        (-[WebNetscapePluginPackage getPluginInfoFromResources]):
        (-[WebNetscapePluginPackage _tryLoad]):
        (-[WebNetscapePluginPackage _unloadWithShutdown:]):
        * Plugins/WebPluginPackage.mm:
        (-[WebPluginPackage load]):

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

        Fix Tiger build.

        * Plugins/WebBasePluginPackage.mm:
        (-[WebBasePluginPackage isJavaPlugIn]):

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

        Reviewed by Sam Weinig.

        Change some WebPluginDabase ivars to use WebCore::String instead of NSString.
        https://bugs.webkit.org/show_bug.cgi?id=40869

        * Plugins/Hosted/NetscapePluginHostManager.mm:
        (WebKit::NetscapePluginHostManager::spawnPluginHost):
        * Plugins/WebBasePluginPackage.h:
        * Plugins/WebBasePluginPackage.mm:
        (-[WebBasePluginPackage initWithPath:]):
        (-[WebBasePluginPackage getPluginInfoFromPLists]):
        (-[WebBasePluginPackage dealloc]):
        (-[WebBasePluginPackage name]):
        (-[WebBasePluginPackage path]):
        (-[WebBasePluginPackage filename]):
        (-[WebBasePluginPackage pluginDescription]):
        (-[WebBasePluginPackage description]):
        (-[WebBasePluginPackage isJavaPlugIn]):
        * Plugins/WebNetscapePluginPackage.mm:
        (-[WebNetscapePluginPackage getPluginInfoFromResources]):
        (-[WebNetscapePluginPackage _tryLoad]):
        (-[WebNetscapePluginPackage _unloadWithShutdown:]):
        * Plugins/WebPluginPackage.mm:
        (-[WebPluginPackage load]):

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

        Reviewed by Sam Weinig.

        Rename WebPluginPackage.m to make it an Objective-C++ file.
        
        * Plugins/WebPluginPackage.m: Removed.
        * Plugins/WebPluginPackage.mm: Copied from Plugins/WebPluginPackage.m.

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

        Reviewed by Sam Weinig.

        Get rid of the NSEnumerators from WebBasePluginPackage
        https://bugs.webkit.org/show_bug.cgi?id=40868

        * Plugins/WebBasePluginPackage.h:
        * Plugins/WebBasePluginPackage.mm:
        (-[WebBasePluginPackage MIMETypes]):
        (-[WebBasePluginPackage supportsExtension:]):
        (-[WebBasePluginPackage supportsMIMEType:]):
        * Plugins/WebPluginDatabase.mm:
        (-[WebPluginDatabase pluginForMIMEType:]):
        (-[WebPluginDatabase pluginForExtension:]):
        (-[WebPluginDatabase refresh]):
        (-[WebPluginDatabase _removePlugin:]):
        * WebCoreSupport/WebPlatformStrategies.mm:
        (WebPlatformStrategies::getPluginInfo):

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

        Reviewed by Sam Weinig.

        Make WebCoreSystemInterface.h a C++ only header
        https://bugs.webkit.org/show_bug.cgi?id=40867

        * WebCoreSupport/WebSystemInterface.h:
        * WebCoreSupport/WebSystemInterface.m: Removed.
        * WebCoreSupport/WebSystemInterface.mm: Copied from WebKit/mac/WebCoreSupport/WebSystemInterface.m.

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

        Reviewed by Sam Weinig.

        Clean up WebPluginDatabase.mm
        https://bugs.webkit.org/show_bug.cgi?id=40866

        * Plugins/WebBasePluginPackage.h:
        * Plugins/WebBasePluginPackage.mm:
        (pathByResolvingSymlinksAndAliases):
        (-[WebBasePluginPackage initWithPath:]):
        Change an instance method into a static function.
        
        * Plugins/WebPluginDatabase.mm:
        (PluginPackageCandidates::PluginPackageCandidates):
        (PluginPackageCandidates::update):
        (PluginPackageCandidates::bestCandidate):
        Add a new PluginPackageCandidates class.
        
        (-[WebPluginDatabase pluginForKey:withEnumeratorSelector:]):
        Use PluginPackageCandidates here.

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

        Fix Tiger build.
        
        * WebCoreSupport/WebPlatformStrategies.mm:

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

        Reviewed by Darin Adler.

        Get rid of PluginDataMac.mm and use the plug-in strategy instead
        https://bugs.webkit.org/show_bug.cgi?id=40860

        * Plugins/WebBasePluginPackage.h:
        * WebCoreSupport/WebPlatformStrategies.h:
        * WebCoreSupport/WebPlatformStrategies.mm:
        (WebPlatformStrategies::createPluginStrategy):
        (WebPlatformStrategies::refreshPlugins):
        (WebPlatformStrategies::getPluginInfo):
        * WebCoreSupport/WebViewFactory.mm:

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

        Reviewed by Dan Bernstein.

        Add stubbed out WebPlatformStrategies class to WebKit.
        https://bugs.webkit.org/show_bug.cgi?id=40851

        * WebCoreSupport/WebPlatformStrategies.h: Added.
        * WebCoreSupport/WebPlatformStrategies.mm: Added.
        (WebPlatformStrategies::initialize):
        (WebPlatformStrategies::WebPlatformStrategies):
        (WebPlatformStrategies::createPluginStrategy):
        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:usesDocumentViews:]):

2010-06-15  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Adam Barth.

        Move isAvailable()/setIsAvailable() from Database/DatabaseSync to AbstractDatabase.
        https://bugs.webkit.org/show_bug.cgi?id=39041

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

2010-06-17  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Use adoptRef and create functions in more code paths
        https://bugs.webkit.org/show_bug.cgi?id=40760

        * Plugins/Hosted/NetscapePluginInstanceProxy.h: Made create no longer
        be an inline function.

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::NetscapePluginInstanceProxy):
        Moved the call to addPluginInstance out of here.
        (WebKit::NetscapePluginInstanceProxy::create): Move it in here.
        This makes sure we call adoptRef on the new proxy before any caller
        calls ref on it.

2010-06-16  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Enable HTML5 Parser in Safari on Mac
        https://bugs.webkit.org/show_bug.cgi?id=40739

        The HTML5 parser is probably off on all webkit ports.
        We should either flip the meaning of the default so that
        "false" means HTML5 on all ports, or we'll have to write
        more code like this for all the other ports.

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

2010-06-15  Mark Rowe  <mrowe@apple.com>

        Reviewed by Sam Weinig.

        Don't leak WebGeolocationPositionInternal and GeolocationPosition instances for every WebGeolocationPosition created.

        * WebView/WebGeolocationPosition.mm:
        (-[WebGeolocationPosition dealloc]): Implement -dealloc and release our WebGeolocationPositionInternal instance.

2010-06-10  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by Shinichiro Hamaji.

        Implement render style selection for pages to support CSS3 Paged Media.
        https://bugs.webkit.org/show_bug.cgi?id=35961

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

2010-06-15  Darin Adler  <darin@apple.com>

        Reviewed by Adam Barth.

        Move functions out of Frame class that were marked "move to Chrome"
        https://bugs.webkit.org/show_bug.cgi?id=39636

        * WebView/WebView.mm:
        (-[WebView shouldClose]): Call shouldClose on FrameLoader instead of
        going through Frame.

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

        Reviewed by Dan Bernstein.

        Remove getPluginInfoFromBundleAndMIMEDictionary:

        * Plugins/WebBasePluginPackage.mm:

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

        Reviewed by Dan Bernstein.

        Fold getPluginInfoFromBundleAndMIMEDictionary: into its sole caller.

        * Plugins/WebBasePluginPackage.mm:
        (-[WebBasePluginPackage getPluginInfoFromPLists]):

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

        Reviewed by Darin Adler.

        <rdar://problem/8084721> Pages using accelerated compositing fail to update correctly in Carbon apps
        
        The run loop observer used to commit compositing layer changes does not do
        updates if [window viewsNeedDisplay] is true, because this indicates that a delayed window
        update is pending (added in r58623).
        
        However, Carbon apps don't use the NSWindow updating mechanism, so [window viewsNeedDisplay] always returns YES.
        This caused us to never sync compositing layers.
        
        So detect if the current window is wrapping a carbon window, and in that case consult the root
        HIView to detect if display is pending.

        * WebView/WebView.mm:
        (layerSyncRunLoopObserverCallBack):

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

        Reviewed by John Sullivan.

        <rdar://problem/8077032> REGRESSION (r50796): Black background on AppleScript generated email

        Test: platform/mac/editing/input/NSBackgroundColor-transparent.html

        r50796 changed the initial background color from invalid to transparent. As a result,
        NSAttributedStrings returned from +_web_attributedStringFromRange started including the
        NSBackgroundColor attribute, with a transparent color as the value. This caused problems for
        components in the system that ignore the alpha component, turning the color into opaque black.

        * Misc/WebNSAttributedStringExtras.mm:
        (+[NSAttributedString _web_attributedStringFromRange:]): Change to not include the background
        and foreground color attributes if the color are transparent.

2010-06-14  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        WebInspector: On the way to Remote Debugging we want to transfer dom/timeline/etc
        data from inspected page to WebInspector as JSON string via http. The native
        serialization to JSON string is supported by InspectorValue's classes. This patch
        has the implementation of sendMessageToFrontend function. WebKit version of it still
        uses ScriptFunctionCall and will be switched to another transport a little bit later.
        https://bugs.webkit.org/show_bug.cgi?id=40134

        * WebCoreSupport/WebInspectorClient.h:
        * WebCoreSupport/WebInspectorClient.mm:
        (WebInspectorClient::WebInspectorClient):
        (WebInspectorClient::openInspectorFrontend):

2010-06-10  David Hyatt  <hyatt@apple.com>

        Reviewed by John Sullivan.

        https://bugs.webkit.org/show_bug.cgi?id=40441, back out the original fix for 29601, since it has broken continuous
        wheel delta values.

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

2010-06-09  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r60889.
        http://trac.webkit.org/changeset/60889
        https://bugs.webkit.org/show_bug.cgi?id=40365

        gtk bot has some kind of memory corruption (Requested by
        loislo on #webkit).

        * WebCoreSupport/WebInspectorClient.h:
        * WebCoreSupport/WebInspectorClient.mm:
        (WebInspectorClient::WebInspectorClient):
        (WebInspectorClient::openInspectorFrontend):
        (-[WebInspectorWindowController destroyInspectorView]):

2010-06-07  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        WebInspector: On the way to Remote Debugging we want to transfer dom/timeline/etc
        data from inspected page to WebInspector as JSON string via http. The native
        serialization to JSON string is supported by InspectorValue's classes. This patch
        has the implementation of sendMessageToFrontend function. WebKit version of it still
        uses ScriptFunctionCall and will be switched to another transport a little bit later.
        https://bugs.webkit.org/show_bug.cgi?id=40134

        * WebCoreSupport/WebInspectorClient.h:
        * WebCoreSupport/WebInspectorClient.mm:
        (WebInspectorClient::WebInspectorClient):
        (WebInspectorClient::openInspectorFrontend):

2010-06-08  Mark Rowe  <mrowe@apple.com>

        Reviewed by Adele Peterson.

        <rdar://problem/8072136> REGRESSION (r56051): Inspect Element context menu does nothing in applications linked against 10.4 SDK

        * WebCoreSupport/WebContextMenuClient.mm:
        (fixMenusReceivedFromOldClients): Fix up the tag on the Inspect Element menu item. This ensures that even if the
        context menu layout doesn't match our expectations that the menu item will continue to trigger the web inspector.

2010-06-08  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Ojan Vafai and Darin Adler.

        Refactor platform dependent editing behavior code out of Settings
        https://bugs.webkit.org/show_bug.cgi?id=39854

        EditingBehavior enum was renamed to EditingBehaviorTypes and moved out from Settings.h to
        EditingBehaviorTypes.h . Call sites in WebKit/ adjusted accordingly.

        * WebView/WebFrame.mm:
        (core):
        * WebView/WebFrameInternal.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChangedNotification:]):

2010-06-06  MORITA Hajime  <morrita@google.com>

        Unreviewd, follow up to r60820

        https://bugs.webkit.org/show_bug.cgi?id=40219
        [Mac] ENABLE_METER_TAG should be enabled
        
        Added ENABLE_METER_TAG.

        * Configurations/FeatureDefines.xcconfig:

2010-06-06  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        Bug 40214 - Clean up error construction / throwing in JSC.
        
        The one egregious insanity here is that creating an error requires
        a VM-entry-esqe-host call (the string argument is wrapped as a JS
        object & pushed on the RegisterFile, then unwrapped back to a
        UString).  Changing this also means you only require a global
        object, not an ExecState, to create an error.

        The methods to create error objects are also parameterized
        requiring a switch on the type, which can be made cleaner and
        faster by moving to a separate method per error type.  Code to add
        divot information to error had been duplicated, and is coalesced
        back into a single function.

        Convenience methods added to create & throw type & syntax error
        with a default error message, since this is a common case.

        Also, errors are currently thrown either using
        "throwError(exec, error)" or "exec->setException(error)" - unify
        on the former, since this is more commonly used.  Add
        "throwVMError(exec, error)" equivalents, as a convenience for
        cases where the result was being wrapped in "JSValue::encode(...)".

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::moveGlobalExceptionToExecState):
        * Plugins/Hosted/ProxyInstance.mm:
        (WebKit::ProxyInstance::invokeMethod):

2010-06-02  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        Bug 40094 - The return type of NativeFunction should be EncodedJSValue
        On Windows & Linux, using JSVALUE32_64, EncodedJSValue is returned in registers, but JSValue is not.

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

2010-06-02  Sterling Swigart  <sswigart@google.com>

        Reviewed by David Levin.

        Image Resizer Patch 0: Added compilation argument to conditionally compile pending patches.
        https://bugs.webkit.org/show_bug.cgi?id=39906

        * Configurations/FeatureDefines.xcconfig:

2010-06-01  David Hyatt  <hyatt@apple.com>

        Reviewed by Anders Carlsson.

        Add a preference for paginating during layout (the new model for computing page breaks).

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

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

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=40025
        <rdar://problem/8046273> All Flash content crashes after installing CS5 Design Premium.
        
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView supportsSnapshotting]): Do not support snapshotting Flash 10.1 if
        the version is less than 10.1.53.60.

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

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=39434
        REGRESSION (r59811): Geolocation callbacks cannot be created

        Removing unused WebGeolocationMock.

        * WebCoreSupport/WebGeolocationMock.mm: Removed.
        * WebCoreSupport/WebGeolocationMockPrivate.h: Removed.
        * WebKit.exp:

2010-05-30  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Make more HTML DOM members private, especially constructors, third and final batch
        https://bugs.webkit.org/show_bug.cgi?id=39916

        * WebView/WebHTMLRepresentation.mm:
        (-[WebHTMLRepresentation elementWithName:inForm:]): Use the new HTMLFormElement
        function, associatedElements, rather than getting directly at a data member
        named formElements.
        (-[WebHTMLRepresentation controlsInForm:]): Ditto.

2010-05-28  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig, Gavin Barraclough, Oliver Hunt.

        Simplified the host calling convention.

        PART ONE: Functional code changes.
        
        [ None in WebKit ]
        
        PART TWO: Global search and replace.
        
        In the areas below, I used global search-and-replace to change
            (ExecState*, JSObject*, JSValue, const ArgList&) => (ExecState*)
            args.size() => exec->argumentCount()
            args.at(i) => exec->argument(i)

        * Plugins/Hosted/ProxyInstance.h:
        * Plugins/Hosted/ProxyInstance.mm:
        (WebKit::ProxyInstance::invoke):
        (WebKit::ProxyInstance::invokeMethod):
        (WebKit::ProxyInstance::invokeDefaultMethod):

2010-05-27  Beth Dakin  <bdakin@apple.com>

        Reviewed by Simon Fraser.

        Change z-component to 1.

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

2010-05-26  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Beth Dakin and Darin Adler.

        Fix for <rdar://problem/7464703> HiDPI: [Layers] Compositing layers 
        do not scale properly when running with a resolution independent 
        scale

        Apply the userSpaceScaleFactor as a scale on the layerHostingView.

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

2010-05-25  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=39621
        <rdar://problem/8009738> Extreme memory growth on DOM Hanoi test

        Removed formStateDidChange support, which is not needed by any client.

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

2010-05-25  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        Database origins aren't populated at launch (missing db in prefs sheet, possible other symptoms)
        <rdar://problem/8013233> and https://bugs.webkit.org/show_bug.cgi?id=39486

        * Storage/WebDatabaseManager.mm:
        (WebKitInitializeDatabasesIfNecessary): Call initializeTracker() instead of trying to set the path on
          an already created tracker that already has its origins populated.

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

        Reviewed by Eric Seidel.

        Move view-related functions from Frame to FrameView
        https://bugs.webkit.org/show_bug.cgi?id=39366

        * WebView/WebView.mm:
        (-[WebView _setZoomMultiplier:isTextOnly:]): Call function on FrameView.
        (-[WebView setEditable:]): Get rid of call to empty function,
        removeEditingStyleFromBodyElement.

2010-05-21  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

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

        Make sure everyone who needs to is using visitedDependentColor rather than accessing styles
        directly.

        * Misc/WebNSAttributedStringExtras.mm:
        (+[NSAttributedString _web_attributedStringFromRange:]):
        * WebView/WebFrame.mm:
        (-[WebFrame _bodyBackgroundColor]):

2010-05-21  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        All callable objects should have a global object reference
        https://bugs.webkit.org/show_bug.cgi?id=39495

        Update the plugin proxy to handle the need for global object.

        * Plugins/Hosted/ProxyInstance.mm:
        (WebKit::ProxyInstance::newRuntimeObject):
        (WebKit::ProxyRuntimeMethod::ProxyRuntimeMethod):
        (WebKit::ProxyInstance::getMethod):
        * Plugins/Hosted/ProxyRuntimeObject.h:
        * Plugins/Hosted/ProxyRuntimeObject.mm:
        (WebKit::ProxyRuntimeObject::ProxyRuntimeObject):

2010-05-21  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        Add DeviceOrientation and DeviceOrientationClient
        https://bugs.webkit.org/show_bug.cgi?id=39479

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

2010-05-20  Mike Thole  <mthole@apple.com>

        Reviewed by Dave Hyatt.

        When using a scale factor > 1, scrollbars sometimes appear when not necessary
        https://bugs.webkit.org/show_bug.cgi?id=39458

        * WebView/WebDynamicScrollBarsView.mm:
        (-[WebDynamicScrollBarsView updateScrollers]): Round up non-integral sizes from AppKit
        so that they can be compared against the integral document size.

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

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=39441
        <rdar://problem/7985715> Flash context menu is both horizontally and vertically offset from point of click
        <rdar://problem/7986109> Youtube video controller UI entirely missing
        <rdar://problem/7986154> Flash content paints at horizontally and vertically shifted locations (within the plug-in region)

        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView updateAndSetWindow]): The base coordinates of a window and
         it's contentView happen to be the equal at a userSpaceScaleFactor of 1. For non-1.0 scale
         factors this assumption is false. Accordingly we now convert to the window contentView
        coordinate system when computing bounds in "window" and the visible rect.
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView saveAndSetNewPortStateForUpdate:]): Ditto.

2010-05-20  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        Provide bindings for DeviceOrientation
        https://bugs.webkit.org/show_bug.cgi?id=39210

        Adds ENABLE_DEVICE_ORIENTATION to XCode project file, always disabled.

        * Configurations/FeatureDefines.xcconfig:

2010-05-20  Martin Robinson  <mrobinson@webkit.org>

        Reviewed by Ojan Vafai.

        Expose the editing behavior setting in DRT to test all editing code paths
        https://bugs.webkit.org/show_bug.cgi?id=38603

        * WebView/WebFrame.mm:
        (core):
        * WebView/WebFrameInternal.h: Added a conversion method from the API enum to the WebCore enum.
        * WebView/WebPreferenceKeysPrivate.h: Added a preference key for the new setting.
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]): Initialize the EditingBehavior to Mac style.
        (-[WebPreferences editingBehavior]): Added.
        (-[WebPreferences setEditingBehavior:]): Added.
        * WebView/WebPreferencesPrivate.h: Added the new API points to the private API.
        * WebView/WebView.mm:
        (-[WebView _preferencesChangedNotification:]): Set the editing behavior via the WebPreferences setting.

2010-05-19  Anders Carlsson  <andersca@apple.com>

        Reviewed by Kevin Decker and Simon Fraser.

        <rdar://problem/8004528> 
        REGRESSION: Coordinate system for Core Animation NPAPI plug-ins is flipped with accelerated compositing turned on
        
        When needed, create a new CALayer and set it's geometry to be flipped. Add the plug-in layer as a sublayer and then return
        the newly created layer.

        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView createPlugin]):
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView createPlugin]):

2010-05-18  Tony Chang  <tony@chromium.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=24943
        Command-B and Command-I do not generate keydown events in contentEditable regions.

        Manual test because performKeyEquivalent is not called by DRT.

        Test: manual-tests/style-keypress-events.html

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView performKeyEquivalent:]): Move style key handling until after webcore gets a chance to handle the event

2010-05-18  Daniel Cheng  <dcheng@chromium.org>

        Reviewed by Darin Adler, Jian Li.

        DragData::asURL() shouldn't do file validity checks
        https://bugs.webkit.org/show_bug.cgi?id=38711

        Change [NSPasteboard _web_bestURL] to still return a file URL for paths
        that don't exist. Callers who care about the existence of the file or
        whether or not it is a directory should check themselves when they
        want to use the file. The directory check has been left in for now,
        since the Mac implementation of ResourceHandle, which uses this function
        indirectly via DragController::performDrag) handles directories somewhat
        non-intuitively: it opens the parent directory in the Finder, rather
        than opening the directory itself.

        * Misc/WebNSPasteboardExtras.mm:
        (-[NSPasteboard _web_bestURL]):

2010-05-18  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth (and Maciej Stachowiak).

        Make it possible to enable the new HTML5Tokenizer for testing
        https://bugs.webkit.org/show_bug.cgi?id=39275

        Expose the WebCore::Settings::html5ParserEnabled as a private WebKit setting.

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

2010-05-17  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r59652.
        http://trac.webkit.org/changeset/59652
        https://bugs.webkit.org/show_bug.cgi?id=39268

        file-input-files-access test is broken on Mac (Requested by
        dcheng on #webkit).

        * Misc/WebNSPasteboardExtras.mm:
        (-[NSPasteboard _web_bestURL]):

2010-05-17  Daniel Cheng  <dcheng@chromium.org>

        Reviewed by Darin Adler.

        DragData::asURL() shouldn't do file validity checks
        https://bugs.webkit.org/show_bug.cgi?id=38711

        Change [NSPasteboard _web_bestURL] to still return a file URL for paths
        that don't exist. Callers who care about the existence of the file or
        whether or not it is a directory should check themselves when they
        want to use the file. The directory check has been left in for now,
        since the Mac implementation of ResourceHandle, which uses this function
        indirectly via DragController::performDrag) handles directories somewhat
        non-intuitively: it opens the parent directory in the Finder, rather
        than opening the directory itself.

        * Misc/WebNSPasteboardExtras.mm:
        (-[NSPasteboard _web_bestURL]):

2010-05-14  Stephanie Lewis  <slewis@apple.com>

        Rubber-stamped by Mark Rowe.

        Update order files.

        * WebKit.order:

2010-05-13  Timothy Hatcher  <timothy@apple.com>

        Allow reporting exceptions that occur when using JavaScriptCore APIs
        to the Web Inspector.

        <rdar://problem/7975410>

        Reviewed by Sam Weinig.

        * WebView/WebView.mm:
        (+[WebView _reportException:inContext:]): Call WebCore::reportException after checking
        that the global object is a DOMWindow.
        * WebView/WebViewPrivate.h: Added _reportException:inContext:.

2010-05-13  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=39089
        <rdar://problem/7974044> Domain names in Russian '.рф' domain are displayed as punycode

        Add a custom check for this domain. Currently, this is the only non-ASCII TLD, we'll
        investigate a more extensible solution when there are more, and we know what the
        typical restictions are.

        * Misc/WebNSURLExtras.mm:
        (allCharactersAllowedByTLDRules):
        (-[NSString _web_mapHostNameWithRange:encode:makeString:]):

2010-05-12  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by David Hyatt.

        Composited plug-ins can cause missed painting
        https://bugs.webkit.org/show_bug.cgi?id=39033
        <rdar://problem/7972478>
        
        Eagerly enable compositing mode via the enclosing FrameView when the plug-in tells us it wants
        to do compositing.

        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView createPlugin]):
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView createPlugin]):

2010-05-12  Jer Noble  <jer.noble@apple.com>

        Reviewed by Darin Adler.

        Bug 38689: #34005 will break fullscreen video playback
        https://bugs.webkit.org/show_bug.cgi?id=38689

        Use the new definition of PlatformMedia to check the actual type 
        returned by MediaPlayer.
        
        * WebView/WebVideoFullscreenController.mm:
        (-[WebVideoFullscreenController windowDidLoad]):

2010-05-11  Mark Rowe  <mrowe@apple.com>

        Fix the world.

        In r59162 a change was made to WebCore's FeatureDefines.xcconfig that enabled FILE_READER and FILE_WRITER.
        The author and reviewer of that patch ignored the carefully-worded warning at the top of that file asking
        that changes to the file be kept in sync across JavaScriptCore, WebCore and WebKit, as well as being kept
        in sync with build-webkit.  This led to WebCore and WebKit having different views of Document's vtable
        and results in crashes in Safari shortly after launch when virtual function calls resulted in the wrong
        function in WebCore being called.

        We fix this by bringing the FeatureDefines.xcconfig files in to sync.  Based on the ChangeLog message and
        other changes in r59162 it appears that enabling FILE_WRITER was unintentional so that particular change
        has been reverted.

        * Configurations/FeatureDefines.xcconfig:

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

        Reviewed by Anders Carlsson.

        Allow compositing layers to be connected across iframe boundaries on Mac
        https://bugs.webkit.org/show_bug.cgi?id=38856
        
        When painting an iframe into a compositing layer, the "PaintBehaviorFlattenCompositingLayers"
        flag was mistakenly set, because we'd detect that we were drawing into a bitmap. This caused
        content to show up in both compositing layers, and the painted background inside the iframe.
        
        Fix by taking the flattening state from the parent frame, if there is one. For the root
        frame, we continue to look to see if we're painting into a bitmap.

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

2010-05-10  Timothy Hatcher  <timothy@apple.com>

        Fix a crash when closing a WebView while the Web Inspector is open.

        <rdar://problem/7966830>

        Reviewed by Mark Rowe.

        * WebCoreSupport/WebInspectorClient.mm:
        (-[WebInspectorWindowController destroyInspectorView]): Null check Page since it can be null.
        * WebView/WebView.mm:
        (-[WebView _close]): Null out _private->page before deleting the page, so code called
        during destruction don't access a half deleted Page object.

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

        Unbreak the world. (Fix Mac builds).

        * Plugins/Hosted/WebKitPluginHostTypes.h:

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

        Reviewed by Simon Fraser.

        Change the order of the RendererType enum values, so that old versions of WebKitPluginHost will
        use accelerated compositing and not layer backed views.

        * Plugins/Hosted/WebKitPluginHostTypes.h:

2010-05-07  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig and Simon Fraser.

        <rdar://problem/7947356>
        QT Plug-in in hardware-accelerated WebKit is missing the controller

        Replace the useSoftwareRenderer boolean with an enum that lets the plug-in host opt into using a layer
        backed NSView instead of inserting the layer into the WebCore layer hierarchy.

        * Plugins/Hosted/NetscapePluginHostManager.mm:
        (WebKit::NetscapePluginHostManager::instantiatePlugin):
        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WKPCInstantiatePluginReply):
        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        (WebKit::NetscapePluginInstanceProxy::rendererType):
        (WebKit::NetscapePluginInstanceProxy::setRendererType):
        (WebKit::NetscapePluginInstanceProxy::InstantiatePluginReply::InstantiatePluginReply):
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::NetscapePluginInstanceProxy):
        Replace the useSoftwareRenderer boolean everywhere with the RendererType enum.
        
        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView createPlugin]):
        Only go into full compositing mode when the renderer type returned is UseAcceleratedCompositing.
        Otherwise, use a layer backed NSView.

        * Plugins/Hosted/WebKitPluginHostTypes.h:
        Add a RendererType enum.

2010-05-06  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler and Dan Bernstein..

        REGRESSION (r51617): when plugins are disabled, plugins show up as garbage characters
        https://bugs.webkit.org/show_bug.cgi?id=38698
        <rdar://problem/7942075>

        When the plug-in database is initialized, we will register all the MIME types it supports with the global
        WebView dictionary. When plug-ins are disabled for a single web view, the MIME types still need to be 
        in the global mapping (because other web views might still have plug-ins enabled).
        
        Prior to r51617 we would always look at the plug-in database to determine that the MIME type belongs to a 
        plug-in, but now we won't even touch the plug-in database when plug-ins are disabled.
        
        In order to fix this, a new set of registered MIME types that are known to be plug-ins is added. When
        +[WebView _viewClass:andRepresentationClass:forMIMEType:allowingPlugins:] is called and allowingPlugins is FALSE
        we check if the MIME type is a known plug-in MIME type and return false in that case.
        
        * Plugins/WebPluginDatabase.mm:
        (-[WebPluginDatabase refresh]):
        (-[WebPluginDatabase _removePlugin:]):
        * WebView/WebView.mm:
        (knownPluginMIMETypes):
        (+[WebView _registerPluginMIMEType:]):
        (+[WebView _unregisterPluginMIMEType:]):
        (+[WebView _viewClass:andRepresentationClass:forMIMEType:allowingPlugins:]):
        * WebView/WebViewInternal.h:

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

        Reviewed by Simon Fraser.

        <rdar://problem/7951285> REGRESSION (r58847): Composited iframe content obscures Safari's application chrome

        Fixed this other regression from r58847. The regression was caused by overriding -visibleRect to
        return the WebClipView’s full bounds. AppKit uses -visibleRect to determine the geometry
        of the surface for the child WebFrameView. The fix is to restrict the special behavior of
        -[WebClipView visibleRect] to when AppKit is consulting it for the purpose of invalidating
        areas while scrolling.

        * WebView/WebClipView.h:
        * WebView/WebClipView.mm:
        (-[WebClipView visibleRect]): If the WebClipView is not scrolling, always return
        [super visibleRect]. 
        (-[WebClipView _immediateScrollToPoint:]): Override this internal NSClipView method
        to set a flag telling -visibleRect that the view is scrolling.
        * WebView/WebView.mm:
        (layerSyncRunLoopObserverCallBack): Ensure that screen updates, disabled by AppKit
        when it thinks an upcoming window flush will re-enable them, are enabled here in
        case the -setNeedsDisplayInRect: override has prevented the window from needing to be
        flushed.

2010-05-06  Steve Block  <steveblock@google.com>

        Reviewed by Eric Seidel.

        MAC_JAVA_BRIDGE should be renamed JAVA_BRIDGE
        https://bugs.webkit.org/show_bug.cgi?id=38544

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

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

        Reviewed by Mark Rowe.

        Fixed a crash when closing Top Sites after r58847.

        * WebView/WebFrameView.mm:
        (-[WebFrameView webFrame]): Null-check _private.

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

        Rubber-stamped by Mark Rowe.

        Fixed test crashes after r58847.

        * WebView/WebHTMLView.mm:
        (setNeedsDisplayInRect): Null-check the frame.

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

        Reviewed by Simon Fraser.

        <rdar://problem/7932072> Iframes in composited layers don’t repaint correctly (affects Yahoo! Mail with Flash Player 10.1)
        https://bugs.webkit.org/show_bug.cgi?id=38427

        * WebView/WebClipView.m: Renamed to WebClipView.mm.
        * WebView/WebClipView.mm:
        (-[WebClipView visibleRect]): Added this override, which for instances used for WebFrameViews in
        composited layers, returns the clip view’s entire bounds. This prevents drawing from being clipped to
        AppKit’s idea of what part of the view would be visible if it was drawn as part of the view hierarchy.
        Since it is drawn into a compositing layer, that’s irrelevant, and we should not be clipping.
        * WebView/WebHTMLView.mm:
        (setCursor): Style tweak.
        (setNeedsDisplayInRect): Added. Replaces the default implementation of -[NSView setNeedsDisplayInRect:],
        so that if the receiver is a descendant of a WebFrameView that draws into a composited layer, the invalidation
        is routed back through the WebCore FrameView, which propagates it to the layer.
        (+[WebHTMLViewPrivate initialize]): Swizzle the setNeedsDisplayInRect: override in.
        (-[WebHTMLView visibleRect]): Removed whitespace.
        * WebView/WebView.mm:
        (layerSyncRunLoopObserverCallBack): If we bailed out on syncing, due to pending layout, do an eager layout
        in preparation for the displaying of compositing layers.

2010-05-05  John Sullivan  <sullivan@apple.com>

        <rdar://problem/7942606> Output appears in Console when exiting Safari with multiple windows opened

        Reviewed by Mark Rowe.

        * WebView/WebView.mm:
        (+[WebView closeAllWebViews]):
        Make copy of allWebViewsSet to avoid mutating it while iterating through it.

2010-05-04  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Improve check for drawing into the window that was added in r58623
        https://bugs.webkit.org/show_bug.cgi?id=38562
        
        Rather than assuming that any non-bitmap context is the window's context,
        compare the current graphics context with -[NSWindow graphicsContext] to
        determine that we're drawing into the window.

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

2010-05-04  Ada Chan  <adachan@apple.com>

        Reviewed by David Kilzer.

        https://bugs.webkit.org/show_bug.cgi?id=38555
        
        Small code refactoring: move the logic to figure out the path to the 
        databases directory to another method.

        * Storage/WebDatabaseManager.mm:
        (databasesDirectoryPath):
        (WebKitInitializeDatabasesIfNecessary):

2010-05-04  Beth Dakin  <bdakin@apple.com>

        Reviewed by Mike Thole.

        Fix for <rdar://problem/7818509> Crash occurs when exiting Safari

        We can avoid this crash if we call [self _removeFromAllWebViewsSet] 
        even in the case when we are doing a fastDocumentTeardown. This is 
        a much safer approach.
        * WebView/WebView.mm:
        (-[WebView _close]):

2010-05-03  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Adam Barth.

        Add support for controlling clipboard access from javascript.
        Clipboard access from javascript is disabled by default.
        https://bugs.webkit.org/show_bug.cgi?id=27751

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

2010-05-03  Jens Alfke  <snej@chromium.org>

        Reviewed by Darin Fisher.

        [chromium] Add "willSendSubmitEvent" hook to WebFrameClient and FrameLoaderClient
        https://bugs.webkit.org/show_bug.cgi?id=38397

        No tests (functionality is exposed only through native WebKit API.)

        * WebCoreSupport/WebFrameLoaderClient.h:
        (WebFrameLoaderClient::dispatchWillSendSubmitEvent):

2010-04-30  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/7477071> REGRESSION: Bad flicker when wheel-scrolling Google Maps, iPad gallery and other sites

        Sites that frequently toggle content in and out of compositing layers (like http://www.tumblr.com/boothed)
        can cause flickering because of unsychronized compositing layer and view-based updates. There were two
        underlying issues:
        
        1. On SnowLeopard, AppKit can throttle window updates, thus breaking an assumption that
           NSView drawing will happen on the runloop cycle after a repaint. This provided a window
           for the layerSyncRunLoopObserver to fire and commit layer changes too early.
           
           Fix this by having the layerSyncRunLoopObserver in WebView check to see if a display is pending,
           and not commit layer changes in that case. We'll commit layer changes later when we
           finally draw.
           
        2. The change in r49269 was wrong; it was attempting to fix an issue that was actually caused
           by -drawRects: coming in for page snapshots. The correct approach is to avoid hitting the
           synchronization and update disabling code in WebHTMLView for draws that are not to the screen.
        
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView drawRect:]):
        * WebView/WebView.mm:
        (layerSyncRunLoopObserverCallBack):
        (-[WebView _scheduleCompositingLayerSync]):

2010-04-30  Anders Carlsson  <andersca@apple.com>

        Part of the previous part (forgot to save).

        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView stopTimers]):
        (-[WebNetscapePluginView startTimers]):
        (-[WebNetscapePluginView checkIfAllowedToLoadURL:frame:callbackFunc:context:]):
        (-[WebNetscapePluginView _containerCheckResult:contextInfo:]):
        (-[WebNetscapePluginView cancelCheckIfAllowedToLoadURL:]):
        (-[WebNetscapePluginView scheduleTimerWithInterval:repeat:timerFunc:]):
        (-[WebNetscapePluginView unscheduleTimer:]):
        (-[WebNetscapePluginView getVariable:forURL:value:length:]):
        (-[WebNetscapePluginView setVariable:forURL:value:length:]):

2010-04-30  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Use C99 integer types in more places.

        * Plugins/WebNetscapePluginView.mm:
        (getNPRect):

2010-04-30  Anders Carlsson  <andersca@apple.com>

        Fix Tiger build.

        * Plugins/WebBaseNetscapePluginStream.h:
        * Plugins/WebBaseNetscapePluginStream.mm:
        (WebNetscapePluginStream::startStream):

2010-04-30  Anders Carlsson  <andersca@apple.com>

        Another 32-bit build fix.

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

2010-04-30  Anders Carlsson  <andersca@apple.com>

        Fix 32-bit build (again).

        * Plugins/WebNetscapeContainerCheckContextInfo.h:
        * Plugins/WebNetscapeContainerCheckContextInfo.mm:
        (-[WebNetscapeContainerCheckContextInfo initWithCheckRequestID:callbackFunc:context:]):
        (-[WebNetscapeContainerCheckContextInfo checkRequestID]):
        (-[WebNetscapeContainerCheckContextInfo callback]):
        * Plugins/WebNetscapePluginPackage.h:

2010-04-30  Anders Carlsson  <andersca@apple.com>

        Fix 32-bit build.

        * Plugins/WebNetscapeContainerCheckContextInfo.h:
        * Plugins/WebNetscapeContainerCheckContextInfo.mm:
        (-[WebNetscapeContainerCheckContextInfo initWithCheckRequestID:callbackFunc:context:]):
        * Plugins/WebNetscapeContainerCheckPrivate.h:
        * Plugins/WebNetscapePluginPackage.mm:
        (functionPointerForTVector):
        * Plugins/WebNetscapePluginView.mm:
        (PluginTimer::PluginTimer):
        (-[WebNetscapePluginView checkIfAllowedToLoadURL:frame:callbackFunc:context:]):
        (-[WebNetscapePluginView scheduleTimerWithInterval:repeat:timerFunc:]):

2010-04-30  Anders Carlsson  <andersca@apple.com>

        Reviewed by Timothy Hatcher.

        Next step towards fixing
        
        https://bugs.webkit.org/show_bug.cgi?id=20784
        move npapi.h to C99 integer types

        Use the C99 types everywhere. The "old" types are still around but will be removed
        in a subsequent commit.

        * Plugins/WebBaseNetscapePluginStream.h:
        * Plugins/WebBaseNetscapePluginStream.mm:
        (WebNetscapePluginStream::deliverData):
        * Plugins/WebNetscapePluginView.h:
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView saveAndSetNewPortStateForUpdate:]):
        (-[WebNetscapePluginView getAuthenticationInfoWithProtocol:host:port:scheme:realm:username:usernameLength:password:passwordLength:]):
        * Plugins/npapi.mm:
        (NPN_MemAlloc):
        (NPN_MemFlush):
        (NPN_PostURLNotify):
        (NPN_PostURL):
        (NPN_Write):
        (NPN_ScheduleTimer):
        (NPN_UnscheduleTimer):
        (NPN_GetValueForURL):
        (NPN_SetValueForURL):
        (NPN_GetAuthenticationInfo):
        (WKN_CheckIfAllowedToLoadURL):
        (WKN_CancelCheckIfAllowedToLoadURL):

2010-04-29  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        First part of
        https://bugs.webkit.org/show_bug.cgi?id=20784
        move npapi.h to C99 integer types.

        * MigrateHeaders.make:

2010-04-28  Mike Thole  <mthole@apple.com>

        Reviewed by David Kilzer.

        Add canAuthenticateAgainstProtectionSpace() to frame loader so that a protection space 
        can be inspected before attempting to authenticate against it
        https://bugs.webkit.org/show_bug.cgi?id=38271

        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::canAuthenticateAgainstProtectionSpace):
        Added.  If the resource load delegate implements the callback, use its answer.  If it does
        not, then only send authentication challenges for pre-10.6 protection spaces, which matches
        CFNetwork's default behavior.
        * WebView/WebDelegateImplementationCaching.h:
        * WebView/WebDelegateImplementationCaching.mm:
        (CallResourceLoadDelegateReturningBoolean): Added case for passing three objects.
        * WebView/WebResourceLoadDelegatePrivate.h:
        Added private SPI definition: webView:resource:canAuthenticateAgainstProtectionSpace:forDataSource:
        * WebView/WebView.mm:
        (-[WebView _cacheResourceLoadDelegateImplementations]):

2010-04-28  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/7918719> ASSERT(isMainThread()) from Font::setShouldUseSmoothing()
        
        Ensure that the WebView +initialize method initializes threading, so that things are correctly
        initialized when the first call into the WebKit framework is via a WebView class method.

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

2010-04-28  Darin Adler  <darin@apple.com>

        Reviewed by Adele Peterson.

        REGRESSION: Autoscroll does not work in Mail messages
        https://bugs.webkit.org/show_bug.cgi?id=38267
        rdar://problem/7559799

        The machinery to make autoscrolling work on Mac OS X when a WebView is embedded in another
        view had gotten broken in multiple ways. For some reason, a combination of bugs made it
        partly work until around r48064. This brings it back.

        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::scrollRectIntoView): When converting coordinates, use the document view
        rather than the WebView itself. This logic may not be correct for the case where
        usesDocumentViews is NO, but that is currently an experimental mode and can be fixed later.

2010-04-27  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Darin Adler and Eric Seidel.

        Add layoutTestController.setPrinting()
        https://bugs.webkit.org/show_bug.cgi?id=37203

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

2010-04-25  Sam Weinig  <sam@webkit.org>

        Reviewed by Maciej Stachowiak.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=38097
        Disentangle initializing the main thread from initializing threading

        Calls initializeMainThreadToProcessMainThread since there is no way to ensure
        that the initialize method will be called on the main thread.

        * Carbon/CarbonWindowAdapter.mm:
        (+[CarbonWindowAdapter initialize]): Add call to initializeMainThreadToProcessMainThread.
        * History/WebBackForwardList.mm:
        (+[WebBackForwardList initialize]): Ditto.
        * History/WebHistoryItem.mm:
        (+[WebHistoryItem initialize]): Ditto.
        * Misc/WebElementDictionary.mm:
        (+[WebElementDictionary initialize]): Ditto.
        * Misc/WebIconDatabase.mm:
        (+[WebIconDatabase initialize]): Ditto.
        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (+[WebHostedNetscapePluginView initialize]): Ditto.
        * Plugins/WebBaseNetscapePluginView.mm:
        (+[WebBaseNetscapePluginView initialize]): Ditto.
        * Plugins/WebBasePluginPackage.mm:
        (+[WebBasePluginPackage initialize]): Ditto.
        * Plugins/WebNetscapePluginView.mm:
        (+[WebNetscapePluginView initialize]): Ditto.
        * WebCoreSupport/WebEditorClient.mm:
        (+[WebEditCommand initialize]): Ditto.
        * WebCoreSupport/WebFrameLoaderClient.mm: 
        (+[WebFramePolicyListener initialize]): Ditto.
        * WebView/WebArchive.mm:
        (+[WebArchivePrivate initialize]): Ditto.
        * WebView/WebDataSource.mm:
        (+[WebDataSourcePrivate initialize]): Ditto.
        * WebView/WebHTMLView.mm:
        (+[WebHTMLViewPrivate initialize]): Ditto.
        (+[WebHTMLView initialize]): Ditto.
        * WebView/WebResource.mm:
        (+[WebResourcePrivate initialize]): Ditto.
        * WebView/WebTextIterator.mm:
        (+[WebTextIteratorPrivate initialize]): Ditto.
        * WebView/WebView.mm:
        * WebView/WebViewData.mm: Ditto.
        (+[WebViewPrivate initialize]): Ditto.

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

        Reviewed by Darin Adler.

        <rdar://problem/7903728> REGRESSION (r51617): WebView fails to load plug-in MIME types
        https://bugs.webkit.org/show_bug.cgi?id=38085

        WebView was calling -_webView in a few places where it should have just used itself. It never
        makes sense for WebView to call -_webView on itself, and these calls look like they were copied
        from similar code in WebHTMLView, WebFrameView and WebDataSource, where -_webView has a different,
        useful meaning.

        * WebView/WebView.mm:
        (-[WebView drawSingleRect:]): Replaced [self _webView] with self.
        (-[WebView _viewClass:andRepresentationClass:forMIMEType:]): Replaced [[self _webView] preferences]
        with _private->preferences.
        (-[WebView _canShowMIMEType:]): Ditto.

2010-04-23  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Anders Carlsson.

        <rdar://problem/7894489> When printing Flash, send a drawRect event, rather than NPPrint
        
        When printing Flash plug-ins in 32-bit, send a drawRect event with a CGContextRef, rather than calling
        NPPrint with a GWorldPtr, since Flash prefers the CGContext path.

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

2010-04-22  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/38029> +[WebTextIteratorPrivate initialize] is missing call to JSC::initializeThreading()

        Reviewed by Timothy Hatcher.

        Every other Objective-C class that calls
        WebCoreObjCFinalizeOnMainThread(self) in +initialize also calls
        JSC::initializeThreading().  The WebTextIteratorPrivate class
        was the only one missing this call.

        * WebView/WebTextIterator.mm:
        (+[WebTextIteratorPrivate initialize]): Added call to
        JSC::initializeThreading().

2010-04-22  Alexey Proskuryakov  <ap@apple.com>

        Rubber-stamped by Mark Rowe.

        <rdar://problem/7805969> REGRESSION: iTunes unable to play trailers

        Undo the changes made for https://bugs.webkit.org/show_bug.cgi?id=35215 (<rdar://problem/7673157>)
        for now. Clients rely on the old behavior, so a fix that changes it will need to account for
        those.

        * WebCoreSupport/WebFrameLoaderClient.mm: (WebFrameLoaderClient::createPlugin): Pass pluginURL
        instead of baseURL again.

2010-04-22  Dave Moore  <davemoore@chromium.org>

        Reviewed by Dimitri Glazkov.

        Added notification when the favicons for a page are changed
        from a script.
        The Document object will notify the frame loader, which will
        notify the client. Implementations of FrameLoaderClient will
        have to add one method; dispatchDidChangeIcons().

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

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

2010-04-22  Adam Barth  <abarth@webkit.org>

        Unreviewed, rolling out r58069.
        http://trac.webkit.org/changeset/58069
        https://bugs.webkit.org/show_bug.cgi?id=27751

        Broke compile on Windows.

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

2010-04-22  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Adam Barth.

        Add support for controlling clipboard access from javascript.
        Clipboard access from javascript is disabled by default.
        https://bugs.webkit.org/show_bug.cgi?id=27751

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

2010-04-21  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Shinichiro Hamaji.

        https://bugs.webkit.org/show_bug.cgi?id=37964
        Fix a typo in comments - Korean encoding name is windows-949, not windows-939

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

2010-04-21  Mark Rowe  <mrowe@apple.com>

        Tiger build fix.

        * Plugins/WebPluginController.mm: Add an #import that is necessary on Tiger.

2010-04-21  Mark Rowe  <mrowe@apple.com>

        Reviewed by Eric Carlson.

        <rdar://problem/7313430> Many crashes in Safari inside Flip4Mac below -[NSAlert didEndAlert:returnCode:contextInfo:]

        Existing versions of the Flip4Mac WebKit plug-in have an object lifetime bug related to an NSAlert that is
        used to notify the user about updates to the plug-in. This bug can result in Safari crashing if the page
        containing the plug-in navigates while the alert is displayed (<rdar://problem/7313430>).

        The gist of the bug is thus: Flip4Mac sets an instance of the TSUpdateCheck class as the modal delegate of the
        NSAlert instance. This TSUpdateCheck instance itself has a delegate. The delegate is set to the WmvPlugin
        instance which is the NSView subclass that is exposed to WebKit as the plug-in view. Since this relationship
        is that of delegates the TSUpdateCheck does not retain the WmvPlugin. This leads to a bug if the WmvPlugin
        instance is destroyed before the TSUpdateCheck instance as the TSUpdateCheck instance will be left with a
        pointer to a stale object. This will happen if a page containing the Flip4Mac plug-in triggers a navigation
        while the update sheet is visible as the WmvPlugin instance is removed from the view hierarchy and there are
        no other references to keep the object alive.

        We work around this bug by patching the following two messages:

        1) -[NSAlert beginSheetModalForWindow:modalDelegate:didEndSelector:contextInfo:]
        2) -[TSUpdateCheck alertDidEnd:returnCode:contextInfo:]

        Our override of 1) detects whether it is Flip4Mac's update sheet triggering the alert by checking whether the
        modal delegate is an instance of TSUpdateCheck. If it is, it retains the modal delegate's delegate.

        Our override of 2) then autoreleases the delegate, balancing the retain we added in 1).

        These two overrides have the effect of ensuring that the WmvPlugin instance will always outlive the TSUpdateCheck
        instance, preventing the TSUpdateCheck instance from accessing a stale delegate pointer and crashing the application.

        * Plugins/WebPluginController.mm:
        (-[WebPluginController addPlugin:]): Check whether the plug-in being instantiated is the Flip4Mac plug-in and
        install our workaround if it is.
        (isKindOfClass): Helper function that checks whether the given object is an instance of the named class.
        (WebKit_TSUpdateCheck_alertDidEnd_returnCode_contextInfo_): Autorelease the delegate.
        (WebKit_NSAlert_beginSheetModalForWindow_modalDelegate_didEndSelector_contextInfo_): Retain the modal delegate's
        delegate if this NSAlert belongs to the Flip4Mac plug-in.
        (installFlip4MacPlugInWorkaroundIfNecessary): Swizzle the necessary methods.  We swizzle the TSUpdateCheck methods
        first since it is possible that in some versions of Flip4Mac the TSUpdateCheck class may not exist or may not have
        the method we're interested in.  In that case we want to bail out before patching any methods.

2010-04-20  Mark Rowe  <mrowe@apple.com>

        Reviewed by Maciej Stachowiak.

        <rdar://problem/7856151> REGRESSION: NPP_Destroy is not called when page navigates when plug-in is displaying modal dialog

        An interaction between the plug-in host and WebKit was resulting in WKPCSetModal being called while
        NetscapePluginInstanceProxy was waiting on a reply to the GetScriptableNPObject message. This resulted
        in calls to stop the plug-in being deferred due to the presence of plug-in code up the stack.  This
        could lead to crashes as it was possible for the plug-in view to be deallocated during the modal runloop.

        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WKPCInvalidateRect):
        (WKPCSetModal): Defer the handling of setModal until the next runloop iteration if the host proxy
        is already processing requests.  This ensures that there will be no plug-in code on the stack when
        the modal runloop is entered, which allows the plug-in to be stopped when the page is navigated while
        a modal dialog is displayed.

2010-04-20  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

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

        Update these callsites because the method moved to DocumentWriter.

        * WebView/WebFrame.mm:
        (-[WebFrame _canProvideDocumentSource]):
        (-[WebFrame _receivedData:textEncodingName:]):

2010-04-20  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        Change a parameter type of chooseIconForFiles()
        https://bugs.webkit.org/show_bug.cgi?id=37504

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

2010-04-20  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r57892.
        http://trac.webkit.org/changeset/57892
        https://bugs.webkit.org/show_bug.cgi?id=37864

        Caused an assertion in Mac builds (Requested by smfr on
        #webkit).

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

2010-04-20  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Clean up RenderPart/RenderPartObject/RenderFrame/RenderEmbeddedObject
        https://bugs.webkit.org/show_bug.cgi?id=37741
        
        Make Frame::ownerRenderer() return a RenderFrameBase* rather than a
        RenderPart*, and add the necessary toRenderFrameBase() and isRenderFrameBase().

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

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

        Reviewed by Sam Weinig.

        Finish exposing extremal shrink factors WebHTMLView uses when shrinking pages to fit in the
        printing width as SPI.

        * WebKit.exp: Export _WebHTMLViewPrintingMinimumShrinkFactor and _WebHTMLViewPrintingMaximumShrinkFactor.

2010-04-15  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig & Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=37675
        Remove casts/constructors to/from JSC::UString type from WebCore::String
        
        WebCore's strings should not know about JSC::UString, this should be abstracted
        away in the bindings.  Add explicit conversion methods rather than relying on
        overloaded cast operators / constructors being implicitly called.

        This patch only changes the class String, once this has landed StringImpl, and
        hopefully AtomicString too, should follow suit.

        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (identifierFromIdentifierRep):
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::addValueToArray):
        (WebKit::NetscapePluginInstanceProxy::moveGlobalExceptionToExecState):
        * Plugins/Hosted/ProxyInstance.mm:
        (WebKit::ProxyInstance::getPropertyNames):
        * WebView/WebFrame.mm:
        (-[WebFrame _stringByEvaluatingJavaScriptFromString:forceUserGesture:]):
        (-[WebFrame _stringByEvaluatingJavaScriptFromString:withGlobalObject:inScriptWorld:]):
        * WebView/WebScriptDebugDelegate.mm:
        (-[WebScriptCallFrame evaluateWebScript:]):
        * WebView/WebScriptDebugger.mm:
        (toNSURL):
        * WebView/WebView.mm:
        (aeDescFromJSValue):

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

        Reviewed by John Sullivan.

        Expose the extremal shrink factors WebHTMLView uses when shrinking pages to fit in the
        printing width as SPI.

        * WebView/WebHTMLView.mm:
        Replaced two macros with constants.
        (-[WebHTMLView _beginPrintModeWithPageWidth:shrinkToFit:]): Changed to use the constants.
        (-[WebHTMLView _scaleFactorForPrintOperation:]): Ditto.
        * WebView/WebHTMLViewPrivate.h: Declared _WebHTMLViewPrintingMinimumShrinkFactor and
        _WebHTMLViewPrintingMaximumShrinkFactor.

2010-04-15  Mark Rowe  <mrowe@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/7870651> WebDynamicScrollBarsView.h generates compile errors when included in plain Objective-C files.

        * WebView/WebDynamicScrollBarsView.h:

2010-04-15  Adam Roben  <aroben@apple.com>

        Export WebUserContentURLPattern from WebKit

        Rubber-stamped by Mark Rowe.

        * WebKit.exp:

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

        Reviewed by Simon Fraser.

        Made consecutive calls to -[WebHTMLView _beginPrintModeWithPageWidth:shrinkToFit:] work
        without intermediate calls -[WebHTMLView _endPrintMode].

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _setPrinting:minimumPageWidth:maximumPageWidth:adjustViewSize:]):

2010-04-15  Adam Roben  <aroben@apple.com>

        Expose UserContentURLPattern as WebKit SPI

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

        Reviewed by Tim Hatcher.

        * Misc/WebUserContentURLPattern.h: Added.

        * Misc/WebUserContentURLPattern.mm: Added.
        (-[WebUserContentURLPattern initWithPatternString:]): Initialize
        _private and then parse the passed-in string into a
        UserContentURLPattern.
        (-[WebUserContentURLPattern dealloc]): Release _private.

        (-[WebUserContentURLPattern isValid]):
        (-[WebUserContentURLPattern scheme]):
        (-[WebUserContentURLPattern host]):
        (-[WebUserContentURLPattern matchesSubdomains]):
        Call through to UserContentURLPattern.

2010-04-13  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Separated a DOMWrapperWorld's behavior of keeping wrappers alive from
        its own lifetime, so a DOMWrapperWorld's controller can throw away
        its wrappers even before its refcount reaches 0.

        * WebView/WebScriptWorld.h:
        * WebView/WebScriptWorld.mm:
        (-[WebScriptWorld unregisterWorld]): Exported this function through WebKit.

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

        SecurityOrigin needs a way to remove individual OriginAccessEntries
        https://bugs.webkit.org/show_bug.cgi?id=37449

        Reviewed by Dave Hyatt.

        * WebView/WebView.mm:
        (+[WebView _removeOriginAccessWhitelistEntryWithSourceOrigin:destinationProtocol:destinationHost:allowDestinationSubdomains:]):
        Call SecurityOrigin::removeOriginAccessWhitelistEntry.
        * WebView/WebViewPrivate.h: Added _removeOriginAccessWhitelistEntryWithSourceOrigin.

2010-04-13  Timothy Hatcher  <timothy@apple.com>

        Rename SecurityOrigin::whiteListAccessFromOrigin to addOriginAccessWhitelistEntry.
        And SecurityOrigin::resetOriginAccessWhiteLists to resetOriginAccessWhitelists.

        SecurityOrigin needs a way to remove individual OriginAccessEntries
        https://bugs.webkit.org/show_bug.cgi?id=37449

        Reviewed by Dave Hyatt.

        * WebView/WebView.mm:
        (+[WebView _addOriginAccessWhitelistEntryWithSourceOrigin:destinationProtocol:destinationHost:allowDestinationSubdomains:]):
        (+[WebView _resetOriginAccessWhitelists]):
        * WebView/WebViewPrivate.h:

2010-04-11  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r57468.
        http://trac.webkit.org/changeset/57468
        https://bugs.webkit.org/show_bug.cgi?id=37433

        Broke the world...  Must have applied the patch wrong
        (Requested by abarth on #webkit).

        * WebView/WebFrame.mm:
        (-[WebFrame _canProvideDocumentSource]):
        (-[WebFrame _receivedData:textEncodingName:]):

2010-04-11  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

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

        Update these callsites because the method moved to DocumentWriter.

        * WebView/WebFrame.mm:
        (-[WebFrame _canProvideDocumentSource]):
        (-[WebFrame _receivedData:textEncodingName:]):

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

        Reviewed by Dan Bernstein.

        <rdar://problem/7845305> Further adoption of formal protocols for delegates.

        Move EmptyProtocolDefinitions.h down in to WebCore, and add the new protocols. Adopt the protocols in the appropriate places.

        * Misc/EmptyProtocolDefinitions.h: Removed.
        * Misc/WebDownload.mm:
        * WebKitPrefix.h:

2010-04-09  Jer Noble  <jer.noble@apple.com>

        Reviewed by Darin Adler.

        Work around QTMovieView bug (<rdar://problem/7712713>) by using a QTMovieLayer instead.
        https://bugs.webkit.org/show_bug.cgi?id=37311 / <rdar://problem/7749993>

        * WebView/WebVideoFullscreenController.mm:
        (-[WebVideoFullscreenController windowDidLoad]):
        (-[WebVideoFullscreenController setMediaElement:WebCore::]):

2010-04-09  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Maciej Stachowiak.

        https://bugs.webkit.org/show_bug.cgi?id=24572
        XMLHttpRequest.statusText returns always "OK" on Mac

        * WebCoreSupport/WebSystemInterface.m: (InitWebCoreSystemInterface):

2010-04-09  Eric Seidel  <eric@webkit.org>

        Unreviewed, rolling out r57343.
        http://trac.webkit.org/changeset/57343
        https://bugs.webkit.org/show_bug.cgi?id=37311

        Broke Tiger compile.

        * WebView/WebVideoFullscreenController.mm:
        (-[WebVideoFullscreenController windowDidLoad]):
        (-[WebVideoFullscreenController setMediaElement:WebCore::]):

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

        Reviewed by Darin Adler.

        <rdar://problem/7846015> REGRESSION (r57332) - Crash in [WebDynamicScrollBarsView(WebInternal) reflectScrolledClipView:] when opening the Downloads window

        * WebView/WebDynamicScrollBarsView.mm:
        (-[WebDynamicScrollBarsView initWithCoder:]): Added. Calls super and then initializes _private.

2010-04-09  Jer Noble  <jer.noble@apple.com>

        Reviewed by Darin Adler.

        Work around QTMovieView bug (<rdar://problem/7712713>) by using a QTMovieLayer instead.
        https://bugs.webkit.org/show_bug.cgi?id=37311 / <rdar://problem/7749993>

        * WebView/WebVideoFullscreenController.mm:
        (-[WebVideoFullscreenController windowDidLoad]):
        (-[WebVideoFullscreenController setMediaElement:WebCore::]):

2010-04-08  Mark Rowe  <mrowe@apple.com>

        Reviewed by John Sullivan.

        <rdar://problem/7814899> REGRESSION(r56008): iTunes crashes on quit inside -[NSScrollView dealloc]

        In r56008 new instance variables were added to WebDynamicScrollBarsView, increasing its size.
        This causes problems for 32-bit applications that derive from WebDynamicScrollBarsView, as the
        size and layout of their subclasses is baked in at compile time.  This results in instances
        being allocated that are smaller than the new code expects, and may result in the new instance
        variables sharing the same memory space as any instance variables that the subclass defines.

        We can avoid this problem by having the class contain only a single member that acts as a pointer
        to a heap-allocated structure that acts as storage for the real instance variables.  This makes
        us free to add instance variables in the future without risk of changing the size of the class.
        To ensure that 32-bit applications that are built against this new WebDynamicScrollBarsView header
        are able to run against older versions of WebKit we pad the class out to its previous size.  This
        results in any subclasses of WebDynamicScrollBarsView being created with a layout that is compatible
        with both versions of the code.

        This change could potentially break a subclass of WebDynamicScrollBarsView that directly accesses
        instance variables of its superclass.  However, this is a private header and no known subclasses
        of WebDynamicScrollBarsView access superclass instance variables in this fashion.

        * WebView/WebDynamicScrollBarsView.h:
        * WebView/WebDynamicScrollBarsView.mm:
        (-[WebDynamicScrollBarsView initWithFrame:]):
        (-[WebDynamicScrollBarsView dealloc]):
        (-[WebDynamicScrollBarsView finalize]):
        (-[WebDynamicScrollBarsView setAllowsHorizontalScrolling:]):
        (-[WebDynamicScrollBarsView setAllowsScrollersToOverlapContent:]):
        (-[WebDynamicScrollBarsView setAlwaysHideHorizontalScroller:]):
        (-[WebDynamicScrollBarsView setAlwaysHideVerticalScroller:]):
        (-[WebDynamicScrollBarsView horizontalScrollingAllowed]):
        (-[WebDynamicScrollBarsView verticalScrollingAllowed]):
        (-[WebDynamicScrollBarsView contentViewFrame]):
        (-[WebDynamicScrollBarsView tile]):
        (-[WebDynamicScrollBarsView setSuppressLayout:]):
        (-[WebDynamicScrollBarsView setScrollBarsSuppressed:repaintOnUnsuppress:]):
        (-[WebDynamicScrollBarsView updateScrollers]):
        (-[WebDynamicScrollBarsView reflectScrolledClipView:]):
        (-[WebDynamicScrollBarsView allowsHorizontalScrolling]):
        (-[WebDynamicScrollBarsView allowsVerticalScrolling]):
        (-[WebDynamicScrollBarsView scrollingModes:WebCore::vertical:WebCore::]):
        (-[WebDynamicScrollBarsView horizontalScrollingMode]):
        (-[WebDynamicScrollBarsView verticalScrollingMode]):
        (-[WebDynamicScrollBarsView setScrollingModes:vertical:andLock:]):
        (-[WebDynamicScrollBarsView setHorizontalScrollingModeLocked:]):
        (-[WebDynamicScrollBarsView setVerticalScrollingModeLocked:]):
        (-[WebDynamicScrollBarsView setScrollingModesLocked:]):
        (-[WebDynamicScrollBarsView horizontalScrollingModeLocked]):
        (-[WebDynamicScrollBarsView verticalScrollingModeLocked]):
        (-[WebDynamicScrollBarsView scrollWheel:]):

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

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=24300, don't expose history info via CSS

        Add SPI so that layout tests can access computed style including :visited information.

        * WebView/WebRenderNode.mm:
        (copyRenderNode):
        * WebView/WebView.mm:
        (-[WebView _computedStyleIncludingVisitedInfo:forElement:]):
        * WebView/WebViewInternal.h:
        * WebView/WebViewPrivate.h:

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

        Reviewed by Adele Peterson.

        Refactor WebHTMLView printing code and add private methods to enter and exit printing mode.
        https://bugs.webkit.org/show_bug.cgi?id=37246

        * Misc/WebNSPrintOperationExtras.h: Declared -_web_availablePaperWidth and -_web_availablePaperHeight.
        * Misc/WebNSPrintOperationExtras.m:
        (-[NSPrintOperation _web_availablePaperWidth]): Turned -[WebHTMLView _availablePaperWidthForPrintOperation:]
        into this method.
        (-[NSPrintOperation _web_availablePaperHeight]): Turned -[WebHTMLView _calculatePrintHeight] into this
        method.
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _isInPrintMode]): Added this accessor.
        (-[WebHTMLView _beginPrintModeWithPageWidth:shrinkToFit:]): Added. Moved the code from -knowsPageRange: that
        computes the layout widths and enters printing mode into this private method.
        (-[WebHTMLView _endPrintMode]): New private method (the old -_endPrintMode has been renamed).
        (-[WebHTMLView _scaleFactorForPrintOperation:]): Use -[NSPrintOperation _web_availablePaperWidth].
        (-[WebHTMLView _endPrintModeAndRestoreWindowAutodisplay]): Renamed -_endPrintMode to this, changed it to call
        _endPrintMode.
        (-[WebHTMLView _delayedEndPrintMode:]): Updated for rename.
        (-[WebHTMLView knowsPageRange:]): Use -_beginPrintModeWithPageWidth:shrintToFit:,
        -[NSPrintOperation _web_availablePaperWidth], and -[NSPrintOperation _web_availablePaperHeight]. Updated for
        rename.
        (-[WebHTMLView beginDocument]): Updated for rename.
        (-[WebHTMLView endDocument]): Ditto.
        * WebView/WebHTMLViewPrivate.h: Declared new private methods -_isInPrintMode,
        -_beginPrintModeWithPageWidth:shrinkToFit: and -_endPrintMode.

2010-04-07  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Yury Semikhatsky.

        Removed redundant FrameLoaderClient::dispatchDidLoadResourceByXMLHttpRequest()
        https://bugs.webkit.org/show_bug.cgi?id=36949

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

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

        Tiger build fix after r57184.

        * WebView/WebHTMLViewPrivate.h:

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

        Tiger build fix after r57184.

        * WebView/WebHTMLViewPrivate.h:

2010-04-06  Adam Barth  <abarth@webkit.org>

        Unreviewed.

        Speculative build fix for Tiger.

        * WebView/WebHTMLViewPrivate.h:

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

        Reviewed by Sam Weinig and Anders Carlsson.

        Expose WebHTMLView’s page breaking logic as SPI.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _adjustedBottomOfPageWithTop:bottom:limit:]): Factored out of -adjustPageHeightNew:top:bottom:limit:
        (-[WebHTMLView adjustPageHeightNew:top:bottom:limit:]): Call -_adjustedBottomOfPageWithTop:bottom:limit:
        * WebView/WebHTMLViewPrivate.h: Declared -_adjustedBottomOfPageWithTop:bottom:limit:

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

        Add an #if in order to make Tiger happy.

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

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

        Build fix.

        * WebView/WebViewData.mm:
        (-[WebViewPrivate init]): Use objc_collectingEnabled like we do elsewhere in WebKit.

2010-04-05  Mark Rowe  <mrowe@apple.com>

        Reviewed by Adele Peterson.

        Test case for <http://webkit.org/b/37115> / <rdar://problem/7829331>.
        REGRESSION(r56989): Crash in Mail in WebCore::Position::isCandidate when deleting block using block deletion UI

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _updateFontPanel]): Ask the window whether it is the key window rather than doing the comparison
        manually.  This allows DumpRenderTree's override of isKeyWindow to force this code path to be taken during tests.

2010-04-05  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=37111
        <rdar://problem/7790327> Draw replacement text when plug-in host crashes

        * Plugins/Hosted/WebHostedNetscapePluginView.h: Removed _pluginDied - it was only used
        for drawing replacement icon, and this information is now in WebCore.
        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView pluginHostDied]): Tell RenderEmbeddedObject that the plug-in
        has crashed.
        (-[WebHostedNetscapePluginView drawRect:]): Removed the case for crashed plug-in host. It is
        handled by WebCore now.

        * WebCoreSupport/WebViewFactory.mm: (-[WebViewFactory crashedPluginText]): Added a string
        for plug-in failure.        

2010-04-03  yael aharon  <yael.aharon@nokia.com>

        Reviewed by Darin Adler.

        Enable HTMLProgressElement for Safari on OSX
        https://bugs.webkit.org/show_bug.cgi?id=36961

        * Configurations/FeatureDefines.xcconfig:

2010-04-02  Jer Noble  <jer.noble@apple.com>

        Reviewed by Eric Carlson.

        https://bugs.webkit.org/show_bug.cgi?id=36624
        Add an INIT macro for the WebKitSystemInterface function wkQTMovieSelectPreferredAlternates.

        * WebCoreSupport/WebSystemInterface.m:
        (InitWebCoreSystemInterface):

2010-04-02  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=37043
        Java regression tests spam stderr about being unable to set status message

        With this change, there is still spam about "Attempt to access JavaScript from destroyed
        applet, type 9." I haven't investigated if that indicates a problem or not.

        * Plugins/WebPluginController.mm: (-[WebPluginController webPlugInContainerShowStatus:]):
        Removed check for _documentView. We don't seem to care.

2010-04-01  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by Dmitry Titov.

        Add FileThread for async file operation support in FileReader and FileWriter
        https://bugs.webkit.org/show_bug.cgi?id=36896

        Add FILE_READER or FILE_WRITER feature defines.

        * Configurations/FeatureDefines.xcconfig:

2010-04-01  Ada Chan  <adachan@apple.com>

        Reviewed by Darin Adler.

        Change WebDatabaseManager::deleteOrigin() to return true if there are no errors in deleting the origin.
        Ditto for WebDatabaseManager::deleteDatabase().
        
        https://bugs.webkit.org/show_bug.cgi?id=36988

        * Storage/WebDatabaseManager.mm:
        (-[WebDatabaseManager deleteOrigin:]):
        (-[WebDatabaseManager deleteDatabase:withOrigin:]):
        * Storage/WebDatabaseManagerPrivate.h:

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

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=36976
        <rdar://problem/7817498>
        REGRESSION(r54783): Silverlight plug-in causes Safari to crash if JavaScript is disabled

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::LocalObjectMap::get): The HashTable assertions aren't
        there to catch potential future attempts to store empty/deleted values before these happen -
        it's actually wrong to try to look up these values. Added an early return.
        (WebKit::NetscapePluginInstanceProxy::LocalObjectMap::forget): Ditto.

2010-04-01  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Added layerTreeAsText function to DRT (for Mac)
        https://bugs.webkit.org/show_bug.cgi?id=36782

        This is the WebKit side for Mac. It plumbs the
        call from WebCore to DRT.

        * WebView/WebFrame.mm:WebKit (Mac) side of plumbing
        (-[WebFrame _layerTreeAsText]):
        * WebView/WebFramePrivate.h:

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

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=36976
        <rdar://problem/7817498>
        REGRESSION(r54783): Silverlight plug-in causes Safari to crash if JavaScript is disabled

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::LocalObjectMap::get): Use find() instead of get(),
        because the latter fails with an assertion when looking up 0 or -1.
        (WebKit::NetscapePluginInstanceProxy::LocalObjectMap::forget): Be prepared for unexpected
        object IDs coming from plug-in host.

2010-03-31  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        Bug 36845 - AX: need a way to set the label of a AXWebArea through WebKit
        https://bugs.webkit.org/show_bug.cgi?id=36845

        Provide a way through WebKit to set an accessible label that describes the web area.    

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

2010-03-31  Marcus Bulach  <bulach@chromium.org>

        Reviewed by Jeremy Orlow.

        Adds Geolocation param for cancelGeolocationPermissionRequestForFrame.
        https://bugs.webkit.org/show_bug.cgi?id=35031

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

2010-03-30  Gavin Barraclough  <barraclough@apple.com>

        Rubber stamped by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=36866
        Move CString to WTF

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::getCookies):
        (WebKit::NetscapePluginInstanceProxy::getProxy):
        (WebKit::NetscapePluginInstanceProxy::getAuthenticationInfo):
        (WebKit::NetscapePluginInstanceProxy::resolveURL):
        * Plugins/WebBaseNetscapePluginView.h:
        * Plugins/WebBaseNetscapePluginView.mm:
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView resolveURL:forTarget:]):

2010-03-30  John Sullivan  <sullivan@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=36848
        <rdar://problem/7362913>
        Menu items appropriate only for rich-content editing can appear in plain-text contexts

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView validRequestorForSendType:returnType:]):
        Don't return self for non-string content if _canEditRichly is false.

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

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=36791
        Add assertions for instance proxy validity

        Add some assertions that the instance proxy hasn't been deleted. We sometimes keep a raw
        pointer to one across complicated function calls, relying on the caller to protect the
        reference.

        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        (WebKit::NetscapePluginInstanceProxy::renderContextID):
        (WebKit::NetscapePluginInstanceProxy::pluginView):
        (WebKit::NetscapePluginInstanceProxy::hostProxy):

2010-03-30  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by David Kilzer.

        Explicit guards for ENABLE_GEOLOCATION
        https://bugs.webkit.org/show_bug.cgi?id=25756

        * WebCoreSupport/WebGeolocationMock.mm:
        (-[WebGeolocationMock setError:code:]): Make the body conditional on 
        ENABLE(GEOLOCATION)
        (-[WebGeolocationMock setPosition:]): Ditto.

2010-03-26  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Antti Koivisto.

        Change method name due to it dealing with both flattening
        of frame sets and inner frames.

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

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

        * Misc/WebNSFileManagerExtras.m:
        (-[NSFileManager _webkit_pathWithUniqueFilenameForPath:]):
        Removed stray "!". How did that get in there?

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

        Reviewed by Mark Rowe.

        WebKit NSFileManager methods don't handle broken symlinks correctly.
        Part of <rdar://problem/7574046>.

        * Misc/WebNSFileManagerExtras.h: Removed unused defines and methods.
        * Misc/WebNSFileManagerExtras.m: Removed unused methods.
        (fileExists): Added. For use instead of fileExistsAtPath: for cases where we'd like
        to treat a broken symlink as a file that does indeed exist.
        (-[NSFileManager _webkit_pathWithUniqueFilenameForPath:]): Use fileExists.

2010-03-25  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Mark Rowe.

        * Plugins/Hosted/NetscapePluginHostProxy.mm: (WKPCRunSyncOpenPanel): Re-fetch host proxy in
        a way that works in a function that doesn't have a pluginID argument for some reason.

2010-03-25  Simon Fraser  <simon.fraser@apple.com>

        Build fix: no review.
        
        Another c_str() -> data().
        
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::enumerate):

2010-03-25  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Mark Rowe.

        Correctness fix after r56493.

        * Plugins/Hosted/NetscapePluginHostProxy.mm: (WKPCRunSyncOpenPanel): We still need to update
        our hostProxy reference, even though we didn't use to have instanceProxy. Nothing guarantees
        that the host proxy won't go away while the open panel is up.

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

        Build fix after r56474.

        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WKPCRunSyncOpenPanel):

2010-03-24  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=36563
        A plug-in makes Safari crash on http://www.itscodingtime.com/

        * Plugins/Hosted/NetscapePluginHostProxy.h:
        (WebKit::NetscapePluginHostProxy::port): Assert that the object is still alive. This isn't
        beautifully systemic, but helped catch a bug, and may help catch more.
        (WebKit::NetscapePluginHostProxy::clientPort): Ditto.
        (WebKit::NetscapePluginHostProxy::isProcessingRequests): Changed m_processingRequests to a
        static. This doesn't change behavior much, but helps avoid writing into deallocated memory.

        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WebKit::NetscapePluginHostProxy::NetscapePluginHostProxy): Changed m_processingRequests
        to a static.
        (WebKit::NetscapePluginHostProxy::processRequests): Ditto. Changing m_processingRequests
        after destroying the object in pluginHostDied() was wrong, but reasonably harmless, as there
        wasn't much time for some other object to be allocated at this address.
        (WKPCEvaluate): Refetch host proxy, as it may have been destroyed.
        (WKPCInvoke): Ditto.
        (WKPCInvokeDefault): Ditto.
        (WKPCGetProperty): Ditto.
        (WKPCSetProperty): Ditto.
        (WKPCRemoveProperty): Ditto.
        (WKPCHasProperty): Ditto.
        (WKPCHasMethod): Ditto.
        (WKPCEnumerate): Ditto.
        (WKPCRunSyncOpenPanel): Ditto.

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::processRequestsAndWaitForReply): Bail out of the 
        "event loop" if host proxy went away while processing a request.

2010-03-24  Hayato Ito  <hayato@chromium.org>

        Reviewed by Shinichiro Hamaji.

        Refactor computePageRects so that Mac can make use of it.
        https://bugs.webkit.org/show_bug.cgi?id=36159

        Refactoring only, so no new tests.

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

2010-03-24  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        Make Icon::createIconForFiles() optional.
        https://bugs.webkit.org/show_bug.cgi?id=35072

        - Rename iconForFiles() to chooseIconForFiles().
        - Call Icon::createIconForFiles() from chooseIconForFiles().

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

2010-03-23  Dan Bernstein  <mitz@apple.com>

        Reverted accidental change from r56429.

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

2010-03-23  Dan Bernstein  <mitz@apple.com>

        Reviewed by John Sullivan.

        WebKit part of
        <rdar://problem/7197736> Plug-in clip rect does not update when overflow
        clip changes
        https://bugs.webkit.org/show_bug.cgi?id=36479.

        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView visibleRectDidChange]): Added. Calls
        WKSyncSurfaceToView().
        * Plugins/WebBaseNetscapePluginView.h:
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView _windowClipRect]): Changed to use Widget::windowClipRect().
        (-[WebBaseNetscapePluginView visibleRectDidChange]): Added. Invokes -renewGState.

2010-03-22  Kevin Decker  <kdecker@apple.com>

        Reviewed by Simon Fraser.

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

        This patch entirely WebNullPluginView.
        
        * Plugins/WebNetscapePluginView.mm:
        * Plugins/WebNullPluginView.h: Removed.
        * Plugins/WebNullPluginView.mm: Removed.
        * Resources/nullplugin.tiff: Removed.
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::createPlugin): Invoke the resource load delegate if the plug-in failed to load.

2010-03-22  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by John Sullivan.

        https://bugs.webkit.org/show_bug.cgi?id=36455
        Make WebKit more resistant against plug-in crashes

        No tests, because crashing on build bots isn't good, even if it's only helper processes
        that crash.

        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        (WebKit::NetscapePluginInstanceProxy::waitForReply): Protect "this", because this function
        needs it after waiting for reply. Some callers used to do this, but not all, and we really
        shouldn't depend on callers here.

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::wheelEvent): Don't protect the plug-in instance proxy,
        because this function doesn't use it after waiting for reply.
        (WebKit::NetscapePluginInstanceProxy::createBindingsInstance): Ditto.

        * Plugins/Hosted/ProxyInstance.mm: (WebKit::ProxyInstance::invoke): Added an m_instanceProxy
        null check for another code path.

2010-03-22  Kevin Decker  <kdecker@apple.com>

        Reviewed by John Sullivan.

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

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

2010-03-18  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=36337
        Log an error when an OOP plug-in sends an unknown object id

        Making these LOG_ERROR and not ASSERTs, because I don't want early returns to look
        temporary or redundant.

        * 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::hasProperty):
        (WebKit::NetscapePluginInstanceProxy::hasMethod):
        (WebKit::NetscapePluginInstanceProxy::enumerate):

2010-03-16  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=36184
        YouTube video resizing doesn't work with OOP plug-ins

        Test: plugins/resize-from-plugin.html

        We were calling _WKPHResizePluginInstance synchronously or asynchronously, depending on
        whether the size has changed. But sync and async messages are not necessarily delivered in
        order - plug-in host listens only to the former while waiting for a response to a message it
        sent (a call to invoke() in this case).

        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::resize):
        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView updateAndSetWindow]):

2010-03-16  Yury Semikhatsky <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Introduce InspectorFrontendClient that provides InspectorFrontend with an interface to the embedder. InspectorClient now serves as a delegate for InspectorController and does not contain methods for managing inspector frontend window. That allows to create remote InspectorFrontendHost.

        Introduce InspectorFrontendClient that would provide InspectorFrontend with an interface to the embedder
        https://bugs.webkit.org/show_bug.cgi?id=35036

        * WebCoreSupport/WebInspectorClient.h:
        * WebCoreSupport/WebInspectorClient.mm:
        (WebInspectorClient::WebInspectorClient):
        (WebInspectorClient::inspectorDestroyed):
        (WebInspectorClient::openInspectorFrontend):
        (WebInspectorClient::highlight):
        (WebInspectorClient::hideHighlight):
        (WebInspectorFrontendClient::WebInspectorFrontendClient):
        (WebInspectorFrontendClient::frontendLoaded):
        (WebInspectorFrontendClient::localizedStringsURL):
        (WebInspectorFrontendClient::hiddenPanels):
        (WebInspectorFrontendClient::bringToFront):
        (WebInspectorFrontendClient::closeWindow):
        (WebInspectorFrontendClient::attachWindow):
        (WebInspectorFrontendClient::detachWindow):
        (WebInspectorFrontendClient::setAttachedWindowHeight):
        (WebInspectorFrontendClient::inspectedURLChanged):
        (WebInspectorFrontendClient::updateWindowTitle):
        (-[WebInspectorWindowController dealloc]):
        (-[WebInspectorWindowController windowShouldClose:]):
        (-[WebInspectorWindowController close]):
        (-[WebInspectorWindowController showWindow:]):
        (-[WebInspectorWindowController attach]):
        (-[WebInspectorWindowController detach]):
        (-[WebInspectorWindowController attached]):
        (-[WebInspectorWindowController setFrontendClient:]):
        (-[WebInspectorWindowController destroyInspectorView]):
        (-[WebNodeHighlighter initWithInspectedWebView:]):
        (-[WebNodeHighlighter dealloc]):
        (-[WebNodeHighlighter highlightNode:]):
        (-[WebNodeHighlighter hideHighlight]):
        (-[WebNodeHighlighter didAttachWebNodeHighlight:]):
        (-[WebNodeHighlighter willDetachWebNodeHighlight:]):
        * WebInspector/WebInspector.mm:
        (-[WebInspector attach:]):
        (-[WebInspector detach:]):

2010-03-15  Andy Estes  <aestes@apple.com>

        Reviewed by John Sullivan.

        Updated call to WKGetWheelEventDeltas() to match new method signature.

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

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

2010-03-15  John Sullivan  <sullivan@apple.com>

        Reviewed by Adam Roben.
        
        -[WebFrame setAlwaysHideHorizontal/VerticalScroller:] prevents keyboard scrolling
        <https://bugs.webkit.org/show_bug.cgi?id=36125>

        * WebView/WebDynamicScrollBarsView.h:
        Added instance variables horizontalScrollingAllowedButScrollerHidden and
        verticalScrollingAllowedButScrollerHidden. Renamed instance variables 
        hideHorizontal/VerticalScroller to alwaysHideHorizontal/VerticalScroller for clarity.
        Declared methods -horizontalScrollingAllowed and -verticalScrollingAllowed.
        Added comments.
        
        * WebView/WebDynamicScrollBarsView.mm:
        (-[WebDynamicScrollBarsView setAlwaysHideHorizontalScroller:]):
        Updated for instance variable renaming.
        (-[WebDynamicScrollBarsView setAlwaysHideVerticalScroller:]):
        Ditto.
        (-[WebDynamicScrollBarsView horizontalScrollingAllowed]):
        New method, returns YES if the scroller is showing or the only reason that the scroller
        is not showing is that setAlwaysHideHorizontalScrolling has been called.
        (-[WebDynamicScrollBarsView verticalScrollingAllowed]):
        New method, returns YES if the scroller is showing or the only reason that the scroller
        is not showing is that setAlwaysHideVerticalScrolling has been called.
        (-[WebDynamicScrollBarsView updateScrollers]):
        Updated for instance variable renamings. Now updates horizontalScrollingAllowedButScrollerHidden
        and verticalScrollingAllowedButScrollerHidden. Now takes the always-hidden state into account
        in the early-return code path, to avoid taking it into account twice in the regular code path.
        
        * WebView/WebFrameView.mm:
        (-[WebFrameView _scrollToBeginningOfDocument]):
        Use _isScrollable instead of _hasScrollBars.
        (-[WebFrameView _scrollToEndOfDocument]):
        Ditto.
        (-[WebFrameView scrollToBeginningOfDocument:]):
        Use _largestScrollableChild instead of _largestChildWithScrollBars.
        (-[WebFrameView scrollToEndOfDocument:]):
        Ditto.
        (-[WebFrameView _pageVertically:]):
        Use _isScrollable and _largestScrollableChild instead of _hasScrollBars
        and _largestChildWithScrollBars.
        (-[WebFrameView _pageHorizontally:]):
        Ditto.
        (-[WebFrameView _scrollLineVertically:]):
        Ditto.
        (-[WebFrameView _scrollLineHorizontally:]):
        Ditto.
        (-[WebFrameView keyDown:]):
        Use _largestScrollableChild instead of _largestChildWithScrollBars.
        (-[WebFrameView _isScrollable]):
        New method, calls -[WebDynamicScrollBarsView horizontalScrollingAllowed] and
        -[WebDynamicScrollBarsView verticalScrollingAllowed]
        (-[WebFrameView _largestScrollableChild]):
        New method, like _largestChildWithScrollBars but uses _isScrollable.
        (-[WebFrameView _hasScrollBars]):
        Added a comment that this is no longer used by Safari, and can thus probably be
        deleted once we no longer want to support it for nightly build compatibility with
        old versions of Safari.
        (-[WebFrameView _largestChildWithScrollBars]):
        Ditto.
        
        * WebView/WebFrameViewPrivate.h:
        Declared -_isScrollable and -_largestScrollableChild. Added comments to
        _hasScrollBars and _largestChildWithScrollBars saying that they are no longer
        used by Safari, and can thus probably be deleted once we no longer want to 
        support them for nightly build compatibility with old versions of Safari.

2010-03-15  John Sullivan  <sullivan@apple.com>

        Method name and parameter name mistakes from recent SPI addition
        <https://bugs.webkit.org/show_bug.cgi?id=36119>

        Reviewed by Dan Bernstein.

        * WebView/WebDynamicScrollBarsView.h:
        Renamed instance variable and method name from "setAllowXXX" to "setAllowsXXX".
        
        * WebView/WebDynamicScrollBarsView.mm:
        (-[WebDynamicScrollBarsView setAllowsScrollersToOverlapContent:]):
        Updated for renamed instance variable and method.
        (-[WebDynamicScrollBarsView setAlwaysHideHorizontalScroller:]):
        Changed parameter name from shouldBeVisible to shouldBeHidden.
        (-[WebDynamicScrollBarsView setAlwaysHideVerticalScroller:]):
        Ditto.
        (-[WebDynamicScrollBarsView contentViewFrame]):
        Updated for renamed instance variable.
        (-[WebDynamicScrollBarsView tile]):
        Ditto.
        (-[WebDynamicScrollBarsView reflectScrolledClipView:]):
        Ditto.

        * WebView/WebFrame.mm:
        (-[WebFrame setAllowsScrollersToOverlapContent:]):
        Renamed method from setAllowXXX, and updated for same change in WebDynamicScrollBarsView.

        * WebView/WebFramePrivate.h:
        Renamed method name from "setAllowXXX" to "setAllowsXXX".

2010-03-14  Darin Adler  <darin@apple.com>

        Reviewed by Mark Rowe.

        Remove unneeded dependency on non-string identifier for an NSTableColumn
        https://bugs.webkit.org/show_bug.cgi?id=36106

        * WebView/WebTextCompletionController.mm:
        (-[WebTextCompletionController _buildUI]): Use init instead of initWithIdentifier:
        because the table has only one column and that column does not need an identifier.

2010-03-12  Beth Dakin  <bdakin@apple.com>

        Reviewed by Simon Fraser.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=34942 Fullscreen 
        API naming is inconsistent
        -and corresponding-
        <rdar://problem/7729165>

        This patch changes all occurrences of "fullScreen" to the more 
        popular "fullscreen."

        * Plugins/Hosted/NetscapePluginHostProxy.h:
        (WebKit::NetscapePluginHostProxy::isFullscreenWindowShowing):
        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WebKit::NetscapePluginHostProxy::NetscapePluginHostProxy):
        (WebKit::NetscapePluginHostProxy::didEnterFullscreen):
        (WebKit::NetscapePluginHostProxy::didExitFullscreen):
        (WebKit::NetscapePluginHostProxy::setFullscreenWindowIsShowing):
        (WKPCSetFullscreenWindowIsShowing):
        * Plugins/Hosted/WebKitPluginClient.defs:
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView _workaroundSilverlightFullscreenBug:]):
        (-[WebNetscapePluginView _createPlugin]):
        (-[WebNetscapePluginView _destroyPlugin]):
        * WebView/WebVideoFullscreenHUDWindowController.mm:
        (-[WebVideoFullscreenHUDWindowController windowDidLoad]):

2010-03-12  Andy Estes  <aestes@apple.com>

        Reviewed by Brady Eidson.

        Expose WebPDFView's underlying PDFDocument.

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

        * WebView/WebDocumentPrivate.h: Create a new protocol called
        WebDocumentPDF.
        * WebView/WebPDFView.h: Have WebPDFView implement said protocol.
        * WebView/WebPDFView.mm:
        (-[WebPDFView PDFDocument]): Expose WebPDFView's underlying
        PDFDocument by implementing -(PDFDocument*)PDFDocument from
        WebDocumentPDF.

2010-03-12  Andy Estes  <aestes@apple.com>

        Reviewed by Brady Eidson.

        Remove an unused method.

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

        * Plugins/WebPluginController.mm:
        removed - (void)showURL:(NSURL *) inFrame:(NSString *)

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

        Reviewed by David Kilzer.

        <rdar://problem/7745082> Make it possible to build WebKit for older Mac OS X versions from the current Mac OS X version

        Default to using the appropriate SDK if the target Mac OS X version is not the current Mac OS X version.

        * Configurations/Base.xcconfig:

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

        Reviewed by Tim Hatcher.

        <rdar://problem/7745082> Make it possible to build WebKit for older Mac OS X versions from the current Mac OS X version

        Introduce TARGET_MAC_OS_X_VERSION_MAJOR to represent the Mac OS X version that is being targeted.  It defaults to the
        current Mac OS X version unless otherwise specified.

        Key off TARGET_MAC_OS_X_VERSION_MAJOR where we'd previously been keying off MAC_OS_X_VERSION_MAJOR.

        Explicitly map from the target Mac OS X version to the preferred compiler since Xcode's default compiler choice
        may not be usable when targetting a different Mac OS X version.

        Key off TARGET_GCC_VERSION rather than MAC_OS_X_VERSION_MAJOR in locations where we'd previously been keying off
        MAC_OS_X_VERSION_MAJOR but the decision is really related to the compiler version being used.

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

2010-03-11  Anders Carlsson  <andersca@apple.com>

        Reviewed by David Hyatt.

        Remove invalidateContents, it isn't used and it never makes sense to only invalidate the contents.

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:

2010-03-11  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Geoff Garen.

        https://bugs.webkit.org/show_bug.cgi?id=35965
        <rdar://problem/7742771> Crash when passing an object returned from plug-in back to the plug-in

        Test: plugins/round-trip-npobject.html

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::retainLocalObject): Corrected the check - there is
        now a separate ProxyRuntimeObject class for proxy pbjects.
        (WebKit::NetscapePluginInstanceProxy::releaseLocalObject): Ditto.

        * Plugins/Hosted/ProxyInstance.mm:
        (WebKit::ProxyInstance::invoke): Check if m_instanceProxy is still non-zero. The plug-in
        could have crashed while we were waiting for response.
        (WebKit::ProxyInstance::setFieldValue): Ditto.

2010-03-10  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=35975
        <rdar://problem/7739922> Flash 10.1b crashes when generating snapshots

        Do a version check before sending a drawRect event to a Flash plugin,
        since 10.1.d51 has a bug that crashes when called this way.
        
        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView drawRect:]):
        * Plugins/WebBaseNetscapePluginView.h:
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView supportsSnapshotting]):
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView drawRect:]):

2010-03-10  John Sullivan  <sullivan@apple.com>

        Reviewed by Tim Hatcher.

        <rdar://problem/7735387> input type other than text won't work with autofill
        <https://bugs.webkit.org/show_bug.cgi?id=35963>

        * WebView/WebHTMLRepresentation.mm:
        (-[WebHTMLRepresentation elementDoesAutoComplete:]):
        Return true for any text field that's not a password, rather than only
        for TEXT type.

2010-03-09  Brady Eidson  <beidson@apple.com>

        Reviewed by Tim Hatcher.

        REGRESSION: WebInspector docking busted on Windows
        <rdar://problem/7728433> and https://bugs.webkit.org/show_bug.cgi?id=35953

        * WebCoreSupport/WebInspectorClient.mm:
        (-[WebInspectorWindowController showWindow:]): Use the InspectorController:: copy of the should attach settings key.
        (-[WebInspectorWindowController attach]): Ditto.
        (-[WebInspectorWindowController detach]): Ditto.

2010-03-09  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        Updated for FastMalloc reporting changes.
        
        * Misc/WebCoreStatistics.mm:
        (+[WebCoreStatistics memoryStatistics]):

2010-03-08  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Mark Rowe.

        Move the new method to the end of the MIG definitions file, to avoid breaking
        compatibility between WebKit and older versions of WebKitPluginHost.

        * Plugins/Hosted/WebKitPluginHost.defs:

2010-03-08  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Kevin Decker.

        <rdar://problem/7714340> Need to grab image snapshot of Core Animation plugins
        
        Allow plug-ins using the Core Animation drawing model to be captured when doing a flattening paint,
        by sending them a drawRect event as if they were software-painting.

        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::snapshot):
        New snapshot() method that calls over to the plugin host, and then draws the image that comes back.
        
        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView drawRect:]): If we don't have a software renderer, but we're doing
        a flattening paint, then call the snapshot method.
        
        * Plugins/Hosted/WebKitPluginHost.defs: Added snapshot method.
        
        * Plugins/WebBaseNetscapePluginView.h:
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView inFlatteningPaint]):
        New utility method that asks the FrameView whether the current paint behavior is
        flattening.
        
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView drawRect:]): If the plug-in is using CA but this is a flattening
        paint, go ahead and send a drawRect event to the plug-in.

2010-03-08  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        Fix crash when you quit inside an unload handler.
        rdar://problem/6958347

        Test: manual-tests/quit-inside-unload.html

        * WebView/WebView.mm:
        (-[WebView _closeWithFastTeardown]): Removed code to set
        _private->closed since _close now does this earlier, before
        calling this method.
        (-[WebView _close]): Moved code to set _private->closed to the
        top of this method.
        (-[WebView setHostWindow:]): Rewrote the code that forbade
        setting the host window after closing so that it only forbids
        non-nil host windows. That way, the code to clear away the host
        window can run safely after setting _private->closed, yet client
        code cannot set a new host window after closing.

2010-03-08  Darin Adler  <darin@apple.com>

        Roll out a file I checked in by accident.

        * WebView/WebView.mm: Back to previous version.

2010-03-08  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Darin Adler.

        Turn on HW accel on Leopard even if coreVideoHas7228836Fix() is false, when WebGL is enabled
        https://bugs.webkit.org/show_bug.cgi?id=35759

        This allows WebGL to work on Leopard without the fix. It exposes these users to the crash
        that happens because of the CoreVideo bug, but it limits the exposure to those who have 
        chosen to enable WebGL.

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

2010-03-02  Adam Treat  <atreat@rim.com>

        Reviewed by Dave Hyatt.

        Adapt the mac port to the refactoring of repaint methods.

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

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::invalidateContents):
        (WebChromeClient::invalidateWindow):
        (WebChromeClient::invalidateContentsAndWindow):
        (WebChromeClient::invalidateContentsForSlowScroll):

2010-03-08  Jian Li  <jianli@chromium.org>

        Reviewed by Dmitry Titov.

        Blob.slice support.
        https://bugs.webkit.org/show_bug.cgi?id=32993

        Add ENABLE_BLOB_SLICE feature define.

        * Configurations/FeatureDefines.xcconfig:

2010-03-08  Eric Uhrhane  <ericu@chromium.org>

        Reviewed by David Levin.

        Remove the now-redundant Settings fields for the Database
        https://bugs.webkit.org/show_bug.cgi?id=35763

        No new tests; this code isn't called.

        * WebView/WebView.mm: Remove the call into Settings.
        (-[WebView _preferencesChangedNotification:]):

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

        Rubber-stamped by Cameron Zwarich.

        Remove unnecessary includes from header files, adding them to the handful of implementation files that need them.

        * Misc/WebIconDatabase.mm:

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

        Rubber-stamped by Cameron Zwarich.

        Remove unnecessary includes from header files, adding them to the handful of implementation files that need them.

        * Misc/WebNSPasteboardExtras.mm:

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

        Reviewed by Sam Weinig.

        <rdar://problem/7717249> DOMSVG.h includes a non-existent DOMSVGFEMorphologyElement.h

        * MigrateHeaders.make: Migrate DOMSVGFEMorphologyElement.h and DOMSVGFEMorphologyElementInternal.h.

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

        Reviewed by Sam Weinig.

        Use a framework-style include to pull in WebInspector.h for consistency
        with other parts of WebKit.

        * WebInspector/WebInspectorPrivate.h:

2010-03-04  Brady Eidson  <beidson@apple.com>

        Reviewed by Geoff Garen.

        REGRESSION (31281): -[WebArchive initWithCoder:] leaks
        <rdar://problem/7702420> and https://bugs.webkit.org/show_bug.cgi?id=35534

        * WebView/WebArchive.mm:
        (-[WebArchive initWithCoder:]): Don't retain objects we don't own.

2010-03-03  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Timothy Hatcher.

        https://bugs.webkit.org/show_bug.cgi?id=35692
        <rdar://problem/7703622> Crash when calling abort() on an XHR while in a windowless WebView

        * Panels/WebAuthenticationPanel.m: (-[WebAuthenticationPanel runAsModalDialogWithChallenge:]):
        Retain the challenge, just like it's done for sheet.

2010-03-02  Eric Uhrhane  <ericu@chromium.org>

        Reviewed by David Levin.

        Move database enable bit fully out of settings
        This is stage one of a three-stage commit [webkit, then chromium, then
        webkit again].  In this change I'm adding calls to
        Database::setIsAvailable inside Settings::setDatabaseEnabled and
        anywhere else that called it, and switching webkit fully over to using
        that flag [added in a previous checkin].  Phase two will remove
        Chromium's use of Settings for the Database, and phase three will remove
        the Setting for the Database enable entirely, leaving only
        Database::isAvailable/setIsAvailable.

        No new tests; tested by existing storage tests.

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

        * WebView/WebView.mm:  Added a call to Database::setIsAvailable.
        (-[WebView _preferencesChangedNotification:]):

2010-03-02  Adam Roben  <aroben@apple.com>

        Add -[WebView _registerURLSchemeAsSecure:]

        Fixes <http://webkit.org/b/35580> <rdar://problem/7706407> Expose
        SecurityOrigin::registerURLSchemeAsSecure as WebKit SPI

        Reviewed by Tim Hatcher.

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

2010-03-01  Jakob Petsovits  <jpetsovits@rim.com>

        Reviewed by Adam Barth.

        Adapt to the new ZoomMode enum.
        https://bugs.webkit.org/show_bug.cgi?id=35347

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

2010-02-27  Jing Jin  <jjin@apple.com>

        Reviewed by Timothy Hatcher.

        Move implementation of Bug 35449 into WebFramePrivate.

        * WebView/WebFrame.h:
        * WebView/WebFrame.mm:
        (-[WebFrame setAllowScrollersToOverlapContent:]):
        (-[WebFrame setAlwaysHideHorizontalScroller:]):
        (-[WebFrame setAlwaysHideVerticalScroller:]):
        * WebView/WebFramePrivate.h:

2010-02-26  Jing Jin  <jjin@apple.com>

        Reviewed by Timothy Hatcher.

        https://bugs.webkit.org/show_bug.cgi?id=35449
        Add ability to hide WebFrame scrollbars and to allow scrollbars to overlap with content.

        * WebView/WebDynamicScrollBarsView.h:
        * WebView/WebDynamicScrollBarsView.mm:
        (-[WebDynamicScrollBarsView setAllowScrollersToOverlapContent:]): Allows scrollbars to 
        overlap with the document and re-layouts the document.
        (-[WebDynamicScrollBarsView setAlwaysHideHorizontalScroller:]): Hides the horizontal scrollbar.
        (-[WebDynamicScrollBarsView setAlwaysHideVerticalScroller:]): Hides the vertical scrollbar.
        (-[WebDynamicScrollBarsView contentViewFrame]): Calculates the appropriate frame based
        on allowScrollersToOverlapContent.
        (-[WebDynamicScrollBarsView tile]): If allowScrollersToOverlapContent is YES, set the
        contentView's frame so it overlaps with the scrollbar.
        (-[WebDynamicScrollBarsView updateScrollers]): Take into account hideHorizontalScroller
        and hideVerticalScroller.
        (-[WebDynamicScrollBarsView reflectScrolledClipView:]): set drawsBackground to NO when
        scrollbars are overlapping with content, so we don't get trails during scrollbar draw updates.
        * WebView/WebDynamicScrollBarsViewInternal.h:
        * WebView/WebFrame.h:
        * WebView/WebFrame.mm:
        (-[WebFrame setAllowScrollersToOverlapContent:]): Hook for [WebDynamicScrollBarsView setAllowScrollersToOverlapContent:]
        (-[WebFrame setAlwaysHideHorizontalScroller:]): Hook for [WebDynamicScrollBarsView setAlwaysHideHorizontalScroller:]
        (-[WebFrame setAlwaysHideVerticalScroller:]): Hook for [WebDynamicScrollBarsView setAlwaysHideVerticalScroller:]

2010-02-26  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Alexey Proskuryakov.

        Bug 35401 - Fix handling of errors in handling calls over bridge,
        where base object bridge-type does not match method bridge-type.

        The code assumes users will only attempt to invoke a Java method
        on a Java base object, etc.
        Add language specific subclasses of RuntimeMethod, and pass the
        RuntimeMethod into invokeMethod, so we can typecheck before
        casting.  Throw an exception on type mismatch.

        * Plugins/Hosted/ProxyInstance.h:
        * Plugins/Hosted/ProxyInstance.mm:
        (WebKit::PluginRuntimeMethod::PluginRuntimeMethod): new class to distinguish this type of RuntimeMethod.
        (WebKit::ProxyInstance::getMethod): create an appropriate sublclass of RuntimeMethod.
        (WebKit::ProxyInstance::invokeMethod): dynamically check the type of the RuntimeMethod.

2010-02-25  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Geoffrey Garen.

        https://bugs.webkit.org/show_bug.cgi?id=35394
        <rdar://problem/7685262> Make passing objects between Java and plug-ins work

        Added a ProxyInstance implementation of RuntimeObject.

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::addValueToArray):
        * Plugins/Hosted/ProxyInstance.h:
        * Plugins/Hosted/ProxyInstance.mm:
        (WebKit::ProxyInstance::newRuntimeObject):
        (WebKit::ProxyInstance::getClass):
        * Plugins/Hosted/ProxyRuntimeObject.h: Added.
        (WebKit::ProxyRuntimeObject::classInfo):
        * Plugins/Hosted/ProxyRuntimeObject.mm: Added.
        (WebKit::ProxyRuntimeObject::ProxyRuntimeObject):
        (WebKit::ProxyRuntimeObject::~ProxyRuntimeObject):
        (WebKit::ProxyRuntimeObject::getInternalProxyInstance):

2010-02-24  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Fisher.

        [Chromium API] Disambiguate allowJavaScript from didNotAllowScript
        https://bugs.webkit.org/show_bug.cgi?id=35205

        Make these two callsites explicit about not running script immediately.

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

2010-02-23  Brady Eidson  <beidson@apple.com>

        Reviewed by Tim Hatcher and Pavel Feldman.

        Regression (r55107) - WebInspector docking is busted.
        https://bugs.webkit.org/show_bug.cgi?id=35274

        * WebCoreSupport/WebInspectorClient.mm:
        (-[WebInspectorWindowController showWindow:]): Swap the order of the "should attach?" check
          to get the expected behavior.

2010-02-23  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/7611158> Incomplete repaint of YouTube timeline thumb while scrolling
        https://bugs.webkit.org/show_bug.cgi?id=34381

        Test: fast/repaint/repaint-during-scroll.html

        NSClipView offsets any rects marked as needing display during scrolling
        by the scroll offset. Compensate for this when -setNeedsDisplay: is called
        during scrolling.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _frameOrBoundsChanged]): Set inScrollPositionChanged to YES
        around to call to FrameView::scrollPositionChanged().
        (-[WebHTMLView setNeedsDisplayInRect:]): When called beneath
        scrollPositionChanged(), adjust the rect by the inverse of the scroll offset.

2010-02-23  Steve Block  <steveblock@google.com>

        Reviewed by Darin Adler.

        Adds ChromeClient::cancelGeolocationPermissionRequestForFrame
        https://bugs.webkit.org/show_bug.cgi?id=34962

        This method is required so that a Geolocation object can cancel an
        asynchronous permission request. This allows the chrome client to cancel
        any UI it is showing for the permission request.

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

2010-02-22  Alexey Proskuryakov  <ap@apple.com>

        Rubber-stamped by Geoff Garen.

        Rename RuntimeObjectImp to RuntimeObject.

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::addValueToArray):
        (WebKit::NetscapePluginInstanceProxy::retainLocalObject):
        (WebKit::NetscapePluginInstanceProxy::releaseLocalObject):

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

        Reviewed by Tim Hatcher.

        Disable WebView docking to views that are too small.
        <rdar://problem/7248409> and https://bugs.webkit.org/show_bug.cgi?id=35254

        * WebCoreSupport/WebInspectorClient.mm:
        (-[WebInspectorWindowController showWindow:]): No matter the preference, don't open the inspector 
          window attached if WebCore says it shouldn't be attached.

2010-02-22  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by John Sullivan.

        <rdar://problem/7285392> 
        On Leopard, we have to disable hardware acceleration if we detect that the
        installed Core Video framework has bug <rdar://problem/7228836>.
        
        * WebView/WebView.mm:
        (coreVideoHas7228836Fix):
        (-[WebView _preferencesChangedNotification:]):

2010-02-21  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        False warnings about needing layout in
        -[WebHTMLView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:]
        https://bugs.webkit.org/show_bug.cgi?id=35218

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:]):
        Suppress the warning and the forced layout if the view is not being drawn
        in this display operation.

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

        Reviewed by Sam Weinig.

        plugInViewWithArguments: API sends wrong parameter for WebPlugInBaseURLKey
        https://bugs.webkit.org/show_bug.cgi?id=35215
        <rdar://problem/7673157>
        
        The plugInViewWithArguments: API passes a dictionary of plugin arguments. One of the parameters
        is WebPlugInBaseURLKey, which is a key that represents the base URL of the document containing
        the plug-in's view. Instead of sending the base URL, code in  WebFrameLoaderClient::createPlugin
        would incorrectly pass the source URL of the plug-in resource.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::createPlugin): When building the plug-in arguments dictionary, pass the
        real base URL for the WebPlugInBaseURLKey key.

2010-02-19  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by David Levin.

        Add an ENABLE flag for sandboxed iframes to make it possible to disable it in releases
        https://bugs.webkit.org/show_bug.cgi?id=35147

        * Configurations/FeatureDefines.xcconfig:

2010-02-19  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Maciej Stachowiak.

        https://bugs.webkit.org/show_bug.cgi?id=35132
        <rdar://problem/7664353> Mouse cursor sometimes flickers over Flash content (35132)

        * Plugins/WebNetscapePluginEventHandlerCarbon.mm:
        (WebNetscapePluginEventHandlerCarbon::mouseMoved): Send adjustCursor events on every mouse
        move. This matches Firefox, and is actually required for plug-ins to manipulate cursor wihout
        resorting to techniques such as fast firing timers.

        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView handleMouseEntered:]): Some plug-ins handle mouse cursor internally,
        but those that don't just need to get an arrow cursor (matching Firefox). This means that
        e.g. a plugin inside <A> won't get a finger mouse pointer.

        * Plugins/WebHostedNetscapePluginView.mm:
        (-[WebNetscapePluginView handleMouseEntered:]):
        (-[WebNetscapePluginView handleMouseExited:]):
        Implement this behavior here, too. Also, out of process code didn't reset mouse pointer on
        mouse exit, which it needed to do.

        * WebView/WebHTMLView.mm:
        (needsCursorRectsSupportAtPoint):
        (setCursor):
        (resetCursorRects):
        Make sure that the same workaround we have for Web content also applies to Netscape plug-ins,
        as AppKit would reset the mouse pointer to arrow if given a chance.
        (+[WebHTMLViewPrivate initialize]): Renamed setCursorIMP on Leopard and higher to prevent
        confusion - the method we override is completely different.
        (-[WebHTMLView hitTest:]): Added a FIXME about a likely bug.

2010-02-19  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/7535894> Page contents missing from snapshot on Newsweek.com article
        
        Followup to avoid capturing compositing layers twice in snapshots. Add private
        methods to WebView to specify whether drawing the WebView into an image will
        include flattened compositing layers (the default behavior) or not.

        * WebView/WebFrame.mm:
        (-[WebFrame _drawRect:contentsOnly:]): Consult the WebView flag to see if we
        want flattening.
        
        * WebView/WebViewPrivate.h: New methods.
        * WebView/WebView.mm: Ditto.
        (-[WebView _commonInitializationWithFrameName:groupName:usesDocumentViews:]):
        (-[WebView _setIncludesFlattenedCompositingLayersWhenDrawingToBitmap:]):
        (-[WebView _includesFlattenedCompositingLayersWhenDrawingToBitmap]):

        * WebView/WebViewData.h: New member variable.

2010-02-19  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=35165
        plugins/set-status.html fails on Windows bot

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::status):
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView status:]):
        Match Windows port behavior (and also Firefox one, in a way) - pass null status messages as
        empty ones to chrome.

2010-02-18  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/7535894> Page contents missing from snapshot on Newsweek.com article

        Add logic to determine when painting via the software rendering path will give an equivalent
        result to the accelerated compositing presentation. This tests for the presence of 3D transforms.

        Also have -[WebFrame _drawRect:contentsOnly:] set the PaintBehaviorFlattenCompositingLayers
        paint behavior when painting into a bitmap context, so that snapshots contain composited layers.

        * WebView/WebFrame.mm:
        (-[WebFrame _drawRect:contentsOnly:]): Set the PaintBehaviorFlattenCompositingLayers flag
        when painting into a bitmap context.
        * WebView/WebView.mm:
        (-[WebView _isSoftwareRenderable]): Returns YES if all frames can be software-rendered.
        * WebView/WebViewPrivate.h: New _isSoftwareRenderable method.

2010-02-18  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=35134
        <rdar://problem/7246280> Crash when a plugin calls NPN_SetStatus(0)

        Test: plugins/set-status.html

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::status):
        (WebKit::NetscapePluginInstanceProxy::loadURL):
        Added null checks for CFStringCreateWithCString arguments.

2010-02-17  Dmitry Titov  <dimich@chromium.org>

        Reviewed by David Levin, Darin Fisher, Simon Hausmann.

        When a live iframe element is moved between pages, it still depends on the old page.
        https://bugs.webkit.org/show_bug.cgi?id=34382

        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        Added empty implementation of a new virtual method.

        (WebFrameLoaderClient::didTransferChildFrameToNewDocument):

2010-02-17  Kent Tamura  <tkent@chromium.org>

        Reviewed by Eric Seidel.

        Introduces new Icon loading interface in order to support
        asynchronous loading.
        https://bugs.webkit.org/show_bug.cgi?id=32054

        Add an empty implementation of ChromeClient::iconForFiles().

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

2010-02-17  Timothy Hatcher  <timothy@apple.com>

        Add a way for WebView and its dependancies to be selectively included
        in WebKitStatistics leak tracking. By default WebView is not included and
        you need to subclass WebView and implement +isIncludedInWebKitStatistics
        to be included.

        rdar://problem/7567677&7572900
        https://webkit.org/b/35045

        Reviewed by Adam Roben.

        * WebView/WebDataSource.mm:
        (-[WebDataSource _initWithDocumentLoader:]): Increment WebDataSourceCount if the WebFrame is included in statistics.
        (-[WebDataSource dealloc]): Only --WebDataSourceCount if _private->includedInWebKitStatistics is YES.
        (-[WebDataSource finalize]): Ditto.
        * WebView/WebFrame.mm:
        (-[WebFrame _isIncludedInWebKitStatistics]): Return _private->includedInWebKitStatistics.
        (-[WebFrame _initWithWebFrameView:webView:]): Increment WebFrameCount if the WebView's class is included in statistics.
        (-[WebFrame dealloc]): Only --WebFrameCount if _private->includedInWebKitStatistics is YES.
        (-[WebFrame finalize]): Ditto.
        * WebView/WebFrameInternal.h:
        * WebView/WebFrameView.mm:
        (-[WebFrameView _setWebFrame:]): Increment WebFrameViewCount if the WebFrame is included in statistics.
        (-[WebFrameView initWithFrame:]): Move ++WebFrameViewCount from here since we don't
        know what WebFrame we belong to yet.
        (-[WebFrameView dealloc]): Only --WebFrameViewCount if _private->includedInWebKitStatistics is YES.
        (-[WebFrameView finalize]): Ditto.
        * WebView/WebHTMLRepresentation.mm:
        (-[WebHTMLRepresentation init]): Move ++WebHTMLRepresentationCount from here since we don't
        know what WebFrame we belong to yet.
        (-[WebHTMLRepresentation dealloc]): Only --WebHTMLRepresentationCount if _private->includedInWebKitStatistics is YES.
        (-[WebHTMLRepresentation finalize]): Ditto.
        (-[WebHTMLRepresentation setDataSource:]): Increment WebHTMLRepresentationCount if the WebFrame of the dataSource is
        included in statistics.
        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:usesDocumentViews:]):
        (-[WebView dealloc]):
        (+[WebView shouldIncludeInWebKitStatistics]): Return NO, so any WebView wont be included.
        Subclasses that care can return YES to be included.
        * WebView/WebViewInternal.h:

2010-02-16  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Generalize delayed plug-in start for background tabs for use for other media
        https://bugs.webkit.org/show_bug.cgi?id=34981

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView viewWillMoveToWindow:]): Added comment.
        (-[WebHTMLView viewDidMoveToWindow]): Ditto.

        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:usesDocumentViews:]):
        Call setCanStartMedia right away so that if this view is not in a window, it
        will not start any media.
        (-[WebView viewWillMoveToWindow:]): Call setCanStartMedia(false) when moving
        to a window of nil.
        (-[WebView viewDidMoveToWindow]): Call setCanStartMedia(true) when moved to
        a window that is non-nil.

2010-02-16  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=34988
        WebHTMLView.mm has two -willRemoveSubview: methods

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView willRemoveSubview:]): Consolidate the two copies of this method.

2010-02-16  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Geoffrey Garen and Kevin Decker.

        https://bugs.webkit.org/show_bug.cgi?id=34989
        <rdar://problem/7417965> Cursor disappears on scroll bars that are over plugin content

        This fixes event dispatch for both Cocoa and Carbon event models (mouseEntered/mouseExited
        in the former case, and adjustCursor in the latter).

        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView handleMouseEntered:]):
        (-[WebHostedNetscapePluginView handleMouseExited:]):
        * Plugins/WebBaseNetscapePluginView.h:
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView handleMouseEntered:]):
        (-[WebBaseNetscapePluginView handleMouseExited:]):
        * Plugins/WebNetscapePluginView.h:
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView handleMouseEntered:]):
        (-[WebNetscapePluginView handleMouseExited:]):
        AppKit cannot reliably dispatch events for overlapping views. We are now asking WebCore to
        notify plug-in views of mouse entered/exited as part of DOM event dispatch.

        * WebCoreSupport/WebFrameLoaderClient.mm: (NetscapePluginWidget::handleEvent): Besides
        mouse moved, dispatch plugin mouse entered/exit events in HTMLPlugInElement default event
        handler. Other mouse events are passed down by EventHandler.

2010-02-15  Alexey Proskuryakov  <ap@apple.com>

        More build fixing (for what is actually a 64-bit failure, as 32-bit apparently includes
        headers that aren't included in 64-bit).

        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::LocalObjectMap::contains):
        (WebKit::NetscapePluginInstanceProxy::LocalObjectMap::get):
        Move inline functions to .cpp; also made the class Noncopyable.

2010-02-15  Alexey Proskuryakov  <ap@apple.com>

        Mac release build fix attempt.

        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::LocalObjectMap::~LocalObjectMap):
        Implement destructor in .cpp file, where necessary headers are already included.

2010-02-12  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Kevin Decker.

        <rdar://problem/7130641> Browser objects identity is not preserved by Safari

        Out of process part.

        To avoid excessive IPC, plugin process doesn't send each NPObject release/retain call to
        Safari. It only sends one when the last one is removed, and it can destroy the proxy
        NPObject.

        However, the browser may be sending the same object out to plug-in as a function call
        argument at the same time - neither side can know what the other one is up to. The solution
        is to make the "destroying object" call return a boolean result, making it possible for 
        the browser to make plugin host keep the proxy with zero refcount for a little longer.

        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WKPCForgetBrowserObject): This function (that used to be named ReleaseObject) is only
        called when plug-in releases all of its references, so renamed it. Its boolean result
        is returned as call success or failure.

        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        (WebKit::NetscapePluginInstanceProxy::LocalObjectMap): Made the numeric ID to JSObject map
        two-way.

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::LocalObjectMap::idForObject): This method is tricky
        in that it creates objects with refcount of 1, but doesn't increase refcount when returning
        found objects. This extra count accounts for the "reference" kept by plugin process.
        (WebKit::NetscapePluginInstanceProxy::LocalObjectMap::retain): Only retaining for the
        duration of calls out to plug-in, which means that refcount is almost always equal to 1.
        Note that we can't use "++" here, due to how std::pair works!
        (WebKit::NetscapePluginInstanceProxy::LocalObjectMap::release): Ditto.
        (WebKit::NetscapePluginInstanceProxy::LocalObjectMap::clear): Clear all references when
        stopping plug-in.
        (WebKit::NetscapePluginInstanceProxy::LocalObjectMap::forget): Like release(), but only
        functional when recount is 1 (meaning that the object is not being sent out to plug-in at
        the moment).
        (WebKit::NetscapePluginInstanceProxy::NetscapePluginInstanceProxy): Updated for other changes.
        (WebKit::NetscapePluginInstanceProxy::cleanup): Ditto.
        (WebKit::NetscapePluginInstanceProxy::getWindowNPObject): Ditto.
        (WebKit::NetscapePluginInstanceProxy::getPluginElementNPObject): Ditto.
        (WebKit::NetscapePluginInstanceProxy::forgetBrowserObjectID): Ditto.
        (WebKit::NetscapePluginInstanceProxy::evaluate): Ditto.
        (WebKit::NetscapePluginInstanceProxy::invoke): Ditto.
        (WebKit::NetscapePluginInstanceProxy::invokeDefault): Ditto.
        (WebKit::NetscapePluginInstanceProxy::construct): Ditto.
        (WebKit::NetscapePluginInstanceProxy::getProperty): Ditto.
        (WebKit::NetscapePluginInstanceProxy::setProperty): Ditto.
        (WebKit::NetscapePluginInstanceProxy::removeProperty): Ditto.
        (WebKit::NetscapePluginInstanceProxy::hasProperty): Ditto.
        (WebKit::NetscapePluginInstanceProxy::hasMethod): Ditto.
        (WebKit::NetscapePluginInstanceProxy::enumerate): Ditto.
        (WebKit::NetscapePluginInstanceProxy::addValueToArray): Ditto.
        (WebKit::NetscapePluginInstanceProxy::demarshalValueFromArray): Ditto.
        (WebKit::NetscapePluginInstanceProxy::retainLocalObject): Helper for calling retain when
        making calls out to plug-in. No-op for objects that aren't wrapped to be sent (i.e. for
        objects wrapping ProxyInstance wrappers for plug-in objects being sent bak).
        (WebKit::NetscapePluginInstanceProxy::releaseLocalObject): Ditto.

        * Plugins/Hosted/ProxyInstance.mm:
        (WebKit::ProxyInstance::invoke): Retain/release arguments during call. 
        (WebKit::ProxyInstance::setFieldValue): Ditto.

        * Plugins/Hosted/WebKitPluginClient.defs: Renamed PCReleaseObject to PCForgetBrowserObject.

2010-02-12  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Removed unneeded custom implementation of isDescendantOf.

        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView shouldClipOutPlugin]): Use the
        -[NSView isDescendantOf:] method instead of our own method
        named superviewsHaveSuperviews.

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

        Reviewed by Darin Adler.

        <rdar://problem/7615234> REGRESSION (r48586): Loading an HTML page causes
        PDFKit to be loaded

        * WebView/WebPDFDocumentExtras.h: Removed the category declaration and
        addWebPDFDocumentExtras(). Declare allScriptsInPDFDocument().
        * WebView/WebPDFDocumentExtras.mm:
        (allScriptsInPDFDocument): Changed the -_web_allScripts method into this function.
        * WebView/WebPDFRepresentation.mm: Removed +initialize.
        (-[WebPDFRepresentation finishedLoadingWithDataSource:]): Use
        allScriptsInPDFDocument() instead of -_web_allScripts.

2010-02-10  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Exported some new JavaScript heap introspection.

        * Misc/WebCoreStatistics.h:
        * Misc/WebCoreStatistics.mm:
        (+[WebCoreStatistics javaScriptObjectTypeCounts]): Just like
        javaScriptProtectedObjectTypeCounts, except this function enumerates all
        live objects, not just protected objects.

2010-02-08  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Cameron Zwarich.

        Restore ENABLE_RUBY flag so vendors can ship with Ruby disabled if they choose.
        https://bugs.webkit.org/show_bug.cgi?id=34698

        * Configurations/FeatureDefines.xcconfig:

2010-02-09  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Geoffrey Garen.

        https://bugs.webkit.org/show_bug.cgi?id=34490
        WebCore::ImageEventSender::dispatchPendingEvents() crashes in certain conditions

        * ForwardingHeaders/wtf/ValueCheck.h: Added.

2010-02-10  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        Support frameset flattening
        https://bugs.webkit.org/show_bug.cgi?id=32717

        Add support for enabling/disabling FrameSet Flattening on the Mac port.

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

2010-02-09  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=34771
        A stray mouse moved event is sent to plug-ins after mouse exit

        * WebCoreSupport/WebFrameLoaderClient.mm: (NetscapePluginWidget::handleEvent): A mouseout
        DOM event is dispatched while handling NSMouseMoved - but we shouldn't be sending a
        mouse moved event to plug-ins at this point.

2010-02-09  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Darin Adler.

        Provide a way to get total number of pages to be printed
        https://bugs.webkit.org/show_bug.cgi?id=34699

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

2010-02-08  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=34727
        Assertion crashes and freezes when plug-in property access results in an exception

        * Plugins/Hosted/WebKitPluginClient.defs: Made PCSetProperty and PCRemoveProperty async.
        A plug-in can call back whil processing this call (e.g. for NPN_SetException), so we need
        to listen for messages while waiting for reply.

        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WKPCEvaluate): If there is no instance proxy, return KERN_FAILURE. This improves consistency
        between method implementations, and leaves us with one less IPC call to make in failure case
        (returning false with KERN_SUCCESS and returning KERN_FAILURE looks the same from plugin
        host code).
        (WKPCInvoke): Ditto.
        (WKPCInvokeDefault): Ditto.
        (WKPCGetProperty): Ditto.
        (WKPCSetProperty): Send a reply once done.
        (WKPCRemoveProperty): Ditto.
        (WKPCHasProperty): If there is no instance proxy, return KERN_FAILURE.
        (WKPCHasMethod): Ditto.
        (WKPCEnumerate): Ditto.

2010-02-08  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Anders Carlsson.

        <rdar://problem/6530010> OOP: Support NPN_SetException

        Tested by plugins/netscape-throw-exception.html (removed it from skipped list).

        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WKPCSetException):
        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::globalExceptionString):
        (WebKit::NetscapePluginInstanceProxy::setGlobalException):
        (WebKit::NetscapePluginInstanceProxy::moveGlobalExceptionToExecState):
        * Plugins/Hosted/ProxyInstance.mm:
        (WebKit::ProxyInstance::invoke):
        (WebKit::ProxyInstance::getPropertyNames):
        (WebKit::ProxyInstance::fieldValue):
        (WebKit::ProxyInstance::setFieldValue):
        * Plugins/Hosted/WebKitPluginClient.defs:
        Route exception string to a global that's checked after calling into plug-in (just like in
        in-process case).

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

        Reviewed by Mark Rowe.

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

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

        Rubber-stamped by Dan Bernstein.

        Fix the ability to #include <WebKit/DOMFile.h>.

        * MigrateHeaders.make: Mark DOMBlob.h as a public header since the already-public DOMFile.h depends on it.

2010-02-04  John Sullivan  <sullivan@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=34611
        WebLocalizedString() could use an assertion that it is being called on the main thread

        Reviewed by Tim Hatcher.

        * Misc/WebLocalizableStrings.m: Removed.
        * Misc/WebLocalizableStrings.mm: Copied from mac/Misc/WebLocalizableStrings.m.
        Renamed to use .mm extension so it can include a C++ header.
        (WebLocalizedString):
        Added an assertion that this is being called on the main thread.

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

        Reviewed by Simon Fraser.

        REGRESSION (r53718): When scrolling a tall window by page, the overlap between pages is too big
        https://bugs.webkit.org/show_bug.cgi?id=34371

        * WebView/WebFrameView.mm:
        (-[WebFrameView _verticalPageScrollDistance]): Use Scrollbar methods instead of
        constants, and cap the scroll distance.
        (-[WebFrameView initWithFrame:]): Use Scrollbar::pixelsPerLineStep() instead of
        cScrollbarPixelsPerLineStep.
        (-[WebFrameView _horizontalPageScrollDistance]):Use Scrollbar methods instead of
        constants, and cap the scroll distance.

2010-02-01  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Eric Seidel.

        Provide a way to get page number with layoutTestController
        https://bugs.webkit.org/show_bug.cgi?id=33840

        * Misc/WebCoreStatistics.h:
        * Misc/WebCoreStatistics.mm:
        (-[WebFrame pageNumberForElement:element:pageWidth:]):

2010-01-29  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig + Oliver Hunt.

        Bug 34346 - With JSC bindings, make processingUserGesture work with events in Isolated Worlds

        Pass processeing user gensture flag to media play/pause methods.

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

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

        Reviewed by Anders Carlsson.

        <rdar://problem/7044385> Crash at NetscapePlugInStreamLoader::didReceiveResponse()

        The crash was caused by having two streams with a streamID of 1.

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::NetscapePluginInstanceProxy): Fixed a typo. Now
        correctly increments m_currentURLRequestID to account for the manual stream.
        (WebKit::NetscapePluginInstanceProxy::disconnectStream): If the stream is the manual stream,
        null it out instead of trying to remove it from the map. Added an assertion.
        (WebKit::NetscapePluginInstanceProxy::loadRequest): Added an assertion.

== Rolled over to ChangeLog-2010-01-29 ==
