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

        Merge r41190.

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

        Reviewed by Geoffrey Garen.

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

        * Interfaces/IWebViewPrivate.idl:
        * WebView.cpp:
        (WebView::setJavaScriptURLsAreAllowed):
        * WebView.h:

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

        Merge r33579.

    2008-05-19  Ada Chan  <adachan@apple.com>

        Added IWebCookieManager interface which allows client to set the
        CFHTTPCookieStorageRef that WebCore should use.
        
        Implement IWebCookieManager interface in WebCookieManager.
        
        Update the cookie accept policy in the current cookie storage.

        Reviewed by Steve Falkenburg.

        * ForEachCoClass.h:
        * Interfaces/IWebCookieManager.idl: Added.
        * Interfaces/WebKit.idl:
        * WebCookieManager.cpp: Added.
        (WebCookieManager::createInstance):
        (WebCookieManager::WebCookieManager):
        (WebCookieManager::~WebCookieManager):
        (WebCookieManager::QueryInterface):
        (WebCookieManager::AddRef):
        (WebCookieManager::Release):
        (WebCookieManager::cookieStorage):
        (WebCookieManager::setCookieStorage):
        * WebCookieManager.h: Added.
        * WebKit.vcproj/WebKit.vcproj:
        * WebKitClassFactory.cpp:
        * WebView.cpp:
        (updateSharedSettingsFromPreferencesIfNeeded):

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

        Merge r37489.

    2008-10-10  Ada Chan  <adachan@apple.com>

        Bug 21526: The hashmap webPreferencesInstances in WebPreferences.cpp can 
        potentially hold onto stale instances of WebPreferences
        https://bugs.webkit.org/show_bug.cgi?id=21526
        
        webPreferencesInstances now keeps a reference to all the instances it holds.
        Fix up callers of WebPreferences::removeReferenceForIdentifier() to call 
        it after they have released their references to the WebPreferences objects.

        Reviewed by Adam Roben.

        * WebPreferences.cpp:
        (WebPreferences::getInstanceForIdentifier):
        (WebPreferences::removeReferenceForIdentifier):
        * WebView.cpp:
        (WebView::close):
        (WebView::setPreferences):

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

        Merge r37661.

    2008-10-16  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Steve Falkenburg.

        <rdar://problem/6292718>
        Implement a standard way to get the UA given an application name.

        * Interfaces/IWebViewPrivate.idl:
        * WebView.cpp:
        (WebView::standardUserAgentWithApplicationName):
        * WebView.h:

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

        Rubber-stamped by Jon Honeycutt.

        Export logging symbols in debug.

        * WebKit.vcproj/WebKit_debug.def:

2008-10-13  Steve Falkenburg  <sfalken@apple.com>

        Roll out r36883, r36884.

        Added unimplemented method to IWebViewPrivate (paintDocumentRectToContext) for nightly compatibility
        (we need to preserve vtable order).

        * Interfaces/IWebViewPrivate.idl:
        * WebFrame.cpp:
        (WebFrame::transitionToCommittedForNewPage):
        (WebFrame::unmarkAllBadGrammar):
        * WebFrame.h:
        * WebView.cpp:
        (WebView::WebView):
        (WebView::paintIntoBackingStore):
        (WebView::paintDocumentRectToContext):
        * WebView.h:

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

        Merge r36005.

    2008-08-30  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Add WebView SPI to defer loading callbacks.

        * Interfaces/IWebViewPrivate.idl:
        * WebView.cpp:
        (WebView::setDefersCallbacks):
        (WebView::defersCallbacks):
        * WebView.h:

2008-10-02  Steve Falkenburg  <sfalken@apple.com>

        Merge r31212 for fix <rdar://problem/6168976> visitCount not updated in History.plist

    2008-03-21  Ada Chan  <adachan@apple.com>

        <rdar://problem/5810324> visitCount not updated in History.plist
        Call WebCore::HistoryItem::mergeAutoCompleteHints() in WebHistoryItem::mergeAutoCompleteHints().

        Reviewed by Steve.

        * WebHistoryItem.cpp:
        (WebHistoryItem::mergeAutoCompleteHints):
        (WebHistoryItem::QueryInterface):

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

        Merge r34834.

    2008-06-27  Adam Roben  <aroben@apple.com>

        Change WebKitGraphics truncation functions to return the length of the
        truncated string

        Reviewed by Darin Adler.

        * WebKitGraphics.cpp:
        (CenterTruncateStringToWidth):
        (RightTruncateStringToWidth):
        Return the length.
        * WebKitGraphics.h:
        The truncation functions now return an unsigned int that is the length
        of the truncated string. The whole file has been marked extern "C" to
        keep the symbols for these functions from changing (which would break
        nightly builds).

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

        Merge r35182.

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

        Add WebKit[Set]ShouldUseFontSmoothing functions

        <rdar://6059127>

        Reviewed by John Sullivan.

        * WebKit.vcproj/WebKit.def:
        * WebKit.vcproj/WebKit_debug.def:
        Export the new functions.
        * WebKitGraphics.cpp:
        (WebKitSetShouldUseFontSmoothing):
        (WebKitShouldUseFontSmoothing):
        Call through to the relevant WebCore functions.
        * WebKitGraphics.h:

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

        Merge r32881.

    2008-05-05  Steve Falkenburg  <sfalken@apple.com>

        Add WebPreference for application chrome mode.
        
        Reviewed by Dave Hyatt.

        * Interfaces/IWebPreferencesPrivate.idl:
        * WebPreferenceKeysPrivate.h:
        * WebPreferences.cpp:
        (WebPreferences::initializeDefaultSettings):
        (WebPreferences::inApplicationChromeMode):
        (WebPreferences::setApplicationChromeMode):
        * WebPreferences.h:
        * WebView.cpp:
        (WebView::notifyPreferencesChanged):

2008-04-01  Steve Falkenburg  <sfalken@apple.com>

        Merge r31015 to Safari-3-1-branch.

    2008-03-12  Ada Chan  <adachan@apple.com>

        <rdar://problem/5795843> 
        CFURLDownload needs to be cancelled if we don't have a destination path
        to save resume information.

        Reviewed by Brady.

        * WebDownload.cpp:
        (WebDownload::cancelForResume):

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

        Merge r30433 to Safari-3-1-branch.

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

        Reviewed by Darin and Geoff.

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

        * WebView.cpp:
        (WebView::notifyPreferencesChanged): Added a call to Settings::setNeedsSiteSpecificQuirks.
        (WebView::setAllowSiteSpecificHacks): Added a comment about the problem Darin noticed, where
        after you disable the site-specific hacks they persist until you open a new window or tweak
        some other preference.

2008-02-20  Timothy Hatcher  <timothy@apple.com>

        Merge r30400 to Safari-3-1-branch.

    2008-02-18  Steve Falkenburg  <sfalken@apple.com>

        Make Drosera work on Vista.
        
        Runtime type library registration on Vista requires use of two new call:
        RegisterTypeLibraryForUser and UnRegisterTypeLibraryForUser, which write to
        HKCU.  LoadTypeLib[Ex] registers under HKLM, which fails under vista due to UAC.
        
        Reviewed by Adam.

        * WebKitDLL.cpp:
        (DllUnregisterServer): Call UnRegisterTypeLibraryForUser if available. Fix version number.
        (DllRegisterServer): Call RegisterTypeLibraryForUser if available.

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

        Merge r30206 to Safari-3-1-branch.

    2008-02-13  Ada Chan  <adachan@apple.com>

        <rdar://problem/5740656> Leak in postDidAddIconNotification in WebIconDatabase

        Reviewed by Darin.

        * WebIconDatabase.cpp:
        (postDidAddIconNotification): Need to adopt the newly created instance of CFDictionaryPropertyBag, 
        which already has a ref count of 1.

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

        Merge r30086 to Safari-3-1-branch.

    2008-02-07  Ada Chan  <adachan@apple.com>

        <rdar://problem/5292433> certificate authentication support broken in Safari 3.0
        Added mechanism to communicate client certificate info back to CFNetwork.

        Reviewed by Adam.

        * Interfaces/IWebError.idl: Added new WebURLErrorClientCertificateRequired error.
        * Interfaces/IWebMutableURLRequestPrivate.idl: Added. Added method to set client 
        certificate info on the request.
        * WebKit.vcproj/Interfaces.vcproj: Added new idl.
        * WebKit.vcproj/WebKit.vcproj: Link crypt32.lib
        * WebKit.vcproj/WebKitGUID.vcproj:
        * WebMutableURLRequest.cpp:
        (WebMutableURLRequest::QueryInterface): Implements IWebMutableURLRequestPrivate.
        (deallocCertContext): Free certificate context.
        (copyCert): Duplicate the certificate context and returns it in a CFDataRef.
        (WebMutableURLRequest::setClientCertificate):
        * WebMutableURLRequest.h:

2008-02-05  Rodney Dawes  <dobey@wayofthemonkey.com>

        Reviewed by Anders Carlsson.

        Part one of http://bugs.webkit.org/show_bug.cgi?id=16924.
        Shared PluginDatabase, PluginInfoStore and PluginPackage implementations.

        Track WebCore renames.

        * WebFrame.cpp:
        (WebFrame::createPlugin):
        (WebFrame::redirectDataToPlugin):
        (WebFrame::createJavaAppletWidget):
        (WebFrame::objectContentType):
        * WebView.cpp:
        (WebViewWndProc):
        (WebView::canShowMIMEType):
        (WebView::addAdditionalPluginPath):

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

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=15248
        <rdar://problem/5497032> Can not enter accented characters using alt-numeric keypad (take two)

        * WebView.cpp: (WebViewWndProc): KeyUp messages need to be translated, too.

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

        - fix <rdar://problem/5680469> Each database worker thread takes a JSLock,
          which slows down all JavaScript execution until the thread terminates

        * WebIconDatabase.cpp:
        (WebIconDatabase::scheduleNotificationDelivery): Updated for new callOnMainThread.
        (WebIconDatabase::deliverNotifications): Ditto.
        * WebIconDatabase.h: Ditto.

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

        Fix <rdar://5713172> Focus lost from Gmail message body after toggling
        tabs

        This regressed in r29583. Prior to r29583, the code path that resulted
        in calling focusController->setFocusedFrame(0) was never getting hit.
        r29583 changed the code to adhere to the comment above the code and
        actually call setFocusedFrame(0) when losing focus to another part of
        the window. It turns out this is wrong behavior (and not what
        WebKit/mac does). The only time we should clear the focused frame is
        when we tab out of the WebView, and that's already taken care of by
        FocusController::advanceFocus. The code to clear the focused frame in
        WebView was written before FocusController::advanceFocus, so it was
        correct at one point but no longer is.

        We now never call setFocusedFrame(0) when the WebView receives a
        WM_KILLFOCUS message. Instead we just call setFocused(false) on the
        focused frame so that blur events will be sent. This matches what
        WebKit/mac does.

        Reviewed by Darin and Adele.

        * WebView.cpp:
        (WebViewWndProc): Also reworded a couple of comments to make them
        clearer.

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

        Let WebCore take care of the highlight drawing entirely

        Reviewed by Darin.

        * WebInspectorClient.cpp:
        (WebInspectorClient::highlight): We now just show our highlight
        window and let WebCore figure out what/where to paint. Once all ports
        follow suit the Node* parameter to this method should be removed
        entirely, and the name should probably change to
        updateAndShowHighlight or something similar.
        * WebNodeHighlight.cpp: Renamed m_webView to m_inspectedWebViewWindow.
        (WebNodeHighlight::WebNodeHighlight): Now takes a WebView* parameter.
        (WebNodeHighlight::show): Renamed from highlight(). Now gets the
        WebView's HWND. Updated for member rename/removal.
        (WebNodeHighlight::updateWindow): Updated for member rename and for
        InspectorController changes.
        * WebNodeHighlight.h: Added m_inspectedWebView member, removed m_rect
        member, renamed highlight(Node*) -> show().

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

        Move node highlight drawing code to WebCore

        Reviewed by Darin.

        * WebNodeHighlight.cpp:
        (WebNodeHighlight::updateWindow): Call into WebCore to do the node
        highlight drawing.

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

        Fix a crash when opening the Inspector

        Reviewed by Anders.

        * WebInspectorClient.cpp:
        (WebInspectorClient::createPage): Call
        WebPreferences::initWithIdentifier so our custom WebPreferences will
        have all its members initialized.

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

        Fix Bug 16786: "Display images when page opens" preference affects
        Inspector

        <http://bugs.webkit.org/show_bug.cgi?id=16786>
        <rdar://5712914>

        Reviewed by Anders and Darin.

        * WebInspectorClient.cpp:
        (WebInspectorClient::createPage): Create our own custom WebPreferences
        so that we won't be affected by global preference changes. This
        matches what Mac does.

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

        Fix <rdar://5713302> Web Inspector on Windows is not using the
        localized strings

        Reviewed by Steve.

        * WebInspectorClient.cpp:
        (getWebKitBundle): Added.
        (WebInspectorClient::createPage): Call getWebKitBundle.
        (WebInspectorClient::localizedStringsURL): Implemented.

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

        Reviewed by Darin.

        <rdar://problem/5710692> All storage tests fail/crash

        * WebChromeClient.cpp: (WebChromeClient::exceededDatabaseQuota): Clients that do not implement
        database quota callbacks should have no database support - but not crash.

2008-01-26  Steve Falkenburg  <sfalken@apple.com>

        <rdar://problem/5707607> REGRESSION: I hear a beep when selecting Alt-enter in address or search fields
        
        Reviewed by Oliver.

        * WebView.cpp:
        (WebView::keyDown): Allow alt-return to be marked as handled by WebKit.

2008-01-24  Steve Falkenburg  <sfalken@apple.com>

        Build fix

        * WebKit.vcproj/WebKit.sln:
        * WebKit.vcproj/WebKit.submit.sln:

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

        Build fix

        * WebView.cpp: Added a comma.

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

        Reviewed by Adam Roben.

        <rdar://problem/5702734> REGRESSION(r28936/r15890): Shift+del does not work in win Safari

        * WebView.cpp: Fixed keyDownEntries to list this shortcut (and related ones, for consistency).

2008-01-23  Steve Falkenburg  <sfalken@apple.com>

        <rdar://problem/5698732> Copyright strings should include 2008
        
        Reviewed by Sam.

        * WebKit.vcproj/WebKit.rc:

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

        Fix <rdar://5698502> Inspector window reverts to default position/size unexpectedly

        Reviewed by Hyatt.

        * WebInspectorClient.cpp:
        (defaultWindowRect): Added.
        (WebInspectorClient::createPage):
            - Use defaultWindowRect() to set the initial size/position of the
              Inspector window.
            - Pass the Inspector window's client rect to
              IWebView::initWithFrame so that the WebView will be initially
              sized to fill the window.
        (WebInspectorClient::showWindow): Don't move/resize the window back to
        the defaults every time this method is called.

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

        Fix <rdar://5700620> REGRESSION (r28190): "Open frame in new tab" instead of "Open link in new tab" @ digg.com

        Test: fast/events/contextmenu-scrolled-page-with-frame.html

        Reviewed by Dan.

        * WebView.cpp:
        (WebView::handleContextMenuEvent): Translate the mouse coordinates
        into document coordinates before performing the hit-test. This is what
        EventHandler does internally.

2008-01-23  Steve Falkenburg  <sfalken@apple.com>

        <rdar://problem/5699509> Allow file upload dialog to be localized.
        
        Reviewed by Darin.

        * English.lproj/Localizable.strings: Updated.
        * WebCoreLocalizedStrings.cpp:
        (WebCore::uploadFileText): Added.
        (WebCore::allFilesText): Added.

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

        Fix <rdar://5693599> REGRESSION (r29369): scroll bars are drawing when they shouldn't be on an ad on cnn.com

        Now that we have multiple FrameViews per Frame on Windows, we need to
        make sure each FrameView gets its scrolling mode set correctly. On Mac
        this works because WebFrameView holds the scrolling mode and a single
        WebFrameView is shared by many FrameViews. On Windows, we have no such
        shared object, so we just ask the Frame's owner element for the
        scrolling mode.

        Tests: fast/frames/frame-scrolling-attribute.html
               fast/frames/iframe-scrolling-attribute.html

        Reviewed by Hyatt.

        * WebFrame.cpp:
        (WebFrame::transitionToCommittedForNewPage): Set the scrolling mode
        on the FrameView based on the scrolling mode of the Frame's owner
        element.

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

        Reviewed by John Sullivan.

        - fix <rdar://problem/5644324> Delegate-less WebKit clients should have no databases
        - fix incorrect value for WebDatabaseDisplayNameKey in header
        
        * Interfaces/IWebDatabaseManager.idl: Renamed detailsForDatabaseWithOrigin to
        detailsForDatabase. Replaced deleteDatabasesWithOrigin with deleteOrigin.
        Renamed deleteDatabaseWithOrigin to deleteDatabase. Fixed incorrect value for
        WebDatabaseDisplayNameKey.
        * Interfaces/IWebPreferencesPrivate.idl: Removed defaultDatabaseQuota and
        setDefaultDatabaseQuota.
        * Interfaces/IWebUIDelegatePrivate.idl: Replaced the two database quota functions
        with a single one.

        * WebChromeClient.cpp:
        (WebChromeClient::exceededDatabaseQuota): Replaced the two database quota functions
        with a single one.
        * WebChromeClient.h: Ditto.

        * WebDatabaseManager.cpp:
        (WebDatabaseManager::detailsForDatabase): Changed to check for a name of null to
        detect a nonexistent database rather than using isValid.
        (WebDatabaseManager::deleteOrigin): Updated for name change (actually a semantic
        change too, but both have the same name).
        (WebDatabaseManager::deleteDatabase): Updated for name change.
        (WebKitSetWebDatabasesPathIfNecessary): Ditto.

        * WebDatabaseManager.h: Updated for name changes.

        * WebPreferenceKeysPrivate.h: Removed WebKitDefaultDatabaseQuotaKey.
        * WebPreferences.cpp:
        (WebPreferences::initializeDefaultSettings): Removed the default for
        WebKitDefaultDatabaseQuotaKey.
        * WebPreferences.h: Removed defaultDatabaseQuota and setDefaultDatabaseQuota.
        * WebView.cpp:
        (WebView::notifyPreferencesChanged): Removed the code to set the
        default database origin quota in WebCore::Settings based on IWebPreferencesPrivate.

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

        Fix inconsistent line endings and set svn:eol-style=native
        on IDL files that did not have it set.

        * Interfaces/IGEN_DOMObject.idl:

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

        Fix <rdar://5693854> REGRESSION (r29581): fast/events/frame-click-focus.html failing

        Restored the previous behavior of IWebViewPrivate::updateActiveState,
        which DRT depends on, and renamed it to
        IWebViewPrivate::updateFocusedAndActiveState to be clearer about its
        side-effects.

        Reviewed by Adele.

        * Interfaces/IWebViewPrivate.idl:
        * WebView.cpp:
        (WebViewWndProc): Removed some FIXMEs that we no longer want to fix
        because the current design is better.
        (WebView::updateActiveState): This is now just a method of WebView,
        not any of its public interfaces.
        (WebView::updateFocusedAndActiveState): Performs the tasks that the
        old IWebViewPrivate::updateActiveState performed.
        * WebView.h:

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

        Reviewed by Adam Roben.

        Fix plugin-related tests in Debug_Internal configuration, which are failing because of CRT version mismatch
        between DRT and TestNetscapePlugin.

        * WebKit.vcproj/WebKit.sln: Use newly added TestNetscapePlugin Debug_Internal configuration.

2008-01-17  Steve Falkenburg  <sfalken@apple.com>

        Build fix.

        * WebKit.vcproj/WebKit.make:

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

        Trigger activation changes at the right time by listening for WM_NCACTIVATE

        This is the final part of <rdar://5006915> Inactive look for Aqua
        controls

        WebView now listens to messages sent to its top-level parent window.
        When the top-level parent receives a WM_NCACTIVATE message, WebView
        recalculates whether it is contained within the current active window.

        Reviewed by Darin.

        * Interfaces/IWebViewPrivate.idl:
        (IWebViewPrivate::windowAncestryDidChange): Added. WebKit clients
        should call this when they change the parent window chain of a
        WebView.
        * WebView.cpp:
        (WebView::WebView): Initialize new member.
        (findTopLevelParent): Added.
        (WebViewWndProc):
            - Separated activation handling from focus handling, now that
              activation handling is taken care of by updateActiveState
              exclusively.
            - Compare top-level parents in our WM_KILLFOCUS handler so that we
              really know if focus is staying inside our top-level window.
            - Update our active state on WM_WINDOWPOSCHANGED.
            - Added a WM_TIMER handler.
        (WebView::initWithFrame): Call windowAncestryDidChange after setting
        up our HWND as a child of the host window.
        (WebView::windowReceivedMessage): Added. Update our active state when
        our top-level parent receives a WM_NCACTIVATE message.
        (WebView::updateActiveStateSoon): Added.
        (WebView::setHostWindow): Call windowAncestryDidChange after changing
        the host window.
        (WebView::updateActiveState): We are active if our top-level parent is
        the same as the top-level parent of the active window.
        (WebView::windowAncestryDidChange): Added. Recalculates our top-level
        parent and registers as a listener for the new top-level parent's
        messages.
        * WebView.h: Made WebView and WindowMessageListener so that it can
        utilize WindowMessageBroadcaster to listen to its top-level parent's
        messages.

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

        Updated for ScrollBarClient changes

        Reviewed by Darin.

        * WebScrollBar.h:
        (WebScrollBar::isActive): Added.

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

        Updated for changes to WebCore methods

        Focus and active state are now handled (somewhat) separately. Future
        patches will further separate these concepts.

        Reviewed by Darin.

        * WebView.cpp:
        (WebViewWndProc): Updated for method renames.
        (WebView::updateActiveState): Only change the active state here. Focus
        is handled inside WM_SETFOCUS and WM_KILLFOCUS message handlers.

2008-01-16  Steve Falkenburg  <sfalken@apple.com>

        <rdar://problem/5097419> Cursor flickers when over window resizer
        
        Reviewed by Sam.

        * WebView.cpp:
        (WebViewWndProc): Don't set the resize cursor when over the non-border resize area.

2008-01-15  Steve Falkenburg  <sfalken@apple.com>

        <rdar://problem/5663888> Cannot type into a JavaScript prompt created from a timer
        
        Allow nested timers from javascript prompts to allow for WebView-based edit fields.
        
        Reviewed by Darin.

        * WebChromeClient.cpp:
        (WebChromeClient::runJavaScriptPrompt):

2008-01-14  Steve Falkenburg  <sfalken@apple.com>

        Use shared vsprops for most vcproj properties.
        
        Reviewed by Darin.

        * WebKit.vcproj/Interfaces.vcproj:
        * WebKit.vcproj/WebKit.vcproj:
        * WebKit.vcproj/WebKitGUID.vcproj: Add missing Debug_Internal config.

2008-01-11  Steve Falkenburg  <sfalken@apple.com>

        Share common files across projects.
        
        Unify vsprops files
        Debug:          common.vsprops, debug.vsprops
        Debug_Internal: common.vsprops, debug.vsprops, debug_internal.vsprops
        Release:        common.vsprops, release.vsprops
        
        Shared properties can go into common.vsprops, shared debug settings can go into debug.vsprops.
        debug_internal.vsprops will be mostly empty except for file path prefix modifiers.

        Pull auto-version.sh, VERSION, and PRODUCTVERSION from tools.

        Reviewed by Adam Roben.

        * WebKit.vcproj/Interfaces.vcproj:
        * WebKit.vcproj/PRODUCTVERSION: Removed.
        * WebKit.vcproj/VERSION: Removed.
        * WebKit.vcproj/WebKit.vcproj:
        * WebKit.vcproj/WebKitGUID.vcproj:
        * WebKit.vcproj/auto-version.sh: Removed.
        * WebKit.vcproj/debug.vsprops: Removed.
        * WebKit.vcproj/debug_internal.vsprops: Removed.
        * WebKit.vcproj/release.vsprops: Removed.

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

        Fix Bug 16828: WebView never paints if first page load is canceled after being committed but before layout

        <http://bugs.webkit.org/show_bug.cgi?id=16828>
        <rdar://5682402>

        Now that we have 1) a real loader and 2) multiple FrameViews per
        Frame, we no longer need the hackery we had in our WM_PAINT handler
        that decided whether or not to paint. We now always want to paint,
        letting the swapping of FrameViews that happens in
        transitionToCommittedForNewPage handle which document gets painted.

        Reviewed by Hyatt.

        * WebView.cpp:
        (WebViewWndProc): Removed hackery that decided sometimes not to paint.

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

        Windows build fix.  Update to match method name in WebCore.

        * WebJavaScriptCollector.cpp:
        (WebJavaScriptCollector::collectOnAlternateThread):

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

        Reviewed by John Sullivan.

        Updated for transition away from JavaScriptStatistics, which is gone now.

        * WebJavaScriptCollector.cpp:
        (WebJavaScriptCollector::collect):
        (WebJavaScriptCollector::collectOnAlternateThread):
        (WebJavaScriptCollector::objectCount):

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

        Not reviewed, build fix.
        
        - more build fixing

        * WebDatabaseManager.cpp:
        * WebSecurityOrigin.h:

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

        Not reviewed, build fix.
        
        - try to fix build

        * WebDatabaseManager.cpp:
        (WebDatabaseManager::databasesWithOrigin):
        * WebSecurityOrigin.h:

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

        Reviewed by Sam.

        - remove SecurityOriginData and fold its functionality into SecurityOrigin

        * WebChromeClient.cpp:
        (WebChromeClient::requestQuotaIncreaseForNewDatabase):
        (WebChromeClient::requestQuotaIncreaseForDatabaseOperation):
        * WebChromeClient.h:
        * WebDatabaseManager.cpp:
        (WebDatabaseManager::origins):
        (WebDatabaseManager::databasesWithOrigin):
        (WebDatabaseManager::detailsForDatabaseWithOrigin):
        (WebDatabaseManager::deleteDatabasesWithOrigin):
        (WebDatabaseManager::deleteDatabaseWithOrigin):
        (WebDatabaseManager::dispatchDidModifyOrigin):
        (WebDatabaseManager::dispatchDidModifyDatabase):
        * WebDatabaseManager.h:
        * WebSecurityOrigin.cpp:
        (WebSecurityOrigin::createInstance):
        (WebSecurityOrigin::WebSecurityOrigin):
        (WebSecurityOrigin::protocol):
        (WebSecurityOrigin::domain):
        (WebSecurityOrigin::port):
        (WebSecurityOrigin::usage):
        (WebSecurityOrigin::quota):
        (WebSecurityOrigin::setQuota):
        * WebSecurityOrigin.h:

2008-01-10  David Kilzer  <ddkilzer@apple.com>

        dftables should be rewritten as a script

        <http://bugs.webkit.org/show_bug.cgi?id=16818>
        <rdar://problem/5681463>

        Reviewed by Darin.

        * WebKit.vcproj/WebKit.sln: Removed reference to dftables project.

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

        Fix many bugs by giving Windows one FrameView per page load
        
        Bugs include:
            <rdar://5659200>
                Windows back/forward cache causes crashes in the layout tests
            <rdar://5659355>
            <http://bugs.webkit.org/show_bug.cgi?id=16808>
                REGRESSION: PLT broken on Windows due to back/forward cache
            <rdar://5663654>
            <http://bugs.webkit.org/show_bug.cgi?id=16607>
                Random crashes in FrameView::scheduleRelayout while surfing
                Thinkgeek

        On Windows until now we've only had one FrameView per Frame. Once the
        back/forward cache was turned on this started causing assertions to
        fail and crashes to occur due to a single FrameView being both in the
        back/forward cache (possibly multiple times!) and used by a live
        document. We now create a new FrameView for each page load, just as
        Mac does.

        This has the side-effect of plugging some of the world leaks seen at
        the end of the PLT.

        Reviewed by Hyatt.

        * WebFrame.cpp:
        (WebFrame::initWithWebFrameView): Don't create the FrameView right
        away -- it'll be created when the load is committed.
        (WebFrame::transitionToCommittedFromCachedPage): Match the Mac by no
        longer calling resetMultipleFormSubmissionProtection here.
        (WebFrame::transitionToCommittedForNewPage): Ported code from
        -[WebCoreFrameBridge
        createFrameViewWithNSView:marginWidth:marginHeight:],
        -[WebCoreFrameBridge installInFrame:], and moved code here from
        WebFrame::initWithWebFrameView and WebView::initWithFrame. WebCore
        takes care of resetMultipleFormSubmissionProtection, just like it does
        on the Mac.
        * WebView.cpp:
        (WebView::initWithFrame): Moved FrameView initialization code to
        WebFrame::transitionToCommittedForNewPage.

2008-01-09  Ada Chan  <adachan@apple.com>

        Fix crash that could happen if the key we are passing to the HashMap is 0 in WebView::interpretKeyEvent().

        Reviewed by Darin.

        * WebView.cpp:
        (WebView::interpretKeyEvent):

2008-01-08  Steve Falkenburg  <sfalken@apple.com>

        Fix build.

        * DOMCoreClasses.cpp:

2008-01-07  Antti Koivisto  <antti@apple.com>

        Try to fix the Windows build.

        * WebKit.vcproj/WebKit.sln:

2008-01-07  Antti Koivisto  <antti@apple.com>

        Reviewed by Steve.
        
        Re-enable media support in Windows build.

        * WebKit.vcproj/WebKit.vcproj:

2008-01-07  Steve Falkenburg  <sfalken@apple.com>

        Build fix.

        * WebKit.vcproj/InterfacesGenerated.vcproj:

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

        Reviewed by Dave Hyatt.

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

        * WebView.cpp:
        (WebView::setShouldApplyMacFontAscentHack):

2008-01-07  Holger Freyther  <zecke@selfish.org>

        Reviewed by Alp Toker.

        * Qt and Gtk must know if a ContextMenuItem is checkable. Add a new ContextMenuItemType for checkable
        actions.
        * Use this information in the Gtk platform to create a GtkCheckMenuItem when needed.
        * Update the ContextMenuController to accept CheckableActionTypes as well.
        * Change ContextMenu.cpp to use the CheckableActionType. The information if a item is checkable
        was extracted from ContextMenu::checkOrEnableIfNeeded.
        * Update the Qt and Windows port.

        * WebContextMenuClient.cpp:

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

        Reviewed by Adam Roben.

        http://bugs.webkit.org/show_bug.cgi?id=16733
        REGRESSION: Crash on Safari Start

        * Interfaces/IWebViewPrivate.idl: Should have added a new method at the end.

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

        Reviewed by Darin.

        <rdar://problem/5611712> xsl:sort does not use a case folding sort, and the 'case-order' attribute is ignored (16077)

        * WebKit.vcproj/WebKit.vcproj: Link to icuin{_debug}.lib

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

        Fix <rdar://4968855> Shift-PageUp/Shift-PageDown only select one line of text

        Test: platform/win/editing/selection/shift-page-down-up.html

        Reviewed by Oliver.

        * WebView.cpp: Correct the commands associated with
        Shift-PageUp/Shift-PageDown.

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

        Reviewed by Darin.

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

        * Interfaces/IWebViewPrivate.idl:
        * WebView.cpp:
        (WebView::executeCoreCommandByName):
        * WebView.h:
        Added an SPI to implement layoutTestController.execCommand.

2008-01-03  Ada Chan  <adachan@apple.com>

        Replaced the use of editor command "ForwardDelete" with "DeleteForward" to be consistent
        with our use of "DeleteBackward".

        Rubber-stamped by Jon.

        * WebView.cpp:

2008-01-03  Ada Chan  <adachan@apple.com>

        Regression: backspace stopped working on text inputs
        - Replaced the use of editor command "BackwardDelete" with "DeleteBackward" since it's no longer supported.

        Reviewed by Adam.

        * WebEditorClient.cpp:
        (WebEditorClient::textWillBeDeletedInTextField):
        * WebView.cpp:

2008-01-02  Alice Liu  <alice.liu@apple.com>

        Reviewed by Maciej.

        Fixed <rdar://5283861> (problems scrolling in gmail message content area)

        * WebView.cpp:
        (WebView::keyDown):
        bubble scrolling from a key event

2008-01-01  Matt Lilek  <webkit@mattlilek.com>

        Attempt to fix the Windows bots until the bots
        can get the Quicktime SDK installed.

        * WebKit.vcproj/WebKit.sln:
        * WebKit.vcproj/WebKit.vcproj:

2007-12-30  Matt Lilek  <webkit@mattlilek.com>

        Reviewed by Darin.

        Bug 16578: Windows Web Inspector window needs minimum size
        http://bugs.webkit.org/show_bug.cgi?id=16578

        * WebInspectorClient.cpp:
        (WebInspectorClient::onGetMinMaxInfo):
        (WebInspectorWndProc):
        * WebInspectorClient.h:

2007-12-21  Antti Koivisto  <antti@apple.com>

        Reviewed by Steve.
        
        Build media support on Windows.

        * WebKit.vcproj/WebKit.sln:
        * WebKit.vcproj/WebKit.vcproj:

2007-12-21  Ada Chan  <adachan@apple.com>

        Implemented DOMDocument::getElementById().

        Reviewed by Darin.

        * DOMCoreClasses.cpp:
        (DOMDocument::getElementById):

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

        Reviewed by Steve and Darin.

        <rdar://problem/5497037> Win32: Accelerator keys (ctrl-x,c,v,w,q,etc) only fire keyUp,
        keyDown/Press consumed by accelerator table (14104)

        <rdar://problem/5346299> preventing default behavior for key down does not block accelerators like Ctrl+N

        This is WebKit part of a fix, most of which will be in Safari.

        * WebView.cpp:
        (WebViewWndProc): Return our result for WM_(SYS)KEYDOWN to let the client know whether
        further procesing is desired.

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

        Build fix: cannot use framework-style include for ProgIDMacros.h,
        because the file is only created on a later step. 

        * ForEachCoClass.h:

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

        Reviewed by Steve.

        - <rdar://5656485> Drosera: Win: Nightly does not reliably connect to 
        WebKit.

        - Drosera and Safari need to use the same ProgIDs in order for
        CoCreateInstance to work properly.  The most robust way to do this is
        for WebKit to dynamically publish those ProgIDs.

        * ForEachCoClass.cpp: Added.
        (setUseOpenSourceWebKit):
        (progIDForClass):
        * ForEachCoClass.h: Added functionality to publish ProgIDs.
        * WebKit.vcproj/WebKit.def: Exposed added functions for applications.
        * WebKit.vcproj/WebKit.vcproj: Added ForEachCoClass.cpp
        * WebKit.vcproj/WebKit_debug.def: Exposed added functions fori
        applications.

2007-12-19  Dave Hyatt <hyatt@apple.com>

        Add a fourth preference value for GDI text in the font smoothing prefs.
        
        Reviewed by mitz

        * Interfaces/IWebPreferences.idl:
        * WebPreferenceKeysPrivate.h:
        * WebPreferences.cpp:
        (WebPreferences::initializeDefaultSettings):
        (WebPreferences::fontSmoothing):
        (WebPreferences::setFontSmoothing):
        * WebView.cpp:
        (WebView::notifyPreferencesChanged):

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

        Reviewed by Sam.

        - <rdar://4516170> Back/Forward Cache on Windows

        * WebFrame.cpp:
        (WebFrame::forceLayout): Implemented this. Just calling through to
        Frame::forceLayout matches the Mac pretty well and should be enough
        for now. Without this we won't repaint the new page when we go back
        and forward.
        (WebFrame::dispatchWillSubmitForm): Use COMPtr's AdoptCOM constructor
        instead of the adoptRef function.
        (WebFrame::restoreViewState): Removed unneeded notImplemented() call.
        This is implemented as much as it needs to be.
        (WebFrame::shouldGoToHistoryItem): Ditto.
        (WebFrame::saveViewStateToItem): Ditto.
        (WebFrame::canCachePage): Ditto, also changed it to return true. This
        is what was preventing the back/forward cache from running, and there's
        no need for any additional checks in the Windows version.

        * WebView.cpp:
        (PreferencesChangedOrRemovedObserver::onNotify): Fix backwards null check
        that was preventing this notification from ever being sent, which in turn
        meant that page cache had a capacity of 0.
        (WebView::initWithFrame): Removed unneeded setUsesPageCache(false) code.
        This actually was ineffective and ended up doing no harm, but we don't
        need it.

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

        Reviewed by Darin.

        http://bugs.webkit.org/show_bug.cgi?id=16462
        REGRESSION: access keys broken on Windows

        * WebView.cpp: (WebView::keyPress): Handle system key presses as access keys.

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

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=16436
        Alt+Space works incorrectly

        Test: platform/win/fast/events/alt-space-scroll.html

        * WebView.cpp:
        (WebView::keyDown):
        (WebView::keyPress):
        We do not handle WM_SYSCHAR events.

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

        - yet another build fix

        * DOMHTMLClasses.cpp:
        (DOMHTMLDocument::URL):

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

        - build fix

        * WebIconDatabase.h:

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

        Reviewed by Adele.

        - http://bugs.webkit.org/show_bug.cgi?id=16443
          implement some missing Windows WebKit functions

        * DOMHTMLClasses.cpp:
        (DOMHTMLDocument::URL): Implemented.

        * WebActionPropertyBag.cpp:
        (WebActionPropertyBag::Read): Fixed the WebActionElementKey case. 

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

        Reviewed by Alexey.

        * WebView.cpp:
        (WebView::execCommand): Switched from Editor::execCommand to Editor:command.
        Updated name from MoveUpByPageAndModifyCaret to MovePageUp and from
        MoveDownByPageAndModifyCaret to MovePageDown.
        (WebView::copy): Switched from Editor::execCommand to Editor:command.
        (WebView::cut): Ditto.
        (WebView::paste): Ditto.
        (WebView::delete_): Ditto.

2007-12-13  Steve Falkenburg  <sfalken@apple.com>

        Move source file generation into its own vcproj to fix build dependencies.

        Reviewed by Adam.

        * WebKit.vcproj/Interfaces.vcproj:
        * WebKit.vcproj/InterfacesGenerated.vcproj: Added.
        * WebKit.vcproj/WebKit.sln:
        * WebKit.vcproj/WebKit.submit.sln:
        * WebKit.vcproj/build-generated-files.sh:

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

        Fix <rdar://5517707> Crash on wptv.wp.pl when "make bigger" button is clicked

        Reviewed by Anders.

        * WebView.cpp:
        (WebViewWndProc): Repost paint messages and ignore all other messages
        when we're calling a plugin.

2007-12-13  Steve Falkenburg  <sfalken@apple.com>

        Fix project dependencies based on JavaScriptCore change.

        * WebKit.vcproj/WebKit.sln:

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

        Reviewed by Adele.

        http://bugs.webkit.org/show_bug.cgi?id=16421
        REGRESSION(r28669): Page scrolls down when you hit space key in text area

        Test: fast/events/space-scroll-event.html

        * WebView.cpp:
        (WebView::keyDown):
        (WebView::keyPress):
        Moved space handling to keyPress() to fix this bug and to match IE. Scrolling via arrow keys is correctly handled
        in keyDown().

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

        Reviewed by Sam Weinig

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

        Even though this new code isn't exercised yet because the page cache is still turned off for Windows, local testing
        has indicated it works well.

        * WebCachedPagePlatformData.h: Added.
        (WebCachedPagePlatformData::WebCachedPagePlatformData): Constructor takes an IWebDataSource and the object retains it
        (WebCachedPagePlatformData::clear):
        (WebCachedPagePlatformData::webDataSource):

        * WebFrame.cpp:
        (WebFrame::savePlatformDataToCachedPage):
        (WebFrame::transitionToCommittedFromCachedPage):
        (WebFrame::transitionToCommittedForNewPage):
        * WebFrame.h:

        * WebKit.vcproj/WebKit.vcproj:

2007-12-12  Steve Falkenburg  <sfalken@apple.com>

        Build fix.

        * WebKit.vcproj/WebKit.make: Copy only what we need out of obj/bin.

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

        Reviewed by Darin Adler.

        - revert my earlier crash fix after making WebCore return the empty
          editor command for the empty command name.

        * WebView.cpp:
        (WebView::handleEditingKeyboardEvent):

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

        Reviewed by Maciej.

        <rdar://problem/5071781> window.mouseout events are not 
        sent to window when mouse moves out of window 
        
        Hook up the windows mouse tracking logic to allow us to 
        detect the mouse leaving the window.

        * WebView.cpp:
        (WebView::close):
        (WebView::handleMouseEvent):
        (WebViewWndProc):
        * WebView.h:

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

        Reviewed by Alexey Proskuryakov.

        - fix a crash when pressing a key that is not associated with a command

        * WebView.cpp:
        (WebView::handleEditingKeyboardEvent): Check if the result of
        interpretKeyEvent() is empty.

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

        Reviewed by Darin Adler.

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

        * WebFrame.cpp:
        (WebFrame::url):
        (WebFrame::dispatchWillPerformClientRedirect):
        (WebFrame::setTitle):
        (WebFrame::updateGlobalHistoryForStandardLoad):
        (WebFrame::updateGlobalHistoryForReload):
        (WebFrame::cancelledError):
        (WebFrame::blockedError):
        (WebFrame::interruptForPolicyChangeError):
        (WebFrame::createPlugin):
        * WebView.cpp:
        (WebView::notifyDidAddIcon):

2007-12-10  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin.
    
        <rdar://problem/5636865>
        WebKit needs API to allow registering a protocol as local (RSS feeds appear unstyled)
        
        * Interfaces/IWebView.idl:
        * WebView.cpp:
        (WebView::registerURLSchemeAsLocal):
        * WebView.h:

2007-12-11  Ada Chan  <adachan@apple.com>

        Updated the database SPI to take in IWebFrame.

        Reviewed by Adam.

        * Interfaces/IWebUIDelegatePrivate.idl:
        * WebChromeClient.cpp:
        (WebChromeClient::requestQuotaIncreaseForNewDatabase):
        (WebChromeClient::requestQuotaIncreaseForDatabaseOperation):

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

        Windows build fix.

        * WebView.cpp:
        (WebView::interpretKeyEvent):

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

        * WebView.cpp:
        (WebView::handleEditingKeyboardEvent): Update for change to Editor API.

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

        Reviewed by Darin.

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

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

        Listen to WM_CHAR messages, and actually pass the type of message received down to WebCore.
        Since WM_KEYDOWN == keydown and WM_CHAR == keypress, this allows for much better IE compatibility
        than layering Windows keyboard event handling on top of Mac one.

        * WebView.cpp:
        (WebView::keyUp): Do not special case Alt+F4 and Alt+Space - we don't get keyups for those anyway!
        (WebView::interpretKeyEvent): Renamed WindowsKeyCode() to windowsVirtualKeyCode().
        (WebView::handleEditingKeyboardEvent): Use the additional information about event type that
        we now pass with PlatformKeyboardEvent.
        (WebView::keyDown): (WebView::keyPress): Split WM_KEYDOWN and WM_CHAR handling in separate
        functions, pass them down as is, without trying to guess what WM_CHAR Windows would have sent
        for a given WM_KEYDOWN.

        (WebViewWndProc): Handle WM_CHAR and WM_SYSCHAR.

        * WebView.h: Removed inIMEKeyDown() - it doesn't look like we need it at all. At least, I didn't
        notice any regressions after removing the only call to it in WebEditorClient.

        * WebEditorClient.cpp:
        (WebEditorClient::handleKeyboardEvent):
        (WebEditorClient::handleInputMethodKeydown):
        * WebEditorClient.h:
        Renamed handleKeypress() to handleKeyboardEvent(), as it gets both keydowns and keypresses.
        Renamed handleInputMethodKeypress() to handleInputMethodKeydown() and removed
        inIMEKeyDown()-related code.

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

        Reviewed by Sam Weinig.

        Updated for rename in JavaScriptCore.

        * WebScriptCallFrame.cpp:
        (WebScriptCallFrame::functionName):
        (WebScriptCallFrame::valueByEvaluatingJavaScriptFromString):

2007-12-07  Steve Falkenburg  <sfalken@apple.com>

        Fix version parsing.

        Rubber-stamped by Oliver.

        * WebKit.vcproj/auto-version.sh:

2007-12-07  Steve Falkenburg  <sfalken@apple.com>

        Fix build.

        * WebKit.vcproj/WebKit.vcproj:
        * WebScriptCallFrame.cpp:

2007-12-07  Steve Falkenburg  <sfalken@apple.com>

        Fix build.

        * WebHistory.cpp:
        (_WebCoreHistoryProvider::containsURL):

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

        Tried to fix build by suppressing warning.

        * WebScriptCallFrame.cpp:

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

        Reviewed by Mitz.

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

        * WebHistory.cpp: Removed unused Latin-1 code path.
        (_WebCoreHistoryProvider::containsItem): Updated for function name change.

2007-12-07  Steve Falkenburg  <sfalken@apple.com>

        Re-named our B&I flag from BUILDBOT to PRODUCTION.
        Fix our tiny versioning.
        Bump our product version.
        Use just the major version in the fallback VERSION files.
        Pick up the version numbers from the production builder.

        Reviewed by Sam Weinig.

        * Interfaces/WebKit.idl:
        * WebKit.vcproj/Interfaces.vcproj:
        * WebKit.vcproj/PRODUCTVERSION:
        * WebKit.vcproj/VERSION:
        * WebKit.vcproj/WebKit.make:
        * WebKit.vcproj/WebKit.rc:
        * WebKit.vcproj/WebKit.vcproj:
        * WebKit.vcproj/auto-version.sh:
        * WebKitDLL.cpp:
        (DllUnregisterServer):

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

        Fix <rdar://5624866> CFStringRef UI_STRING should use a cache and follow the CF "Get" model (current uses leak)

        Added a new class, LocalizedString, that wraps a CFStringRef and a
        WebCore::String. We store one LocalizedString for each key string.

        Reviewed by Steve.

        * WebLocalizableStrings.cpp: Changed our two HashMaps to map from
        WebCore::String to LocalizedString*.
        (LocalizedString::LocalizedString):
        (LocalizedString::operator CFStringRef):
        (LocalizedString::operator LPCTSTR): Code moved here from
        localizedLPCTSTR.
        (findCachedString): Changed to return a LocalizedString*.
        (cacheString): Changed to take a LocalizedString*.
        (localizedString): Changed to return a const LocalizedString&. We
        first try to find a cached LocalizedString. If there isn't one, we
        create a new one and cache it.
        (WebLocalizedLPCTSTRUTF8): Changed to call localizedString.
        (WebLocalizedLPCTSTR): Ditto.

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

        Make WebLocalizableStrings work a little more like the Mac version

        Reviewed by Steve.

        * WebKit.vcproj/WebKit.def: Deprecated SetWebLocalizedStringMainBundle.
        * WebKit.vcproj/WebKit_debug.def: Ditto.
        * WebLocalizableStrings.cpp:
        (createWebKitBundle): Changed to only create the bundle once.
        (cfBundleForStringsBundle): Added. Code was factored out of
        copyLocalizedStringFromBundle. We now use the CFBundleGetMainBundle to
        get the main bundle and WebLocalizableStringsBundle's identifier to
        fetch the framework's bundle.
        (copyLocalizedStringFromBundle): Changed to call
        cfBundleForStringsBundle.
        (cacheString): Cleaned up logic a bit with an early return.
        (SetWebLocalizedStringMainBundle): Moved down with the other
        deprecated functions and made into a no-op.

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

        Use SoftLinking.h in WebKitClassFactory.

        Reviewed by Oliver.

        * WebKitClassFactory.cpp:
        (WebKitClassFactory::WebKitClassFactory): We don't have to worry about
        not finding STInitialize anymore now that a version of SafariTheme
        containing this function has shipped.

2007-12-06  Ada Chan  <adachan@apple.com>

        <rdar://problem/5556378> Implemented database related UI delegate methods (prompts for new/enlarged databases)

        Reviewed by Darin.

        * Interfaces/IWebUIDelegatePrivate.idl:
        * WebChromeClient.cpp:
        (WebChromeClient::requestQuotaIncreaseForNewDatabase):
        (WebChromeClient::requestQuotaIncreaseForDatabaseOperation):

2007-12-06  Alice Liu  <alice.liu@apple.com>

        Fixed <rdar://5540000> onbeforeunload doesn't fire when closing window/tab

        Reviewed by Darin.

        * Interfaces/IWebViewPrivate.idl:
        * WebView.cpp:
        (WebView::shouldClose):
        * WebView.h:

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

        Fix <rdar://5615283> Crash in WebFrame::receivedPolicyDecision

        It's possible for a second policy listener to be created while we're
        waiting for a decision on the first policy listener. In this case we
        would crash when the first policy listener had a decision made. Mac
        WebKit already handles this by invalidating any existing policy
        listener when creating a new one.

        A test case is coming in a future commit.

        Reviewed by Anders.

        * WebFrame.cpp:
        (WebFrame::setUpPolicyListener): Copy the Mac behavior of invalidating
        any existing policy listener, and remove some assertions that we know
        can fire.

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

        Add SPI so that DumpRenderTree can turn on the Mac font ascent hack

        Reviewed by Hyatt.

        * Interfaces/IWebViewPrivate.idl: Added new method declaration.
        * WebView.cpp:
        (WebView::setShouldApplyMacFontAscentHack): Added. Just calls down to
        FontData.
        * WebView.h:

2007-12-06  Ada Chan  <adachan@apple.com>

        Build fix.

        Reviewed by Geoff.

        * WebScriptCallFrame.cpp:
        (WebScriptCallFrame::valueByEvaluatingJavaScriptFromString):

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

        Reviewed by Darin Adler.

        Third step in refactoring JSGlobalObject: Moved data members and data
        member access from Interpreter to JSGlobalObject.
        
        * WebFrame.cpp:
        (WebFrame::globalContext):
        (WebFrame::attachScriptDebugger):
        (WebFrame::windowObjectCleared):
        * WebScriptDebugger.cpp:
        (WebScriptDebugger::WebScriptDebugger):

2007-12-05  Steve Falkenburg  <sfalken@apple.com>

        <rdar://problem/5625327> Crash toggling check grammar w/ spelling when no spell checker exists.
        
        Reviewed by Adam.

        * WebView.cpp:
        (WebView::setGrammarCheckingEnabled): Add null check

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

        Expose WebView::setProhibitsMainFrameScrolling through IWebViewPrivate

        Reviewed by Steve.

        * Interfaces/IWebViewPrivate.idl: Added declaration.
        * WebInspectorClient.cpp:
        (WebInspectorClient::createPage): Updated for change to
        setProhibitsMainFrameScrolling signature.
        * WebView.cpp:
        (WebView::setProhibitsMainFrameScrolling): Updated and robustified.
        * WebView.h:

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

        Reviewed by Darin Adler.

        - WebKit/win part of fixing <rdar://problem/5111082> Flash popup video ad doesn't close when clicked at http://www.firestonecompleteautocare.com/

        * WebView.cpp:
        (WebView::initWithFrame): Attach the main frame's view.

2007-12-04  Ada Chan  <adachan@apple.com>

        Provide API for setting the default storage quota per database origin

        Reviewed by Jon.

        * Interfaces/IWebPreferencesPrivate.idl: added SPI to get/set default database quota
        * WebPreferenceKeysPrivate.h:
        * WebPreferences.cpp:
        (WebPreferences::initializeDefaultSettings): default database quota is 5MB
        (WebPreferences::longlongValueForKey):
        (WebPreferences::setLongLongValue):
        (WebPreferences::defaultDatabaseQuota):
        (WebPreferences::setDefaultDatabaseQuota):
        * WebPreferences.h:
        * WebView.cpp:
        (WebView::notifyPreferencesChanged): propagate default database quota change to WebCore settings.

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

        Reviewed by Adam and Darin.

        - Fixed a crasher where the top of the stack was not updated correctly.
        And set the eol style on IWebScriptCallFrame.idl file.

        * Interfaces/IWebScriptCallFrame.idl:
        * WebScriptDebugger.cpp:
        (WebScriptDebugger::atStatement):
        (WebScriptDebugger::leaveFrame):

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

        Hook up the authorAndUserStylesEnabled preference

        This is the Windows counterpart of r28071.

        Reviewed by Maciej.

        * Interfaces/IWebPreferencesPrivate.idl: Added new method
        declarations.
        * WebPreferenceKeysPrivate.h: Added a new preference key.
        * WebPreferences.cpp:
        (WebPreferences::initializeDefaultSettings): Set the default for the
        new preference.
        (WebPreferences::setAuthorAndUserStylesEnabled): Added.
        (WebPreferences::authorAndUserStylesEnabled): Added.
        * WebPreferences.h:
        * WebView.cpp:
        (WebView::notifyPreferencesChanged): Communicate the new preference
        down to WebCore::Settings.

2007-12-04  Jon Honeycutt  <jhoneycutt@apple.com>

        Reviewed by Ollie.

        Don't crash if our JavaPlugin DLL can't be found 

        * WebFrame.cpp:
        (WebFrame::createJavaAppletWidget): Added null check

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

        Reviewed by Kevin Decker.

        * WebFrame.cpp: Removed obsolete privateBrowsingEnabled.
        * WebFrame.h: Ditto.

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

        Windows build fix

        * WebScriptCallFrame.cpp:

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

        Reviewed by Dave Hyatt.

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

        * WebView.cpp:
        (WebViewWndProc): Removed call to sendResizeEvent() since FrameView
        sends them now.

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

        Reviewed by Adam.

        - <rdar://5618942> Drosera: Console window does not process everything
        correctly.
        - <rdar://5619005> Drosera: could be sped up by moving the
        WebScriptScope stuff into the WebScriptCallFrame.
        - Now the console can correctly process objects and does not receive
        notifications from JavaScriptCore about the JavaScript in Drosera's
        own process.

        * Interfaces/IWebScriptCallFrame.idl: Moved the variable lookup
        functions from WebScriptScope to here.
        * Interfaces/WebKit.idl: Removed WebScriptScope.
        * WebKit.vcproj/Interfaces.vcproj: Ditto.
        * WebKit.vcproj/WebKit.vcproj: Ditto.
        * WebKit.vcproj/WebKitGUID.vcproj: Ditto.
        * WebScriptCallFrame.cpp: Moved WebScriptScope functionality into here.
        (WebScriptCallFrame::stringByEvaluatingJavaScriptFromString): Now
        returns a string value for things that are not strings.
        (WebScriptCallFrame::variableNames): Moved from WebScriptScope.
        (WebScriptCallFrame::valueForVariable): Moved from WebScriptScope.
        (WebScriptCallFrame::jsValueToString): Helper functions that converts
        any JSValue to a String.
        * WebScriptCallFrame.h: Moved WebScriptScope functionality into here.
        * WebScriptDebugger.cpp: Added nested guards so that Drosera does not
        receive notifications about JavaScript that Drosera is running just the
        JavaScript WebKit is running.
        (WebScriptDebugger::WebScriptDebugger):
        (WebScriptDebugger::sourceParsed):
        (WebScriptDebugger::callEvent):
        (WebScriptDebugger::atStatement):
        (WebScriptDebugger::returnEvent):
        (WebScriptDebugger::exception):
        * WebScriptDebugger.h: Ditto.
        * WebScriptScope.cpp: Removed.
        * WebScriptScope.h: Removed.

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

        Speculative Windows build fix.

        * WebScriptCallFrame.cpp:
        (WebScriptCallFrame::valueByEvaluatingJavaScriptFromString):

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

        Another speculative Windows build fix

        * WebScriptCallFrame.cpp:
        (WebScriptCallFrame::valueByEvaluatingJavaScriptFromString):

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

        Speculative Windows build fix

        * WebFrame.cpp:
        (WebFrame::globalContext):
        (WebFrame::windowObjectCleared):
        * WebScriptDebugger.cpp:
        (WebScriptDebugger::WebScriptDebugger):

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

        Rename IWebViewPrivate::selectionImageRect to IWebViewPrivate::selectionRect.

        Rubber stamped by Adam Roben.

        * Interfaces/IWebViewPrivate.idl:
        * WebView.cpp:
        (WebView::selectionRect):
        * WebView.h:

2007-11-30  Ada Chan  <adachan@apple.com>

        <rdar://problem/5621373> Added a way for the client to clear undo/redo
        operations from a WebView.

        Reviewed by Steve.

        * Interfaces/IWebViewPrivate.idl:
        * WebView.cpp:
        (WebView::clearUndoRedoOperations):
        * WebView.h:

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

        Reviewed by Sam.

        Add an IWebFrameLoadDelegate2 interface with a didClearWindowObject method 
        that passes in the frame whose window has been cleared. This matches a newly
        added delegate method on the Mac.
        
        * Interfaces/IWebFrameLoadDelegate.idl:
        * WebFrame.cpp:
        (WebFrame::windowObjectCleared):

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

        Reviewed by Sam.

        - <rdar://5618976> Drosera: should listen for the WebScriptDebugServer
        dying and vice versa.

        * Interfaces/IWebScriptDebugListener.idl: Added the new function to the
        interface.
        * WebKit.vcproj/WebKit.def: Added the new function to the def file so
        Safari can tell WebKit when the server is dying.
        * WebKit.vcproj/WebKit_debug.def: Ditto.
        * WebKitDLL.cpp: Added the new function for Safari to call.
        (RunAsLocalServer):
        (LocalServerDidDie):
        * WebScriptDebugServer.cpp: 
        (WebScriptDebugServer::WebScriptDebugServer): Removed unused member.
        (WebScriptDebugServer::sharedWebScriptDebugServer): Ditto, and added new
        member to prevent adding or removing listeners when the server is dying.
        (WebScriptDebugServer::addListener): Don't let new listeners be added
        when the server is dying.
        (WebScriptDebugServer::removeListener): Don't let listeners remove
        themselves when the server is dying.  The server will remove them all
        anyways.
        (WebScriptDebugServer::serverDidDie): Notify all listeners that the
        server is dying and remove all listeners.
        * WebScriptDebugServer.h: Added the new method and removed an unused
        member.

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

        Build fix that works...?

        * WebChromeClient.h:

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

        Build fix

        * WebChromeClient.cpp:
        (WebChromeClient::requestQuotaIncreaseForNewDatabase):
        (WebChromeClient::requestQuotaIncreaseForDatabaseOperation):

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

        Keep it building with new client method

        * WebChromeClient.cpp:
        (ChromeClient::requestQuotaIncreaseForNewDatabase):
        (ChromeClient::requestQuotaIncreaseForDatabaseOperation):
        * WebChromeClient.h:

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

        Reviewed by Beth Dakin and Darin Adler.

        - fix <rdar://problem/5346394> Contextmenu event doesn't fire on body element inside frame

        * WebView.cpp:
        (WebView::handleContextMenuEvent): Send the context menu event to the
        frame containing the node that was hit.

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

        Reviewed by Tim.

        - Added guards to the wait loop so execution would not hang and now the
        console window can process JavaScript.

        * WebScriptDebugServer.cpp:
        (WebScriptDebugServer::suspendProcessIfPaused):

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

        Reviewed by Adam.

        Implement the last bits of the WebDatabaseManager API.
        
        * Interfaces/IWebDatabaseManager.idl:
        * WebDatabaseManager.cpp:
        (isEqual):
        (WebDatabaseManager::sharedWebDatabaseManager):
        (WebDatabaseManager::dispatchDidModifyOrigin):
        (WebDatabaseManager::dispatchDidModifyDatabase):
        * WebDatabaseManager.h:

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

        Get Drosera working again for real.
        
        * COMEnumVariant.h:
        (::Next):

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

        Reviewed by Maciej and Adam.

        - Added Drosera to the WebKit project.

        * WebKit.vcproj/WebKit.sln:

2007-11-27  Jon Honeycutt  <jhoneycutt@apple.com>

        Reviewed by Adam.

        Return bool from registerWebViewWindowClass, as nothing uses the ATOM.
        Set haveRegisteredWindowClass to true

        * WebView.cpp:
        (registerWebViewWindowClass):

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

        Speculative fix to get Drosera working.
        
        * COMEnumVariant.h:
        (::Next):
        Update the number of elements fetched correctly.
        
2007-11-27  Anders Carlsson <andersca@apple.com>

        Reviewed by Adam.

        Some COM cleanup.
        
        * CFDictionaryPropertyBag.cpp:
        (CFDictionaryPropertyBag::QueryInterface):
        * CFDictionaryPropertyBag.h:
        * WebBackForwardList.cpp:
        (WebBackForwardList::addItem):
        (WebBackForwardList::removeItem):
        * WebDownload.cpp:
        (WebDownload::initWithRequest):
        * WebFrame.cpp:
        (WebFrame::loadRequest):
        (WebFrame::initWithWebFrameView):
        (WebFrame::webHistory):
        (WebFrame::dispatchWillSendRequest):
        * WebURLAuthenticationChallenge.cpp:
        (WebURLAuthenticationChallenge::QueryInterface):
        (WebURLAuthenticationChallenge::initWithProtectionSpace):
        * WebURLAuthenticationChallenge.h:
        * WebURLAuthenticationChallengeSender.cpp:
        (WebURLAuthenticationChallengeSender::QueryInterface):
        * WebURLAuthenticationChallengeSender.h:
        * WebURLResponse.cpp:
        (WebURLResponse::QueryInterface):
        * WebURLResponse.h:
        * WebView.cpp:
        (WebView::notifyDidAddIcon):
        (WebView::goToBackForwardItem):
        (WebView::canHandleRequest):
        (WebView::loadBackForwardListFromOtherView):
        (core):

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

        Add COMEnumVariant.h to the project.
        
        * WebKit.vcproj/WebKit.vcproj:

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

        Reviewed by Adam.

        Return E_INVALIDARG if the databaseName BSTR is null.
        
        * WebDatabaseManager.cpp:
        (WebDatabaseManager::detailsForDatabaseWithOrigin):
        (WebDatabaseManager::deleteDatabaseWithOrigin):

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

        Reviewed by Adam.

        Implement the rest of the WebDatabaseManager API.

        * COMEnumVariant.h:
        * Interfaces/IWebDatabaseManager.idl:
        * WebDatabaseManager.cpp:
        (isEqual):
        (DatabaseDetailsPropertyBag::DatabaseDetailsPropertyBag):
        (DatabaseDetailsPropertyBag::~DatabaseDetailsPropertyBag):
        (DatabaseDetailsPropertyBag::createInstance):
        (DatabaseDetailsPropertyBag::AddRef):
        (DatabaseDetailsPropertyBag::Release):
        (DatabaseDetailsPropertyBag::QueryInterface):
        (DatabaseDetailsPropertyBag::Read):
        (DatabaseDetailsPropertyBag::Write):
        (WebDatabaseManager::detailsForDatabaseWithOrigin):
        (WebDatabaseManager::deleteAllDatabases):
        (WebDatabaseManager::deleteDatabasesWithOrigin):
        (WebDatabaseManager::deleteDatabaseWithOrigin):
        * WebDatabaseManager.h:

2007-11-27  Ada Chan  <adachan@apple.com>

        <rdar://problem/5616098> The BSTR returned by WebHistoryItem::alternateTitle
        was not allocated correctly.

        Reviewed by Anders.

        * WebHistoryItem.cpp:
        (WebHistoryItem::setAlternateTitle):
        (WebHistoryItem::alternateTitle):
        * WebHistoryItem.h:

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

        Reviewed by Adam.

        Use COMEnumVariant in WebScriptCallFrame and WebScriptScope.
        
        * WebScriptCallFrame.cpp:
        (WebScriptCallFrame::scopeChain):
        * WebScriptScope.cpp:
        (WebScriptScope::variableNames):

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

        Reviewed by Adam.

        Use the correct include paths.
        
        * COMEnumVariant.h:

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

        Reviewed by Darin.
   
        Add COMEnumVariant, a templatized class with implements IEnumVARIANT and lets
        you enumerate over a C++ container, be it WTF or STL.
        
        * COMEnumVariant.h: Added.
        
        * WebDatabaseManager.cpp:
        (WebDatabaseManager::origins):
        (WebDatabaseManager::databasesWithOrigin):
        Implement these using COMEnumVariant.
        
        * WebSecurityOrigin.cpp:
        (WebSecurityOrigin::QueryInterface):
        * WebSecurityOrigin.h:
        Add a UUID for the implementation so that other parts of WebKit can access
        the WebCore::SecurityOriginData object.
        
2007-11-26  Adam Roben  <aroben@apple.com>

        Take advantage of the new Color constructor that takes a CGColorRef

        This lets us handle grayscale colors (which only have 2 components).

        Reviewed by Darin.

        * WebKitGraphics.cpp:
        (DrawTextAtPoint):

2007-11-26  Steve Falkenburg  <sfalken@apple.com>

        Build fix.

        * WebKit.vcproj/WebKit.make:

2007-11-26  Steve Falkenburg  <sfalken@apple.com>

        Build fix.

        * WebKit.vcproj/build-generated-files.sh:

2007-11-26  Steve Falkenburg  <sfalken@apple.com>

        Build fix.

        * WebKit.vcproj/build-generated-files.sh:

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

        Reviewed by Adam.

        Add an implementation of IWebSecurityOrigin and a partially stubbed out
        implementation of IWebDatabaseManager.
        
        * ForEachCoClass.h:
        * Interfaces/IWebDatabaseManager.idl:
        * Interfaces/WebKit.idl:
        * WebDatabaseManager.cpp:
        (WebDatabaseManager::createInstance):
        (WebDatabaseManager::WebDatabaseManager):
        (WebDatabaseManager::~WebDatabaseManager):
        (WebDatabaseManager::QueryInterface):
        (WebDatabaseManager::AddRef):
        (WebDatabaseManager::Release):
        (WebDatabaseManager::sharedWebDatabaseManager):
        (WebDatabaseManager::origins):
        (WebDatabaseManager::databasesWithOrigin):
        (WebDatabaseManager::detailsForDatabaseWithOrigin):
        (WebDatabaseManager::deleteAllDatabases):
        (WebDatabaseManager::deleteDatabasesWithOrigin):
        (WebDatabaseManager::deleteDatabaseWithOrigin):
        * WebDatabaseManager.h:
        * WebKit.vcproj/WebKit.vcproj:
        * WebKitClassFactory.cpp:
        * WebSecurityOrigin.cpp: Added.
        (WebSecurityOrigin::createInstance):
        (WebSecurityOrigin::WebSecurityOrigin):
        (WebSecurityOrigin::~WebSecurityOrigin):
        (WebSecurityOrigin::QueryInterface):
        (WebSecurityOrigin::AddRef):
        (WebSecurityOrigin::Release):
        (WebSecurityOrigin::protocol):
        (WebSecurityOrigin::domain):
        (WebSecurityOrigin::port):
        (WebSecurityOrigin::usage):
        (WebSecurityOrigin::quota):
        (WebSecurityOrigin::setQuota):
        * WebSecurityOrigin.h: Added.

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

        Reviewed by Maciej.

        - Implemented displaying variables for Drosera on Win.

        * Interfaces/IWebScriptCallFrame.idl: Added a local function to be
        able to access the WebScriptCallFrame.
        * Interfaces/IWebScriptScope.idl: Implemented.
        * Interfaces/WebKit.idl: Added WebScriptScope to the tlb.
        * WebKit.vcproj/Interfaces.vcproj: 
        * WebScriptCallFrame.cpp: Implemented the helper and accessor methods.
        (EnumScopes::Next): Fixed a bug where we did not release correctly and
        would accidentally destroy scopes.
        (WebScriptCallFrame::stringByEvaluatingJavaScriptFromString):
        Implemented.
        (WebScriptCallFrame::valueByEvaluatingJavaScriptFromString): Implemented
        * WebScriptCallFrame.h: Implemented the helper and accessor methods.
        (WebScriptCallFrame::impl):
        (WebScriptCallFrame::state):
        * WebScriptScope.cpp: Implmented.
        (EnumVariables::EnumVariables): Created an IEnumVariant over the
        variables to be able to pass a DCOM acceptable structure back to
        Drosera.
        (EnumVariables::createInstance):
        (EnumVariables::QueryInterface):
        (EnumVariables::AddRef):
        (EnumVariables::Release):
        (EnumVariables::Next):
        (EnumVariables::Skip):
        (EnumVariables::Reset):
        (EnumVariables::Clone):
        (WebScriptScope::WebScriptScope):
        (WebScriptScope::createInstance): Implemented.
        (WebScriptScope::variableNames): Implemented.
        (WebScriptScope::valueForVariable):
        * WebScriptScope.h: Implmeneted.

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

        Reviewed by Brady.

        Add IWebDatabaseManager and IWebSecurityOrigin interfaces.
        
        * Interfaces/IWebDatabaseManager.idl: Added.
        * Interfaces/IWebSecurityOrigin.idl: Added.
        * WebKit.vcproj/Interfaces.vcproj:
        * WebKit.vcproj/WebKitGUID.vcproj:

2007-11-26  Alice Liu  <alice.liu@apple.com>

        Reviewed by Jon Honeycutt.

        Fall back to the default Policy Delegate in these functions, 
        as is already done in dispatchDecidePolicyForNavigationAction

        * WebFrame.cpp:
        (WebFrame::dispatchDecidePolicyForMIMEType):
        (WebFrame::dispatchDecidePolicyForNewWindowAction):
        (WebFrame::dispatchUnableToImplementPolicy):

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

        Fix a leak pointed out by Alexey

        * WebView.cpp:
        (getUpdateRects): Use a Vector<unsigned char>, since OwnPtr doesn't
        know to call delete[].

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

        Fix Bug 16138: Reduce code duplication in WebView.cpp

        http://bugs.webkit.org/show_bug.cgi?id=16138

        Reviewed by Sam.

        * WebView.cpp:
        (getUpdateRects): Factored code out of updateBackingStore and paint
        into this new helper function.
        (WebView::updateBackingStore): Use getUpdateRects.
        (WebView::paint): Ditto.
        (WebView::paintIntoBackingStore): Changed to take a const IntRect&.
        (WebView::paintIntoWindow): Ditto.
        * WebView.h:

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

        Add ImageDiff.vcproj to WebKit.sln

        Reviewed by Sam.

        * WebKit.vcproj/WebKit.sln:

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

        Reviewed by Mark Rowe.

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

        * English.lproj/Localizable.strings: Updated.
        * WebInspectorClient.cpp:
        (WebInspectorClient::localizedStringsURL): Empty stub.
        * WebInspectorClient.h: Added localizedStringsURL.

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

        Windows build fix.

        * WebView.cpp:
        (WebView::deleteSelection): Use canSmartCopyOrDelete() directly.

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

        Change Interfaces to be a "Static Library" project

        Being a Utility project meant that Interfaces was rebuilding every
        time (Utility projects are supposed to handle their own dependencies).
        Interfaces isn't really a static library, but it means that VS will
        handle dependencies for us (and not complain about missing manifests
        like it did when the project was an Application).

        * WebKit.vcproj/Interfaces.vcproj:

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

        Shut up FixMIDLHeaders.pl

        * WebKit.vcproj/FixMIDLHeaders.pl:

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

        Change Interfaces to use a Utility configuration

        It had previously been marked as an "Application (.exe)", which is
        wrong but worked with most versions of Visual Studio.

        Rubberstamped by Steve.

        * WebKit.vcproj/Interfaces.vcproj:

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

        Reviewed by Adam.

        Get the new focus window from the wParam instead of calling GetFocus().
        Also, send blur even if there is no focused frame.
               
        * WebView.cpp:
        (WebViewWndProc):

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

        Another build fix for systems without Cygwin in their PATH

        * WebKit.vcproj/Interfaces.vcproj: Add Cygwin to the PATH in the
        Post-Build Event.

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

        Reviewed by Adam.

        - Make Drosera show source, source URLs, and function stack on Windows
        and some minor fixes.

        * WebScriptCallFrame.cpp: Fixed a bug where the callFrame was not reffed
        properly before being returned, and changed functionName() to check for
        Null or if the name is empty.
        (EnumScopes::Clone):
        (WebScriptCallFrame::WebScriptCallFrame):
        (WebScriptCallFrame::createInstance):
        (WebScriptCallFrame::caller):
        (WebScriptCallFrame::functionName):
        * WebScriptCallFrame.h: Ditto
        * WebScriptDebugServer.cpp: Made the listenerSet static since we were
        already treating it as if it were. Removed the EnumViews stuff.  This
        was added by Steve to demonstrate DCOM and he thought it would be needed
        by Drosera, but I don't believe it will be.
        Implemented suspendProcessIfPaused() also added calls to it at the end
        of several functions to ensure we pause if Drosera has told WebKit to.
        (WebScriptDebugServer::WebScriptDebugServer):
        (WebScriptDebugServer::sharedWebScriptDebugServer):
        (WebScriptDebugServer::addListener):
        (WebScriptDebugServer::removeListener):
        (WebScriptDebugServer::suspendProcessIfPaused):
        (WebScriptDebugServer::didLoadMainResourceForDataSource):
        (WebScriptDebugServer::didParseSource):
        (WebScriptDebugServer::failedToParseSource):
        (WebScriptDebugServer::didEnterCallFrame):
        (WebScriptDebugServer::willExecuteStatement):
        (WebScriptDebugServer::willLeaveCallFrame):
        (WebScriptDebugServer::exceptionWasRaised):
        * WebScriptDebugServer.h: Ditto.
        * WebScriptDebugger.cpp: The important change here is that leaveFrame()
        is called before willLeaveCallFrame().  I think there is some EOL stuff
        going on too.
        - It was the implementing of these functions that allows source, the
        source URLs and function stack to be displayed.
        (WebScriptDebugger::callEvent):
        (WebScriptDebugger::atStatement):
        (WebScriptDebugger::returnEvent):
        (WebScriptDebugger::exception):
        (WebScriptDebugger::enterFrame):
        (WebScriptDebugger::leaveFrame):
        * WebView.cpp: Removed the EnumView functions.
        (WebView::WebView):
        (WebView::~WebView):

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

        Fix <rdar://5346832> Infinite recursion when opening Web Inspector on more than one tab

        The bug was that multiple WebNodeHighlights would subclass the same
        browser window, leading to infinite recursion within
        SubclassedWndProc.

        WebNodeHighlight is now a WindowMessageListener, and lets
        WindowMessageBroadcaster handle subclassing the window.

        Reviewed by Ada.

        * WebNodeHighlight.cpp:
        (WebNodeHighlight::WebNodeHighlight): Initialize m_observedWindow
        member.
        (WebNodeHighlight::~WebNodeHighlight): Unregister as a listener for
        m_observedWindow.
        (WebNodeHighlight::highlight): Register as a listener.
        (WebNodeHighlight::windowReceivedMessage): Do the work that used to be
        done in SubclassedWndProc.
        * WebNodeHighlight.h: Made WebNodeHighlight a WindowMessageListener,
        and renamed m_subclassedWindow to m_observedWindow.

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

        Build fix for systems that don't have Cygwin in their PATH

        * WebKit.vcproj/Interfaces.vcproj: Put Cygwin in the PATH before
        trying to run bash.

2007-11-13  Steve Falkenburg  <sfalken@apple.com>

        Add IDOMElementPrivate::font() to get an element's font
        as a WebFontDescription.
        
        Reviewed by Darin.

        * DOMCoreClasses.cpp:
        (DOMElement::font):
        * DOMCoreClasses.h:
        * Interfaces/DOMPrivate.idl:

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

        Windows build fix

        * WebKit.vcproj/WebKit.def: Export fastZeroedMalloc.
        * WebKit.vcproj/WebKit_debug.def: Ditto.

2007-11-09  Jon Honeycutt  <jhoneycutt@apple.com>

        Reviewed by Sam.

        <rdar://5585900>: Safari crashes when selected in context menu to open
        audio format files (au, aif) with QT 7.3

        The crash occurred on a machine where QT 7.3 was failing to initialize.
        The fix is to avoid sending streams to full-page plugins that've failed 
        to load

        * WebFrame.cpp:
        (WebFrame::finishedLoading): Check plugin status before calling manual
        stream methods
        (WebFrame::setMainDocumentError): Same
        (WebFrame::committedLoad): Same

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

        Rubber stamped by Oliver.

        Make WebCore a dependency of Interfaces.

        * WebKit.vcproj/WebKit.sln:

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

        Reviewed by Adam Roben.

        <rdar://problem/5435940>
        The COM bindings for the DOM should be autogenerated like the other DOM bindings

        Initial commit of the autogeneration of the COM DOM Bindings.  No behavior change
        is being introduced in this patch and to insure that no conflicts arise, a temporary
        prefix of "GEN_" has been used for all the new classes.

        The build architecture for these bindings differs slightly from the other autogenerated
        bindings.  Instead of building in WebCore and migrating the resuting code to WebKit (as
        is done for the Objective-C bindigs currently), the IDLs and generation scripts are
        migrated to WebKit and built there.  This is done with a series of scripts and Makefiles.

        This commit includes:
            - Hand rolled root class/Interface GEN_DOMObject used to facilated object creation
              and ref-counting.
            - Generating all of the Core DOM and most of HTML and CSS
            - Generating Event, EventTarget, and EventListener

        * DOMCreateInstance.cpp: Added.
        (domWrapperCache):
        (getDOMWrapper):
        (setDOMWrapper):
        (removeDOMWrapper):
        (GEN_DOMNode::createInstance):
        (GEN_DOMImplementation::createInstance):
        (GEN_DOMCSSRule::createInstance):
        (GEN_DOMStyleSheet::createInstance):
        (GEN_DOMCSSValue::createInstance):
        * DOMCreateInstance.h: Added.
        Temporary location for createInstance/object caching methods.  This will be broken up
        into seperate files in the near future.

        * GEN_DOMObject.cpp: Added.
        (GEN_DOMObject::GEN_DOMObject):
        (GEN_DOMObject::~GEN_DOMObject):
        (GEN_DOMObject::QueryInterface):
        (GEN_DOMObject::AddRef):
        (GEN_DOMObject::Release):
        * GEN_DOMObject.h: Added.
        Hand rolled base class.

        * Interfaces/IGEN_DOMObject.idl: Added. 
        Hand rolled base interface.

        * WebKit.vcproj/DerivedSources.make: Added.
        * WebKit.vcproj/FixMIDLHeaders.pl: Added.
        This script is required because MIDL is producing un-buildable code due to
        circular dependencies.

        * WebKit.vcproj/Interfaces.vcproj:
        * WebKit.vcproj/WebKit.vcproj:
        * WebKit.vcproj/WebKitGUID.vcproj:
        * WebKit.vcproj/build-generated-files.sh: Added.

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

        Reviewed by Adam.

        - This patch does two main things.
        1) It adds pragma warning guards around WebCore includes in WebKit files
        that were previously overlooked.
        2) It implements almost the entireity of WebScriptDebugger.  Only one
        function remains and that implementation is dependent on finishing the
        implementation of WebScriptScope.

        * WebScriptCallFrame.h:
        * WebScriptDebugServer.h:
        * WebScriptDebugger.cpp:
        (WebScriptDebugger::WebScriptDebugger):
        (WebScriptDebugger::sourceParsed):
        (WebScriptDebugger::callEvent):
        (WebScriptDebugger::atStatement):
        (WebScriptDebugger::returnEvent):
        (WebScriptDebugger::exception):
        (WebScriptDebugger::enterFrame):
        (WebScriptDebugger::leaveFrame):
        * WebScriptDebugger.h:

2007-11-08  Steve Falkenburg  <sfalken@apple.com>

        <rdar://problem/5491463> Wrong dates shown in History menu.
        
        Fix off-by-one error in Windows epoch.
        
        For the Windows DATE type, 1/1/1900 should be 2.0, not 1.0.
        DATE is the number of days since 12/30/1899.
        
        Reviewed by Ada.

        * MarshallingHelpers.cpp:
        (MarshallingHelpers::windowsEpochAbsoluteTime):

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

        Reviewed by Sam.

        - With this change Drosera can now get the source of a website and the
        listings of the sources it gets.  This also lays the foundation for
        letting Drosera show the scope chain of the JavaScript stack.

        * Interfaces/IWebFrame.idl: Changed the signature of the local function,
        globalContext(), because COM was unable to marshal this object with the
        other signature.
        * Interfaces/IWebScriptDebugServer.idl: Of course adding and removing
        a listener cannot be done in a const function.
        * WebChromeClient.h: Added accessor to the WebView for the new added
        kit() function in WebFrame.
        (WebChromeClient::webView):
        * WebFrame.cpp: Added a script debugger object and the necessary
        functions to attach and communicate with it. Also needed to change the
        local function, globalContext(), because of a COM issue.
        (kit):
        (WebFrame::WebFrame):
        (WebFrame::globalContext):
        (WebFrame::loadData):
        (WebFrame::attachScriptDebugger):
        (WebFrame::detachScriptDebugger):
        (WebFrame::dispatchDidLoadMainResource):
        (WebFrame::windowObjectCleared):
        * WebFrame.h: Ditto.
        * WebHTMLRepresentation.cpp: Implemented documentSource so Drosera has
        some source code to display.
        (WebHTMLRepresentation::WebHTMLRepresentation):
        (WebHTMLRepresentation::documentSource):
        * WebKit.vcproj/WebKit.vcproj: Added the new WebScriptDebugger class.
        * WebScriptCallFrame.cpp: Implemented much of this class' functionality.
        (EnumScopes::EnumScopes): Made an EnumScopes class to create an
        IEnumVARIANT to wrap a ScopeChain for Drosera.
        (EnumScopes::QueryInterface):
        (EnumScopes::AddRef):
        (EnumScopes::Release):
        (EnumScopes::Next):
        (EnumScopes::Skip):
        (EnumScopes::Reset):
        (EnumScopes::Clone):
        (WebScriptCallFrame::caller):
        (WebScriptCallFrame::scopeChain):
        (WebScriptCallFrame::functionName):
        (WebScriptCallFrame::stringByEvaluatingJavaScriptFromString):
        * WebScriptCallFrame.h: Added member data needed for the above functions
        * WebScriptDebugServer.cpp: Began implementing. 
        (WebScriptDebugServer::listenerCount):
        (EnumViews::QueryInterface):
        (EnumViews::AddRef):
        (EnumViews::Release):
        (EnumViews::Next):
        (EnumViews::Skip):
        (EnumViews::Reset):
        (EnumViews::Clone):
        (WebScriptDebugServer::WebScriptDebugServer):
        (WebScriptDebugServer::createInstance):
        (WebScriptDebugServer::sharedWebScriptDebugServer):
        (WebScriptDebugServer::AddRef):
        (WebScriptDebugServer::Release):
        (WebScriptDebugServer::addListener):
        (WebScriptDebugServer::removeListener):
        (WebScriptDebugServer::step):
        (WebScriptDebugServer::pause):
        (WebScriptDebugServer::resume):
        (WebScriptDebugServer::isPaused):
        (WebScriptDebugServer::suspendProcessIfPaused):
        (WebScriptDebugServer::didLoadMainResourceForDataSource):
        (WebScriptDebugServer::didParseSource):
        (WebScriptDebugServer::failedToParseSource):
        (WebScriptDebugServer::didEnterCallFrame):
        (WebScriptDebugServer::willExecuteStatement):
        (WebScriptDebugServer::willLeaveCallFrame):
        (WebScriptDebugServer::exceptionWasRaised):
        * WebScriptDebugServer.h: Began implementing.
        * WebScriptDebugger.cpp: Added.
        (WebScriptDebugger::WebScriptDebugger):
        (WebScriptDebugger::sourceParsed):
        * WebScriptDebugger.h: Added.
        * WebScriptScope.cpp: Make this class use createInstance which is more
        in line with our guidelines.
        (WebScriptScope::WebScriptScope):
        (WebScriptScope::createInstance):
        * WebScriptScope.h:


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

        Reviewed by Steve.

        * Interfaces/IWebUIDelegate.idl: Added the functions needed below.
        * WebChromeClient.cpp:
        (WebChromeClient::setMenubarVisible): Eliminated the notImplemented()
        here by calling through the UI delegate.
        (WebChromeClient::menubarVisible): Ditto.
        (WebChromeClient::runDatabaseSizeLimitPrompt): Ditto.

2007-11-07  Steve Falkenburg  <sfalken@apple.com>

        Added IWebDocumentText available via QI from WebFrame.
        
        Reviewed by Sam.

        * WebFrame.cpp:
        (WebFrame::QueryInterface): Added IID_IWebDocumentText.
        (WebFrame::supportsTextEncoding): Stubbed out.
        (WebFrame::selectedString): Implemented.
        (WebFrame::selectAll): Stubbed out.
        (WebFrame::deselectAll): Stubbed out.
        * WebFrame.h:

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

        Fix <rdar://5569268> Crash when opening any FTP site in second tab/window

        Reviewed by Sam.

        * WebView.cpp:
        (WebView::initWithFrame): Set the ftpDirectoryTemplatePath for every
        Page, not just the first one.

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

        Change WebLocalizableStrings to take UTF-8 C strings

        This matches the way things work on the Mac, and will allow source
        files containing localizable strings to be shared between Mac and
        Windows. The old functions have not been removed for compatibility
        reasons, but are now just wrappers around the new UTF-8 functions.

        Reviewed by Ada.

        * WebKit.vcproj/WebKit.def: Added new functions.
        * WebKit.vcproj/WebKit_debug.def: Ditto.
        * WebLocalizableStrings.cpp:
        (copyLocalizedStringFromBundle): Changed to take a WebCore::String
        representing the key.
        (localizedString): Refactored from WebLocalizedString. Takes a
        WebCore::String representing the key.
        (localizedLPCTSTR): Ditto for WebLocalizedLPCTSTR.
        (WebLocalizedStringUTF8): Added. Takes a UTF-8 C string as the key.
        (WebLocalizedLPCTSTRUTF8): Ditto.
        (WebLocalizedString): Changed to call localizedString.
        (WebLocalizedLPCTSTR): Changed to call localizedLPCTSTR.
        * WebLocalizableStrings.h: Changed macros to use the new UTF-8
        functions.

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

        Reviewed by Adam and Steve.

        - added hooks needed to implement showModalDialog on Windows

        * Interfaces/IWebUIDelegate.idl: Added canRunModal, createModalDialog,
        and runModal functions to the end of IWebUIDelegate3.

        * WebChromeClient.h: Added uiDelegate and uiDelegate2 helper functions,
        so it's easier to write client functions.
        * WebChromeClient.cpp:
        (WebChromeClient::createWindow): Implemented dialog case. Calls IWebUIDelegate3.
        (WebChromeClient::canRunModal): Implemented. Calls IWebUIDelegate3.
        (WebChromeClient::runModal): Ditto.
        (WebChromeClient::uiDelegate): Added.
        (WebChromeClient::uiDelegate2): Added.
        (WebChromeClient::uiDelegate3): Added.

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

        Rubber-stamped by Adam Roben.

        Windows build fix.

        * WebFrame.cpp:
        (WebFrame::string): plainText() returns a String now.

2007-11-05  Ada Chan  <adachan@apple.com>

        <rdar://problem/5579772> Regression: AltGr does not work
        Testing whether alt-key is down is not the right test for system key event.
        Added a m_isSystemKey flag in PlatformKeyboardEvent to keep track of whether
        this is a system key event, check that flag instead in handleEditingKeyboardEvent().

        Reviewed by Oliver.

        * WebView.cpp:
        (WebView::keyUp):
        (WebView::handleEditingKeyboardEvent):
        (WebView::keyDown):
        (WebViewWndProc):
        * WebView.h:

2007-11-05  Ada Chan  <adachan@apple.com>

        Build fix.

        Reviewed by Tristan.

        * WebChromeClient.h:

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

        Reviewed by Darin Adler.
        
        Part of the WebKit/WebCore API changes for
        <rdar://problem/5368188>

        * WebChromeClient.cpp:
        (WebChromeClient::createWindow):
        Removed usage of createModalDialog and revised to use new createWindow
        ChromeClient API.

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

        Add IWebCache::disabled

        This matches the Mac WebCache class.

        Reviewed by Sam.

        * Interfaces/IWebCache.idl:
        * WebCache.cpp:
        (WebCache::disabled):
        * WebCache.h:

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

        Add IWebInspector and a way to get one from a WebView

        This API matches the Mac one added in r27266.

        Reviewed by Sam.

        * Interfaces/IWebInspector.idl: Added.
        * Interfaces/IWebViewPrivate.idl: Added a new inspector method to
        match Mac.
        * WebInspector.cpp: Added.
        (WebInspector::createInstance):
        (WebInspector::WebInspector):
        (WebInspector::~WebInspector):
        (WebInspector::webViewClosed):
        (WebInspector::QueryInterface):
        (WebInspector::AddRef):
        (WebInspector::Release):
        (WebInspector::show):
        (WebInspector::showConsole):
        (WebInspector::showTimeline):
        (WebInspector::close):
        (WebInspector::attach):
        (WebInspector::detach):
        * WebInspector.h: Added.
        * WebKit.vcproj/Interfaces.vcproj: Added IWebInspector.idl.
        * WebKit.vcproj/WebKit.vcproj: Added WebInspector.{cpp,h}.
        * WebKit.vcproj/WebKitGUID.vcproj: Added IWebInspector_i.c.
        * WebView.cpp:
        (WebView::close): Notify the WebInspector that we're closing.
        (WebView::inspector): Added.
        * WebView.h:

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

        Cache strings that come directly from WebLocalizedString

        Reviewed by Steve.

        * WebLocalizableStrings.cpp:
        (copyLocalizedStringFromBundle): This used to be WebLocalizedString,
        but is now just a static helper function.
        (findCachedStringInMap): Added static helper.
        (findCachedString): Refactored and cleaned up code from
        WebLocalizedLPCTSTR.
        (cacheString): Ditto.
        (WebLocalizedString): Rewrote to use the new helper functions.
        (WebLocalizedLPCTSTR): Changed to use the new helper functions.

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

        Only override the default user agent string if we're actually given a custom one

        Reviewed by Sam.

        * WebView.cpp:
        (WebView::setCustomUserAgent):

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

        Reviewed by Alexey.

        Allow Shift, Ctrl, Alt, Meta and Capslock keys to be sent into WebCore.

        * WebView.cpp:
        (WebView::keyDown):
        (WebView::keyUp):

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

        - Fixed a build failure

        * WebEditorClient.cpp:
        (WebEditorClient::textWillBeDeletedInTextField):

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

        Fix the parameter type of WebLocalizedString to match the UI_STRING macro

        Reviewed by Sam.

        * WebLocalizableStrings.cpp:
        (WebLocalizedString):
        (WebLocalizedLPCTSTR):
        * WebLocalizableStrings.h:

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

        Rubber-stamped by Adam Roben.

        Rolled out r27326 - debug CRT seems to cause no problems after all.

        * WebKit.vcproj/WebKit.vcproj:

2007-10-31  Adam Roben  <aroben@apple.com>

        Switch the Debug configuration to using the non-debug CRT

        The debug CRT conflicts with what Safari uses, which causes loading
        problems.

        Reviewed by Steve.

        * WebKit.vcproj/WebKit.vcproj:

2007-10-30  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam and Geoff.

        - Added the globalContext method so Drosera can ask a WebFrame for its
        context.

        * Interfaces/IWebFrame.idl:
        * WebFrame.cpp:
        * WebFrame.h:

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

        Reviewed by Darin.

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

        * WebView.cpp: (WebView::keyDown): Call capsLockStateMayHaveChanged so WebCore knows it may have to update a password field.

2007-10-29  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam and Maciej.

        - Added the IWebScriptScope interface which is used by Drosera to get
        information and run contextually significant code with respect to the
        current JS stack frame.

        * Interfaces/IWebScriptCallFrame.idl: Line endings changed, not sure why
        but the real changes were to change the return type of scopeChain() and
        the return type and name of evaluateWebScript() to
        stringByEvaluatingJavaScriptFromString().
        * Interfaces/IWebScriptScope.idl: Added.
        * WebKit.vcproj/Interfaces.vcproj: Added the new interface.
        * WebKit.vcproj/WebKit.vcproj: Added the files for the new class.
        * WebKit.vcproj/WebKitGUID.vcproj: Added the new interfaces.
        * WebScriptCallFrame.cpp: Changed the return type to E_NOTIMPL and
        asserted so it would be obvious if I accidentally try to use one of
        these functions before it's implemented.
        (WebScriptCallFrame::caller):
        (WebScriptCallFrame::scopeChain):
        (WebScriptCallFrame::functionName):
        (WebScriptCallFrame::stringByEvaluatingJavaScriptFromString):
        * WebScriptCallFrame.h: Changed the return types mentioned above.
        * WebScriptDebugServer.cpp: Also changed the return type to E_NOTIMPL.
        (WebScriptDebugServer::addListener):
        (WebScriptDebugServer::removeListener):
        (WebScriptDebugServer::step):
        (WebScriptDebugServer::pause):
        (WebScriptDebugServer::resume):
        (WebScriptDebugServer::isPaused):
        * WebScriptScope.cpp: Added.
        (WebScriptScope::WebScriptScope):
        (WebScriptScope::~WebScriptScope):
        (WebScriptScope::QueryInterface):
        (WebScriptScope::AddRef):
        (WebScriptScope::Release):
        (WebScriptScope::getVariableNames):
        (WebScriptScope::getValueForVariable):
        * WebScriptScope.h: Added.

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

        - try to fix Windows build

        * WebKit.vcproj/WebKit.vcproj: Suppress warning 4800 (conversion to bool),
        since we don't want to add !! everywhere, and because HashTable.h has a
        conversion to bool of this type now.

2007-10-27  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam.

        - Stubbed out IWebScriptCallFrame for Drosera.

        * Interfaces/IWebScriptCallFrame.idl: Added function declarations.
        * WebKit.vcproj/WebKit.vcproj: Added .h/.cpp files to the project.
        * WebScriptCallFrame.cpp: Added.
        (WebScriptCallFrame::WebScriptCallFrame):
        (WebScriptCallFrame::~WebScriptCallFrame):
        (WebScriptCallFrame::createInstance):
        (WebScriptCallFrame::QueryInterface):
        (WebScriptCallFrame::AddRef):
        (WebScriptCallFrame::Release):
        (WebScriptCallFrame::caller):
        (WebScriptCallFrame::scopeChain):
        (WebScriptCallFrame::functionName):
        (WebScriptCallFrame::evaluateWebScript):
        * WebScriptCallFrame.h: Added.

2007-10-26  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Sam and Steve.

        - Added convenience methods for converting between BSTR and JSSTringRefs
        - Added WebKit_debug.def to the project.

        * WebKit.vcproj/WebKit.def:
        * WebKit.vcproj/WebKit.vcproj:
        * WebKit.vcproj/WebKit_debug.def:

2007-10-25  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Make debug builds run again.

        * WebView.cpp:
        (WebView::notifyPreferencesChanged):

2007-10-25  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Remove JSStringRefCFHack.

        * WebKit.vcproj/WebKit.vcproj:

2007-10-25  Sam Weinig  <sam@webkit.org>

        Reviewed by Steve Falkenburg.

        Fix for <rdar://problem/5463608>
        Port WebKit cache model code (Windows needs a big disk cache, smarter memory cache) 

        * Interfaces/IWebPreferences.idl: 
        Deprecate pageCacheSize and objectCacheSize and add cacheModel/setCacheModel.

        * Interfaces/IWebPreferencesPrivate.idl:
        Add automaticallyDetectsCacheModel/setAutomaticallyDetectsCacheModel
     
        * WebFrame.cpp:
        (WebFrame::didPerformFirstNavigation):
        Implement based on the mac version.

        * WebKit.vcproj/WebKit.vcproj:
        * WebKitSystemBits.cpp: Added.
        (WebMemorySize): Moved and renamed from WebPreferences.cpp
        (WebVolumeFreeSize): Added.
        * WebKitSystemBits.h: Added.
        * WebPreferenceKeysPrivate.h: Added WebKitCacheModelPreferenceKey.

        * WebPreferences.cpp:
        (WebPreferences::sharedStandardPreferences):
        (WebPreferences::WebPreferences):
        (WebPreferences::initializeDefaultSettings): Added default for cacheModel.
        (WebPreferences::webPreferencesChangedNotification):
        (WebPreferences::webPreferencesRemovedNotification):
        (WebPreferences::initWithIdentifier): Post a preferences change notification.
        (WebPreferences::pageCacheSize): Deprecated.
        (WebPreferences::objectCacheSize): Deprecated.
        (WebPreferences::cacheModel): Added.
        (WebPreferences::setCacheModel): Added.
        (WebPreferences::setAutomaticallyDetectsCacheModel): Added.
        (WebPreferences::automaticallyDetectsCacheModel): Added.
        (WebPreferences::willAddToWebView): Added.
        (WebPreferences::didRemoveFromWebView): Added.
        * WebPreferences.h:

        * WebView.cpp:
        (PreferencesChangedOrRemovedObserver::PreferencesChangedOrRemovedObserver):
        (PreferencesChangedOrRemovedObserver::~PreferencesChangedOrRemovedObserver):
        (PreferencesChangedOrRemovedObserver::QueryInterface):
        (PreferencesChangedOrRemovedObserver::AddRef):
        (PreferencesChangedOrRemovedObserver::Release):
        (PreferencesChangedOrRemovedObserver::sharedInstance):
        (PreferencesChangedOrRemovedObserver::onNotify):
        (PreferencesChangedOrRemovedObserver::notifyPreferencesChanged):
        (PreferencesChangedOrRemovedObserver::notifyPreferencesRemoved):
        This singleton class updates static properties for all webviews when
        preferenceChange or preferenceRemoved notifications are fired for
        any WebPreference.
        (WebView::WebView):
        (WebView::~WebView):
        (initializeStaticObservers):
        (allWebViewsSet):
        (WebView::addToAllWebViewsSet):
        (WebView::removeFromAllWebViewsSet):
        (WebView::setCacheModel):
        (WebView::cacheModel):
        (WebView::didSetCacheModel):
        (WebView::maxCacheModelInAnyInstance):
        (WebView::close):
        (WebViewWndProc):
        (WebView::developerExtrasEnabled):
        (WebView::initWithFrame):
        (WebView::setPreferences):
        (WebView::preferences):
        (WebView::onNotify):
        (WebView::notifyPreferencesChanged):
        (updateSharedSettingsFromPreferencesIfNeeded):
        * WebView.h:
        Match the macs behavior by using explicit postings of notifications to
        update the preferences.

2007-10-25  Adam Roben  <aroben@apple.com>

        Update WebKit.sln for the removal of Release dftables

        Reviewed by NOBODY.

        * WebKit.vcproj/WebKit.sln:

2007-10-25  Kevin McCullough  <kmccullough@apple.com>

        Rubber stamped by Geoff.

        - Stubbed out the WebScriptDebugServer methods to give Drosera something
        to connect to and now the signature of the interface matches the mac.

        * Interfaces/IWebScriptDebugServer.idl:
        * WebScriptDebugServer.cpp:
        (WebScriptDebugServer::addListener):
        (WebScriptDebugServer::removeListener):
        (WebScriptDebugServer::step):
        (WebScriptDebugServer::pause):
        (WebScriptDebugServer::resume):
        (WebScriptDebugServer::isPaused):
        * WebScriptDebugServer.h:

2007-10-24  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Darin.

        - Renamed WebDebugProgram to WebScriptDebugServer to match the naming
        scheme on the mac.

        * Interfaces/IWebDebugProgram.idl: Removed.
        * Interfaces/IWebScriptDebugServer.idl: Copied from win/Interfaces/IWebDebugProgram.idl.
        * Interfaces/WebKit.idl: 
        * WebDebugProgram.cpp: Removed.
        * WebDebugProgram.h: Removed.
        * WebKit.vcproj/Interfaces.vcproj:
        * WebKit.vcproj/WebKit.vcproj:
        * WebKit.vcproj/WebKitGUID.vcproj:
        * WebKitClassFactory.cpp:
        (WebKitClassFactory::CreateInstance):
        * WebKitDLL.cpp:
        (RunAsLocalServer):
        * WebScriptDebugServer.cpp: Copied from win/WebDebugProgram.cpp.
        (WebScriptDebugServer::WebScriptDebugServer):
        (WebScriptDebugServer::~WebScriptDebugServer):
        (WebScriptDebugServer::createInstance):
        (WebScriptDebugServer::QueryInterface):
        (WebScriptDebugServer::AddRef):
        (WebScriptDebugServer::Release):
        (WebScriptDebugServer::viewAdded):
        (WebScriptDebugServer::viewRemoved):
        (WebScriptDebugServer::attach):
        (WebScriptDebugServer::detach):
        (WebScriptDebugServer::statistics):
        (WebScriptDebugServer::webViews):
        * WebScriptDebugServer.h: Copied from win/WebDebugProgram.h.
        * WebView.cpp:
        (WebView::WebView):
        (WebView::~WebView):

2007-10-24  Adam Roben  <aroben@apple.com>

        Fix <rdar://5549919> Initialize the font database before any font code is invoked

        We initialize the database in two places:
           1. When instantiating WebKitClassFactory, which is guaranteed to
           happen before any WebView is instantiated.
           2. When making a WebCore::Font in WebKitGraphics.

        This ensures that the font database will be populated before any font
        code is invoked. We rely on WebCore to only populate the database
        once.

        Reviewed by Ada.

        * WebKitClassFactory.cpp:
        (WebKitClassFactory::WebKitClassFactory): Populate the font database.
        * WebKitGraphics.cpp:
        (makeFont): Ditto.

2007-10-24  Adam Roben  <aroben@apple.com>

        Add [I]WebTextRenderer

        Right now this class can only be used to add private fonts for use by
        the running process, but will eventually be the home of the
        WebKitGraphics functions.

        Reviewed by Ada.

        * ForEachCoClass.h: Added WebTextRenderer.
        * Interfaces/WebKit.idl: Ditto.
        * WebKit.vcproj/Interfaces.vcproj: Ditto.
        * WebKit.vcproj/WebKit.vcproj: Ditto.
        * WebKit.vcproj/WebKitGUID.vcproj: Ditto.
        * WebKitClassFactory.cpp: Ditto.
        * WebTextRenderer.cpp: Added.
        (WebTextRenderer::createInstance):
        (WebTextRenderer::WebTextRenderer):
        (WebTextRenderer::~WebTextRenderer):
        (WebTextRenderer::QueryInterface):
        (WebTextRenderer::AddRef):
        (WebTextRenderer::Release):
        (WebTextRenderer::registerPrivateFont):
        * WebTextRenderer.h: Added.

2007-10-24  Adam Roben  <aroben@apple.com>

        Use FOR_EACH_COCLASS in WebKitClassFactory

        Reviewed by Ada.

        * WebError.cpp:
        (WebError::createInstance): Added an overload that takes no arguments
        to make the macro used in WebKitClassFactory work.
        * WebError.h:
        * WebKitClassFactory.cpp:
        (WebKitClassFactory::CreateInstance): Use FOR_EACH_COCLASS.

2007-10-24  Adam Roben  <aroben@apple.com>

        Put FOR_EACH_COCLASS macro into its own file and export it

        The macro used to be called FOR_EACH_CLASS and lived in WebKitDLL.cpp.
        This way we will be able to use the macro in more places that care
        about all WebKit's COM classes.

        Reviewed by Ada.

        * ForEachCoClass.h: Added.
        * WebKit.vcproj/WebKit.vcproj: Copy ForEachCoClass.h to
        WebKitOutputDir, and added it to the project.
        * WebKitDLL.cpp: Updated for macro rename, and changed to #undef the
        macros we pass to FOR_EACH_COCLASS after we're done with them.

2007-10-24  Ada Chan  <adachan@apple.com>

        <rdar://problem/5552221> REGRESSION(310A24-ToT): Shortcut key disable. (15604)

        Reviewed by Adam.

        * WebView.cpp:
        (WebView::handleEditingKeyboardEvent): don't handle system key events as text input
        (WebView::keyDown): only remove WM_SYSCHAR message from the queue if we handle it.
        For WM_SYSCHAR message that we don't handle, let it stay in the queue and return 
        false to let windows handle it.

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

        Reviewed by Anders

        Windows portion of <rdar://5554130> 
        
        Slowly introduce Windows WebKit portion of the Database API that sets the 
        on-disk location for databases
        
        * WebDatabaseManager.cpp: Added.
        (WebKitSetWebDatabasesPathIfNecessary):
        * WebDatabaseManager.h: Added.
        
        * WebKit.vcproj/WebKit.vcproj:
        
        * WebView.cpp:
        (WebView::initWithFrame): Call WebKitSetWebDatabasesPathIfNecessary()

2007-10-24  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Sam, Steve and Darin.

        - Added stubs for what will be neede to let Drosera attach to the
        WebKit process and debug it.

        * Interfaces/IWebScriptCallFrame.idl: Added.
        * Interfaces/IWebScriptDebugListener.idl: Added.
        * Interfaces/WebKit.idl:
        * WebKit.vcproj/Interfaces.vcproj:
        * WebKit.vcproj/WebKitGUID.vcproj:

2007-10-23  Adam Roben  <aroben@apple.com>

        Move safe file creation code to WebCore

        Reviewed by Brady.

        * WebPreferences.cpp:
        (preferencesPath): Made into a static helper function.
        (WebPreferences::save): Now calls WebCore's safeCreateFile function.
        (WebPreferences::load): Uses String/CString to handle the UTF-8
        conversion.
        * WebPreferences.h: Removed preferencesPath and
        safeCreateFileWithData.

2007-10-23  Adam Roben  <aroben@apple.com>

        Reduce code duplication by using WebCore's FileSystem functions

        Reviewed by Brady.

        * WebIconDatabase.cpp: Removed a now-unused function and a fixed
        FIXME.
        (WebIconDatabase::init): Changed to use FileSystem functions.
        * WebPreferences.cpp:
        (WebPreferences::preferencesPath): Ditto.

2007-10-23  Sam Weinig  <sam@webkit.org>

        Make the WebNotificationCenter work with null (wildcard) and specific
        observed objects, matching NSNotificationCenter.

        - Removes the ObserverKey, ObserverHash, and ObserverKeyTraits as we now
          hash against the notification name only and check the object on notification
          posting.
        - Use OwnPtr for the WebNotificationCenterPrivate member variable.

        Reviewed by Adam Roben.

        * WebNotificationCenter.cpp:
        (WebNotificationCenter::WebNotificationCenter):
        (WebNotificationCenter::~WebNotificationCenter):
        (WebNotificationCenter::postNotificationInternal):
        (WebNotificationCenter::addObserver):
        (WebNotificationCenter::postNotification):
        (WebNotificationCenter::postNotificationName):
        (WebNotificationCenter::removeObserver):
        * WebNotificationCenter.h:

2007-10-23  Ada Chan  <adachan@apple.com>

        <rdar://problem/5244261> SafariWin ignores cookie policy setting "never" in the preferences
        Custom WebPreferences (not the shared WebPreferences) could override the cookie accept
        policy setting on the default cookie storage.  To fix that, I added a new method in
        WebView called updateGlobalSettingsFromPreferences() to handle updating the global pref
        options such as cookie accept policy, and it's only called to update changes from
        the shared WebPreferences.
        
        Use CLSID_WebPreferences and remove IID_WebPreferences.

        Reviewed by Darin and Adam.

        * WebPreferences.cpp:
        (WebPreferences::QueryInterface):
        * WebPreferences.h:
        * WebView.cpp:
        (WebView::updateWebCoreSettingsFromPreferences):
        (WebView::updateGlobalSettingsFromPreferences):
        (WebView::updateSettingsFromPreferences):
        (WebView::developerExtrasEnabled):
        (WebView::initWithFrame):
        (WebView::onNotify):
        * WebView.h:

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

        Reviewed by Anders

        Keep windows building with new Chrome additions

        * WebChromeClient.cpp:
        * WebChromeClient.h:

2007-10-18  Adam Roben  <aroben@apple.com>

        Fix <rdar://5547784> ProgIDMacros.h should explicitly use wide strings

        Reviewed by Adele.

        * ProgIDMacros.h: Always use wide strings instead of relying on the
        TEXT macro.

2007-10-17  Adam Roben  <aroben@apple.com>

        Fix for clean builds needed after r26683

        Reviewed by NOBODY.

        * WebView.cpp: Remove #include of non-existant file.

2007-10-17  Anders Carlsson  <andersca@apple.com>

        Update for locking primitive changes.

        * WebIconDatabase.cpp:
        (WebIconDatabase::scheduleNotificationDelivery):

2007-10-16  Adam Roben  <aroben@apple.com>

        Remove WebKitInitializer

        Reviewed by Sam.

        * WebKit.vcproj/WebKit.sln:

2007-10-16  Adam Roben  <aroben@apple.com>

        Add FindSafari

        Reviewed by Darin.

        * WebKit.vcproj/WebKit.sln:

2007-10-16  Adam Roben  <aroben@apple.com>

        Rename WebKit_debug.dll to WebKit.dll for the Debug configuration

        This is needed so that we can stop having Safari delay-load WebKit,
        which in turn is needed so that Maciej can land a JavaScript speedup
        which breaks delay-loading.

        Reviewed by Kevin McCullough.

        * WebKit.vcproj/WebKit.vcproj: Use WebKitDLLConfigSuffix for the name
        of our DLL and module definition file.
        * WebKit.vcproj/debug.vsprops: Added WebKitDLLConfigSuffix.
        * WebKit.vcproj/debug_internal.vsprops: Ditto.
        * WebKit.vcproj/release.vsprops: Ditto.

2007-10-15  Jon Honeycutt  <jhoneycutt@apple.com>

        Reviewed by Ollie.

        <rdar://5530789>: REGRESSION(303-310A19): Crash opening .wma files with
        MediaPlayer for the first time

        Failure to setup the stream in PluginView::didReceiveResponse will lead,
        in a full-page plugin, to the main document load being cancelled. This
        is the case with at least two versions of Windows Media Player, which
        cancels the stream and brings up its own "Welcome to Windows Media
        Player" dialog.
        
        As part of the main document load cancellation, m_pluginView is set to
        null, and the crash came from dereferencing this pointer. This patch
        adds a null check.

        * WebFrame.cpp:
        (WebFrame::finishedLoading): Fix some typos
        (WebFrame::committedLoad): Added a null check

2007-10-15  Alice Liu  <alice.liu@apple.com>

        Reviewed by Sam Weinig.

        Fixed <rdar://5382546> layoutTestController.setCustomPolicyDelegate is unimplemented causing tests to fail

        * DefaultPolicyDelegate.cpp: Added.
        Implementation is a direct port of WebKit/DefaultDelegates/WebDefaultPolicyDelegate.m
        (DefaultPolicyDelegate::DefaultPolicyDelegate):
        (DefaultPolicyDelegate::~DefaultPolicyDelegate):
        (DefaultPolicyDelegate::sharedInstance):
        (DefaultPolicyDelegate::createInstance):
        (DefaultPolicyDelegate::QueryInterface):
        (DefaultPolicyDelegate::AddRef):
        (DefaultPolicyDelegate::Release):
        (DefaultPolicyDelegate::decidePolicyForNavigationAction):
        (DefaultPolicyDelegate::decidePolicyForNewWindowAction):
        (DefaultPolicyDelegate::decidePolicyForMIMEType):
        (DefaultPolicyDelegate::unableToImplementPolicyWithError):
        * DefaultPolicyDelegate.h: Added.
        * WebFrame.cpp:
        (WebFrame::dispatchDecidePolicyForNavigationAction):
        Implemented default action
        * WebKit.vcproj/WebKit.vcproj:
        Adding files to project

2007-10-12  Steve Falkenburg  <sfalken@apple.com>

        Move pthreads up in the linker order and don't mark it for delay load.
        Fixes crash during regsvr32 of WebKit (currently repro if you do a spade ti).
        
        Reviewed by Darin, Ada.

        * WebKit.vcproj/WebKit.vcproj:

2007-10-11  Steve Falkenburg  <sfalken@apple.com>

        Delay load additional libraries to improve startup time.
        
        Reviewed by Darin, Ada.

        * WebKit.vcproj/WebKit.vcproj:

2007-10-11  Ada Chan  <adachan@apple.com>

        <rdar://problem/5534421>
        Switched to using wkGetDefaultHTTPCookieStorage() to avoid recreating CFHTTPCookieStorageRef.
        Removed usage of ResourceHandle::cookieStorage().

        Reviewed by Oliver.

        * WebView.cpp:
        (WebView::updateWebCoreSettingsFromPreferences):
        (WebView::initWithFrame):

2007-10-10  Alice Liu  <alice.liu@apple.com>

        Reviewed by Geoff Garen.

        Fixed <rdar://5464402> Crash when running fast/frames/onload-remove-iframe-crash.html in DRT

        * WebFrame.cpp:
        (WebFrame::createFrame):
        The crash was caused by the early destruction of the subframe.  To resolve this issue, 
        the manual deref of the child frame that occurs in between being appended to the 
        frametree and being used in loadURLIntoChild wasn't exactly incorrect, but just needed 
        to be moved until after loadURLIntoChild. This hasn't been a problem for other uses of 
        child frames because this test case involves removing a child frame immediately after 
        loading it, all in an onload handler.  Even better than just moving the deref would be 
        to change the signature of createFrame to use a RefPtr<Frame> so that a manual deref isn't 
        necessary. This is what was done in this patch. 
        * WebFrame.h:
        createFrame() now returns a RefPtr instead of a raw Frame pointer. 
        Making this change improves the way we handle frames on Windows WebKit. 


2007-10-05  Ada Chan  <adachan@apple.com>

        <rdar://problem/5436617>
        Implement WebIconDatabase::delayDatabaseCleanup() and WebIconDatabase::allowDatabaseCleanup().

        Reviewed by Brady.

        * WebIconDatabase.cpp:
        (WebIconDatabase::delayDatabaseCleanup):
        (WebIconDatabase::allowDatabaseCleanup):

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

        * Interfaces/IWebViewPrivate.idl: Moving setInitialFocus down to the end to avoid breaking the OpenSource build.

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

        Reviewed by Darin.

        WebKit/win part of fix for <rdar://problem/5369017> REGRESSION: Can't tab to webview that doesn't have editable content

        * WebView.cpp: Added setInitialFocus so the application can specify that its handing off focus to WebKit
          and so that it can specify the focus direction.
        * WebView.h: ditto.
        * Interfaces/IWebViewPrivate.idl: ditto.

2007-10-03  Ada Chan  <adachan@apple.com>

        <rdar://problem/5521230> Implement IWebIconDatabase::iconURLForURL in WebKit for windows

        Reviewed by Steve and Brady.

        * Interfaces/IWebIconDatabase.idl:
        * WebIconDatabase.cpp:
        (WebIconDatabase::iconURLForURL):
        * WebIconDatabase.h:

2007-10-02  Sam Weinig  <sam@webkit.org>

        Rubber-stamped by Adam Roben.

        * Interfaces/IWebPreferences.idl: Remove unnecessary comments. 

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

        Reviewed by Adam.

        - started using the new OwnPtr everywhere we do DeleteObject

        * WebNodeHighlight.cpp:
        (WebNodeHighlight::updateWindow):
        * WebView.cpp:
        (WebView::WebView):
        (WebView::deleteBackingStore):
        (WebView::ensureBackingStore):
        (WebView::addToDirtyRegion):
        (WebView::scrollBackingStore):
        (WebView::updateBackingStore):
        (WebView::paint):
        (WebView::paintIntoBackingStore):
        (WebView::paintIntoWindow):
        * WebView.h:

2007-10-02  Adam Roben  <aroben@apple.com>

        Fix <rdar://5505062> WebKit's version-independent ProgIDs contain version numbers

        I also added a few registry keys for our version-independent ProgIDs
        that we were missing.

        Reviewed by Steve.

        * ProgIDMacros.h: Added new macros to get version-independent ProgIDs.
        * WebKitDLL.cpp: Use the version-independent ProgIDs in the right
        places, and added some new keys for version-independent ProgIDs.

2007-10-02  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        Fix a bug discovered by app verifier where we would treat an LPCTSTR as a BSTR causing a crash.
        
        Also rename some protection space constants and change their values to match the mac version.
        
        * Interfaces/IWebURLAuthenticationChallenge.idl:
        * WebURLProtectionSpace.cpp:
        (WebURLProtectionSpace::initWithHost):
        (WebURLProtectionSpace::initWithProxyHost):
        (WebURLProtectionSpace::protocol):
        (WebURLProtectionSpace::proxyType):

2007-09-29  Adam Roben  <aroben@apple.com>

        Clean-up in preparation for <rdar://5505062> WebKit's version-independent ProgIDs contain version numbers

        Reviewed by Steve.

        * ProgIDMacros.h: Stringify the passed in class name.
        * WebKitDLL.cpp: Added a FOR_EACH_CLASS macro to ensure that our class
        lists stay in the right order, and updated uses of the *_PROGID macros
        for to take the stringification into account.

2007-09-27  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Darin.

        - <rdar://5261371> Nothing downloaded when exporting bookmarks from iGoogle web history
        - Implemented IWebHTTPURLResponse::allHeaderFields so that if the content disposition is "attachment" we will download the file instead of display it.  Also implemented some missing functionality.

        * HTTPHeaderPropertyBag.cpp: Added.
        (HTTPHeaderPropertyBag::HTTPHeaderPropertyBag):
        (HTTPHeaderPropertyBag::createInstance):
        (HTTPHeaderPropertyBag::setResponse):
        (HTTPHeaderPropertyBag::response):
        (HTTPHeaderPropertyBag::QueryInterface):
        (HTTPHeaderPropertyBag::AddRef):
        (HTTPHeaderPropertyBag::Release):
        (ConvertFromLPCOLESTR):
        (ConvertToVariant):
        (ConvertFromVariant):
        (HTTPHeaderPropertyBag::Read):
        (HTTPHeaderPropertyBag::Write):
        * HTTPHeaderPropertyBag.h: Added.
        * Interfaces/IWebHTTPURLResponse.idl:
        * WebKit.vcproj/WebKit.vcproj:
        * WebURLResponse.cpp:
        (WebURLResponse::allHeaderFields):
        (WebURLResponse::isAttachment):
        * WebURLResponse.h:

2007-09-27  Ada Chan  <adachan@apple.com>

        <rdar://problem/5507481> Added a delegate method to inform the client
        app that WebView has painted.

        Reviewed by Steve.

        * Interfaces/IWebUIDelegatePrivate.idl:
        * WebView.cpp:
        (WebView::updateBackingStore):

2007-09-25  Adam Roben  <aroben@apple.com>

        Add WebKitInitializer to WebKit.sln

        Reviewed by Sam.

        * WebKit.vcproj/WebKit.sln: DumpRenderTree and testkjs now depend on
        WebKitInitializer.

2007-09-25  Darin Adler  <darin@apple.com>

        Reviewed by Steve.

        - fix <rdar://problem/5095701> Download requring HTTP auth fails
          (progress bar forever)

        The functions in WebDownload relating to authentication challenges needed
        to be implemented.

        * WebDownload.cpp:
        (WebDownload::cancelAuthenticationChallenge): Implement.
        (WebDownload::continueWithoutCredentialForAuthenticationChallenge): Ditto.
        (WebDownload::useCredential): Ditto.
        (WebDownload::willSendRequest): Fix storage leak by adopting request
        and response after creating them. Also retain the result before returning
        it, since that's the API contract with CFNetwork.
        (WebDownload::didReceiveAuthenticationChallenge): Implement.
        (WebDownload::didReceiveResponse): Fix storage leak by adopting response.
        (WebDownload::willResumeWithResponse): Ditto.
        (WebDownload::didFail): Ditto.

        * WebURLAuthenticationChallenge.h: Get rid of the IID #define,
        instead using __declspec(uuid). Added a sender parameter to the
        create function and an m_sender data member.
        * WebURLAuthenticationChallenge.cpp:
        (WebURLAuthenticationChallenge::WebURLAuthenticationChallenge): Added an
        explicit sender parameter so this can be used with a WebDownload, which
        does not involve a ResourceHandle. Later we should clean this up and not
        involve WebCore or ResourceHandle directly even for the non-download case.
        (WebURLAuthenticationChallenge::createInstance): Added an overload for the
        case with an explicit sender parameter.
        (WebURLAuthenticationChallenge::QueryInterface): Use __uuidof for the ID
        of this class. In general, we should move to __uuidof as much as possible
        and keep the separate macros to a minimum -- but we should do this for all
        uses of each class at one time to make sure we don't run into problems
        with two different UUIDs for the same class. This patch does it for three
        classes.
        (WebURLAuthenticationChallenge::initWithProtectionSpace): Use the query
        constructor instead of an explicit QueryInterface for WebURLCredential.
        This is another class where I'm switching from CLSID/IID macros to the
        use of __uuidof, but in this case the use of __uuidof is implicit.
        (WebURLAuthenticationChallenge::initWithAuthenticationChallenge): Ditto,
        but for WebURLAuthenticationChallenge and WebURLAuthenticationChallengeSender.
        (WebURLAuthenticationChallenge::sender): Use the new m_sender member to
        cache the sender object and also use the one that was passed into the
        constructor, if any.

        * WebURLAuthenticationChallengeSender.h: Get rid of the IID #define,
        instead using __declspec(uuid). Also minimize includes and make data
        members private instead of protected.
        * WebURLAuthenticationChallengeSender.cpp:
        (WebURLAuthenticationChallengeSender::QueryInterface): Use __uuidof instead
        of IID macro.
        (WebURLAuthenticationChallengeSender::cancelAuthenticationChallenge):
        Use query constructor instead of QueryInterface.
        (WebURLAuthenticationChallengeSender::continueWithoutCredentialForAuthenticationChallenge):
        Ditto.
        (WebURLAuthenticationChallengeSender::useCredential): Ditto.

        * WebURLCredential.cpp: (WebURLCredential::QueryInterface): Use __uuidof
        instead of CLSID_WebURLCredential.

        - tangentially-related cleanup

        * WebFrame.cpp:
        (WebFrame::dispatchDidReceiveAuthenticationChallenge): Use the adopt
        constructor instead of a separate adoptRef call.
        (WebFrame::dispatchDidCancelAuthenticationChallenge): Ditto.

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

        Reviewed by John Sullivan

        Fix for <rdar://5493371> - Crash in Icon Database on Windows
        
        * WebIconDatabase.cpp:
        (WebIconDatabase::iconForURL): If the URL is NULL, fallback to the default icon without asking WebCore

2007-09-24  Adam Roben  <aroben@apple.com>

        Fix <rdar://5499507> FrameView will always have size (0,0) if its parent WebView is never resized

        Reviewed by Darin.

        * WebView.cpp:
        (WebView::initWithFrame): Set the main FrameView's size to the size of
        the WebView.

2007-09-21  Kevin McCullough  <kmccullough@apple.com>

        - Fixed a syntax guideline mistake.

        * WebChromeClient.cpp:
        (WebChromeClient::scrollbarsVisible):

2007-09-20  Oliver Hunt  <oliver@apple.com>

        Reviewed by Steve.

        <rdar://problem/5487153> Korean characters are displayed as garbage with default encoding in some Korean web sites

        Adding support for per-localisation default character encodings on
        windows.
        
        * English.lproj/Localizable.strings:
        * WebPreferences.cpp:
        (WebPreferences::initializeDefaultSettings):

2007-09-20  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Oliver.

        - Added the ability to ask if scrollbars are visible
        - <rdar://problem/5496211> scrollbarsVisible in WebChromeClient is not implemented

        * WebChromeClient.cpp:
        (WebChromeClient::scrollbarsVisible):

2007-09-20  Ada Chan  <adachan@apple.com>

        <rdar://problem/5477240> Regression: Footer is too high in print preview

        Reviewed by Steve.

        * WebFrame.cpp:
        (WebFrame::WebFrame): initialize new data member m_pageHeight, which is the height of the page adjusted for margins.
        (WebFrame::computePageRects): get the height of the page adjusted for margins by passing m_pageHeight to
        computePageRectsForFrame().
        (WebFrame::spoolPages): footer rect's top is the max of the bottom of the page content and the bottom of the page
        minus footer height.
        * WebFrame.h:

2007-09-19  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Hyatt.

        - <rdar://problem/5101991> Avril Lavigne music player comes up in a window with scrollbars
        - Implementing missing scrollbar functionality to allow turning off scrollbars correctly.

        * Interfaces/IWebFrame.idl:
        * Interfaces/IWebFrameView.idl:
        * WebChromeClient.cpp:
        (WebChromeClient::setScrollbarsVisible):
        * WebFrame.cpp:
        (WebFrame::setAllowsScrolling):
        (WebFrame::allowsScrolling):
        (WebFrame::frameView):
        * WebFrame.h:

2007-09-20  Brady Eidson  <beidson@apple.com>

        Reviewed by Dave Hyatt

        <rdar://problem/5245981> - No favicon shows up for cnet.com
        
        * WebIconDatabase.cpp:
        (WebIconDatabase::iconForURL): Call getHBITMAPOfSize
        (WebIconDatabase::getOrCreateDefaultIconBitmap): Ditto

2007-09-19  Sam Weinig  <sam@webkit.org>

        Rubber stamped by Adam Roben.

        * WebKit.vcproj/WebKit.sln: Update location of DumpRenderTree and TestNetscapePlugin
        to point to their new locations.

2007-09-18  Brady Eidson  <beidson@apple.com>

        Reviewed by Adam

        Final part of <rdar://problem/5471308> - Hook up async icon database on Windows        

        * CFDictionaryPropertyBag.cpp:
        (CFDictionaryPropertyBag::CFDictionaryPropertyBag): Took the opportunity to rewrite with a RetainPtr
          since it became available after the initial implementation
        (CFDictionaryPropertyBag::setDictionary):
        (CFDictionaryPropertyBag::dictionary): Added accessor to the CFDictionaryRef to ease use within WebKit
        (CFDictionaryPropertyBag::QueryInterface): Added IID_CFDictionaryPropertyBag accessor
        (CFDictionaryPropertyBag::Read):
        (CFDictionaryPropertyBag::Write):
        * CFDictionaryPropertyBag.h: Added IID_CFDictionaryPropertyBag
       
        * WebFrame.cpp:
        (WebFrame::url): Added accessor, gets the current URL from WebCore
        (WebFrame::dispatchDidReceiveIcon): Calls through to the WebView
        (WebFrame::registerForIconNotification): Ditto
        * WebFrame.h:        

        * WebIconDatabase.cpp:
        (WebIconDatabase::iconDatabaseDidAddIconNotification):
        (WebIconDatabase::iconDatabaseNotificationUserInfoURLKey):
        (WebIconDatabase::iconDatabaseDidRemoveAllIconsNotification):
        (postDidRemoveAllIconsNotification):
        (postDidAddIconNotification):
        * WebIconDatabase.h:        

        * WebView.cpp:
        (WebView::close): Unregister for the notification, just in case
        (WebView::notifyDidAddIcon): Called when the webview gets the didAddIcon notification, compares the url
          in the notification to the current main frame URL.  If they match, calls to dispatchDidReceiveIconFromWebFrame
        (WebView::registerForIconNotification): 
        (WebView::dispatchDidReceiveIconFromWebFrame): Dispatches the FrameLoadDelegate call.  Once the delegate call is dispatched,
          either via the FrameLoaderClient interface of by listening for a notification, we know that our info is up to date in the 
          IconDatabase and we don't need to listen for the generic notification any long, so we unregister for it here, as well.
        (WebView::onNotify): The WebView listens for two notifications now, so make the decision which was received
        * WebView.h:

2007-09-18  Brady Eidson  <beidson@apple.com>

        Reviewed by Ada and Geoff

        Part of <rdar://problem/5471308> - Get async Icon Database fully hooked up on Windows
        
        Hook up main thread delivery of Icon Database notifications from the secondary thread
        
        * WebIconDatabase.cpp:
        (WebIconDatabase::WebIconDatabase): Initialize m_deliveryRequested
        (WebIconDatabase::init): Set the IconDatabaseClient to the shared WebIconDatabase
        (WebIconDatabase::dispatchDidRemoveAllIcons): Queue the notification to be delivered on the main thread then
          ask for the delivery
        (WebIconDatabase::dispatchDidAddIconForPageURL): Ditto
        (WebIconDatabase::scheduleNotificationDelivery): If the m_deliveryRequested hasn't been set, then set it
          and perform the callOnMainThread() for WebIconDatabase::deliverNotifications
        (postDidRemoveAllIconsNotification):
        (postDidAddIconNotification):
        (WebIconDatabase::deliverNotifications): Deliver all notifications in the current queue
        * WebIconDatabase.h:

2007-09-17  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        Fixed a hang due to an infinite script running in the window's unload 
        event handler, which may be the cause of <rdar://problem/5479443> 
        REGRESSION: Hang due to infinite JS recursion on close @ engadget.com 
        (onunload-based ad)
        
        Added a bunch of WebKitMac's close features, and reordered others to
        match WebKitMac.

        * WebView.cpp:
        (WebView::close):
        (WebView::removeDragCaret):

2007-09-17  Adam Roben  <aroben@apple.com>

        Fix <rdar://4979801> overflow divs don't respond to keyboard scrolling (affects RSS pages)

        Reviewed by Hyatt.

        * WebView.cpp:
        (WebView::keyDown): Attempt to scroll an overflow area before
        scrolling the whole frame.

2007-09-17  Brady Eidson  <beidson@apple.com>

        Reviewed by Adam
        
        <rdar://problem/5471308> - Get async Icon Database fully hooked up on Windows
        
        Add a global "shut down WebKit" procedure to do cleanup at the engine level on quit. 
        Critical now for the IconDatabase and might be for other things in the future.

        * WebKitDLL.cpp:
        (shutDownWebKit): For now, just close the IconDatabase
        (DllMain): On DLL_PROCESS_DETACH, call shutDownWebKit

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

        Reviewed by Adam.

        <rdar://problem/5421997>
        http://bugs.webkit.org/show_bug.cgi?id=14247
        Display problem with Flash - image does not stop changing

        Port the manual load code over from the Mac version.

        * WebFrame.cpp:
        (WebFrame::WebFramePrivate::WebFramePrivate):
        Initialize the plugin pointer.
        
        (WebFrame::finishedLoading):
        (WebFrame::setMainDocumentError):
        (WebFrame::committedLoad):
        Feed the data to the plug-in.
                
        (WebFrame::redirectDataToPlugin):
        Store the plug-in widget.

2007-09-14  Steve Falkenburg  <sfalken@apple.com>

        Fix build.

        * WebFrame.cpp:
        (WebFrame::createPlugin):
        (WebFrame::createJavaAppletWidget):

2007-09-13  Darin Adler  <darin@apple.com>

        Reviewed by Oliver.

        - fix <rdar://problem/5470457> REGRESSION: Input method inline hole is mishandled in text
          <input> elements with maxlength limit

        * WebView.cpp:
        (WebView::resetIME): Change to use confirmCompositionWithoutDisturbingSelection.
        (WebView::updateSelectionForIME): Update for name changes, and to use new functions
        in Editor.
        (WebView::onIMEStartComposition): Removed unneeded call to unmarkText.
        (compositionToUnderlines): Removed startOffset parameter, since setComposition now
        handles this.
        (WebView::onIMEComposition): Changed to use confirmComposition and setComposition.
        Logic gets a lot cleaner.
        (WebView::onIMEEndComposition): Removed unneeded calls to Editor.
        (WebView::onIMERequestCharPosition): Updated for name changes.

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

        Reviewed by Adam.
        
        Fixing 
            <rdar://problem/5018591> Windows doesn't have a standard vertical text cursor
            <rdar://problem/5224996> Add zoom in and zoom out cursors
            
        Add images for vertical text and zoom in and out cursors to WebKit resources.
            
        * WebKit.vcproj/verticalTextCursor.png: Added.
        * WebKit.vcproj/WebKit.rc:
        * WebKit.vcproj/WebKit.vcproj:
        * WebKit.vcproj/resource.h:
        * WebKit.vcproj/zoomInCursor.png: Added.
        * WebKit.vcproj/zoomOutCursor.png: Added.
        * WebKitDLL.cpp:
        (loadResourceIntoBuffer):

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

        Initialize SafariTheme early in WebKit's instantiation

        New versions of SafariTheme will require this initialization. We have
        to use GetProcAddress for now since the initialize method doesn't
        exist in any released SafariTheme.

        Reviewed by Ada.

        * WebKit.vcproj/debug_internal.vsprops: Pick up the debug SafariTheme.
        * WebKitClassFactory.cpp:
        (WebKitClassFactory::WebKitClassFactory): Call STInitialize.

2007-09-12  Ada Chan  <adachan@apple.com>

        <rdar://problem/5478690> Regression: printing: footer only appears on the first page of print

        Reviewed by Adam.

        * WebFrame.cpp:
        (WebFrame::spoolPages): the footer rect is relative to the top left of the current page.  So 
        instead of passing pageRect.bottom() as the top of the footer rect (which is relative to the 
        document), we should pass in headerHeight plus the height of the pageRect.

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

        Reviewed by Darin (reluctantly).

        <rdar://problem/5320461>
        http://bugs.webkit.org/show_bug.cgi?id=14548
        REGRESSION (r23987-r24061) : Reproducible crash with a local stylesheet file
        
        Add a workaround which converts the string passed in to an URL if it's a path.
        
        * WebView.cpp:
        (WebView::updateWebCoreSettingsFromPreferences):

2007-09-10  Steve Falkenburg  <sfalken@apple.com>

        Remove site-specific hacks that we don't need anymore.

        Reviewed by Adam.

        * WebView.cpp:
        (WebView::userAgentForKURL):

2007-09-08  Steve Falkenburg  <sfalken@apple.com>

        Prevent WebKit version numbers from containing "4" in Windows.

        Reviewed by Darin.

        * WebKit.vcproj/VERSION: Bump version since our current version ends in 4.
        * WebKit.vcproj/auto-version.sh: Add version checking code.

2007-09-08  Brady Eidson  <beidson@apple.com>

        <rdar://problem/5434431> - Asynchronous Icon Database

        * WebFrame.cpp:
        (WebFrame::didPerformFirstNavigation): Empty impl for now
        (WebFrame::registerForIconNotification): Ditto
        * WebFrame.h:

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

        Reviewed by Darin Adler, Maciej Stachowiak, Mark Rowe, Tim Hatcher.
        
        Fixed <rdar://problem/5326009> Make non-browser WebKit clients have no 
        memory cache, or a very tiny one
        
        Keep the Windows build working with an empty stub.
        
        * WebFrame.cpp:
        (FrameLoaderClient::didPerformFirstNavigation):
        * WebFrame.h:

2007-09-07  Ada Chan  <adachan@apple.com>

        Need to let the OS handle Alt+F4.

        Reviewed by Hyatt.

        * WebView.cpp:
        (WebView::keyUp):
        (WebView::keyDown):

2007-09-07  Anders Carlsson  <andersca@apple.com>

        Reviewed by Oliver.

        <rdar://problem/5461487>
        Seed: Embedded media content (Flash Player 9) inside RSS reported as unknown MIME type.
        
        Don't return ObjectContentNone if the URL's extension can't be mapped to a MIME type. If the MIME type is empty, 
        we will try to display the content in a subframe instead, just like Mac WebKit.
        
        * WebFrame.cpp:
        (WebFrame::objectContentType):

2007-09-07  Ada Chan  <adachan@apple.com>

        <rdar://problem/5395928> Need to be able to handle context menu item selection by index

        Reviewed by Beth.

        * WebView.cpp:
        (WebView::performContextMenuAction): performContextMenuAction() can now handle context menu
        item selection via WM_MENUCOMMAND (by specifying byPosition to be true).  In that case, we
        get the ContextMenuItem by position rather than by action id.
        (WebViewWndProc): handle WM_MENUCOMMAND
        * WebView.h:

2007-09-07  Ada Chan  <adachan@apple.com>

        <rdar://problem/5453494> Better lifetime management of WebDataSource and WebDocumentLoader
        The problem was that WebDataSource does not hold a strong reference to the WebDocumentLoader.  If
        a WebDataSource is still around after the loader has been destroyed, it'll just point to
        a stale WebDocumentLoader.
        To fix this without a circular reference, WebDataSource now holds a strong reference to the
        WebDocumentLoader.  The WebDocumentLoader holds a strong reference to the WebDataSource
        until it's detached from the WebFrame.  When the WebDataSource is destroyed, it'll notify
        its WebDocumentLoader so the loader will clear any references to it.

        Reviewed by Darin.

        * WebDataSource.cpp:
        (WebDataSource::~WebDataSource): call WebDocumentLoader::detachDataSource() so the loader
        will clear any references to this data source
        (WebDataSource::documentLoader): m_loader is now a RefPtr so we need to call get().
        * WebDataSource.h:
        * WebDocumentLoader.cpp:
        (WebDocumentLoader::WebDocumentLoader): initialize m_dataSource since it's no longer a COMPtr.
        (WebDocumentLoader::~WebDocumentLoader): release m_dataSource if necessary
        (WebDocumentLoader::setDataSource): add a reference to m_dataSource
        (WebDocumentLoader::dataSource): 
        (WebDocumentLoader::detachDataSource): clear m_detachedDataSource.
        (WebDocumentLoader::attachToFrame): call setDataSource() so it'll add the reference to the data source if necessary.
        (WebDocumentLoader::detachFromFrame): release the reference to the data source
        * WebDocumentLoader.h:

2007-09-05  Dave Hyatt <hyatt@apple.com>

        Make sure ALT+other keys is properly sent into the DOM so that Web pages (and editing fields) can
        detect key combos like ALT+Enter.
       
        Reviewed by Steve

        * WebView.cpp:
        (WebView::keyUp):
        (WebView::keyDown):
        (WebViewWndProc):
        * WebView.h:

2007-09-04  Sam Weinig  <sam@webkit.org>

        Build fix.

        * WebKit.vcproj/WebKit.vcproj:

2007-09-01  Oliver Hunt  <oliver@apple.com>

        Reviewed by Sam.

        <rdar://problem/5344848> IME is incorrectly used for key events when on non-editable regions
 
        When focusing a password field or a non-editable element we disassociate any IME that may have
        been active, and reassociate should a non-password editable element is focused.

        This makes password input with an IME active simpler, and brings our IME behaviour in line with
        IE.        

        * WebEditorClient.cpp:
        (WebEditorClient::setInputMethodState):
        * WebEditorClient.h:
        * WebView.cpp:
        (IMMDict::IMMDict):
        (WebView::setInputMethodState):
        * WebView.h:

2007-08-31  Steve Falkenburg  <sfalken@apple.com>

        <rdar://problem/5432594> Safari quits when hovering over mailto links on a webpage
        
        In addition to substituting %@ with %s, we also need to substitute %{1-9}$@ with %{1-9}$s.

        Reviewed by Oliver.

        * WebLocalizableStrings.cpp:
        (WebLocalizedLPCTSTR):

2007-08-29  Ada Chan  <adachan@apple.com>

        <rdar://problem/5074612> Added SPI to retrieve certificate info from a WebError.

        Reviewed by Steve.

        * Interfaces/IWebErrorPrivate.idl: Added IWebErrorPrivate
        * WebError.cpp:
        (WebError::QueryInterface): WebError now also implements IWebErrorPrivate
        (WebError::sslPeerCertificate): retrieves certificate info from CFError's user info.
        * WebError.h:
        * WebKit.vcproj/WebKitGUID.vcproj: Added IWebErrorPrivate_i.c

2007-08-28  Steve Falkenburg  <sfalken@apple.com>

        <rdar://problem/5079253> Cannot set different margins for the page
        
        Added support for setting margins via page setup for Windows printing.
        
        Reviewed by Adam.

        * Interfaces/IWebUIDelegate.idl: Added webViewPrintingMarginRect.
        * WebFrame.cpp:
        (WebFrame::printerMarginRect): Added.
        (WebFrame::computePageRects): Account for margins when calculating page rects.
        (WebFrame::spoolPages): Position footer at the bottom of the page rect (fixes footer drawing if left/right margins are set).
        * WebFrame.h:

2007-08-28  Jon Honeycutt  <jhoneycutt@apple.com>

        Reviewed by Adam.

        <rdar://problem/5444457>: Content is cut when page orientation changed
        in print preview
        Fix: Don't return WebFrame::m_pageRects if it exists; let
        computePageRectsForFrame clear and rewrite it.

        * WebFrame.cpp:
        (WebFrame::computePageRects): Removed an early-return case. Added a
        space.

2007-08-28  Ada Chan  <adachan@apple.com>

        <rdar://problem/4876242> Added SPI to fetch SSL certificate information.

        Reviewed by Adam and Steve.

        * Interfaces/IWebURLResponsePrivate.idl: Added.
        * WebKit.vcproj/Interfaces.vcproj:
        * WebKit.vcproj/WebKitGUID.vcproj:
        * WebURLResponse.cpp:
        (WebURLResponse::QueryInterface):
        (WebURLResponse::sslPeerCertificate): gets peer certificate context from CFNetwork
        (WebURLResponse::certificateDictionary): gets the dictionary that contains SSL certificate
        info from CFNetwork.  We retain the dictionary to ensure the certificate context is valid
        throughout the lifetime of the WebURLResponse.
        * WebURLResponse.h:

2007-08-27  Steve Falkenburg  <sfalken@apple.com>

        <rdar://problem/5424801> REGRESSION (r25151): Web page area of window doesn't redraw if page isn't loaded
        
        Don't bypass WebView WM_PAINT if the WebView has never committed a page.
        
        Reviewed by Maciej.

        * WebView.cpp:
        (WebViewWndProc): Don't skip painting if we haven't committed any pages in this view.

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

        Reviewed by Adam and Sam
        
        <rdar://problem/5269732> Safari 3.0 for Windows cuts off text in textarea boxes during sending forms (14562) 
        <http://bugs.webkit.org/show_bug.cgi?id=14562> [Win] Textarea contents partially eaten on submit/copy
        
        WebView::handleEditingKeyboardEvent assumed all keycodes that did not trigger a named command were
        to be inserted.  This could cause unexpected behaviour when control characters (eg. escape) are sent,
        or could cause data loss when sent a null character (as happens when dead keys are used for international 
        input).
        
        This patch corrects WebView::handleEditingKeyboardEvent to prevent such characters from being sent 
        to Editor::insertText.  This behaviour matches Firefox.

        * WebView.cpp:
        (WebView::handleEditingKeyboardEvent):

2007-08-24  Sam Weinig  <sam@webkit.org>

        Revert r25216 which renamed the COM DOM bindings to use Deprecated prefix.

2007-08-24  Ada Chan  <adachan@apple.com>

        <rdar://problem/5147315> and <rdar://problem/5183935>
        Added accelerator key mappings for Select All, Undo, and Redo.

        Reviewed by Adam.

        * WebView.cpp:

2007-08-24  Jon Honeycutt  <jhoneycutt@apple.com>

        Reviewed by Darin.

        Part of <rdar://problem/5433236> Print preview of empty txt file crashes
        Safari

        * WebFrame.cpp:
        (WebFrame::computePageRects): Pass m_pageRects by reference into 
        computePageRectsForFrame

2007-08-24  Sam Weinig  <sam@webkit.org>

        Rubber-stamped by Adam Roben.

        <rdar://problem/5434593> Deprecate current manually written COM DOM bindings in anticipation of autogeneration

        Rename COM DOM bindings to use Deprecated prefix.

        * DOMCSSClasses.cpp:
        (DeprecatedDOMCSSStyleDeclaration::DeprecatedDOMCSSStyleDeclaration):
        (DeprecatedDOMCSSStyleDeclaration::~DeprecatedDOMCSSStyleDeclaration):
        (DeprecatedDOMCSSStyleDeclaration::createInstance):
        (DeprecatedDOMCSSStyleDeclaration::QueryInterface):
        (DeprecatedDOMCSSStyleDeclaration::cssText):
        (DeprecatedDOMCSSStyleDeclaration::setCssText):
        (DeprecatedDOMCSSStyleDeclaration::getPropertyValue):
        (DeprecatedDOMCSSStyleDeclaration::getPropertyCSSValue):
        (DeprecatedDOMCSSStyleDeclaration::removeProperty):
        (DeprecatedDOMCSSStyleDeclaration::getPropertyPriority):
        (DeprecatedDOMCSSStyleDeclaration::setProperty):
        (DeprecatedDOMCSSStyleDeclaration::length):
        (DeprecatedDOMCSSStyleDeclaration::item):
        (DeprecatedDOMCSSStyleDeclaration::parentRule):
        * DOMCSSClasses.h:
        (DeprecatedDOMCSSStyleDeclaration::AddRef):
        (DeprecatedDOMCSSStyleDeclaration::Release):
        (DeprecatedDOMCSSStyleDeclaration::throwException):
        (DeprecatedDOMCSSStyleDeclaration::callWebScriptMethod):
        (DeprecatedDOMCSSStyleDeclaration::evaluateWebScript):
        (DeprecatedDOMCSSStyleDeclaration::removeWebScriptKey):
        (DeprecatedDOMCSSStyleDeclaration::stringRepresentation):
        (DeprecatedDOMCSSStyleDeclaration::webScriptValueAtIndex):
        (DeprecatedDOMCSSStyleDeclaration::setWebScriptValueAtIndex):
        (DeprecatedDOMCSSStyleDeclaration::setException):
        * DOMCoreClasses.cpp:
        (DeprecatedDOMObject::QueryInterface):
        (DeprecatedDOMNode::QueryInterface):
        (DeprecatedDOMNode::nodeName):
        (DeprecatedDOMNode::nodeValue):
        (DeprecatedDOMNode::setNodeValue):
        (DeprecatedDOMNode::nodeType):
        (DeprecatedDOMNode::parentNode):
        (DeprecatedDOMNode::childNodes):
        (DeprecatedDOMNode::firstChild):
        (DeprecatedDOMNode::lastChild):
        (DeprecatedDOMNode::previousSibling):
        (DeprecatedDOMNode::nextSibling):
        (DeprecatedDOMNode::attributes):
        (DeprecatedDOMNode::ownerDocument):
        (DeprecatedDOMNode::insertBefore):
        (DeprecatedDOMNode::replaceChild):
        (DeprecatedDOMNode::removeChild):
        (DeprecatedDOMNode::appendChild):
        (DeprecatedDOMNode::hasChildNodes):
        (DeprecatedDOMNode::cloneNode):
        (DeprecatedDOMNode::normalize):
        (DeprecatedDOMNode::isSupported):
        (DeprecatedDOMNode::namespaceURI):
        (DeprecatedDOMNode::prefix):
        (DeprecatedDOMNode::setPrefix):
        (DeprecatedDOMNode::localName):
        (DeprecatedDOMNode::hasAttributes):
        (DeprecatedDOMNode::isSameNode):
        (DeprecatedDOMNode::isEqualNode):
        (DeprecatedDOMNode::textContent):
        (DeprecatedDOMNode::setTextContent):
        (DeprecatedDOMNode::addEventListener):
        (DeprecatedDOMNode::removeEventListener):
        (DeprecatedDOMNode::dispatchEvent):
        (DeprecatedDOMNode::DeprecatedDOMNode):
        (DeprecatedDOMNode::~DeprecatedDOMNode):
        (DeprecatedDOMNode::createInstance):
        (DeprecatedDOMNodeList::QueryInterface):
        (DeprecatedDOMNodeList::item):
        (DeprecatedDOMNodeList::length):
        (DeprecatedDOMNodeList::DeprecatedDOMNodeList):
        (DeprecatedDOMNodeList::~DeprecatedDOMNodeList):
        (DeprecatedDOMNodeList::createInstance):
        (DeprecatedDOMDocument::QueryInterface):
        (DeprecatedDOMDocument::doctype):
        (DeprecatedDOMDocument::implementation):
        (DeprecatedDOMDocument::documentElement):
        (DeprecatedDOMDocument::createElement):
        (DeprecatedDOMDocument::createDocumentFragment):
        (DeprecatedDOMDocument::createTextNode):
        (DeprecatedDOMDocument::createComment):
        (DeprecatedDOMDocument::createCDATASection):
        (DeprecatedDOMDocument::createProcessingInstruction):
        (DeprecatedDOMDocument::createAttribute):
        (DeprecatedDOMDocument::createEntityReference):
        (DeprecatedDOMDocument::getElementsByTagName):
        (DeprecatedDOMDocument::importNode):
        (DeprecatedDOMDocument::createElementNS):
        (DeprecatedDOMDocument::createAttributeNS):
        (DeprecatedDOMDocument::getElementsByTagNameNS):
        (DeprecatedDOMDocument::getElementById):
        (DeprecatedDOMDocument::getComputedStyle):
        (DeprecatedDOMDocument::createEvent):
        (DeprecatedDOMDocument::DeprecatedDOMDocument):
        (DeprecatedDOMDocument::~DeprecatedDOMDocument):
        (DeprecatedDOMDocument::createInstance):
        (DeprecatedDOMElement::QueryInterface):
        (DeprecatedDOMElement::boundingBox):
        (DeprecatedDOMElement::lineBoxRects):
        (DeprecatedDOMElement::tagName):
        (DeprecatedDOMElement::getAttribute):
        (DeprecatedDOMElement::setAttribute):
        (DeprecatedDOMElement::removeAttribute):
        (DeprecatedDOMElement::getAttributeNode):
        (DeprecatedDOMElement::setAttributeNode):
        (DeprecatedDOMElement::removeAttributeNode):
        (DeprecatedDOMElement::getElementsByTagName):
        (DeprecatedDOMElement::getAttributeNS):
        (DeprecatedDOMElement::setAttributeNS):
        (DeprecatedDOMElement::removeAttributeNS):
        (DeprecatedDOMElement::getAttributeNodeNS):
        (DeprecatedDOMElement::setAttributeNodeNS):
        (DeprecatedDOMElement::getElementsByTagNameNS):
        (DeprecatedDOMElement::hasAttribute):
        (DeprecatedDOMElement::hasAttributeNS):
        (DeprecatedDOMElement::focus):
        (DeprecatedDOMElement::blur):
        (DeprecatedDOMElement::coreElement):
        (DeprecatedDOMElement::isEqual):
        (DeprecatedDOMElement::isFocused):
        (DeprecatedDOMElement::innerText):
        (DeprecatedDOMElement::style):
        (DeprecatedDOMElement::offsetLeft):
        (DeprecatedDOMElement::offsetTop):
        (DeprecatedDOMElement::offsetWidth):
        (DeprecatedDOMElement::offsetHeight):
        (DeprecatedDOMElement::offsetParent):
        (DeprecatedDOMElement::clientWidth):
        (DeprecatedDOMElement::clientHeight):
        (DeprecatedDOMElement::scrollLeft):
        (DeprecatedDOMElement::setScrollLeft):
        (DeprecatedDOMElement::scrollTop):
        (DeprecatedDOMElement::setScrollTop):
        (DeprecatedDOMElement::scrollWidth):
        (DeprecatedDOMElement::scrollHeight):
        (DeprecatedDOMElement::scrollIntoView):
        (DeprecatedDOMElement::scrollIntoViewIfNeeded):
        (DeprecatedDOMElement::DeprecatedDOMElement):
        (DeprecatedDOMElement::~DeprecatedDOMElement):
        (DeprecatedDOMElement::createInstance):
        * DOMCoreClasses.h:
        (DeprecatedDOMNode::AddRef):
        (DeprecatedDOMNode::Release):
        (DeprecatedDOMNode::throwException):
        (DeprecatedDOMNode::callWebScriptMethod):
        (DeprecatedDOMNode::evaluateWebScript):
        (DeprecatedDOMNode::removeWebScriptKey):
        (DeprecatedDOMNode::stringRepresentation):
        (DeprecatedDOMNode::webScriptValueAtIndex):
        (DeprecatedDOMNode::setWebScriptValueAtIndex):
        (DeprecatedDOMNode::setException):
        (DeprecatedDOMNodeList::AddRef):
        (DeprecatedDOMNodeList::Release):
        (DeprecatedDOMNodeList::throwException):
        (DeprecatedDOMNodeList::callWebScriptMethod):
        (DeprecatedDOMNodeList::evaluateWebScript):
        (DeprecatedDOMNodeList::removeWebScriptKey):
        (DeprecatedDOMNodeList::stringRepresentation):
        (DeprecatedDOMNodeList::webScriptValueAtIndex):
        (DeprecatedDOMNodeList::setWebScriptValueAtIndex):
        (DeprecatedDOMNodeList::setException):
        (DeprecatedDOMDocument::AddRef):
        (DeprecatedDOMDocument::Release):
        (DeprecatedDOMDocument::throwException):
        (DeprecatedDOMDocument::callWebScriptMethod):
        (DeprecatedDOMDocument::evaluateWebScript):
        (DeprecatedDOMDocument::removeWebScriptKey):
        (DeprecatedDOMDocument::stringRepresentation):
        (DeprecatedDOMDocument::webScriptValueAtIndex):
        (DeprecatedDOMDocument::setWebScriptValueAtIndex):
        (DeprecatedDOMDocument::setException):
        (DeprecatedDOMDocument::nodeName):
        (DeprecatedDOMDocument::nodeValue):
        (DeprecatedDOMDocument::setNodeValue):
        (DeprecatedDOMDocument::nodeType):
        (DeprecatedDOMDocument::parentNode):
        (DeprecatedDOMDocument::childNodes):
        (DeprecatedDOMDocument::firstChild):
        (DeprecatedDOMDocument::lastChild):
        (DeprecatedDOMDocument::previousSibling):
        (DeprecatedDOMDocument::nextSibling):
        (DeprecatedDOMDocument::attributes):
        (DeprecatedDOMDocument::ownerDocument):
        (DeprecatedDOMDocument::insertBefore):
        (DeprecatedDOMDocument::replaceChild):
        (DeprecatedDOMDocument::removeChild):
        (DeprecatedDOMDocument::appendChild):
        (DeprecatedDOMDocument::hasChildNodes):
        (DeprecatedDOMDocument::cloneNode):
        (DeprecatedDOMDocument::normalize):
        (DeprecatedDOMDocument::isSupported):
        (DeprecatedDOMDocument::namespaceURI):
        (DeprecatedDOMDocument::prefix):
        (DeprecatedDOMDocument::setPrefix):
        (DeprecatedDOMDocument::localName):
        (DeprecatedDOMDocument::hasAttributes):
        (DeprecatedDOMDocument::isSameNode):
        (DeprecatedDOMDocument::isEqualNode):
        (DeprecatedDOMDocument::textContent):
        (DeprecatedDOMDocument::setTextContent):
        (DeprecatedDOMElement::AddRef):
        (DeprecatedDOMElement::Release):
        (DeprecatedDOMElement::throwException):
        (DeprecatedDOMElement::callWebScriptMethod):
        (DeprecatedDOMElement::evaluateWebScript):
        (DeprecatedDOMElement::removeWebScriptKey):
        (DeprecatedDOMElement::stringRepresentation):
        (DeprecatedDOMElement::webScriptValueAtIndex):
        (DeprecatedDOMElement::setWebScriptValueAtIndex):
        (DeprecatedDOMElement::setException):
        (DeprecatedDOMElement::nodeName):
        (DeprecatedDOMElement::nodeValue):
        (DeprecatedDOMElement::setNodeValue):
        (DeprecatedDOMElement::nodeType):
        (DeprecatedDOMElement::parentNode):
        (DeprecatedDOMElement::childNodes):
        (DeprecatedDOMElement::firstChild):
        (DeprecatedDOMElement::lastChild):
        (DeprecatedDOMElement::previousSibling):
        (DeprecatedDOMElement::nextSibling):
        (DeprecatedDOMElement::attributes):
        (DeprecatedDOMElement::ownerDocument):
        (DeprecatedDOMElement::insertBefore):
        (DeprecatedDOMElement::replaceChild):
        (DeprecatedDOMElement::removeChild):
        (DeprecatedDOMElement::appendChild):
        (DeprecatedDOMElement::hasChildNodes):
        (DeprecatedDOMElement::cloneNode):
        (DeprecatedDOMElement::normalize):
        (DeprecatedDOMElement::isSupported):
        (DeprecatedDOMElement::namespaceURI):
        (DeprecatedDOMElement::prefix):
        (DeprecatedDOMElement::setPrefix):
        (DeprecatedDOMElement::localName):
        (DeprecatedDOMElement::hasAttributes):
        (DeprecatedDOMElement::isSameNode):
        (DeprecatedDOMElement::isEqualNode):
        (DeprecatedDOMElement::textContent):
        (DeprecatedDOMElement::setTextContent):
        * DOMEventsClasses.cpp:
        (DeprecatedDOMEventListener::QueryInterface):
        (DeprecatedDOMEventListener::handleEvent):
        (DeprecatedDOMEvent::DeprecatedDOMEvent):
        (DeprecatedDOMEvent::~DeprecatedDOMEvent):
        (DeprecatedDOMEvent::createInstance):
        (DeprecatedDOMEvent::QueryInterface):
        (DeprecatedDOMEvent::type):
        (DeprecatedDOMEvent::target):
        (DeprecatedDOMEvent::currentTarget):
        (DeprecatedDOMEvent::eventPhase):
        (DeprecatedDOMEvent::bubbles):
        (DeprecatedDOMEvent::cancelable):
        (DeprecatedDOMEvent::timeStamp):
        (DeprecatedDOMEvent::stopPropagation):
        (DeprecatedDOMEvent::preventDefault):
        (DeprecatedDOMEvent::initEvent):
        (DeprecatedDOMUIEvent::QueryInterface):
        (DeprecatedDOMUIEvent::view):
        (DeprecatedDOMUIEvent::detail):
        (DeprecatedDOMUIEvent::initUIEvent):
        (DeprecatedDOMUIEvent::keyCode):
        (DeprecatedDOMUIEvent::charCode):
        (DeprecatedDOMUIEvent::layerX):
        (DeprecatedDOMUIEvent::layerY):
        (DeprecatedDOMUIEvent::pageX):
        (DeprecatedDOMUIEvent::pageY):
        (DeprecatedDOMUIEvent::which):
        (DeprecatedDOMKeyboardEvent::QueryInterface):
        (DeprecatedDOMKeyboardEvent::keyIdentifier):
        (DeprecatedDOMKeyboardEvent::keyLocation):
        (DeprecatedDOMKeyboardEvent::ctrlKey):
        (DeprecatedDOMKeyboardEvent::shiftKey):
        (DeprecatedDOMKeyboardEvent::altKey):
        (DeprecatedDOMKeyboardEvent::metaKey):
        (DeprecatedDOMKeyboardEvent::altGraphKey):
        (DeprecatedDOMKeyboardEvent::getModifierState):
        (DeprecatedDOMKeyboardEvent::initKeyboardEvent):
        (DeprecatedDOMMouseEvent::QueryInterface):
        (DeprecatedDOMMouseEvent::screenX):
        (DeprecatedDOMMouseEvent::screenY):
        (DeprecatedDOMMouseEvent::clientX):
        (DeprecatedDOMMouseEvent::clientY):
        (DeprecatedDOMMouseEvent::ctrlKey):
        (DeprecatedDOMMouseEvent::shiftKey):
        (DeprecatedDOMMouseEvent::altKey):
        (DeprecatedDOMMouseEvent::metaKey):
        (DeprecatedDOMMouseEvent::button):
        (DeprecatedDOMMouseEvent::relatedTarget):
        (DeprecatedDOMMouseEvent::initMouseEvent):
        (DeprecatedDOMMouseEvent::offsetX):
        (DeprecatedDOMMouseEvent::offsetY):
        (DeprecatedDOMMouseEvent::x):
        (DeprecatedDOMMouseEvent::y):
        (DeprecatedDOMMouseEvent::fromElement):
        (DeprecatedDOMMouseEvent::toElement):
        (DeprecatedDOMMutationEvent::QueryInterface):
        (DeprecatedDOMMutationEvent::relatedNode):
        (DeprecatedDOMMutationEvent::prevValue):
        (DeprecatedDOMMutationEvent::newValue):
        (DeprecatedDOMMutationEvent::attrName):
        (DeprecatedDOMMutationEvent::attrChange):
        (DeprecatedDOMMutationEvent::initMutationEvent):
        (DeprecatedDOMOverflowEvent::QueryInterface):
        (DeprecatedDOMOverflowEvent::orient):
        (DeprecatedDOMOverflowEvent::horizontalOverflow):
        (DeprecatedDOMOverflowEvent::verticalOverflow):
        (DeprecatedDOMWheelEvent::QueryInterface):
        (DeprecatedDOMWheelEvent::screenX):
        (DeprecatedDOMWheelEvent::screenY):
        (DeprecatedDOMWheelEvent::clientX):
        (DeprecatedDOMWheelEvent::clientY):
        (DeprecatedDOMWheelEvent::ctrlKey):
        (DeprecatedDOMWheelEvent::shiftKey):
        (DeprecatedDOMWheelEvent::altKey):
        (DeprecatedDOMWheelEvent::metaKey):
        (DeprecatedDOMWheelEvent::wheelDelta):
        (DeprecatedDOMWheelEvent::wheelDeltaX):
        (DeprecatedDOMWheelEvent::wheelDeltaY):
        (DeprecatedDOMWheelEvent::offsetX):
        (DeprecatedDOMWheelEvent::offsetY):
        (DeprecatedDOMWheelEvent::x):
        (DeprecatedDOMWheelEvent::y):
        (DeprecatedDOMWheelEvent::isHorizontal):
        (DeprecatedDOMWheelEvent::initWheelEvent):
        * DOMEventsClasses.h:
        (DeprecatedDOMEventListener::AddRef):
        (DeprecatedDOMEventListener::Release):
        (DeprecatedDOMEventListener::throwException):
        (DeprecatedDOMEventListener::callWebScriptMethod):
        (DeprecatedDOMEventListener::evaluateWebScript):
        (DeprecatedDOMEventListener::removeWebScriptKey):
        (DeprecatedDOMEventListener::stringRepresentation):
        (DeprecatedDOMEventListener::webScriptValueAtIndex):
        (DeprecatedDOMEventListener::setWebScriptValueAtIndex):
        (DeprecatedDOMEventListener::setException):
        (DeprecatedDOMEvent::AddRef):
        (DeprecatedDOMEvent::Release):
        (DeprecatedDOMEvent::throwException):
        (DeprecatedDOMEvent::callWebScriptMethod):
        (DeprecatedDOMEvent::evaluateWebScript):
        (DeprecatedDOMEvent::removeWebScriptKey):
        (DeprecatedDOMEvent::stringRepresentation):
        (DeprecatedDOMEvent::webScriptValueAtIndex):
        (DeprecatedDOMEvent::setWebScriptValueAtIndex):
        (DeprecatedDOMEvent::setException):
        (DeprecatedDOMUIEvent::DeprecatedDOMUIEvent):
        (DeprecatedDOMUIEvent::AddRef):
        (DeprecatedDOMUIEvent::Release):
        (DeprecatedDOMUIEvent::throwException):
        (DeprecatedDOMUIEvent::callWebScriptMethod):
        (DeprecatedDOMUIEvent::evaluateWebScript):
        (DeprecatedDOMUIEvent::removeWebScriptKey):
        (DeprecatedDOMUIEvent::stringRepresentation):
        (DeprecatedDOMUIEvent::webScriptValueAtIndex):
        (DeprecatedDOMUIEvent::setWebScriptValueAtIndex):
        (DeprecatedDOMUIEvent::setException):
        (DeprecatedDOMUIEvent::type):
        (DeprecatedDOMUIEvent::target):
        (DeprecatedDOMUIEvent::currentTarget):
        (DeprecatedDOMUIEvent::eventPhase):
        (DeprecatedDOMUIEvent::bubbles):
        (DeprecatedDOMUIEvent::cancelable):
        (DeprecatedDOMUIEvent::timeStamp):
        (DeprecatedDOMUIEvent::stopPropagation):
        (DeprecatedDOMUIEvent::preventDefault):
        (DeprecatedDOMUIEvent::initEvent):
        (DeprecatedDOMKeyboardEvent::DeprecatedDOMKeyboardEvent):
        (DeprecatedDOMKeyboardEvent::AddRef):
        (DeprecatedDOMKeyboardEvent::Release):
        (DeprecatedDOMKeyboardEvent::throwException):
        (DeprecatedDOMKeyboardEvent::callWebScriptMethod):
        (DeprecatedDOMKeyboardEvent::evaluateWebScript):
        (DeprecatedDOMKeyboardEvent::removeWebScriptKey):
        (DeprecatedDOMKeyboardEvent::stringRepresentation):
        (DeprecatedDOMKeyboardEvent::webScriptValueAtIndex):
        (DeprecatedDOMKeyboardEvent::setWebScriptValueAtIndex):
        (DeprecatedDOMKeyboardEvent::setException):
        (DeprecatedDOMKeyboardEvent::type):
        (DeprecatedDOMKeyboardEvent::target):
        (DeprecatedDOMKeyboardEvent::currentTarget):
        (DeprecatedDOMKeyboardEvent::eventPhase):
        (DeprecatedDOMKeyboardEvent::bubbles):
        (DeprecatedDOMKeyboardEvent::cancelable):
        (DeprecatedDOMKeyboardEvent::timeStamp):
        (DeprecatedDOMKeyboardEvent::stopPropagation):
        (DeprecatedDOMKeyboardEvent::preventDefault):
        (DeprecatedDOMKeyboardEvent::initEvent):
        (DeprecatedDOMKeyboardEvent::view):
        (DeprecatedDOMKeyboardEvent::detail):
        (DeprecatedDOMKeyboardEvent::initUIEvent):
        (DeprecatedDOMKeyboardEvent::keyCode):
        (DeprecatedDOMKeyboardEvent::charCode):
        (DeprecatedDOMKeyboardEvent::layerX):
        (DeprecatedDOMKeyboardEvent::layerY):
        (DeprecatedDOMKeyboardEvent::pageX):
        (DeprecatedDOMKeyboardEvent::pageY):
        (DeprecatedDOMKeyboardEvent::which):
        (DeprecatedDOMMouseEvent::DeprecatedDOMMouseEvent):
        (DeprecatedDOMMouseEvent::AddRef):
        (DeprecatedDOMMouseEvent::Release):
        (DeprecatedDOMMouseEvent::throwException):
        (DeprecatedDOMMouseEvent::callWebScriptMethod):
        (DeprecatedDOMMouseEvent::evaluateWebScript):
        (DeprecatedDOMMouseEvent::removeWebScriptKey):
        (DeprecatedDOMMouseEvent::stringRepresentation):
        (DeprecatedDOMMouseEvent::webScriptValueAtIndex):
        (DeprecatedDOMMouseEvent::setWebScriptValueAtIndex):
        (DeprecatedDOMMouseEvent::setException):
        (DeprecatedDOMMouseEvent::type):
        (DeprecatedDOMMouseEvent::target):
        (DeprecatedDOMMouseEvent::currentTarget):
        (DeprecatedDOMMouseEvent::eventPhase):
        (DeprecatedDOMMouseEvent::bubbles):
        (DeprecatedDOMMouseEvent::cancelable):
        (DeprecatedDOMMouseEvent::timeStamp):
        (DeprecatedDOMMouseEvent::stopPropagation):
        (DeprecatedDOMMouseEvent::preventDefault):
        (DeprecatedDOMMouseEvent::initEvent):
        (DeprecatedDOMMouseEvent::view):
        (DeprecatedDOMMouseEvent::detail):
        (DeprecatedDOMMouseEvent::initUIEvent):
        (DeprecatedDOMMouseEvent::keyCode):
        (DeprecatedDOMMouseEvent::charCode):
        (DeprecatedDOMMouseEvent::layerX):
        (DeprecatedDOMMouseEvent::layerY):
        (DeprecatedDOMMouseEvent::pageX):
        (DeprecatedDOMMouseEvent::pageY):
        (DeprecatedDOMMouseEvent::which):
        (DeprecatedDOMMutationEvent::DeprecatedDOMMutationEvent):
        (DeprecatedDOMMutationEvent::AddRef):
        (DeprecatedDOMMutationEvent::Release):
        (DeprecatedDOMMutationEvent::throwException):
        (DeprecatedDOMMutationEvent::callWebScriptMethod):
        (DeprecatedDOMMutationEvent::evaluateWebScript):
        (DeprecatedDOMMutationEvent::removeWebScriptKey):
        (DeprecatedDOMMutationEvent::stringRepresentation):
        (DeprecatedDOMMutationEvent::webScriptValueAtIndex):
        (DeprecatedDOMMutationEvent::setWebScriptValueAtIndex):
        (DeprecatedDOMMutationEvent::setException):
        (DeprecatedDOMMutationEvent::type):
        (DeprecatedDOMMutationEvent::target):
        (DeprecatedDOMMutationEvent::currentTarget):
        (DeprecatedDOMMutationEvent::eventPhase):
        (DeprecatedDOMMutationEvent::bubbles):
        (DeprecatedDOMMutationEvent::cancelable):
        (DeprecatedDOMMutationEvent::timeStamp):
        (DeprecatedDOMMutationEvent::stopPropagation):
        (DeprecatedDOMMutationEvent::preventDefault):
        (DeprecatedDOMMutationEvent::initEvent):
        (DeprecatedDOMOverflowEvent::DeprecatedDOMOverflowEvent):
        (DeprecatedDOMOverflowEvent::AddRef):
        (DeprecatedDOMOverflowEvent::Release):
        (DeprecatedDOMOverflowEvent::throwException):
        (DeprecatedDOMOverflowEvent::callWebScriptMethod):
        (DeprecatedDOMOverflowEvent::evaluateWebScript):
        (DeprecatedDOMOverflowEvent::removeWebScriptKey):
        (DeprecatedDOMOverflowEvent::stringRepresentation):
        (DeprecatedDOMOverflowEvent::webScriptValueAtIndex):
        (DeprecatedDOMOverflowEvent::setWebScriptValueAtIndex):
        (DeprecatedDOMOverflowEvent::setException):
        (DeprecatedDOMOverflowEvent::type):
        (DeprecatedDOMOverflowEvent::target):
        (DeprecatedDOMOverflowEvent::currentTarget):
        (DeprecatedDOMOverflowEvent::eventPhase):
        (DeprecatedDOMOverflowEvent::bubbles):
        (DeprecatedDOMOverflowEvent::cancelable):
        (DeprecatedDOMOverflowEvent::timeStamp):
        (DeprecatedDOMOverflowEvent::stopPropagation):
        (DeprecatedDOMOverflowEvent::preventDefault):
        (DeprecatedDOMOverflowEvent::initEvent):
        (DeprecatedDOMWheelEvent::DeprecatedDOMWheelEvent):
        (DeprecatedDOMWheelEvent::AddRef):
        (DeprecatedDOMWheelEvent::Release):
        (DeprecatedDOMWheelEvent::throwException):
        (DeprecatedDOMWheelEvent::callWebScriptMethod):
        (DeprecatedDOMWheelEvent::evaluateWebScript):
        (DeprecatedDOMWheelEvent::removeWebScriptKey):
        (DeprecatedDOMWheelEvent::stringRepresentation):
        (DeprecatedDOMWheelEvent::webScriptValueAtIndex):
        (DeprecatedDOMWheelEvent::setWebScriptValueAtIndex):
        (DeprecatedDOMWheelEvent::setException):
        (DeprecatedDOMWheelEvent::type):
        (DeprecatedDOMWheelEvent::target):
        (DeprecatedDOMWheelEvent::currentTarget):
        (DeprecatedDOMWheelEvent::eventPhase):
        (DeprecatedDOMWheelEvent::bubbles):
        (DeprecatedDOMWheelEvent::cancelable):
        (DeprecatedDOMWheelEvent::timeStamp):
        (DeprecatedDOMWheelEvent::stopPropagation):
        (DeprecatedDOMWheelEvent::preventDefault):
        (DeprecatedDOMWheelEvent::initEvent):
        (DeprecatedDOMWheelEvent::view):
        (DeprecatedDOMWheelEvent::detail):
        (DeprecatedDOMWheelEvent::initUIEvent):
        (DeprecatedDOMWheelEvent::keyCode):
        (DeprecatedDOMWheelEvent::charCode):
        (DeprecatedDOMWheelEvent::layerX):
        (DeprecatedDOMWheelEvent::layerY):
        (DeprecatedDOMWheelEvent::pageX):
        (DeprecatedDOMWheelEvent::pageY):
        (DeprecatedDOMWheelEvent::which):
        * DOMHTMLClasses.cpp:
        (DeprecatedDOMHTMLCollection::DeprecatedDOMHTMLCollection):
        (DeprecatedDOMHTMLCollection::createInstance):
        (DeprecatedDOMHTMLCollection::QueryInterface):
        (DeprecatedDOMHTMLCollection::length):
        (DeprecatedDOMHTMLCollection::item):
        (DeprecatedDOMHTMLCollection::namedItem):
        (DeprecatedDOMHTMLOptionsCollection::QueryInterface):
        (DeprecatedDOMHTMLOptionsCollection::length):
        (DeprecatedDOMHTMLOptionsCollection::setLength):
        (DeprecatedDOMHTMLOptionsCollection::item):
        (DeprecatedDOMHTMLOptionsCollection::namedItem):
        (DeprecatedDOMHTMLDocument::QueryInterface):
        (DeprecatedDOMHTMLDocument::title):
        (DeprecatedDOMHTMLDocument::setTitle):
        (DeprecatedDOMHTMLDocument::referrer):
        (DeprecatedDOMHTMLDocument::domain):
        (DeprecatedDOMHTMLDocument::URL):
        (DeprecatedDOMHTMLDocument::body):
        (DeprecatedDOMHTMLDocument::setBody):
        (DeprecatedDOMHTMLDocument::images):
        (DeprecatedDOMHTMLDocument::applets):
        (DeprecatedDOMHTMLDocument::links):
        (DeprecatedDOMHTMLDocument::forms):
        (DeprecatedDOMHTMLDocument::anchors):
        (DeprecatedDOMHTMLDocument::cookie):
        (DeprecatedDOMHTMLDocument::setCookie):
        (DeprecatedDOMHTMLDocument::open):
        (DeprecatedDOMHTMLDocument::close):
        (DeprecatedDOMHTMLDocument::write):
        (DeprecatedDOMHTMLDocument::writeln):
        (DeprecatedDOMHTMLDocument::getElementById_):
        (DeprecatedDOMHTMLDocument::getElementsByName):
        (DeprecatedDOMHTMLElement::QueryInterface):
        (DeprecatedDOMHTMLElement::idName):
        (DeprecatedDOMHTMLElement::setIdName):
        (DeprecatedDOMHTMLElement::title):
        (DeprecatedDOMHTMLElement::setTitle):
        (DeprecatedDOMHTMLElement::lang):
        (DeprecatedDOMHTMLElement::setLang):
        (DeprecatedDOMHTMLElement::dir):
        (DeprecatedDOMHTMLElement::setDir):
        (DeprecatedDOMHTMLElement::className):
        (DeprecatedDOMHTMLElement::setClassName):
        (DeprecatedDOMHTMLElement::innerHTML):
        (DeprecatedDOMHTMLElement::setInnerHTML):
        (DeprecatedDOMHTMLElement::innerText):
        (DeprecatedDOMHTMLElement::setInnerText):
        (DeprecatedDOMHTMLFormElement::QueryInterface):
        (DeprecatedDOMHTMLFormElement::elements):
        (DeprecatedDOMHTMLFormElement::length):
        (DeprecatedDOMHTMLFormElement::name):
        (DeprecatedDOMHTMLFormElement::setName):
        (DeprecatedDOMHTMLFormElement::acceptCharset):
        (DeprecatedDOMHTMLFormElement::setAcceptCharset):
        (DeprecatedDOMHTMLFormElement::action):
        (DeprecatedDOMHTMLFormElement::setAction):
        (DeprecatedDOMHTMLFormElement::encType):
        (DeprecatedDOMHTMLFormElement::setEnctype):
        (DeprecatedDOMHTMLFormElement::method):
        (DeprecatedDOMHTMLFormElement::setMethod):
        (DeprecatedDOMHTMLFormElement::target):
        (DeprecatedDOMHTMLFormElement::setTarget):
        (DeprecatedDOMHTMLFormElement::submit):
        (DeprecatedDOMHTMLFormElement::reset):
        (DeprecatedDOMHTMLSelectElement::QueryInterface):
        (DeprecatedDOMHTMLSelectElement::type):
        (DeprecatedDOMHTMLSelectElement::selectedIndex):
        (DeprecatedDOMHTMLSelectElement::setSelectedIndx):
        (DeprecatedDOMHTMLSelectElement::value):
        (DeprecatedDOMHTMLSelectElement::setValue):
        (DeprecatedDOMHTMLSelectElement::length):
        (DeprecatedDOMHTMLSelectElement::form):
        (DeprecatedDOMHTMLSelectElement::options):
        (DeprecatedDOMHTMLSelectElement::disabled):
        (DeprecatedDOMHTMLSelectElement::setDisabled):
        (DeprecatedDOMHTMLSelectElement::multiple):
        (DeprecatedDOMHTMLSelectElement::setMultiple):
        (DeprecatedDOMHTMLSelectElement::name):
        (DeprecatedDOMHTMLSelectElement::setName):
        (DeprecatedDOMHTMLSelectElement::size):
        (DeprecatedDOMHTMLSelectElement::setSize):
        (DeprecatedDOMHTMLSelectElement::tabIndex):
        (DeprecatedDOMHTMLSelectElement::setTabIndex):
        (DeprecatedDOMHTMLSelectElement::add):
        (DeprecatedDOMHTMLSelectElement::remove):
        (DeprecatedDOMHTMLSelectElement::activateItemAtIndex):
        (DeprecatedDOMHTMLOptionElement::QueryInterface):
        (DeprecatedDOMHTMLOptionElement::form):
        (DeprecatedDOMHTMLOptionElement::defaultSelected):
        (DeprecatedDOMHTMLOptionElement::setDefaultSelected):
        (DeprecatedDOMHTMLOptionElement::text):
        (DeprecatedDOMHTMLOptionElement::index):
        (DeprecatedDOMHTMLOptionElement::disabled):
        (DeprecatedDOMHTMLOptionElement::setDisabled):
        (DeprecatedDOMHTMLOptionElement::label):
        (DeprecatedDOMHTMLOptionElement::setLabel):
        (DeprecatedDOMHTMLOptionElement::selected):
        (DeprecatedDOMHTMLOptionElement::setSelected):
        (DeprecatedDOMHTMLOptionElement::value):
        (DeprecatedDOMHTMLOptionElement::setValue):
        (DeprecatedDOMHTMLInputElement::QueryInterface):
        (DeprecatedDOMHTMLInputElement::defaultValue):
        (DeprecatedDOMHTMLInputElement::setDefaultValue):
        (DeprecatedDOMHTMLInputElement::defaultChecked):
        (DeprecatedDOMHTMLInputElement::setDefaultChecked):
        (DeprecatedDOMHTMLInputElement::form):
        (DeprecatedDOMHTMLInputElement::accept):
        (DeprecatedDOMHTMLInputElement::setAccept):
        (DeprecatedDOMHTMLInputElement::accessKey):
        (DeprecatedDOMHTMLInputElement::setAccessKey):
        (DeprecatedDOMHTMLInputElement::align):
        (DeprecatedDOMHTMLInputElement::setAlign):
        (DeprecatedDOMHTMLInputElement::alt):
        (DeprecatedDOMHTMLInputElement::setAlt):
        (DeprecatedDOMHTMLInputElement::checked):
        (DeprecatedDOMHTMLInputElement::setChecked):
        (DeprecatedDOMHTMLInputElement::disabled):
        (DeprecatedDOMHTMLInputElement::setDisabled):
        (DeprecatedDOMHTMLInputElement::maxLength):
        (DeprecatedDOMHTMLInputElement::setMaxLength):
        (DeprecatedDOMHTMLInputElement::name):
        (DeprecatedDOMHTMLInputElement::setName):
        (DeprecatedDOMHTMLInputElement::readOnly):
        (DeprecatedDOMHTMLInputElement::setReadOnly):
        (DeprecatedDOMHTMLInputElement::size):
        (DeprecatedDOMHTMLInputElement::setSize):
        (DeprecatedDOMHTMLInputElement::src):
        (DeprecatedDOMHTMLInputElement::setSrc):
        (DeprecatedDOMHTMLInputElement::tabIndex):
        (DeprecatedDOMHTMLInputElement::setTabIndex):
        (DeprecatedDOMHTMLInputElement::type):
        (DeprecatedDOMHTMLInputElement::setType):
        (DeprecatedDOMHTMLInputElement::useMap):
        (DeprecatedDOMHTMLInputElement::setUseMap):
        (DeprecatedDOMHTMLInputElement::value):
        (DeprecatedDOMHTMLInputElement::setValue):
        (DeprecatedDOMHTMLInputElement::select):
        (DeprecatedDOMHTMLInputElement::click):
        (DeprecatedDOMHTMLInputElement::setSelectionStart):
        (DeprecatedDOMHTMLInputElement::selectionStart):
        (DeprecatedDOMHTMLInputElement::setSelectionEnd):
        (DeprecatedDOMHTMLInputElement::selectionEnd):
        (DeprecatedDOMHTMLInputElement::isTextField):
        (DeprecatedDOMHTMLInputElement::rectOnScreen):
        (DeprecatedDOMHTMLInputElement::replaceCharactersInRange):
        (DeprecatedDOMHTMLInputElement::selectedRange):
        (DeprecatedDOMHTMLInputElement::setAutofilled):
        (DeprecatedDOMHTMLInputElement::isUserEdited):
        (DeprecatedDOMHTMLTextAreaElement::QueryInterface):
        (DeprecatedDOMHTMLTextAreaElement::defaultValue):
        (DeprecatedDOMHTMLTextAreaElement::setDefaultValue):
        (DeprecatedDOMHTMLTextAreaElement::form):
        (DeprecatedDOMHTMLTextAreaElement::accessKey):
        (DeprecatedDOMHTMLTextAreaElement::setAccessKey):
        (DeprecatedDOMHTMLTextAreaElement::cols):
        (DeprecatedDOMHTMLTextAreaElement::setCols):
        (DeprecatedDOMHTMLTextAreaElement::disabled):
        (DeprecatedDOMHTMLTextAreaElement::setDisabled):
        (DeprecatedDOMHTMLTextAreaElement::name):
        (DeprecatedDOMHTMLTextAreaElement::setName):
        (DeprecatedDOMHTMLTextAreaElement::readOnly):
        (DeprecatedDOMHTMLTextAreaElement::setReadOnly):
        (DeprecatedDOMHTMLTextAreaElement::rows):
        (DeprecatedDOMHTMLTextAreaElement::setRows):
        (DeprecatedDOMHTMLTextAreaElement::tabIndex):
        (DeprecatedDOMHTMLTextAreaElement::setTabIndex):
        (DeprecatedDOMHTMLTextAreaElement::type):
        (DeprecatedDOMHTMLTextAreaElement::value):
        (DeprecatedDOMHTMLTextAreaElement::setValue):
        (DeprecatedDOMHTMLTextAreaElement::select):
        (DeprecatedDOMHTMLTextAreaElement::isUserEdited):
        * DOMHTMLClasses.h:
        (DeprecatedDOMHTMLCollection::AddRef):
        (DeprecatedDOMHTMLCollection::Release):
        (DeprecatedDOMHTMLCollection::throwException):
        (DeprecatedDOMHTMLCollection::callWebScriptMethod):
        (DeprecatedDOMHTMLCollection::evaluateWebScript):
        (DeprecatedDOMHTMLCollection::removeWebScriptKey):
        (DeprecatedDOMHTMLCollection::stringRepresentation):
        (DeprecatedDOMHTMLCollection::webScriptValueAtIndex):
        (DeprecatedDOMHTMLCollection::setWebScriptValueAtIndex):
        (DeprecatedDOMHTMLCollection::setException):
        (DeprecatedDOMHTMLOptionsCollection::AddRef):
        (DeprecatedDOMHTMLOptionsCollection::Release):
        (DeprecatedDOMHTMLOptionsCollection::throwException):
        (DeprecatedDOMHTMLOptionsCollection::callWebScriptMethod):
        (DeprecatedDOMHTMLOptionsCollection::evaluateWebScript):
        (DeprecatedDOMHTMLOptionsCollection::removeWebScriptKey):
        (DeprecatedDOMHTMLOptionsCollection::stringRepresentation):
        (DeprecatedDOMHTMLOptionsCollection::webScriptValueAtIndex):
        (DeprecatedDOMHTMLOptionsCollection::setWebScriptValueAtIndex):
        (DeprecatedDOMHTMLOptionsCollection::setException):
        (DeprecatedDOMHTMLDocument::DeprecatedDOMHTMLDocument):
        (DeprecatedDOMHTMLDocument::AddRef):
        (DeprecatedDOMHTMLDocument::Release):
        (DeprecatedDOMHTMLDocument::throwException):
        (DeprecatedDOMHTMLDocument::callWebScriptMethod):
        (DeprecatedDOMHTMLDocument::evaluateWebScript):
        (DeprecatedDOMHTMLDocument::removeWebScriptKey):
        (DeprecatedDOMHTMLDocument::stringRepresentation):
        (DeprecatedDOMHTMLDocument::webScriptValueAtIndex):
        (DeprecatedDOMHTMLDocument::setWebScriptValueAtIndex):
        (DeprecatedDOMHTMLDocument::setException):
        (DeprecatedDOMHTMLDocument::nodeName):
        (DeprecatedDOMHTMLDocument::nodeValue):
        (DeprecatedDOMHTMLDocument::nodeType):
        (DeprecatedDOMHTMLDocument::parentNode):
        (DeprecatedDOMHTMLDocument::childNodes):
        (DeprecatedDOMHTMLDocument::firstChild):
        (DeprecatedDOMHTMLDocument::lastChild):
        (DeprecatedDOMHTMLDocument::previousSibling):
        (DeprecatedDOMHTMLDocument::nextSibling):
        (DeprecatedDOMHTMLDocument::attributes):
        (DeprecatedDOMHTMLDocument::ownerDocument):
        (DeprecatedDOMHTMLDocument::insertBefore):
        (DeprecatedDOMHTMLDocument::replaceChild):
        (DeprecatedDOMHTMLDocument::removeChild):
        (DeprecatedDOMHTMLDocument::appendChild):
        (DeprecatedDOMHTMLDocument::hasChildNodes):
        (DeprecatedDOMHTMLDocument::cloneNode):
        (DeprecatedDOMHTMLDocument::normalize):
        (DeprecatedDOMHTMLDocument::isSupported):
        (DeprecatedDOMHTMLDocument::namespaceURI):
        (DeprecatedDOMHTMLDocument::prefix):
        (DeprecatedDOMHTMLDocument::setPrefix):
        (DeprecatedDOMHTMLDocument::localName):
        (DeprecatedDOMHTMLDocument::hasAttributes):
        (DeprecatedDOMHTMLDocument::isSameNode):
        (DeprecatedDOMHTMLDocument::isEqualNode):
        (DeprecatedDOMHTMLDocument::textContent):
        (DeprecatedDOMHTMLDocument::setTextContent):
        (DeprecatedDOMHTMLDocument::doctype):
        (DeprecatedDOMHTMLDocument::implementation):
        (DeprecatedDOMHTMLDocument::documentElement):
        (DeprecatedDOMHTMLDocument::createElement):
        (DeprecatedDOMHTMLDocument::createDocumentFragment):
        (DeprecatedDOMHTMLDocument::createTextNode):
        (DeprecatedDOMHTMLDocument::createComment):
        (DeprecatedDOMHTMLDocument::createCDATASection):
        (DeprecatedDOMHTMLDocument::createProcessingInstruction):
        (DeprecatedDOMHTMLDocument::createAttribute):
        (DeprecatedDOMHTMLDocument::createEntityReference):
        (DeprecatedDOMHTMLDocument::getElementsByTagName):
        (DeprecatedDOMHTMLDocument::importNode):
        (DeprecatedDOMHTMLDocument::createElementNS):
        (DeprecatedDOMHTMLDocument::createAttributeNS):
        (DeprecatedDOMHTMLDocument::getElementsByTagNameNS):
        (DeprecatedDOMHTMLDocument::getElementById):
        (DeprecatedDOMHTMLElement::DeprecatedDOMHTMLElement):
        (DeprecatedDOMHTMLElement::AddRef):
        (DeprecatedDOMHTMLElement::Release):
        (DeprecatedDOMHTMLElement::throwException):
        (DeprecatedDOMHTMLElement::callWebScriptMethod):
        (DeprecatedDOMHTMLElement::evaluateWebScript):
        (DeprecatedDOMHTMLElement::removeWebScriptKey):
        (DeprecatedDOMHTMLElement::stringRepresentation):
        (DeprecatedDOMHTMLElement::webScriptValueAtIndex):
        (DeprecatedDOMHTMLElement::setWebScriptValueAtIndex):
        (DeprecatedDOMHTMLElement::setException):
        (DeprecatedDOMHTMLElement::nodeName):
        (DeprecatedDOMHTMLElement::nodeValue):
        (DeprecatedDOMHTMLElement::setNodeValue):
        (DeprecatedDOMHTMLElement::nodeType):
        (DeprecatedDOMHTMLElement::parentNode):
        (DeprecatedDOMHTMLElement::childNodes):
        (DeprecatedDOMHTMLElement::firstChild):
        (DeprecatedDOMHTMLElement::lastChild):
        (DeprecatedDOMHTMLElement::previousSibling):
        (DeprecatedDOMHTMLElement::nextSibling):
        (DeprecatedDOMHTMLElement::attributes):
        (DeprecatedDOMHTMLElement::ownerDocument):
        (DeprecatedDOMHTMLElement::insertBefore):
        (DeprecatedDOMHTMLElement::replaceChild):
        (DeprecatedDOMHTMLElement::removeChild):
        (DeprecatedDOMHTMLElement::appendChild):
        (DeprecatedDOMHTMLElement::hasChildNodes):
        (DeprecatedDOMHTMLElement::cloneNode):
        (DeprecatedDOMHTMLElement::normalize):
        (DeprecatedDOMHTMLElement::isSupported):
        (DeprecatedDOMHTMLElement::namespaceURI):
        (DeprecatedDOMHTMLElement::prefix):
        (DeprecatedDOMHTMLElement::setPrefix):
        (DeprecatedDOMHTMLElement::localName):
        (DeprecatedDOMHTMLElement::hasAttributes):
        (DeprecatedDOMHTMLElement::isSameNode):
        (DeprecatedDOMHTMLElement::isEqualNode):
        (DeprecatedDOMHTMLElement::textContent):
        (DeprecatedDOMHTMLElement::setTextContent):
        (DeprecatedDOMHTMLElement::tagName):
        (DeprecatedDOMHTMLElement::getAttribute):
        (DeprecatedDOMHTMLElement::setAttribute):
        (DeprecatedDOMHTMLElement::removeAttribute):
        (DeprecatedDOMHTMLElement::getAttributeNode):
        (DeprecatedDOMHTMLElement::setAttributeNode):
        (DeprecatedDOMHTMLElement::removeAttributeNode):
        (DeprecatedDOMHTMLElement::getElementsByTagName):
        (DeprecatedDOMHTMLElement::getAttributeNS):
        (DeprecatedDOMHTMLElement::setAttributeNS):
        (DeprecatedDOMHTMLElement::removeAttributeNS):
        (DeprecatedDOMHTMLElement::getAttributeNodeNS):
        (DeprecatedDOMHTMLElement::setAttributeNodeNS):
        (DeprecatedDOMHTMLElement::getElementsByTagNameNS):
        (DeprecatedDOMHTMLElement::hasAttribute):
        (DeprecatedDOMHTMLElement::hasAttributeNS):
        (DeprecatedDOMHTMLElement::focus):
        (DeprecatedDOMHTMLElement::blur):
        (DeprecatedDOMHTMLFormElement::DeprecatedDOMHTMLFormElement):
        (DeprecatedDOMHTMLFormElement::AddRef):
        (DeprecatedDOMHTMLFormElement::Release):
        (DeprecatedDOMHTMLFormElement::throwException):
        (DeprecatedDOMHTMLFormElement::callWebScriptMethod):
        (DeprecatedDOMHTMLFormElement::evaluateWebScript):
        (DeprecatedDOMHTMLFormElement::removeWebScriptKey):
        (DeprecatedDOMHTMLFormElement::stringRepresentation):
        (DeprecatedDOMHTMLFormElement::webScriptValueAtIndex):
        (DeprecatedDOMHTMLFormElement::setWebScriptValueAtIndex):
        (DeprecatedDOMHTMLFormElement::setException):
        (DeprecatedDOMHTMLFormElement::nodeName):
        (DeprecatedDOMHTMLFormElement::nodeValue):
        (DeprecatedDOMHTMLFormElement::setNodeValue):
        (DeprecatedDOMHTMLFormElement::nodeType):
        (DeprecatedDOMHTMLFormElement::parentNode):
        (DeprecatedDOMHTMLFormElement::childNodes):
        (DeprecatedDOMHTMLFormElement::firstChild):
        (DeprecatedDOMHTMLFormElement::lastChild):
        (DeprecatedDOMHTMLFormElement::previousSibling):
        (DeprecatedDOMHTMLFormElement::nextSibling):
        (DeprecatedDOMHTMLFormElement::attributes):
        (DeprecatedDOMHTMLFormElement::ownerDocument):
        (DeprecatedDOMHTMLFormElement::insertBefore):
        (DeprecatedDOMHTMLFormElement::replaceChild):
        (DeprecatedDOMHTMLFormElement::removeChild):
        (DeprecatedDOMHTMLFormElement::appendChild):
        (DeprecatedDOMHTMLFormElement::hasChildNodes):
        (DeprecatedDOMHTMLFormElement::cloneNode):
        (DeprecatedDOMHTMLFormElement::normalize):
        (DeprecatedDOMHTMLFormElement::isSupported):
        (DeprecatedDOMHTMLFormElement::namespaceURI):
        (DeprecatedDOMHTMLFormElement::prefix):
        (DeprecatedDOMHTMLFormElement::setPrefix):
        (DeprecatedDOMHTMLFormElement::localName):
        (DeprecatedDOMHTMLFormElement::hasAttributes):
        (DeprecatedDOMHTMLFormElement::isSameNode):
        (DeprecatedDOMHTMLFormElement::isEqualNode):
        (DeprecatedDOMHTMLFormElement::textContent):
        (DeprecatedDOMHTMLFormElement::setTextContent):
        (DeprecatedDOMHTMLFormElement::tagName):
        (DeprecatedDOMHTMLFormElement::getAttribute):
        (DeprecatedDOMHTMLFormElement::setAttribute):
        (DeprecatedDOMHTMLFormElement::removeAttribute):
        (DeprecatedDOMHTMLFormElement::getAttributeNode):
        (DeprecatedDOMHTMLFormElement::setAttributeNode):
        (DeprecatedDOMHTMLFormElement::removeAttributeNode):
        (DeprecatedDOMHTMLFormElement::getElementsByTagName):
        (DeprecatedDOMHTMLFormElement::getAttributeNS):
        (DeprecatedDOMHTMLFormElement::setAttributeNS):
        (DeprecatedDOMHTMLFormElement::removeAttributeNS):
        (DeprecatedDOMHTMLFormElement::getAttributeNodeNS):
        (DeprecatedDOMHTMLFormElement::setAttributeNodeNS):
        (DeprecatedDOMHTMLFormElement::getElementsByTagNameNS):
        (DeprecatedDOMHTMLFormElement::hasAttribute):
        (DeprecatedDOMHTMLFormElement::hasAttributeNS):
        (DeprecatedDOMHTMLFormElement::focus):
        (DeprecatedDOMHTMLFormElement::blur):
        (DeprecatedDOMHTMLFormElement::idName):
        (DeprecatedDOMHTMLFormElement::setIdName):
        (DeprecatedDOMHTMLFormElement::title):
        (DeprecatedDOMHTMLFormElement::setTitle):
        (DeprecatedDOMHTMLFormElement::lang):
        (DeprecatedDOMHTMLFormElement::setLang):
        (DeprecatedDOMHTMLFormElement::dir):
        (DeprecatedDOMHTMLFormElement::setDir):
        (DeprecatedDOMHTMLFormElement::className):
        (DeprecatedDOMHTMLFormElement::setClassName):
        (DeprecatedDOMHTMLFormElement::innerHTML):
        (DeprecatedDOMHTMLFormElement::setInnerHTML):
        (DeprecatedDOMHTMLFormElement::innerText):
        (DeprecatedDOMHTMLFormElement::setInnerText):
        (DeprecatedDOMHTMLSelectElement::DeprecatedDOMHTMLSelectElement):
        (DeprecatedDOMHTMLSelectElement::AddRef):
        (DeprecatedDOMHTMLSelectElement::Release):
        (DeprecatedDOMHTMLSelectElement::throwException):
        (DeprecatedDOMHTMLSelectElement::callWebScriptMethod):
        (DeprecatedDOMHTMLSelectElement::evaluateWebScript):
        (DeprecatedDOMHTMLSelectElement::removeWebScriptKey):
        (DeprecatedDOMHTMLSelectElement::stringRepresentation):
        (DeprecatedDOMHTMLSelectElement::webScriptValueAtIndex):
        (DeprecatedDOMHTMLSelectElement::setWebScriptValueAtIndex):
        (DeprecatedDOMHTMLSelectElement::setException):
        (DeprecatedDOMHTMLSelectElement::nodeName):
        (DeprecatedDOMHTMLSelectElement::nodeValue):
        (DeprecatedDOMHTMLSelectElement::setNodeValue):
        (DeprecatedDOMHTMLSelectElement::nodeType):
        (DeprecatedDOMHTMLSelectElement::parentNode):
        (DeprecatedDOMHTMLSelectElement::childNodes):
        (DeprecatedDOMHTMLSelectElement::firstChild):
        (DeprecatedDOMHTMLSelectElement::lastChild):
        (DeprecatedDOMHTMLSelectElement::previousSibling):
        (DeprecatedDOMHTMLSelectElement::nextSibling):
        (DeprecatedDOMHTMLSelectElement::attributes):
        (DeprecatedDOMHTMLSelectElement::ownerDocument):
        (DeprecatedDOMHTMLSelectElement::insertBefore):
        (DeprecatedDOMHTMLSelectElement::replaceChild):
        (DeprecatedDOMHTMLSelectElement::removeChild):
        (DeprecatedDOMHTMLSelectElement::appendChild):
        (DeprecatedDOMHTMLSelectElement::hasChildNodes):
        (DeprecatedDOMHTMLSelectElement::cloneNode):
        (DeprecatedDOMHTMLSelectElement::normalize):
        (DeprecatedDOMHTMLSelectElement::isSupported):
        (DeprecatedDOMHTMLSelectElement::namespaceURI):
        (DeprecatedDOMHTMLSelectElement::prefix):
        (DeprecatedDOMHTMLSelectElement::setPrefix):
        (DeprecatedDOMHTMLSelectElement::localName):
        (DeprecatedDOMHTMLSelectElement::hasAttributes):
        (DeprecatedDOMHTMLSelectElement::isSameNode):
        (DeprecatedDOMHTMLSelectElement::isEqualNode):
        (DeprecatedDOMHTMLSelectElement::textContent):
        (DeprecatedDOMHTMLSelectElement::setTextContent):
        (DeprecatedDOMHTMLSelectElement::tagName):
        (DeprecatedDOMHTMLSelectElement::getAttribute):
        (DeprecatedDOMHTMLSelectElement::setAttribute):
        (DeprecatedDOMHTMLSelectElement::removeAttribute):
        (DeprecatedDOMHTMLSelectElement::getAttributeNode):
        (DeprecatedDOMHTMLSelectElement::setAttributeNode):
        (DeprecatedDOMHTMLSelectElement::removeAttributeNode):
        (DeprecatedDOMHTMLSelectElement::getElementsByTagName):
        (DeprecatedDOMHTMLSelectElement::getAttributeNS):
        (DeprecatedDOMHTMLSelectElement::setAttributeNS):
        (DeprecatedDOMHTMLSelectElement::removeAttributeNS):
        (DeprecatedDOMHTMLSelectElement::getAttributeNodeNS):
        (DeprecatedDOMHTMLSelectElement::setAttributeNodeNS):
        (DeprecatedDOMHTMLSelectElement::getElementsByTagNameNS):
        (DeprecatedDOMHTMLSelectElement::hasAttribute):
        (DeprecatedDOMHTMLSelectElement::hasAttributeNS):
        (DeprecatedDOMHTMLSelectElement::focus):
        (DeprecatedDOMHTMLSelectElement::blur):
        (DeprecatedDOMHTMLSelectElement::idName):
        (DeprecatedDOMHTMLSelectElement::setIdName):
        (DeprecatedDOMHTMLSelectElement::title):
        (DeprecatedDOMHTMLSelectElement::setTitle):
        (DeprecatedDOMHTMLSelectElement::lang):
        (DeprecatedDOMHTMLSelectElement::setLang):
        (DeprecatedDOMHTMLSelectElement::dir):
        (DeprecatedDOMHTMLSelectElement::setDir):
        (DeprecatedDOMHTMLSelectElement::className):
        (DeprecatedDOMHTMLSelectElement::setClassName):
        (DeprecatedDOMHTMLSelectElement::innerHTML):
        (DeprecatedDOMHTMLSelectElement::setInnerHTML):
        (DeprecatedDOMHTMLSelectElement::innerText):
        (DeprecatedDOMHTMLSelectElement::setInnerText):
        (DeprecatedDOMHTMLOptionElement::DeprecatedDOMHTMLOptionElement):
        (DeprecatedDOMHTMLOptionElement::AddRef):
        (DeprecatedDOMHTMLOptionElement::Release):
        (DeprecatedDOMHTMLOptionElement::throwException):
        (DeprecatedDOMHTMLOptionElement::callWebScriptMethod):
        (DeprecatedDOMHTMLOptionElement::evaluateWebScript):
        (DeprecatedDOMHTMLOptionElement::removeWebScriptKey):
        (DeprecatedDOMHTMLOptionElement::stringRepresentation):
        (DeprecatedDOMHTMLOptionElement::webScriptValueAtIndex):
        (DeprecatedDOMHTMLOptionElement::setWebScriptValueAtIndex):
        (DeprecatedDOMHTMLOptionElement::setException):
        (DeprecatedDOMHTMLOptionElement::nodeName):
        (DeprecatedDOMHTMLOptionElement::nodeValue):
        (DeprecatedDOMHTMLOptionElement::setNodeValue):
        (DeprecatedDOMHTMLOptionElement::nodeType):
        (DeprecatedDOMHTMLOptionElement::parentNode):
        (DeprecatedDOMHTMLOptionElement::childNodes):
        (DeprecatedDOMHTMLOptionElement::firstChild):
        (DeprecatedDOMHTMLOptionElement::lastChild):
        (DeprecatedDOMHTMLOptionElement::previousSibling):
        (DeprecatedDOMHTMLOptionElement::nextSibling):
        (DeprecatedDOMHTMLOptionElement::attributes):
        (DeprecatedDOMHTMLOptionElement::ownerDocument):
        (DeprecatedDOMHTMLOptionElement::insertBefore):
        (DeprecatedDOMHTMLOptionElement::replaceChild):
        (DeprecatedDOMHTMLOptionElement::removeChild):
        (DeprecatedDOMHTMLOptionElement::appendChild):
        (DeprecatedDOMHTMLOptionElement::hasChildNodes):
        (DeprecatedDOMHTMLOptionElement::cloneNode):
        (DeprecatedDOMHTMLOptionElement::normalize):
        (DeprecatedDOMHTMLOptionElement::isSupported):
        (DeprecatedDOMHTMLOptionElement::namespaceURI):
        (DeprecatedDOMHTMLOptionElement::prefix):
        (DeprecatedDOMHTMLOptionElement::setPrefix):
        (DeprecatedDOMHTMLOptionElement::localName):
        (DeprecatedDOMHTMLOptionElement::hasAttributes):
        (DeprecatedDOMHTMLOptionElement::isSameNode):
        (DeprecatedDOMHTMLOptionElement::isEqualNode):
        (DeprecatedDOMHTMLOptionElement::textContent):
        (DeprecatedDOMHTMLOptionElement::setTextContent):
        (DeprecatedDOMHTMLOptionElement::tagName):
        (DeprecatedDOMHTMLOptionElement::getAttribute):
        (DeprecatedDOMHTMLOptionElement::setAttribute):
        (DeprecatedDOMHTMLOptionElement::removeAttribute):
        (DeprecatedDOMHTMLOptionElement::getAttributeNode):
        (DeprecatedDOMHTMLOptionElement::setAttributeNode):
        (DeprecatedDOMHTMLOptionElement::removeAttributeNode):
        (DeprecatedDOMHTMLOptionElement::getElementsByTagName):
        (DeprecatedDOMHTMLOptionElement::getAttributeNS):
        (DeprecatedDOMHTMLOptionElement::setAttributeNS):
        (DeprecatedDOMHTMLOptionElement::removeAttributeNS):
        (DeprecatedDOMHTMLOptionElement::getAttributeNodeNS):
        (DeprecatedDOMHTMLOptionElement::setAttributeNodeNS):
        (DeprecatedDOMHTMLOptionElement::getElementsByTagNameNS):
        (DeprecatedDOMHTMLOptionElement::hasAttribute):
        (DeprecatedDOMHTMLOptionElement::hasAttributeNS):
        (DeprecatedDOMHTMLOptionElement::focus):
        (DeprecatedDOMHTMLOptionElement::blur):
        (DeprecatedDOMHTMLOptionElement::idName):
        (DeprecatedDOMHTMLOptionElement::setIdName):
        (DeprecatedDOMHTMLOptionElement::title):
        (DeprecatedDOMHTMLOptionElement::setTitle):
        (DeprecatedDOMHTMLOptionElement::lang):
        (DeprecatedDOMHTMLOptionElement::setLang):
        (DeprecatedDOMHTMLOptionElement::dir):
        (DeprecatedDOMHTMLOptionElement::setDir):
        (DeprecatedDOMHTMLOptionElement::className):
        (DeprecatedDOMHTMLOptionElement::setClassName):
        (DeprecatedDOMHTMLOptionElement::innerHTML):
        (DeprecatedDOMHTMLOptionElement::setInnerHTML):
        (DeprecatedDOMHTMLOptionElement::innerText):
        (DeprecatedDOMHTMLOptionElement::setInnerText):
        (DeprecatedDOMHTMLInputElement::DeprecatedDOMHTMLInputElement):
        (DeprecatedDOMHTMLInputElement::AddRef):
        (DeprecatedDOMHTMLInputElement::Release):
        (DeprecatedDOMHTMLInputElement::throwException):
        (DeprecatedDOMHTMLInputElement::callWebScriptMethod):
        (DeprecatedDOMHTMLInputElement::evaluateWebScript):
        (DeprecatedDOMHTMLInputElement::removeWebScriptKey):
        (DeprecatedDOMHTMLInputElement::stringRepresentation):
        (DeprecatedDOMHTMLInputElement::webScriptValueAtIndex):
        (DeprecatedDOMHTMLInputElement::setWebScriptValueAtIndex):
        (DeprecatedDOMHTMLInputElement::setException):
        (DeprecatedDOMHTMLInputElement::nodeName):
        (DeprecatedDOMHTMLInputElement::nodeValue):
        (DeprecatedDOMHTMLInputElement::setNodeValue):
        (DeprecatedDOMHTMLInputElement::nodeType):
        (DeprecatedDOMHTMLInputElement::parentNode):
        (DeprecatedDOMHTMLInputElement::childNodes):
        (DeprecatedDOMHTMLInputElement::firstChild):
        (DeprecatedDOMHTMLInputElement::lastChild):
        (DeprecatedDOMHTMLInputElement::previousSibling):
        (DeprecatedDOMHTMLInputElement::nextSibling):
        (DeprecatedDOMHTMLInputElement::attributes):
        (DeprecatedDOMHTMLInputElement::ownerDocument):
        (DeprecatedDOMHTMLInputElement::insertBefore):
        (DeprecatedDOMHTMLInputElement::replaceChild):
        (DeprecatedDOMHTMLInputElement::removeChild):
        (DeprecatedDOMHTMLInputElement::appendChild):
        (DeprecatedDOMHTMLInputElement::hasChildNodes):
        (DeprecatedDOMHTMLInputElement::cloneNode):
        (DeprecatedDOMHTMLInputElement::normalize):
        (DeprecatedDOMHTMLInputElement::isSupported):
        (DeprecatedDOMHTMLInputElement::namespaceURI):
        (DeprecatedDOMHTMLInputElement::prefix):
        (DeprecatedDOMHTMLInputElement::setPrefix):
        (DeprecatedDOMHTMLInputElement::localName):
        (DeprecatedDOMHTMLInputElement::hasAttributes):
        (DeprecatedDOMHTMLInputElement::isSameNode):
        (DeprecatedDOMHTMLInputElement::isEqualNode):
        (DeprecatedDOMHTMLInputElement::textContent):
        (DeprecatedDOMHTMLInputElement::setTextContent):
        (DeprecatedDOMHTMLInputElement::tagName):
        (DeprecatedDOMHTMLInputElement::getAttribute):
        (DeprecatedDOMHTMLInputElement::setAttribute):
        (DeprecatedDOMHTMLInputElement::removeAttribute):
        (DeprecatedDOMHTMLInputElement::getAttributeNode):
        (DeprecatedDOMHTMLInputElement::setAttributeNode):
        (DeprecatedDOMHTMLInputElement::removeAttributeNode):
        (DeprecatedDOMHTMLInputElement::getElementsByTagName):
        (DeprecatedDOMHTMLInputElement::getAttributeNS):
        (DeprecatedDOMHTMLInputElement::setAttributeNS):
        (DeprecatedDOMHTMLInputElement::removeAttributeNS):
        (DeprecatedDOMHTMLInputElement::getAttributeNodeNS):
        (DeprecatedDOMHTMLInputElement::setAttributeNodeNS):
        (DeprecatedDOMHTMLInputElement::getElementsByTagNameNS):
        (DeprecatedDOMHTMLInputElement::hasAttribute):
        (DeprecatedDOMHTMLInputElement::hasAttributeNS):
        (DeprecatedDOMHTMLInputElement::focus):
        (DeprecatedDOMHTMLInputElement::blur):
        (DeprecatedDOMHTMLInputElement::idName):
        (DeprecatedDOMHTMLInputElement::setIdName):
        (DeprecatedDOMHTMLInputElement::title):
        (DeprecatedDOMHTMLInputElement::setTitle):
        (DeprecatedDOMHTMLInputElement::lang):
        (DeprecatedDOMHTMLInputElement::setLang):
        (DeprecatedDOMHTMLInputElement::dir):
        (DeprecatedDOMHTMLInputElement::setDir):
        (DeprecatedDOMHTMLInputElement::className):
        (DeprecatedDOMHTMLInputElement::setClassName):
        (DeprecatedDOMHTMLInputElement::innerHTML):
        (DeprecatedDOMHTMLInputElement::setInnerHTML):
        (DeprecatedDOMHTMLInputElement::innerText):
        (DeprecatedDOMHTMLInputElement::setInnerText):
        (DeprecatedDOMHTMLTextAreaElement::DeprecatedDOMHTMLTextAreaElement):
        (DeprecatedDOMHTMLTextAreaElement::AddRef):
        (DeprecatedDOMHTMLTextAreaElement::Release):
        (DeprecatedDOMHTMLTextAreaElement::throwException):
        (DeprecatedDOMHTMLTextAreaElement::callWebScriptMethod):
        (DeprecatedDOMHTMLTextAreaElement::evaluateWebScript):
        (DeprecatedDOMHTMLTextAreaElement::removeWebScriptKey):
        (DeprecatedDOMHTMLTextAreaElement::stringRepresentation):
        (DeprecatedDOMHTMLTextAreaElement::webScriptValueAtIndex):
        (DeprecatedDOMHTMLTextAreaElement::setWebScriptValueAtIndex):
        (DeprecatedDOMHTMLTextAreaElement::setException):
        (DeprecatedDOMHTMLTextAreaElement::nodeName):
        (DeprecatedDOMHTMLTextAreaElement::nodeValue):
        (DeprecatedDOMHTMLTextAreaElement::setNodeValue):
        (DeprecatedDOMHTMLTextAreaElement::nodeType):
        (DeprecatedDOMHTMLTextAreaElement::parentNode):
        (DeprecatedDOMHTMLTextAreaElement::childNodes):
        (DeprecatedDOMHTMLTextAreaElement::firstChild):
        (DeprecatedDOMHTMLTextAreaElement::lastChild):
        (DeprecatedDOMHTMLTextAreaElement::previousSibling):
        (DeprecatedDOMHTMLTextAreaElement::nextSibling):
        (DeprecatedDOMHTMLTextAreaElement::attributes):
        (DeprecatedDOMHTMLTextAreaElement::ownerDocument):
        (DeprecatedDOMHTMLTextAreaElement::insertBefore):
        (DeprecatedDOMHTMLTextAreaElement::replaceChild):
        (DeprecatedDOMHTMLTextAreaElement::removeChild):
        (DeprecatedDOMHTMLTextAreaElement::appendChild):
        (DeprecatedDOMHTMLTextAreaElement::hasChildNodes):
        (DeprecatedDOMHTMLTextAreaElement::cloneNode):
        (DeprecatedDOMHTMLTextAreaElement::normalize):
        (DeprecatedDOMHTMLTextAreaElement::isSupported):
        (DeprecatedDOMHTMLTextAreaElement::namespaceURI):
        (DeprecatedDOMHTMLTextAreaElement::prefix):
        (DeprecatedDOMHTMLTextAreaElement::setPrefix):
        (DeprecatedDOMHTMLTextAreaElement::localName):
        (DeprecatedDOMHTMLTextAreaElement::hasAttributes):
        (DeprecatedDOMHTMLTextAreaElement::isSameNode):
        (DeprecatedDOMHTMLTextAreaElement::isEqualNode):
        (DeprecatedDOMHTMLTextAreaElement::textContent):
        (DeprecatedDOMHTMLTextAreaElement::setTextContent):
        (DeprecatedDOMHTMLTextAreaElement::tagName):
        (DeprecatedDOMHTMLTextAreaElement::getAttribute):
        (DeprecatedDOMHTMLTextAreaElement::setAttribute):
        (DeprecatedDOMHTMLTextAreaElement::removeAttribute):
        (DeprecatedDOMHTMLTextAreaElement::getAttributeNode):
        (DeprecatedDOMHTMLTextAreaElement::setAttributeNode):
        (DeprecatedDOMHTMLTextAreaElement::removeAttributeNode):
        (DeprecatedDOMHTMLTextAreaElement::getElementsByTagName):
        (DeprecatedDOMHTMLTextAreaElement::getAttributeNS):
        (DeprecatedDOMHTMLTextAreaElement::setAttributeNS):
        (DeprecatedDOMHTMLTextAreaElement::removeAttributeNS):
        (DeprecatedDOMHTMLTextAreaElement::getAttributeNodeNS):
        (DeprecatedDOMHTMLTextAreaElement::setAttributeNodeNS):
        (DeprecatedDOMHTMLTextAreaElement::getElementsByTagNameNS):
        (DeprecatedDOMHTMLTextAreaElement::hasAttribute):
        (DeprecatedDOMHTMLTextAreaElement::hasAttributeNS):
        (DeprecatedDOMHTMLTextAreaElement::focus):
        (DeprecatedDOMHTMLTextAreaElement::blur):
        (DeprecatedDOMHTMLTextAreaElement::idName):
        (DeprecatedDOMHTMLTextAreaElement::setIdName):
        (DeprecatedDOMHTMLTextAreaElement::title):
        (DeprecatedDOMHTMLTextAreaElement::setTitle):
        (DeprecatedDOMHTMLTextAreaElement::lang):
        (DeprecatedDOMHTMLTextAreaElement::setLang):
        (DeprecatedDOMHTMLTextAreaElement::dir):
        (DeprecatedDOMHTMLTextAreaElement::setDir):
        (DeprecatedDOMHTMLTextAreaElement::className):
        (DeprecatedDOMHTMLTextAreaElement::setClassName):
        (DeprecatedDOMHTMLTextAreaElement::innerHTML):
        (DeprecatedDOMHTMLTextAreaElement::setInnerHTML):
        (DeprecatedDOMHTMLTextAreaElement::innerText):
        (DeprecatedDOMHTMLTextAreaElement::setInnerText):
        * Interfaces/DOMCSS.idl:
        * Interfaces/DOMCore.idl:
        * Interfaces/DOMEvents.idl:
        * Interfaces/DOMExtensions.idl:
        * Interfaces/DOMHTML.idl:
        * Interfaces/DOMPrivate.idl:
        * Interfaces/DOMRange.idl:
        * Interfaces/DOMWindow.idl:
        * Interfaces/IWebEditingDelegate.idl:
        * Interfaces/IWebFormDelegate.idl:
        * Interfaces/IWebFrame.idl:
        * Interfaces/IWebHTMLRepresentation.idl:
        * Interfaces/IWebView.idl:
        * WebEditorClient.cpp:
        (WebEditorClient::shouldDeleteRange):
        (WebEditorClient::shouldInsertText):
        (WebEditorClient::textFieldDidBeginEditing):
        (WebEditorClient::textFieldDidEndEditing):
        (WebEditorClient::textDidChangeInTextField):
        (WebEditorClient::doTextFieldCommandFromEvent):
        (WebEditorClient::textWillBeDeletedInTextField):
        (WebEditorClient::textDidChangeInTextArea):
        * WebElementPropertyBag.cpp:
        (WebElementPropertyBag::Read):
        * WebFrame.cpp:
        (elementFromDOMElement):
        (formElementFromDOMElement):
        (inputElementFromDOMElement):
        (WebFrame::DOMDocument):
        (WebFrame::frameElement):
        (WebFrame::currentForm):
        (WebFrame::elementWithName):
        (WebFrame::formForElement):
        (WebFrame::elementDoesAutoComplete):
        (WebFrame::controlsInForm):
        (WebFrame::elementIsPassword):
        (WebFrame::searchForLabelsBeforeElement):
        (WebFrame::matchLabelsAgainstElement):
        (WebFrame::dispatchWillSubmitForm):
        * WebFrame.h:
        * WebHTMLRepresentation.cpp:
        (WebHTMLRepresentation::attributedStringFromDOMNodes):
        (WebHTMLRepresentation::elementWithName):
        (WebHTMLRepresentation::elementDoesAutoComplete):
        (WebHTMLRepresentation::elementIsPassword):
        (WebHTMLRepresentation::formForElement):
        (WebHTMLRepresentation::currentForm):
        (WebHTMLRepresentation::controlsInForm):
        (WebHTMLRepresentation::searchForLabels):
        (WebHTMLRepresentation::matchLabels):
        * WebHTMLRepresentation.h:
        * WebView.cpp:
        (WebView::mainFrameDocument):
        (WebView::computedStyleForElement):
        (WebView::editableDOMRangeForPoint):
        (WebView::setSelectedDOMRange):
        (WebView::selectedDOMRange):
        (WebView::setTypingStyle):
        (WebView::typingStyle):
        (WebView::styleDeclarationWithText):
        (WebView::replaceSelectionWithNode):
        (WebView::applyStyle):
        * WebView.h:

2007-08-22  Jon Honeycutt  <jhoneycutt@apple.com>

        Reviewed by Adam.

        Refactoring of <radr://problem/5220598> Dragging URL out and back
        inserts a second copy of the URL

        * Interfaces/IWebViewPrivate.idl: Added setCustomDropTarget and
        removeCustomDropTarget
        * WebView.cpp: 
        (WebView::WebView): Initialize m_hasCustomDropTarget
        (WebView::setCustomDropTarget): Revoke any existing drop target and set
        the incoming drop target.
        (WebView::removeCustomDropTarget): Revoke any existing drop target and
        set the default drop target.
        * WebView.h:

2007-08-21  Ada Chan  <adachan@apple.com>

        Fix <rdar://problem/5416630> Accelerator to open link in window in background opens window in foreground instead
        Placing tooltip window at the topmost in z-order brought windows that were opened in the
        background to the front.  Use HWND_TOP instead.

        Reviewed by Adam.
        
        * WebView.cpp:
        (WebView::initializeToolTipWindow):

2007-08-21  Adam Roben  <aroben@apple.com>

        Switch Windows to using FrameView::layoutIfNeededRecursive

        Reviewed by Darin.

        * WebFrame.cpp: Removed layoutIfNeededRecursive.
        * WebFrame.h: Ditto.
        * WebView.cpp:
        (WebView::updateBackingStore): Call FrameView::layoutIfNeededRecursive.

2007-08-17  Adam Roben  <aroben@apple.com>

        Fix <rdar://5192578> Inspect Element should not appear in context menu in non-debug mode

        We now follow the same logic as Mac WebKit for displaying the Inspect Element item:
            1) If DisableWebKitDeveloperExtras is set to true, don't display it
            2) If not, and we're in a debug build, display it
            3) If not, and we're in a release build, display it if
               WebKitDeveloperExtras is set to true

        Reviewed by Ada.

        * Interfaces/IWebPreferencesPrivate.idl: Added.
        * WebKit.vcproj/Interfaces.vcproj: Add new IWebPreferencesPrivate.idl
        file to project.
        * WebKit.vcproj/WebKitGUID.vcproj: Added generated .c file for
        IWebPreferencesPrivate to project.
        * WebPreferenceKeysPrivate.h: Added new keys.
        * WebPreferences.cpp: Added IID_WebPreferences.
        (WebPreferences::postPreferencesChangesNotification): Added an explicit
        cast needed now that WebPreferences implements two interfaces.
        (WebPreferences::QueryInterface): Added new cases.
        (WebPreferences::setDeveloperExtrasEnabled): Added.
        (WebPreferences::developerExtrasEnabled): Added.
        (WebPreferences::developerExtrasDisabledByOverride): Added.
        * WebPreferences.h: Now implements IWebPreferencesPrivate.
        * WebView.cpp:
        (WebView::updateWebCoreSettingsFromPreferences): Call developerExtrasEnabled.
        (WebView::developerExtrasEnabled): Ported from -[WebView _developerExtrasEnabled].
        * WebView.h:

2007-08-17  Adam Roben  <aroben@apple.com>

        Add WebPreferences::sharedStandardPreferences

        This is a convenience method to get the standard preferences object so
        that within WebKit we don't have to deal with the fact that COM doesn't
        support static methods.

        Reviewed by Ada.

        * WebHistory.cpp:
        (WebHistory::WebHistory): Use sharedStandardPreferences.
        * WebIconDatabase.cpp:
        (WebIconDatabase::init): Ditto.
        * WebPreferences.cpp:
        (WebPreferences::sharedStandardPreferences): Added.
        (WebPreferences::getInstanceForIdentifier): Use sharedStandardPreferences.
        (WebPreferences::standardPreferences): Ditto.
        * WebPreferences.h:
        * WebView.cpp:
        (WebView::preferences): Ditto.

2007-08-17  Anders Carlsson  <andersca@apple.com>

        Build fix.
        
        * WebFrame.cpp:
        (WebFrame::createPlugin):
        * WebFrame.h:
        
2007-08-13  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Dave Hyatt.

        WebKit changes to support new cache eviction model in WebCore.

        * WebPreferences.cpp:
        (WebPreferences::initialize):

        * WebView/WebPreferences.m: Modified to reflect new API in WebCore.
        * WebView.cpp:
        (WebView::initializeCacheSizesIfNecessary): Slightly increased cache
        size on low memory systems to avoid affecting the PLT for now.

2007-08-14  Steve Falkenburg  <sfalken@apple.com>

        <rdar://problem/5411482> Windows user agent language always returns "en"
        
        Call WebCore::defaultLanguage() to pick up UA language.
        
        Reviewed by Oliver.

        * WebView.cpp:
        (WebView::userAgentForKURL):

2007-08-15  Peter Kasting  <zerodpx@gmail.org>

        Reviewed by Darin.
        
        http://bugs.webkit.org/show_bug.cgi?id=14967 part 1 - Eliminate most implicit
        conversions of wtf::Vector<T> to T* by explicitly calling .data()

        * WebView.cpp:
        (getCompositionString):

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

        Store user defaults in a non-mutable CFDictionaryRef

        Also renamed WebPreferences' static members:
            m_standardPreferences -> s_standardPreferences
            m_standardUserDefaults -> s_defaultSettings

        Reviewed by Darin and John.

        * WebPreferences.cpp:
        (WebPreferences::getInstanceForIdentifier):
        (WebPreferences::initializeUserDefaults): Construct the dictionary as a
        local CFMutableDictionaryRef, then assign it to the non-mutable static
        member.
        (WebPreferences::valueForKey):
        (WebPreferences::removeDefaultsIfNeeded):
        (WebPreferences::standardPreferences):
        * WebPreferences.h:

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

        Fix <rdar://problem/5214504> No way to change WebPreferences defaults (all preferences get written to disk)

        We now only write to disk values that have been explicitly set, and
        never write any default values.

        This is not enough, however, as anyone who has used WebKit prior to
        this change will have the default values sitting in their preferences
        plist on disk. To remedy this, we perform a one-time removal of any
        key-value pairs that match a pair in the defaults dictionary.

        Reviewed by Steve, John, Ada, and Darin.

        * WebPreferenceKeysPrivate.h: Added new key to ensure we only remove
        the defaults once.
        * WebPreferences.cpp:
        (WebPreferences::initializeDefaultSettings): Renamed from initialize, and
        made sure we only set up the defaults dictionary once. Now that the
        defaults dictionary is never modified after creation, we don't need to
        check whether the keys are already present.
        (WebPreferences::setStringValue): Don't modify the defaults dictionary.
        (WebPreferences::setIntegerValue): Ditto.
        (WebPreferences::setBoolValue): Ditto.
        (WebPreferences::save): Write out the user's preferences, not the defaults.
        (WebPreferences::load):
           - Removed gotos and early declarations now that we're using
             RetainPtr everywhere.
           - Initialize m_privatePrefs with an empty dictionary if we didn't
             read in a plist.
           - Call migrateDefaultSettingsFromSafari3Beta after loading.
        (WebPreferences::migrateDefaultSettingsFromSafari3Beta): Added.
        (WebPreferences::removeValuesMatchingDefaultSettings): Added.
        (WebPreferences::initWithIdentifier): Don't initialize m_privatePrefs
        -- load() does this now.
        * WebPreferences.h: Updated/added declarations.

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

        Use RetainPtr to store WebPreferences::m_privatePrefs

        Reviewed by Darin.

        * WebPreferences.cpp:
        (WebPreferences::setStringValue):
        (WebPreferences::setIntegerValue):
        (WebPreferences::setBoolValue):
        (WebPreferences::initWithIdentifier):
        * WebPreferences.h:

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

        Fix <rdar://problem/5278790> Hole for find-on-page match in subframe isn't clipped by frame bounds

        Reviewed by Maciej.

        * WebView.cpp:
        (WebView::rectsForTextMatches): Ported fix from r23586.

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

        Prevent an ASSERT on launch by initializing AtomicString in WebKitGraphics

        Reviewed by Maciej.

        * WebKitGraphics.cpp:
        (makeFont):

2007-08-10  Ada Chan  <adachan@apple.com>

        Reviewed by Adam and Darin.
        
        <rdar://problem/5403095> Crash in WebViewWndProc after closing a window
        We are seeing another case where WM_SETFOCUS is sent after WM_DESTROY has been handled in WebView.
        Bail early in the wndProc if WebView is set to be destroyed.

        * WebView.cpp:
        (WebViewWndProc):

2007-08-02  Ada Chan  <adachan@apple.com>

        Reviewed by Steve.
        
        <rdar://problem/5079175> Printing header and footer

        * Interfaces/IWebUIDelegate.idl: added methods for header/footer drawing.
        * WebFrame.cpp:
        (WebFrame::headerAndFooterHeights): ask client for the header and 
        footer heights via IWebUIDelegate2 methods.
        (WebFrame::computePageRects): pass in header and footer heights when
        calculating page rect heights.
        (WebFrame::spoolPages): ask client to draw header and footer via
        IWebUIDelegate2 methods.
        * WebFrame.h:
        * WebKitGraphics.cpp:
        (DrawTextAtPoint): the code assumes color has 4 components - might as well
        assert it.

2007-08-01  Steve Falkenburg  <sfalken@apple.com>

        Build mod: Fix sln to match configs in vcproj.
        
        Reviewed by Adam.

        * WebKit.vcproj/WebKit.make:
        * WebKit.vcproj/WebKit.submit.sln:

2007-07-27  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Tristan.
        
        <rdar://problem/5098931> Attachments are lost when they are moved into a ToDo after a delete

        * WebEditorClient.cpp:
        (WebEditorClient::shouldMoveRangeAfterDelete): Method stub.
        * WebEditorClient.h:

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

        Reviewed by Adam.

        Add FIXME comment.
        
        * Interfaces/DOMHTML.idl:

2007-07-27  Ada Chan  <adachan@apple.com>

        Reviewed by Adam.
        
        Added methods to track user edited text fields now that 
        <rdar://problem/5359921> has been fixed.

        * DOMHTMLClasses.cpp:
        (DOMHTMLInputElement::QueryInterface):
        (DOMHTMLInputElement::isUserEdited):
        (DOMHTMLTextAreaElement::QueryInterface):
        (DOMHTMLTextAreaElement::isUserEdited):
        * DOMHTMLClasses.h:
        * Interfaces/DOMPrivate.idl:

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

        Fix Bug 14773: REGRESSION (r24630): ASSERT_NOT_REACHED in DOMHTMLInputElement::name on Windows
        http://bugs.webkit.org/show_bug.cgi?id=14773

        Reviewed by Steve.

        * Interfaces/DOMHTML.idl: Change IDOMHTMLInputElement back to
        inheriting from IDOMElement. Safari 3 Beta uses this interface, so we
        can't change its vtable.

2007-07-25  Ada Chan  <adachan@apple.com>

        Reviewed by Adam and Steve.
        
        Implemented some DOM methods and other fixes for <rdar://problem/5311601>.
        
        * DOMCoreClasses.cpp:
        (DOMNode::ownerDocument): implemented
        (DOMDocument::getComputedStyle): get the DOMElement via QueryInterface
        (DOMElement::QueryInterface):
        * DOMHTMLClasses.cpp:
        (DOMHTMLDocument::body): fixed leak
        (DOMHTMLFormElement::action): implemented
        (DOMHTMLFormElement::method): ditto
        (DOMHTMLInputElement::form): ditto
        (DOMHTMLTextAreaElement::form): ditto
        * Interfaces/DOMHTML.idl: IDOMHTMLInputElement should inherit from IDOMHTMLElement

2007-07-24  Steve Falkenburg  <sfalken@apple.com>

        Removed touch of WebKit.rc to prevent rebuilds of the rc file.
        The autoversion info can get slightly out of date now, but this isn't a huge problem relative to the rebuilds.
        
        Rubber-stamped by Adam.

        * WebKit.vcproj/WebKit.vcproj:

2007-07-23  Steve Falkenburg  <sfalken@apple.com>

        Fixes to versioning script.
        
        Reviewed by Ada.

        * WebKit.vcproj/auto-version.sh:

2007-07-23  Adam Roben  <aroben@apple.com>

        Implement IWebHistoryItem::[set]AlternateTitle

        The argument types were reversed for these two methods, so I fixed that as
        well.

        Reviewed by Geoff and Oliver.

        * Interfaces/IWebHistoryItem.idl:
        * WebHistoryItem.cpp:
        (WebHistoryItem::setAlternateTitle): Implemented.
        (WebHistoryItem::alternateTitle): Implemented.
        * WebHistoryItem.h:

2007-07-23  Ada Chan  <adachan@apple.com>

        Reviewed by Steve.
        
        Added a new text drawing method that allows caller to override the font smoothing level.

        * WebKit.vcproj/WebKit.def:
        * WebKit.vcproj/WebKit_debug.def:
        * WebKitGraphics.cpp:
        (WebDrawText):
        * WebKitGraphics.h:

2007-07-22  Adam Roben  <aroben@apple.com>

        Implement IDOMElement::setAttribute

        This method was mistakenly called "setResult" in DOMCore.idl, so I
        fixed that as well.

        Needed for <rdar://problem/5314906>.

        Reviewed by Ada.

        * DOMCoreClasses.cpp:
        (DOMElement::setAttribute): Implemented/renamed.
        * DOMCoreClasses.h: Renamed setResult => setAttribute.
        * DOMHTMLClasses.h: Ditto.
        * Interfaces/DOMCore.idl: Ditto.

2007-07-21  Ada Chan  <adachan@apple.com>

        Reviewed by Adam.
        
        Fix bug 14706: http://bugs.webkit.org/show_bug.cgi?id=14706
        Need to set the last visited time before calling WebHistory::addItem().

        * WebHistory.cpp:
        (WebHistory::addItemForURL):

2007-07-20  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Darin.
        
        <rdar://problem/5109817> Ctrl-click on word in non-editable text doesn't select it

        * WebEditorClient.cpp: Removed the now unused selectWordBeforeMenuEvent().
        * WebEditorClient.h:

2007-07-20  Ada Chan  <adachan@apple.com>

        Reviewed by Steve.
        
        <rdar://problem/5350832> History item's visitedCount wasn't updated correctly

        The call to setLastVisitedTimeInterval() in WebHistory::addItemForURL() does not
        really increment the visitedCount of the HistoryItem - because we only increment the count
        if the last visited time is different.  We should initialize the HistoryItem with
        lastVisited time = 0 so when we call setLastVisitedTimeInterval() later, it'll update
        the last visited time AND the visitedCount.
        
        * WebHistory.cpp:
        (WebHistory::addItemForURL):

2007-07-20  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej.

        <rdar://problem/5349668> WebKit/Win needs to send same key events during IME composition as it does on mac

        Removed guards against sending key events during composition, and added a flag
        to indicate a key event is IME related.  This is needed to prevent the first 
        keydown from firing a keypress event, and makes WebEditorClient::handleInputMethodKeypress
        somewhat cleaner.

        * WebEditorClient.cpp:
        (WebEditorClient::handleInputMethodKeypress):
        * WebView.cpp:
        (WebView::keyUp):
        (WebView::keyDown):
        * WebView.h:
        (WebView::inIMEKeyDown):

2007-07-19  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Adam.
        
        - WebKit part of fix for <rdar://problem/5262230> Crash while loading a popup in addictinggames.com
        
        Made closeWindowSoon fire on a timer instead of happening synchronously.

        * WebChromeClient.cpp:
        (WebChromeClient::closeWindowSoon): Actually close the window on a timer, not immediately.
        * WebKit.vcproj/WebKit.vcproj:
        * WebView.cpp:
        (WebView::WebView):
        (WebView::closeWindowSoon):
        (WebView::closeWindowTimerFired):
        * WebView.h:

2007-07-18  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Adam.

        Make the Page with the now required InspectorClient.

        * WebView.cpp:
        (WebView::initWithFrame):

2007-07-18  Sam Weinig  <sam@webkit.org>

        Build fix.

        * WebFrame.cpp:
        (WebFrame::dispatchDecidePolicyForMIMEType):
        (WebFrame::objectContentType):
        * WebView.cpp:
        (WebView::canShowMIMEType):

2007-07-17  Brady Eidson <beidson@apple.com>

        Blind Windows build fix from r24395

        * WebView.cpp:
        (WebView::initWithFrame): BSTR, not BString

2007-07-17  Brady Eidson  <beidson@apple.com>

        Reviewed by Steve
        
        <rdar://problem/4516185> - FTP Directory Listings

        * Interfaces/IWebUIDelegate.idl: Add IWebUIDelegate2 method for getting the path to the template
        
        * WebView.cpp:
          (WebView::initWithFrame): Set the preference for the template path in WebCore when the first
          WebView is initialized

2007-07-17  Ada Chan  <adachan@apple.com>

        Rubbet-stamped by Adam.
        
        Fixed build.

        * Interfaces/IWebFramePrivate.idl:
        * WebContextMenuClient.cpp:
        (fixMenuReceivedFromOldSafari):
        * WebFrame.cpp:
        (WebFrame::loadURLIntoChild):
        (WebFrame::download):
        * WebFrame.h:

2007-07-17  Adam Roben  <aroben@apple.com>

        Fix Bug 14324: Cannot remove/customize the "Inspect Element" contextual menu item
        http://bugs.webkit.org/show_bug.cgi?id=14324

        If we detect that we're running against the Safari 3 Beta, we add back
        the Inspect Element menu item after passing it off to the delegate
        because Safari's UI delegate will remove it.

        Reviewed by Tim.

        * WebContextMenuClient.cpp:
        (isPreInspectElementTagSafari): Added.
        (fixMenuReceivedFromOldSafari): Added.
        (WebContextMenuClient::getCustomMenuFromDefaultItems): Call
        fixMenuReceivedFromOldSafari before returning the new menu.

2007-07-17  Adam Roben  <aroben@apple.com>

        Remove WebContextMenuClient::shouldIncludeInspectElementItem

        Reviewed by Tim.

        * WebContextMenuClient.cpp:
        * WebContextMenuClient.h:

2007-07-17  Adam Roben  <aroben@apple.com>

        Initialize Settings::developerExtrasEnabled

        Reviewed by Tim.

        * WebView.cpp:
        (WebView::updateWebCoreSettingsFromPreferences):

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

        Build fix. 

        * WebContextMenuClient.cpp:
        (WebContextMenuClient::searchWithGoogle): Pass false for lockHistory 
        like we do elsewhere.

2007-07-17  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adam.

        Fix for <rdar://problem/5339416> Candidate window does not
                appear in the correct location for japanese IME

        * WebView.cpp:
        (WebView::prepareCandidateWindow):
          We now use an exclusion zone so that the composition window never 
          overlaps the composition string
        (WebView::onIMERequestCharPosition):
          Correctly handle character offsets marked regions

2007-07-16  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej.

        Fix for <rdar://problem/5334818> Support IME reconversion in windows

        Also includes a small amount of IME refactoring.

        * WebView.cpp:
        (WebView::onIMERequestCharPosition):
        (WebView::onIMERequestReconvertString):
        (WebView::onIMERequest):
        * WebView.h:

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

        Reviewed by Adam

        Begin the arduous task of localizing FTP directory listings while removing a global initializer!

        * English.lproj/Localizable.strings:
        * WebCoreLocalizedStrings.cpp:
        (WebCore::unknownFileSizeText):

2007-07-16  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej.

        Fix for <rdar://problem/5334826> Chinese IME composition window does not appear in the correct location

        Respect IME requests for character position.

        * WebView.cpp:
        (WebView::onIMERequestCharPosition):
        (WebView::onIMERequest):
        * WebView.h:

2007-07-16  Adam Roben  <aroben@apple.com>

        WebKit/win part of <rdar://problem/5336005> Calling window.print() on a subframe prints whole page, should only print that subframe

        Reviewed by Darin.

        * Interfaces/IWebUIDelegate.idl: Rename print to printFrame to closer
        match the Mac method, and copy more of the Mac API comments.
        * WebChromeClient.cpp:
        (WebChromeClient::print): Call printFrame instead of print.

2007-07-16  Adam Roben  <aroben@apple.com>

        Updated WebChromeClient for ChromeClient changes.

        Reviewed by Darin.

        * WebChromeClient.cpp:
        (WebChromeClient::print): Added a Frame* parameter.
        * WebChromeClient.h: Ditto.

2007-07-16  Oliver Hunt  <oliver@apple.com>

        Reviewed by Steve.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=14630

        Remove bogus assertion

        * WebView.cpp:
        (WebView::getIMMContext):

2007-07-14  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam
        
        Set the pref to override the policy delegate for FTP directory listings on Windows

        * WebView.cpp:
        (WebView::updateWebCoreSettingsFromPreferences):

2007-07-13  Oliver Hunt  <oliver@apple.com>

        Reviewed by Darin and Alexey.

        Fix for <rdar://problem/5231528> Inline input of International text (IME)
                http://bugs.webkit.org/show_bug.cgi?id=14331

        This patch adds IME support to WebKit/win, it currently does not support
        reconversion (<rdar://problem/5334818>) and has issues with the chinese
        IMEs (<rdar://problem/5334826>)

        * WebEditorClient.cpp:
        (WebEditorClient::respondToChangedSelection):
        (WebEditorClient::handleInputMethodKeypress):
          Prevent the initial keydown for an IME from triggering a keypressed event
        * WebView.cpp:
        (WebView::WebView):
        (WebView::keyUp):
        (WebView::keyDown):
        (WebViewWndProc):
        (IMMDict::dict):
        (IMMDict::IMMDict):
           Dynamic loader for IME libraries

        (WebView::getIMMContext):
        (WebView::releaseIMMContext):
        (WebView::prepareCandidateWindow):
        (selectionInsideMarkedText):
        (setSelectionToEndOfRange):
        (WebView::resetIME):
        (WebView::updateSelectionForIME):
        (WebView::selectionChanged):
        (getCompositionString):
        (compositionToUnderlines):
           Helper functions

        (WebView::onIMEStartComposition):
        (WebView::onIMEComposition):
        (WebView::onIMEEndComposition):
        (WebView::onIMEChar):
        (WebView::onIMENotify):
        (WebView::onIMERequest):
        (WebView::onIMESelect):
        (WebView::onIMESetContext):
           IME event handling, so far most of these are not implemented, but the bulk of functionality 
           is performed the the composition event handlers
        * WebView.h:

2007-07-12  Alice Liu  <alice.liu@apple.com>

        Reviewed by Maciej and Steve.

        fixed <rdar://4982432> window.print() needs to be implemented

        * Interfaces/IWebUIDelegate.idl:
        * WebChromeClient.cpp:
        (WebChromeClient::print):
        * WebChromeClient.h:

2007-07-11  Steve Falkenburg  <sfalken@apple.com>

        Static analysis build fix.
        
        Only specify /analyze (PREfast) if it is available.
        Prevents entire project from rebuilding each time.        

        Reviewed by Hyatt.

        * WebKit.vcproj/WebKit.vcproj:

2007-07-10  Ada Chan  <adachan@apple.com>
        
        Fixed build.

        * WebView.cpp:

2007-07-09  Alice Liu  <alice.liu@apple.com>

        Reviewed by Adam Roben.
        
        Adding DOM Paste Allowed preference, setters and getters
        for the purpose of layout tests.

        * Interfaces/IWebPreferences.idl:
        * WebPreferenceKeysPrivate.h:
        * WebPreferences.cpp:
        (WebPreferences::isDOMPasteAllowed):
        (WebPreferences::setDOMPasteAllowed):
        * WebPreferences.h:
        * WebView.cpp:
        (WebView::updateWebCoreSettingsFromPreferences):

2007-07-09  Anders Carlsson  <andersca@apple.com>

        Build fix.

        * WebView.cpp:
        (WebView::stringByEvaluatingJavaScriptFromString):

2007-07-05  Adam Roben  <aroben@apple.com>

        Fix a leak in WebView::setToolTip

        Reviewed by Beth.

        * WebView.cpp:
        (WebView::setToolTip):

2007-07-05  Adam Roben  <aroben@apple.com>

        Fix Bug 14143: Tooltips not displayed on Windows
        http://bugs.webkit.org/show_bug.cgi?id=14143
        <rdar://problem/4719799>

        Reviewed by Oliver.

        * WebChromeClient.cpp:
        (WebChromeClient::setToolTip): Call up to WebView.
        * WebView.cpp:
        (WebView::WebView): Initialize m_toolTipHwnd member.
        (WebView::initWithFrame): Set up the tool tip window.
        (initCommonControls): Added.
        (WebView::initializeToolTipWindow): Added.
        (WebView::setToolTip): Set the tool tip text and enable/disable the
        tool tip.
        * WebView.h: Added/updated declarations.

2007-07-04  Adam Roben  <aroben@apple.com>

        Added a stub for WebChromeClient::setToolTip

        Reviewed by Sam.

        * WebChromeClient.cpp:
        * WebChromeClient.h:

2007-07-04  Adam Roben  <aroben@apple.com>

        Initialize Settings::showsURLsInToolTips

        Reviewed by Sam.

        * WebView.cpp:
        (WebView::updateWebCoreSettingsFromPreferences):

2007-07-04  Adam Roben  <aroben@apple.com>

        Removed call to mouseDidMoveOverElement now that WebCore handles it

        Reviewed by Sam.

        * WebView.cpp:
        (WebView::handleMouseEvent):

2007-07-04  Adam Roben  <aroben@apple.com>

        Add WebChromeClient::mouseDidMoveOverElement

        This is not called yet.

        Reviewed by Sam.

        * WebChromeClient.cpp:
        (WebChromeClient::mouseDidMoveOverElement):
        * WebChromeClient.h:

2007-07-03  Adam Roben  <aroben@apple.com>

        Merge the Windows and Mac localized strings and exceptions files

        Reviewed by Darin and Anders.

        * English.lproj/Localizable.strings: Added Mac strings.
        * English.lproj/StringsNotToBeLocalized.txt: Removed.

2007-06-27  Steve Falkenburg  <sfalken@apple.com>

        Turn on static code analysis.

        Reviewed by Oliver.
        
        Affects only folks that have Visual Studio Team Suite installed,
        or who have replaced their compiler with the version shipping in the
        Vista SDK.

        * CodeAnalysisConfig.h: Added.
        * WebKit.vcproj/WebKit.vcproj:
        * WebLocalizableStrings.cpp:
        (createWebKitBundle):

2007-06-27  Steve Falkenburg  <sfalken@apple.com>

        Prefast: Remove variable redefinitions in inner scopes.
        
        Reviewed by Ada.

        * WebDownload.cpp:
        (WebDownload::didFinish):
        * WebNotificationCenter.cpp:
        (WebNotificationCenter::postNotificationInternal):
        (WebNotificationCenter::removeObserver):

2007-06-27  Steve Falkenburg  <sfaken@apple.com>

        Remove SEH block from around history plist read, since the underlying bug has been fixed.
        
        Reviewed by Darin.

        * WebHistory.cpp:
        (createHistoryListFromStream):

2007-06-27  Steve Falkenburg  <sfalken@apple.com>

        Prefast: Fix misplaced parenthesis.
        
        Reviewed by Darin.

        * WebView.cpp:
        (core):

2007-06-27  Steve Falkenburg  <sfalken@apple.com>

        Prefast: Add null check prior to writing into allocated BSTR.
        
        Reviewed by Darin.

        * MarshallingHelpers.cpp:
        (MarshallingHelpers::CFStringRefToBSTR):

2007-06-27  Steve Falkenburg  <sfalken@apple.com>

        Prefast: Add error handling for SysAllocStringLen where the string length is determined by website content.

        Reviewed by Sam, Darin.
                
        Allocation failure will result in a null dereference in this case,
        so it isn't exploitable.

        * DefaultDownloadDelegate.cpp:
        (DefaultDownloadDelegate::decideDestinationWithSuggestedFilename):

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

        Land the new Inspector.

        Co-written with Tim Hatcher.

        Reviewed by Anders, Adele, Hyatt, and Sam.

        Implement the InspectorClient interface.

        * WebInspectorClient.cpp: Added.
        (WebInspectorClient::WebInspectorClient):
        (WebInspectorClient::~WebInspectorClient):
        (WebInspectorClient::inspectorDestroyed):
        (WebInspectorClient::createPage):
        (WebInspectorClient::showWindow):
        (WebInspectorClient::closeWindow):
        (WebInspectorClient::windowVisible):
        (WebInspectorClient::attachWindow):
        (WebInspectorClient::detachWindow):
        (WebInspectorClient::highlight):
        (WebInspectorClient::hideHighlight):
        (WebInspectorClient::inspectedURLChanged):
        (WebInspectorClient::updateWindowTitle):
        (WebInspectorClient::onSize):
        (WebInspectorClient::onClose):
        (WebInspectorClient::onWebViewWindowPosChanging):
        (WebInspectorWndProc):
        (SubclassedWebViewWndProc):
        (registerWindowClass):
        * WebInspectorClient.h: Added.

        Add an easier-to-see highlight.

        * WebNodeHighlight.cpp: Added.
        (WebNodeHighlight::WebNodeHighlight):
        (WebNodeHighlight::~WebNodeHighlight):
        (WebNodeHighlight::highlight):
        (WebNodeHighlight::hide):
        (WebNodeHighlight::visible):
        (WebNodeHighlight::updateWindow):
        (WebNodeHighlight::removeSubclass):
        (registerOverlayClass):
        (OverlayWndProc):
        (SubclassedWndProc):
        * WebNodeHighlight.h: Added.

        WebView changes needed for the new Inspector.

        * WebView.cpp: Removed old inspectElement method now that this is
        handled by WebCore.
        (WebView::WebView):
        (WebView::close):
        (WebView::performContextMenuAction): Removed handling of the Inspect
        Element context menu item.
        (WebView::initWithFrame): Give each Page an InspectorClient to enable
        the Inspector.
        (WebView::setProhibitsMainFrameScrolling): Added.
        * WebView.h:

        Updates needed for WebCore changes.

        * Interfaces/IWebUIDelegate.idl:
        * WebContextMenuClient.cpp:
        (WebContextMenuClient::getCustomMenuFromDefaultItems):
        * WebContextMenuClient.h:
        * WebCoreLocalizedStrings.cpp:

        Remove old Inspector code.

        * WebFrame.cpp:
        * WebFrame.h:
        * WebInspector/WebInspector.cpp: Removed.
        * WebInspector/WebInspector.h: Removed.
        * WebInspector/webInspector/Images/button.png: Removed.
        * WebInspector/webInspector/Images/buttonDivider.png: Removed.
        * WebInspector/webInspector/Images/buttonPressed.png: Removed.
        * WebInspector/webInspector/Images/close.png: Removed.
        * WebInspector/webInspector/Images/closePressed.png: Removed.
        * WebInspector/webInspector/Images/downTriangle.png: Removed.
        * WebInspector/webInspector/Images/menu.png: Removed.
        * WebInspector/webInspector/Images/menuPressed.png: Removed.
        * WebInspector/webInspector/Images/popup.png: Removed.
        * WebInspector/webInspector/Images/popupPressed.png: Removed.
        * WebInspector/webInspector/Images/resize.png: Removed.
        * WebInspector/webInspector/Images/rightTriangle.png: Removed.
        * WebInspector/webInspector/Images/scrollThumbBottom.png: Removed.
        * WebInspector/webInspector/Images/scrollThumbMiddle.png: Removed.
        * WebInspector/webInspector/Images/scrollTrackMiddle.png: Removed.
        * WebInspector/webInspector/Images/upTriangle.png: Removed.
        * WebInspector/webInspector/inspector.css: Removed.
        * WebInspector/webInspector/inspector.html: Removed.
        * WebInspector/webInspector/inspector.js: Removed.
        * WebInspector/webInspector/scrollarea.js: Removed.
        * WebInspector/webInspector/scrollbar.js: Removed.
        * WebInspector/webInspector/treeoutline.js: Removed.
        * WebInspector/webInspector/utilities.js: Removed.

        Build-fu:

        * WebKit.vcproj/WebKit.vcproj:

2007-06-19  Dave Hyatt  <hyatt@apple.com>

        Fix for <rdar://problem/5022197>, backspace and ctrl+left arrow should go back.  Shift+backspace
        and ctrl+right arrow should go forward.  Add support for these keybindings to Windows.
       
        Reviewed by ada

        * WebView.cpp:
        (WebView::keyDown):

2007-06-18  Dave Hyatt  <hyatt@apple.com>

        Let through more newline+modifier key combos in order to support Alt+Enter and Ctrl+Enter in the
        SafariWin URL bar.
       
        Reviewed by mccullough

        * WebView.cpp:

2007-06-18  Dave Hyatt  <hyatt@apple.com>

        Add support for horizontal mouse wheeling to Windows.  Shift+wheel is supported for horizontal
        wheeling just like on OS X.  In addition, the WM_MOUSEHWHEEL event is now processed correctly so that
        input devices like tilt wheels will now work.
       
        Reviewed by aroben

        * WebView.cpp:
        (WebView::mouseWheel):
        (WebViewWndProc):
        * WebView.h:

2007-06-17  Dave Hyatt  <hyatt@apple.com>

        Add support for Ctrl+Mouse Wheel to increase/decrease text zoom (Win32 only).
       
        Reviewed by aroben

        * WebView.cpp:
        (WebView::mouseWheel):

2007-06-09  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam.
        
        Workaround: <rdar://problem/5213266> schwab.com menu is ridiculously big.
        
        * WebView.cpp:
        (WebView::userAgentForKURL): Add schwab to spoof list to fix gigantic menus.

2007-06-08  Ada Chan  <adachan@apple.com>

        Reviewed by Hyatt, Adam, and Steve.

        Fixed WebView::selectedText to get the selected text out of the focused frame or main frame.

        * WebView.cpp:
        (WebView::selectedText):

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

        Get rid of the Safari part of the query string used for Google searches.

        Reviewed by Steve and Ada.

        * WebContextMenuClient.cpp:
        (WebContextMenuClient::searchWithGoogle):

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

        Reviewed by Kevin Decker, and Sam.

        - Added and updated licenses.

        * CFDictionaryPropertyBag.cpp:
        * CFDictionaryPropertyBag.h:
        * DOMCSSClasses.cpp:
        * DOMCSSClasses.h:
        * DOMEventsClasses.cpp:
        * DOMEventsClasses.h:
        * DOMHTMLClasses.cpp:
        * DOMHTMLClasses.h:
        * MarshallingHelpers.cpp:
        * MarshallingHelpers.h:
        * MemoryStream.cpp:
        * MemoryStream.h:
        * WebBackForwardList.cpp:
        * WebBackForwardList.h:
        * WebCache.cpp:
        * WebCache.h:
        * WebChromeClient.cpp:
        * WebChromeClient.h:
        * WebContextMenuClient.h:
        * WebDataSource.h:
        * WebEditorClient.cpp:
        * WebEditorClient.h:
        * WebElementPropertyBag.cpp:
        * WebElementPropertyBag.h:
        * WebHTMLRepresentation.h:
        * WebHistory.cpp:
        * WebHistory.h:
        * WebIconDatabase.cpp:
        * WebIconDatabase.h:
        * WebKit.vcproj/auto-version.sh:
        * WebKitClassFactory.h:
        * WebKitDLL.h:
        * WebLocalizableStrings.cpp:
        * WebLocalizableStrings.h:
        * WebMutableURLRequest.cpp:
        * WebMutableURLRequest.h:
        * WebNotification.cpp:
        * WebNotification.h:
        * WebNotificationCenter.cpp:
        * WebNotificationCenter.h:
        * WebPreferenceKeysPrivate.h:
        * WebPreferences.cpp:
        * WebPreferences.h:
        * WebScriptObject.cpp:
        * WebScriptObject.h:
        * WebURLResponse.cpp:
        * WebURLResponse.h:

2007-06-07  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Make the inspector compile again.

        * WebInspector/WebInspector.cpp:
        (setFocusedDOMNodeCallback):
        (focusedDOMNodeCallback):
        (setRootDOMNodeCallback):
        (rootDOMNodeCallback):

2007-06-06  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam.
        
        <rdar://problem/5255861> REGRESSION: Can't download Adobe Acrobat Reader and plug-in
        <rdar://problem/5243655> Flash download page doesn't recognize Boomer
        
        Refine user agent spoofing code to only spoof Flash download as Firefox without spoofing all of adobe.com.
        This fixes the Acrobat Reader download.

        * WebView.cpp:
        (WebView::userAgentForKURL):

2007-06-03  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam.
        
        <rdar://problem/5246665> Drop down lists are not drawn on volvocars.us

        * WebView.cpp:
        (WebView::userAgentForKURL):

2007-06-01  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Oliver.

        - Uncommenting some functions that should not be commented out.  I needed them for the Drosera port.

        * WebKit.vcproj/WebKit_debug.def:

2007-06-01  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Kevin Decker.
        
        Remove unnecessary user agent spoofs, now that we have the final UA in place.
        Added spoof to allow Flash downloads from adobe.com

        * WebView.cpp:
        (WebView::userAgentForKURL):

2007-05-30  Ada Chan  <adachan@apple.com>

        Reviewed by Steve.

        Implemented the mechanism to associate a WebPreferences instance with an identifier.

        * WebIconDatabase.cpp:
        (WebIconDatabase::init): fixed a missing Release on standardPrefs by using COMPtr.
        * WebPreferences.cpp:
        (WebPreferences::getInstanceForIdentifier): implemented
        (WebPreferences::setInstance): implemented
        (WebPreferences::removeReferenceForIdentifier): if the WebPreferences going to be
        released has only one ref left, remove it from the s_webPreferencesInstances dictionary.
        (WebPreferences::load): don't need to reread in the default preferences if we have done so.
        (WebPreferences::initWithIdentifier): update the m_identifier data member with the
        passed in identifier string, and store the identifier to WebPreferences instance mapping in
        s_webPreferencesInstances dictionary.
        (WebPreferences::identifier): implemented
        * WebPreferences.h:
        * WebView.cpp:
        (WebView::~WebView): removed the call to removeObserver for the WebPreferencesChangedNotification
        since it's already done in close().
        (WebView::close): the call to removeObserver now takes in the WebPreferences instance for the object -
        this way the WebView is only notified when that particular WebPreferences instance changes.
        (WebView::initWithFrame): the call to addObserver now takes in the WebPreferences instance for the object -
        this way the WebView is only notified when that particular WebPreferences instance changes.
        (WebView::setPreferences): implemented
        (WebView::onNotify): used COMPtr to fix a missing release

2007-05-29  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Darin.
        
        Removed setPageCacheSize/pageCacheSize from IWebBackForwardList.

        * Interfaces/IWebBackForwardList.idl: Removed unnecessary methods.
        * WebBackForwardList.cpp: Removed unnecessary methods.
        * WebBackForwardList.h: Removed unnecessary methods.

2007-05-29  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        - Removes platform/win/NotImplemented.h because we have consolidated
          the notImplemented() for all platforms in platform/NotImplemented.h
        - Fixes remaining uses of old macro to use the new notImplemented() one.

        * WebChromeClient.cpp:
        (WebChromeClient::createModalDialog):
        (WebChromeClient::canRunModal):
        (WebChromeClient::runModal):
        (WebChromeClient::setScrollbarsVisible):
        (WebChromeClient::scrollbarsVisible):
        (WebChromeClient::setMenubarVisible):
        (WebChromeClient::menubarVisible):
        * WebContextMenuClient.cpp:
        (WebContextMenuClient::lookUpInDictionary):
        (WebContextMenuClient::speak):
        (WebContextMenuClient::stopSpeaking):
        * WebDownload.cpp:
        (WebDownload::canResumeDownloadDecodedWithEncodingMIMEType):
        (WebDownload::cancelAuthenticationChallenge):
        (WebDownload::continueWithoutCredentialForAuthenticationChallenge):
        (WebDownload::useCredential):
        (WebDownload::didReceiveAuthenticationChallenge):
        * WebEditorClient.cpp:
        (WebEditorClient::spellCheckerDocumentTag):
        (WebEditorClient::shouldBeginEditing):
        (WebEditorClient::shouldEndEditing):
        (WebEditorClient::didBeginEditing):
        (WebEditorClient::respondToChangedContents):
        (WebEditorClient::respondToChangedSelection):
        (WebEditorClient::didEndEditing):
        (WebEditorClient::didWriteSelectionToPasteboard):
        (WebEditorClient::didSetSelectionTypesForPasteboard):
        (WebEditorClient::shouldDeleteRange):
        (WebEditorClient::shouldInsertNode):
        (WebEditorClient::shouldInsertText):
        (WebEditorClient::shouldApplyStyle):
        (WebEditorClient::shouldChangeTypingStyle):
        (WebEditorClient::webViewDidChangeTypingStyle):
        (WebEditorClient::webViewDidChangeSelection):
        (WebEditorClient::shouldShowDeleteInterface):
        (WebEditorClient::shouldChangeSelectedRange):
        * WebFrame.cpp:
        (WebFrame::makeRepresentation):
        (WebFrame::forceLayout):
        (WebFrame::forceLayoutForNonHTML):
        (WebFrame::setCopiesOnScroll):
        (WebFrame::detachedFromParent1):
        (WebFrame::detachedFromParent2):
        (WebFrame::detachedFromParent3):
        (WebFrame::detachedFromParent4):
        (WebFrame::loadedFromCachedPage):
        (WebFrame::dispatchDidLoadMainResource):
        (WebFrame::revertToProvisionalState):
        (WebFrame::clearUnarchivingState):
        (WebFrame::setMainFrameDocumentReady):
        (WebFrame::willChangeTitle):
        (WebFrame::didChangeTitle):
        (WebFrame::finalSetupForReplace):
        (WebFrame::setDefersLoading):
        (WebFrame::isArchiveLoadPending):
        (WebFrame::cancelPendingArchiveLoad):
        (WebFrame::clearArchivedResources):
        (WebFrame::canShowMIMEType):
        (WebFrame::representationExistsForURLScheme):
        (WebFrame::generatedMIMETypeForURLScheme):
        (WebFrame::restoreViewState):
        (WebFrame::provisionalLoadStarted):
        (WebFrame::shouldTreatURLAsSameAsCurrent):
        (WebFrame::addHistoryItemForFragmentScroll):
        (WebFrame::didFinishLoad):
        (WebFrame::prepareForDataSourceReplacement):
        (WebFrame::setDocumentViewFromCachedPage):
        (WebFrame::shouldGoToHistoryItem):
        (WebFrame::saveViewStateToItem):
        (WebFrame::saveDocumentViewToCachedPage):
        (WebFrame::canCachePage):
        (WebFrame::setMainDocumentError):
        (WebFrame::cannotShowURLError):
        (WebFrame::cannotShowMIMETypeError):
        (WebFrame::fileDoesNotExistError):
        (WebFrame::willUseArchive):
        (WebFrame::dispatchDidLoadResourceFromMemoryCache):
        (WebFrame::startDownload):
        (WebFrame::overrideMediaType):
        (WebFrame::addInspector):
        (WebFrame::removeInspector):

2007-05-25  Oliver Hunt  <oliver@apple.com>

        Reviewed by Hyatt.
        
        Fix rdar://problem/5212399 <object> with PNG src rendered as image document (causes Acid2 to fail)

        * WebFrame.cpp:
        (WebFrame::objectContentType):

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

        Build fix -- forgot to commit a little bit in my last patch.

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

        Reviewed by Darin Adler, Adam Roben.

        Fixed <rdar://problem/5055182> The page cache has no global cap.
        
        The main WebKit changes are:
            1. Gutted IWebBackForwardList::setPageCacheSize and IWebBackForwardList:: 
            pageCacheSize because they're deprecated on Mac now. I didn't remove
            them, though, because doing so can cause COM badness.
            
            2. Added IWebPreferences::setUsesPageCache IWebPreferences:: 
            usesPageCache because that's the new Mac API. I added them to the end
            of IWebPreferences to avoid COM badness.
            
            3. Centralized calculation of object cache and page cache sizes inside
            WebPreferences. 
            
            Changed our old behavior of reading a preference and applying a fudge 
            factor with a new behavior of just using the preference directly. The 
            old behavior was confusing and often inappropriate. (For example, if 
            you set a page cache size of 100, a 256MB machine would somewhat 
            arbitrarily reduce that number to 98.)
            
2007-05-24  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        Fixed a bug with Settings where a number of different objects held bare 
        Settings* data members, even though the Page owns the Settings object and 
        deletes it upon destruction.
        
        Added NULL checks since the Page can be deleted before the frame/document.

2007-05-23  Steve Falkenburg  <sfalken@apple.com>

        Added IWebFramePrivate::isDescendantOfFrame.

        * Interfaces/IWebFramePrivate.idl:
        * WebFrame.cpp:
        (WebFrame::isDescendantOfFrame):
        * WebFrame.h:

2007-05-23  Steve Falkenburg  <sfalken@apple.com>

        Build fix.  Fix continuous rebuilding of Interfaces by turning off Generate Type Library for every IDL except WebKit.idl.

        * WebKit.vcproj/Interfaces.vcproj:

2007-05-22  Alice Liu  <alice.liu@apple.com>

        Reviewed by Oliver.
        
        Enabling smartInsertDelete to resolve 
        <rdar://problem/5082891> editing/deleting/smart-delete-003.html (and 004) fail
        
        * Interfaces/IWebView.idl:
        * WebEditorClient.cpp:
        (WebEditorClient::smartInsertDeleteEnabled):
        * WebView.cpp:
        (WebView::WebView):
        (WebView::initWithFrame):
        (WebView::toggleSmartInsertDelete):
        (WebView::setSmartInsertDeleteEnabled):
        (WebView::smartInsertDeleteEnabled):
        * WebView.h:

2007-05-22  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by oliver
        
        Build fix.

        * WebView.cpp:
        (WebView::clearFocusNode):

2007-05-22  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Ada.
        
        Added 3 view-related methods to IWebFramePrivate.

        * Interfaces/IWebFramePrivate.idl: Added 3 new methods
        * WebFrame.cpp:
        (WebFrame::hasScrollBars): Added.
        (WebFrame::contentBounds): Added.
        (WebFrame::frameBounds): Added.
        * WebFrame.h:

2007-05-21  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam, Ada.
        
        Added IWebFramePrivate::size().

        * Interfaces/IWebFramePrivate.idl: Added size.
        * WebFrame.cpp:
        (WebFrame::size): Added.
        * WebFrame.h: Added size.

2007-05-21  Ada Chan  <adachan@apple.com>

        Reviewed by Steve.

        Added IWebViewPrivate::loadBackForwardListFromOtherView().  It replicates the backforward
        list from another webview and loads that in the current webview.

        * Interfaces/IWebViewPrivate.idl:
        * WebView.cpp:
        (WebView::loadBackForwardListFromOtherView):
        * WebView.h:

2007-05-18  Steve Falkenburg  <sfalken@apple.com>

        Build-related fix: stamp version resource properly.

        * WebKit.vcproj/WebKit.rc: Fix version resource

2007-05-18  Adam Roben  <aroben@apple.com>

        Build fix after r21555.

        * WebView.cpp:

2007-05-17  Ada Chan  <adachan@apple.com>

        Reviewed by Steve.
        
        Implemented IWebHTTPURLResponse::localizedStringForStatusCode().

        * English.lproj/Localizable.strings: new http status strings
        * Interfaces/WebKit.idl: added code to create WebURLResponse instances
        * WebKitClassFactory.cpp:
        (WebKitClassFactory::CreateInstance): ditto
        * WebKitDLL.cpp: ditto
        * WebURLResponse.cpp:
        (CFHTTPMessageCopyLocalizedShortDescriptionForStatusCode): return the description
        text for the given status code
        (WebURLResponse::createInstance): create a general instance of web url response.
        (WebURLResponse::localizedStringForStatusCode):
        * WebURLResponse.h:

2007-05-17  Ada Chan  <adachan@apple.com>

        Reviewed by Steve.
        
        Changed the context menu title "Search in Google" to "Search with Google".

        * English.lproj/Localizable.strings:
        * WebCoreLocalizedStrings.cpp:
        (WebCore::contextMenuItemTagSearchWeb):

2007-05-17  Anders Carlsson  <andersca@apple.com>

        Fix build.
        
        * WebFrame.cpp:
        (WebFrame::loadURLIntoChild):

2007-05-15  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Darin, Oliver.
        
        <rdar://problem/4967360> Need to detect damaged installs, alert the user to reinstall, and exit

        * WebLocalizableStrings.cpp:
        (WebLocalizedString): Make failure to load a localized string slightly less fatal

2007-05-15  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Darin.
        
        <rdar://problem/4956541> Need to implement preference for how much History is maintained

        * WebHistory.cpp:
        (WebHistory::ageLimitDate): Remove extra +30 from history age in days.

2007-05-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin.

        Pass an empty property bag when constructing the WebError, the code in Safari relies on having a user info bag.
        
        * WebFrame.cpp:
        (WebFrame::createJavaAppletWidget):

2007-05-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by Antti.

        Report an error to the resource load delegate if the Java plugin can't be loaded.
        
        * WebFrame.cpp:
        (WebFrame::createJavaAppletWidget):

2007-05-11  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Darin, Ada.

        WebKit DCOM compatibility.
        When a WebKit hosting app calls RunAsLocalServer, the class object for CLSID_WebDebugProgram
        is registered to allow creation across processes.  This is for future compatibility with
        Drosera.

        Added new exported function: RunAsLocalServer.
        This exposes WebKit inside the running exe as a LocalServer32 (COM server), which
        will allow Drosera to connect to it via DCOM.

        We use the DCOM Universal Marshaller from oleaut32.dll, which performs marshalling
        based on type libraries, so as part of this change, I've done some work on making our
        interfaces compatible with this marshaller.
        
        Updated for compatibility w/ COM automation, and fixed up our type library.        
        Added type library registration/unregistration code.
        Marked methods not compatible w/ automation/marshalling as [local].
        
        As a side-effect, with these changes, the .NET tlbimp tool can create a .NET interop
        assembly to theoretically allow WebKit to be invoked from .NET apps.  I haven't
        tried this.  It could end up being useful to drive API testing.
        
        To test, I wrote a small app that calls:
        ::CoCreateInstance(CLSID_IWebDebugProgram, 0, CLSCTX_LOCAL_SERVER, IID_IUnknown, (void**)&viewUnknown);
        Using this instantiated class, I'm able to iterate the exisitng webviews and retrieve their
        source, title, URL, etc.
        
        * DOMCoreClasses.cpp:
        (DOMElement::isEqual):
        * DOMCoreClasses.h:
        * DefaultDownloadDelegate.cpp:
        (DefaultDownloadDelegate::decideDestinationWithSuggestedFilename):
        * DefaultDownloadDelegate.h:
        * Interfaces/DOMCSS.idl:
        * Interfaces/DOMCore.idl:
        * Interfaces/DOMEvents.idl:
        * Interfaces/DOMExtensions.idl:
        * Interfaces/DOMHTML.idl:
        * Interfaces/DOMPrivate.idl:
        * Interfaces/DOMRange.idl:
        * Interfaces/DOMWindow.idl:
        * Interfaces/IWebArchive.idl:
        * Interfaces/IWebAttributedString.idl: Removed.
        * Interfaces/IWebBackForwardList.idl:
        * Interfaces/IWebBackForwardListPrivate.idl:
        * Interfaces/IWebCache.idl:
        * Interfaces/IWebDataSource.idl:
        * Interfaces/IWebDebugProgram.idl: Added.
        * Interfaces/IWebDocument.idl:
        * Interfaces/IWebDownload.idl:
        * Interfaces/IWebEditingDelegate.idl:
        * Interfaces/IWebError.idl:
        * Interfaces/IWebFormDelegate.idl:
        * Interfaces/IWebFrame.idl:
        * Interfaces/IWebFrameLoadDelegate.idl:
        * Interfaces/IWebFrameLoadDelegatePrivate.idl:
        * Interfaces/IWebFramePrivate.idl:
        * Interfaces/IWebFrameView.idl:
        * Interfaces/IWebHTMLRepresentation.idl:
        * Interfaces/IWebHTTPURLResponse.idl:
        * Interfaces/IWebHistory.idl:
        * Interfaces/IWebHistoryItem.idl:
        * Interfaces/IWebHistoryItemPrivate.idl:
        * Interfaces/IWebIconDatabase.idl:
        * Interfaces/IWebJavaScriptCollector.idl:
        * Interfaces/IWebKitStatistics.idl:
        * Interfaces/IWebMutableURLRequest.idl:
        * Interfaces/IWebNotification.idl:
        * Interfaces/IWebNotificationCenter.idl:
        * Interfaces/IWebNotificationObserver.idl:
        * Interfaces/IWebPolicyDelegate.idl:
        * Interfaces/IWebPreferences.idl:
        * Interfaces/IWebResource.idl:
        * Interfaces/IWebResourceLoadDelegate.idl:
        * Interfaces/IWebResourceLoadDelegatePrivate.idl:
        * Interfaces/IWebScriptObject.idl:
        * Interfaces/IWebScrollBarDelegatePrivate.idl:
        * Interfaces/IWebScrollBarPrivate.idl:
        * Interfaces/IWebUIDelegate.idl:
        * Interfaces/IWebUIDelegatePrivate.idl:
        * Interfaces/IWebURLAuthenticationChallenge.idl:
        * Interfaces/IWebURLRequest.idl:
        * Interfaces/IWebURLResponse.idl:
        * Interfaces/IWebUndoManager.idl:
        * Interfaces/IWebUndoTarget.idl:
        * Interfaces/IWebView.idl:
        * Interfaces/IWebViewPrivate.idl:
        * Interfaces/WebKit.idl:
        * WebContextMenuClient.cpp:
        (WebContextMenuClient::getCustomMenuFromDefaultItems):
        * WebDataSource.cpp:
        (WebDataSource::subresources):
        * WebDataSource.h:
        * WebDebugProgram.cpp: Added.
        (EnumViews::EnumViews):
        (EnumViews::QueryInterface):
        (EnumViews::AddRef):
        (EnumViews::Release):
        (EnumViews::Next):
        (EnumViews::Skip):
        (EnumViews::Reset):
        (EnumViews::Clone):
        (WebDebugProgram::WebDebugProgram):
        (WebDebugProgram::~WebDebugProgram):
        (WebDebugProgram::createInstance):
        (WebDebugProgram::QueryInterface):
        (WebDebugProgram::AddRef):
        (WebDebugProgram::Release):
        (WebDebugProgram::viewAdded):
        (WebDebugProgram::viewRemoved):
        (WebDebugProgram::attach):
        (WebDebugProgram::detach):
        (WebDebugProgram::statistics):
        (WebDebugProgram::webViews):
        * WebDebugProgram.h: Added.
        * WebDropSource.cpp:
        (generateMouseEvent):
        * WebError.cpp:
        (WebError::localizedRecoveryOptions):
        * WebError.h:
        * WebFrame.cpp:
        (EnumChildFrames::EnumChildFrames):
        (EnumChildFrames::QueryInterface):
        (EnumChildFrames::AddRef):
        (EnumChildFrames::Release):
        (EnumChildFrames::Next):
        (EnumChildFrames::Skip):
        (EnumChildFrames::Reset):
        (EnumChildFrames::Clone):
        (WebFrame::childFrames):
        (WebFrame::initWithWebFrameView):
        * WebFrame.h:
        * WebHistoryItem.cpp:
        (WebHistoryItem::icon):
        * WebHistoryItem.h:
        * WebIconDatabase.cpp:
        (WebIconDatabase::iconForURL):
        (WebIconDatabase::defaultIconWithSize):
        * WebIconDatabase.h:
        * WebInspector/WebInspector.cpp:
        (WebInspector::WebInspector):
        (WebInspector::show):
        (WebInspector::onDestroy):
        (WebInspector::onSize):
        * WebInspector/WebInspector.h:
        (WebInspector::didReceiveIcon):
        (WebInspector::webViewFirstResponder):
        (WebInspector::makeFirstResponder):
        (WebInspector::contextMenuItemsForElement):
        (WebInspector::trackCustomPopupMenu):
        (WebInspector::addCustomMenuDrawingData):
        (WebInspector::cleanUpCustomMenuDrawingData):
        * WebKit.vcproj/Interfaces.vcproj:
        * WebKit.vcproj/WebKit.def:
        * WebKit.vcproj/WebKit.vcproj:
        * WebKit.vcproj/WebKitGUID.vcproj:
        * WebKit.vcproj/WebKit_debug.def:
        * WebKitClassFactory.cpp:
        (WebKitClassFactory::CreateInstance):
        * WebKitDLL.cpp:
        (DllGetClassObject):
        (DllUnregisterServer):
        (DllRegisterServer):
        (RunAsLocalServer):
        * WebKitStatistics.cpp:
        * WebScrollBar.cpp:
        (WebScrollBar::init):
        (WebScrollBar::handleMouseEvent):
        * WebScrollBar.h:
        * WebView.cpp:
        (WebView::WebView):
        (WebView::~WebView):
        (WebView::handleContextMenuEvent):
        (WebView::onInitMenuPopup):
        (WebView::onUninitMenuPopup):
        (WebViewWndProc):
        (WebView::QueryInterface):
        (WebView::MIMETypesShownAsHTML):
        (WebView::setHostWindow):
        (WebView::hostWindow):
        (WebView::generateSelectionImage):
        (WebView::pasteboardTypesForSelection):
        (WebView::pasteboardTypesForElement):
        (WebView::mainFrameIcon):
        (WebView::canMakeTextStandardSize):
        (WebView::viewWindow):
        * WebView.h:

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

        Build fix.

        * WebView.cpp: (WebView::selectionImageRect):

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

        Reviewed by Darin Adler.
        
        "IconDatabase::sharedIconDatabase()" => "iconDatabase()" for terseness.

2007-05-10  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver.

        - WebKitWin part of fix for:
        <rdar://problem/5063277> blank screen after login to Citibank Online (accessing document before frame starts loading cancels load)
        <rdar://problem/5159541> REGRESSION (r20972): Wall Street Journal pages replaced by advertisements (13465)

        The basic approach is to have Frames start out containing an empty document instead of absolutely nothing,
        so there is no need to initialize them on demand. Various side effects of that cause both of these bugs.
        
        However, this caused many regressions so I had to fix the fallout.

        * WebFrame.cpp:
        (WebFrame::createFrame): init frame
        * WebView.cpp:
        (WebView::initWithFrame): init frame
        (WebView::stringByEvaluatingJavaScriptFromString): don't create empty document

2007-05-08  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Darin, Oliver.
        
        Added UI_STRING versions of localized WebCore strings.

        * English.lproj/Localizable.strings: Updated.
        * English.lproj/StringsNotToBeLocalized.txt: Updated.
        * WebCoreLocalizedStrings.cpp: Added.
        (WebCore::searchableIndexIntroduction):
        (WebCore::submitButtonDefaultLabel):
        (WebCore::inputElementAltText):
        (WebCore::resetButtonDefaultLabel):
        (WebCore::fileButtonChooseFileLabel):
        (WebCore::fileButtonNoFileSelectedLabel):
        (WebCore::contextMenuItemTagOpenLinkInNewWindow):
        (WebCore::contextMenuItemTagDownloadLinkToDisk):
        (WebCore::contextMenuItemTagCopyLinkToClipboard):
        (WebCore::contextMenuItemTagOpenImageInNewWindow):
        (WebCore::contextMenuItemTagDownloadImageToDisk):
        (WebCore::contextMenuItemTagCopyImageToClipboard):
        (WebCore::contextMenuItemTagOpenFrameInNewWindow):
        (WebCore::contextMenuItemTagCopy):
        (WebCore::contextMenuItemTagGoBack):
        (WebCore::contextMenuItemTagGoForward):
        (WebCore::contextMenuItemTagStop):
        (WebCore::contextMenuItemTagReload):
        (WebCore::contextMenuItemTagCut):
        (WebCore::contextMenuItemTagPaste):
        (WebCore::contextMenuItemTagNoGuessesFound):
        (WebCore::contextMenuItemTagIgnoreSpelling):
        (WebCore::contextMenuItemTagLearnSpelling):
        (WebCore::contextMenuItemTagSearchWeb):
        (WebCore::contextMenuItemTagLookUpInDictionary):
        (WebCore::contextMenuItemTagOpenLink):
        (WebCore::contextMenuItemTagIgnoreGrammar):
        (WebCore::contextMenuItemTagSpellingMenu):
        (WebCore::contextMenuItemTagCheckSpelling):
        (WebCore::contextMenuItemTagCheckSpellingWhileTyping):
        (WebCore::contextMenuItemTagCheckGrammarWithSpelling):
        (WebCore::contextMenuItemTagFontMenu):
        (WebCore::contextMenuItemTagBold):
        (WebCore::contextMenuItemTagItalic):
        (WebCore::contextMenuItemTagUnderline):
        (WebCore::contextMenuItemTagOutline):
        (WebCore::contextMenuItemTagWritingDirectionMenu):
        (WebCore::contextMenuItemTagDefaultDirection):
        (WebCore::contextMenuItemTagLeftToRight):
        (WebCore::contextMenuItemTagRightToLeft):
        (WebCore::contextMenuItemTagShowSpellingPanel):
        (WebCore::searchMenuNoRecentSearchesText):
        (WebCore::searchMenuRecentSearchesText):
        (WebCore::searchMenuClearRecentSearchesText):
        (WebCore::AXWebAreaText):
        (WebCore::AXLinkText):
        (WebCore::AXListMarkerText):
        (WebCore::AXImageMapText):
        (WebCore::AXHeadingText):
        * WebKit.vcproj/WebKit.vcproj: Added WebCoreLocalizedStrings.cpp, reorganized other files a bit.

2007-05-08  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Ada.
        
        Update editing delegate

        * Interfaces/IWebEditingDelegate.idl:
        * WebEditorClient.cpp:
        (WebEditorClient::updateSpellingUIWithGrammarString):
        * WebEditorClient.h:

2007-05-07  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Darin.

        Fix typo in prefs code.       

        * WebPreferences.cpp:
        (WebPreferences::preferencesPath): Fix typo in error handling.

2007-05-04  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Darin.
        
        Fix crash when using "check spelling while typing".

        * WebView.cpp:
        (WebView::preflightSpellChecker): Set delegate static global for use in spell checker init.

2007-05-03  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Ada, Oliver.
        
        Checkpoint:
        <rdar://problem/4602372> Spelling
        <rdar://problem/4769763> Spell checking engine support        

        * Interfaces/IWebEditingDelegate.idl: Add userDescription parameter.
        * WebEditorClient.cpp:
        (WebEditorClient::updateSpellingUIWithGrammarString): Set user description for spelling errors.
        * WebEditorClient.h:
        * WebView.cpp:
        (WebView::replaceSelectionWithText): Implemented.

2007-05-01  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Oliver.
        
        Fix usage errors in COM enumeration.

        * WebEditorClient.cpp:
        (WebEditorClient::checkGrammarOfString): Call Next correctly.
        (WebEditorClient::getGuessesForWord): Call Next correctly.

2007-04-30  Alice Liu  <alice.liu@apple.com>

        Reviewed by Adam.

        Fixed <rdar://5126201> crash closing tab when the two following tabs are empty.
        Basically this fix involved one thing, which lead to another thing.  First, the crash
        was fixed by moving the call to webView->close from SearchableWebView::onDestroy to
        WebViewWndProc when WM_DESTROY message is processed.  We now want only WebKit handling
        the closure of a WebView, so all calls to WebView::close have been removed, save for
        the one call in WebViewWndProc.

        * Interfaces/IWebView.idl:
        removed close() from public interface
        * WebInspector/WebInspector.cpp:
        (WebInspector::onDestroy):
        removed call to close()
        * WebView.cpp:
        (WebView::~WebView):
        move the deleting of m_page down a bit to avoid a crash 
        (WebView::close):
        changed from public API to just a public function
        (WebViewWndProc):
        webView->close() was moved here from SearchableWebView::onDestroy
        * WebView.h:
        changed close() to a public function not exposed in the WebKit interface

2007-04-24  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Darin, Oliver.
        
        Checkpoint:
        <rdar://problem/4602372> Spelling
        <rdar://problem/4769763> Spell checking engine support

        * WebEditorClient.cpp:
        (WebEditorClient::isContinuousSpellCheckingEnabled):
        (WebEditorClient::toggleContinuousSpellChecking):
        (WebEditorClient::isGrammarCheckingEnabled):
        (WebEditorClient::toggleGrammarChecking):
        (initViewSpecificSpelling):
        (WebEditorClient::spellCheckerDocumentTag):
        (WebEditorClient::ignoreWordInSpellDocument):
        (WebEditorClient::learnWord):
        (WebEditorClient::checkSpellingOfString):
        (WebEditorClient::checkGrammarOfString):
        (WebEditorClient::udpateSpellingUIWithGrammarString):
        (WebEditorClient::updateSpellingUIWithMisspelledWord):
        (WebEditorClient::showSpellingUI):
        (WebEditorClient::spellingUIIsShowing):
        (WebEditorClient::getGuessesForWord):
        * WebPreferences.h:

2007-04-20  Ada Chan  <adachan@apple.com>

        Reviewed by Steve and Oliver.
        
        Implemented some DOM methods I need to support password input and textarea in 
        WebView-based edit fields in the app.

        * DOMCSSClasses.cpp:
        (DOMCSSStyleDeclaration::setCssText): added implementation
        * DOMCoreClasses.cpp:
        (DOMDocument::createElement): ditto
        * DOMHTMLClasses.cpp:
        (DOMHTMLInputElement::setType): ditto
        (DOMHTMLTextAreaElement::value): ditto
        (DOMHTMLTextAreaElement::setValue): ditto
        (DOMHTMLTextAreaElement::select): ditto
        * Interfaces/IWebUIDelegatePrivate.idl: added a new method webViewGetDlgCode() that client
        can implement if it wants to handle keypresses themselves rather than letting the system 
        interpret certain keys as dialog box navigation keys.
        * WebKitGraphics.cpp:
        (DrawTextAtPoint): handle drawing text as password
        * WebKitGraphics.h:
        * WebView.cpp:
        Added Copy, Cut, and Paste to the keyEntries.
        (WebViewWndProc): added code to handle WM_GETDLGCODE.  Calls IWebUIDelegatePrivate::webViewGetDlgCode()
        if available to see if the client wants to handle it.

2007-04-18  Adam Roben  <aroben@apple.com>

        Reviewed by Steve.

        Make development builds use the same CLSIDs as archive builds, and get
        rid of the now-unused set of CLSIDs.

        * Interfaces/WebKit.idl: Use the archive build CLSIDs if we're not
        doing a production build.
        * WebKit.vcproj/Interfaces.vcproj: Don't define __ARCHIVE_BUILD__
        because it's not used anymore.

2007-04-18  Adam Roben  <aroben@apple.com>

        Reviewed by Steve.

        Use different ProgIDs for production builds.

        * ProgIDMacros.h: Added.
        * WebKit.vcproj/WebKit.vcproj: Defined the __BUILDBOT__ macro and added
        a new header which is copied in the post-build step.
        * WebKitDLL.cpp: Macro-ized the declaration of the registry keys to
        install.

2007-04-16  Adam Roben  <aroben@apple.com>

        Rubberstamped by Steve.

        * WebKit.vcproj/WebKit.sln: Removed the Debug_Internal configuration.

2007-04-16  Adam Roben  <aroben@apple.com>

        Reviewed by Steve.

        Removed the pre-link build step, and removed registration of WebKit.dll
        from the post-build step.

        * WebKit.vcproj/WebKit.vcproj:

2007-04-16  Adam Roben  <aroben@apple.com>

        * WebKit.vcproj/WebKit.sln: Added WTF to the solution.

2007-04-16  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam.
        
        Visual Studio Express compatibility for WebKit build (except for DRT)

        * WebDragClient.cpp: Removed unused header (atlsafe.h)
        * WebKit.vcproj/WebKit.rc: Removed afxres.h and related code
        * WebKit.vcproj/WebKit.sln: Don't use a sln folder - they aren't supported by express
        * WebKit.vcproj/WebKit.vcproj: Add explicit lib references for Windows system libs (VS express doesn't include these)
        * WebView.cpp: Removed unused header (atldef.h)

2007-04-16  Adam Roben  <aroben@apple.com>

        Merge in r20872.

        * WebInspector/webInspector/inspector.js:
        * WebInspector/webInspector/treeoutline.js:

2007-04-16  Adam Roben  <aroben@apple.com>

        Merge in r20861.

        * WebInspector/webInspector/inspector.js:
        * WebInspector/webInspector/treeoutline.js:

2007-04-16  Adam Roben  <aroben@apple.com>

        Merge in r20845.

        * WebInspector/webInspector/inspector.js:

2007-04-16  Adam Roben  <aroben@apple.com>

        Merge in r20844.

        * WebInspector/webInspector/inspector.js:

2007-04-16  Adam Roben  <aroben@apple.com>

        Merge in r20843.

        * WebInspector/webInspector/inspector.js:
        * WebInspector/webInspector/scrollarea.js:
        * WebInspector/webInspector/scrollbar.js:
        * WebInspector/webInspector/utilities.js:

2007-04-16  Adam Roben  <aroben@apple.com>

        Merge in r20842.

        * WebInspector/webInspector/inspector.html:
        * WebInspector/webInspector/inspector.js:
        * WebInspector/webInspector/utilities.js: Added.

2007-04-16  Adam Roben  <aroben@apple.com>

        Merge in r20840.

        * WebInspector/webInspector/inspector.html:
        * WebInspector/webInspector/inspector.js:
        * WebInspector/webInspector/treeoutline.js: Added.

2007-04-14  Adam Roben  <aroben@apple.com>

        * WebKit.vcproj/WebKitGUID.vcproj: Need to use WebKitConfigSuffix
        instead of ConfigSuffix now.

2007-04-14  Adam Roben  <aroben@apple.com>

        * WebKit.vcproj/WebKit.submit.sln: Use the Debug_Internal configuration
        when B&I builds Debug.

2007-04-12  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Geoff, Adam.
        
        Changes required for search history content.

        * Interfaces/IWebFramePrivate.idl:
        * WebFrame.cpp:
        (WebFrame::isFrameSet): Added
        (WebFrame::string): Added
        * WebFrame.h:

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

        Rubberstamped by Steve.

        Copied WebKit.sln to WebKit.submit.sln, and added missing projects to
        WebKit.sln so that opensource contributors can use it to build a
        working WebKit.

        * WebKit.vcproj/WebKit.make: Changed to use WebKit.submit.sln.
        * WebKit.vcproj/WebKit.sln: Added JavaScriptCore, WebCore,
        DumpRenderTree projects.
        * WebKit.vcproj/WebKit.submit.sln: Added.

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

        Reviewed by Steve.

        <rdar://problem/5131565> Need to be able to use debug WebKit with
        release Safari.

        Added a new configuration to WebKit.vcproj called Debug_Internal to be
        used by Apple internal builds. The Debug configuration is now meant to
        be used by opensource builds, and will always link against release
        versions of CF, CFNet, CG, etc. Debug_Internal is identical to Debug
        except for the property sheet it uses, and the Debug configuration
        doesn't register WebKit_debug.dll when finished.

        We now have two macros, $(WebKitConfigSuffix) and
        $(LibraryConfigSuffix). WebKitConfigSuffix is used for WebKit projects,
        and is "_debug" for both Debug and Debug_Internal. LibraryConfigSuffix
        is used for external projects, and is "" for Debug and "_debug" for
        Debug_Internal.

        * WebKit.vcproj/WebKit.vcproj:
        * WebKit.vcproj/debug.vsprops:
        * WebKit.vcproj/debug_internal.vsprops: Added.
        * WebKit.vcproj/release.vsprops:

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

        Reviewed by Anders

        * Interfaces/IWebUIDelegate.idl:
        added new PDF-related context menu items to enum to keep it in sync with WebCore

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

        Not reviewed.  Internal counterpart to open-source r20856.

        * WebChromeClient.cpp:
        (WebChromeClient::createWindow):
        (WebChromeClient::createModalDialog):
        * WebChromeClient.h:

2007-04-11  Ada Chan  <adachan@apple.com>

        Reviewed by Steve.
        
        Implemented WebHistoryItem::originalURLString().  Added parameter checks to other methods.

        * WebHistoryItem.cpp:
        (WebHistoryItem::originalURLString):
        (WebHistoryItem::URLString):
        (WebHistoryItem::title):
        (WebHistoryItem::lastVisitedTimeInterval):

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

        Reviewed by Darin

        <rdar://problem/4887095> - PageCache and PageState should be combined

        Basically updated client methods for the new names and signatures 

        * WebFrame.cpp:
        (WebFrame::loadedFromCachedPage):
        (WebFrame::setDocumentViewFromCachedPage):
        (WebFrame::saveDocumentViewToCachedPage):
        * WebFrame.h:

2007-04-10  Adam Roben  <aroben@apple.com>

        Reviewed by Anders.

        Fix <rdar://problem/5119803> Web Inspector has no options menu

        * WebInspector/WebInspector.cpp:
        (interpreterForFrame): Added.
        (WebInspector::showOptionsMenu): Implemented.
        (WebInspector::onCommand): Added.
        (WebInspector::toggleIgnoreWhitespace): Implemented.
        (WebInspector::toggleShowUserAgentStyles): Implemented.
        (WebInspectorWndProc): Added case for WM_COMMAND.
        * WebInspector/WebInspector.h:

2007-04-09  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        <rdar://problem/5062624>
        No prompt to install QT for pages with uninstalled QT plug-in.
        
        * CFDictionaryPropertyBag.cpp:
        (CFDictionaryPropertyBag::Read):
        (CFDictionaryPropertyBag::Write):
        Use LPCOLESTRToCFStringRef here since the property names aren't BSTRs.
        
        * Interfaces/IWebError.idl:
        Add user info keys.
        
        * MarshallingHelpers.cpp:
        (MarshallingHelpers::LPCOLESTRToCFStringRef):
        * MarshallingHelpers.h:
        New function.
        
        * WebError.cpp:
        (WebError::WebError):
        (WebError::createInstance):
        Take a property bag.
        
        (WebError::userInfo):
        Return the property bag.
        
        * WebFrame.cpp:
        (WebFrame::createPlugin):
        If the plug-in wasn't found or failed to load, create a WebError with the right user info and
        call IWebResourceLoadDelegate::plugInFailedWithError.

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

        Build Fix

        * WebContextMenuClient.cpp:
        (WebContextMenuClient::searchWithGoogle): userGesture is true

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

        Merge in r20810.

        <rdar://problem/5121757> WebInspector focuses elements on mouse up instead of mouse down

        Make selecting a tree node happen on mousedown to match the NSOutlineView behavior.
        Also makes selecting rows in the style pane happen on mousedown for consistency.

        * WebInspector/webInspector/inspector.js:

2007-04-09  Adam Roben  <aroben@apple.com>

        Fixed copyrights.

        * WebInspector/WebInspector.cpp:
        * WebInspector/WebInspector.h:

2007-04-09  Adam Roben  <aroben@apple.com>

        Reviewed by Oliver.

        Fix two Web Inspector bugs:
        - The WebView wasn't focused when the inspector first appeared.
        - Resizing the upper pane did not resize the whole window.

        * WebInspector/WebInspector.cpp:
        (WebInspector::show): Focus the WebView.
        (WebInspector::setFrame): Implemented.
        (WebInspector::webViewFrame): Implemented.
        * WebInspector/WebInspector.h:

2007-04-09  Adam Roben  <aroben@apple.com>

        * WebInspector/WebInspector.cpp:
        (WebInspector::WebInspector): Removed two fixed FIXMEs and some
        commented-out code.

2007-04-08  Adam Roben  <aroben@apple.com>

        When does "merge" != "merge"? When you make the change yourself
        pre-emptively and make a typo.

        * WebInspector/webInspector/inspector.js:

2007-04-08  Adam Roben  <aroben@apple.com>

        Merge in r20800.

        * WebInspector/webInspector/inspector.js:

2007-04-08  Adam Roben  <aroben@apple.com>

        Merge in r20797.

        * WebInspector/webInspector/inspector.js:

2007-04-08  Adam Roben  <aroben@apple.com>

        Merge in r20796.

        * WebInspector/webInspector/inspector.js:

2007-04-08  Adam Roben  <aroben@apple.com>

        Reviewed by Anders.

        <rdar://problem/5119804> Web Inspector isn't resizable
        <rdar://problem/5119805> Can't move Web Inspector

        * WebInspector/WebInspector.cpp:
        (WebInspectorPrivate::WebInspectorPrivate):
        (WebInspector::WebInspector): Subclass the WebView so we can intercept
        its messages.
        (WebInspector::onDestroy): Undo the subclassing.
        (WebInspector::handleMessageSentToWebView): Added.
        (WebInspector::onLButtonDown): Added.
        (WebInspector::onLButtonUp): Added.
        (WebInspector::onMouseMove): Added.
        (WebInspectorWndProc): Added cases for mouse messages.
        (SubclassedWebViewWndProc): Added.
        * WebInspector/WebInspector.h:

2007-04-08  Adam Roben  <aroben@apple.com>

        Merge in r20793.

        * WebInspector/webInspector/AppleScrollArea.js: Removed.
        * WebInspector/webInspector/AppleScrollbar.js: Removed.
        * WebInspector/webInspector/Images/resize.png: Added.
        * WebInspector/webInspector/inspector.css:
        * WebInspector/webInspector/inspector.html:
        * WebInspector/webInspector/inspector.js:
        * WebInspector/webInspector/scrollarea.js: Added.
        * WebInspector/webInspector/scrollbar.js: Added.

2007-04-08  Adam Roben  <aroben@apple.com>

        Merge in r20792.

        * WebInspector/webInspector/inspector.js:

2007-04-08  Adam Roben  <aroben@apple.com>

        Merge in r20791.

        * WebInspector/webInspector/inspector.js:

2007-04-08  Adam Roben  <aroben@apple.com>

        Merge in r20789.

        * WebInspector/webInspector/inspector.js:

2007-04-08  Adam Roben  <aroben@apple.com>

        Build fix.

        * WebInspector/WebInspector.cpp:

2007-04-07  Adam Roben  <aroben@apple.com>

        Reviewed by Oliver.

        <rdar://problem/4769828> Web Inspector

        * WebInspector/WebInspector.cpp: Renamed from WebInspector.m. Ported
        Mac code. Some parts are left commented out to aid later
        implementation.
        * WebInspector/WebInspector.h: Ditto.

        * DOMCoreClasses.cpp: Added IID_DOMNode.
        (DOMNode::QueryInterface): Added case for IID_DOMNode.
        (DOMNode::isSameNode): Implemented.
        * DOMCoreClasses.h: Added IID_DOMNode.
        (DOMNode::node): Added.
        * English.lproj/Localizable.strings: Updated for "Inspect Element".
        * WebContextMenuClient.cpp:
        (WebContextMenuClient::getCustomMenuFromDefaultItems): Add the "Inspect
        Element" item.
        * WebFrame.cpp:
        (WebFrame::addInspector): Stubbed out.
        (WebFrame::removeInspector): Ditto.
        * WebFrame.h: Added declarations.
        * WebKit.resources/Info.plist: Added. This was needed so that the
        WebKit bundle would have a bundle identifier.
        * WebKit.vcproj/WebKit.vcproj: Added new files to project, and modified
        the post-build step to copy Info.plist and everything in
        WebInspector/webInspector to WebKit.resources.
        * WebView.cpp:
        (WebView::performContextMenuAction): Added case for the Inspect Element item.
        (WebView::inspectElement): Added.
        * WebView.h: Added declaration.

2007-04-07  Adam Roben  <aroben@apple.com>

        Forked most of the WebInspector directory from
        r20780 of branches/WebInspectorRefresh/WebKit/WebInspector.

        * WebInspector/WebInspector.h: Added.
        * WebInspector/WebInspector.m: Added.
        (+[WebInspector sharedWebInspector]):
        (-[WebInspector init]):
        (-[WebInspector initWithWebFrame:]):
        (-[WebInspector dealloc]):
        (-[WebInspector window]):
        (-[WebInspector windowWillClose:]):
        (-[WebInspector showWindow:]):
        (-[WebInspector setWebFrame:]):
        (-[WebInspector webFrame]):
        (-[WebInspector setRootDOMNode:]):
        (-[WebInspector rootDOMNode]):
        (-[WebInspector setFocusedDOMNode:]):
        (-[WebInspector focusedDOMNode]):
        (-[WebInspector setSearchQuery:]):
        (-[WebInspector searchQuery]):
        (-[WebInspector showOptionsMenu]):
        (-[WebInspector _toggleIgnoreWhitespace:]):
        (-[WebInspector _toggleShowUserAgentStyles:]):
        (-[WebInspector _highlightNode:]):
        (-[WebInspector _nodeHighlightExpired:]):
        (-[WebInspector _update]):
        (-[WebInspector _updateRoot]):
        (-[WebInspector _updateSystemColors]):
        (-[WebInspector _applicationWillResignActive]):
        (-[WebInspector _applicationDidBecomeActive]):
        (-[WebInspector _webFrameDetached:]):
        (+[WebInspector isSelectorExcludedFromWebScript:]):
        (+[WebInspector webScriptNameForSelector:]):
        (+[WebInspector isKeyExcludedFromWebScript:]):
        (-[WebInspector inspectedWebViewProgressFinished:]):
        (-[WebInspector webView:didFinishLoadForFrame:]):
        (-[WebInspector webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:]):
        (-[WebInspector webView:didParseSource:baseLineNumber:fromURL:sourceId:forWebFrame:]):
        (-[WebInspector webView:exceptionWasRaised:sourceId:line:forWebFrame:]):
        (-[WebInspectorPrivate dealloc]):
        (-[DOMNode _isAncestorOfNode:]):
        * WebInspector/webInspector/AppleScrollArea.js: Added.
        * WebInspector/webInspector/AppleScrollbar.js: Added.
        * WebInspector/webInspector/Images/button.png: Added.
        * WebInspector/webInspector/Images/buttonDivider.png: Added.
        * WebInspector/webInspector/Images/buttonPressed.png: Added.
        * WebInspector/webInspector/Images/close.png: Added.
        * WebInspector/webInspector/Images/closePressed.png: Added.
        * WebInspector/webInspector/Images/downTriangle.png: Added.
        * WebInspector/webInspector/Images/menu.png: Added.
        * WebInspector/webInspector/Images/menuPressed.png: Added.
        * WebInspector/webInspector/Images/popup.png: Added.
        * WebInspector/webInspector/Images/popupPressed.png: Added.
        * WebInspector/webInspector/Images/rightTriangle.png: Added.
        * WebInspector/webInspector/Images/scrollThumbBottom.png: Added.
        * WebInspector/webInspector/Images/scrollThumbMiddle.png: Added.
        * WebInspector/webInspector/Images/scrollThumbTop.png: Added.
        * WebInspector/webInspector/Images/scrollTrackBottom.png: Added.
        * WebInspector/webInspector/Images/scrollTrackMiddle.png: Added.
        * WebInspector/webInspector/Images/scrollTrackTop.png: Added.
        * WebInspector/webInspector/Images/upTriangle.png: Added.
        * WebInspector/webInspector/inspector.css: Added.
        * WebInspector/webInspector/inspector.html: Added.
        * WebInspector/webInspector/inspector.js: Added.

2007-04-06  Dave Hyatt  <hyatt@apple.com>

        Internal side of fix for bug 13274.

        Reviewed by olliej

        * Interfaces/IWebScrollBarPrivate.idl:
        * WebScrollBar.cpp:
        * WebScrollBar.h:
        * WebView.cpp:
        (WebView::handleMouseEvent):

2007-04-04  Oliver Hunt  <oliver@apple.com>

        Reviewed by Ada.
        
        Fix <rdar://problem/5111027> Dragging a link on page
        shows URL thumbnail as nearly-transparent instead 
        semi-transparent

        Error in createDragImageForLink led me to get wrong 
        maximum drag image size, now logic and maximum drag 
        image size corrected.

        * WebDragClient.cpp:
        (WebDragClient::createDragImageForLink):

2007-04-04  Adam Roben  <aroben@apple.com>

        Release build fix for TestNetscapePlugin.

        * WebKit.vcproj/WebKit.vcproj: Make the Release post-build step the
        same as the Debug one so that the npapi headers get copied.

2007-04-03  Adam Roben  <aroben@apple.com>

        Reviewed by Anders.

        WebKit part of fix for <rdar://problem/5103999> All dom/svg tests are
        failing due to extra/missing newlines

        * DOMCoreClasses.cpp:
        (DOMElement::innerText): Added.
        * DOMCoreClasses.h: Added declaration.
        * Interfaces/DOMPrivate.idl: Ditto.

2007-04-02  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Darin.
        
        Expose COM class counter

        * Interfaces/IWebKitStatistics.idl: Added comClassCount
        * WebKitStatistics.cpp:
        (WebKitStatistics::comClassCount): Added
        * WebKitStatistics.h:

2007-03-31  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Hyatt.

        <rdar://problem/5091159> Boomer has no bundle identifier - is the bundle correctly formed?
        <rdar://problem/5088764> Move the "Icon.db" file under "Local Settings"

        * WebIconDatabase.cpp:
        (userIconDatabasePath): Prefer to store Icon.db file keyed off of bundle executable name
        * WebPreferences.cpp:
        (WebPreferences::preferencesPath): Prefer to store WebKit Preferences keyed off of bundle executable name

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

        Reviewed by Beth.

        Fix <rdar://problem/5079824> editing/deleting/delete-by-word-001 is failing

        * WebView.cpp: Add DeleteWordForward and DeleteWordBackward to key command table.

2007-03-30  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adele.

        <rdar://problem/5101970> 
        Crash when submitting form, running under App Verifier
        
        * WebActionPropertyBag.cpp:
        (findMouseEvent):
        Return the right event.

2007-03-30  Anders Carlsson  <andersca@apple.com>

        Reviewed by Geoff.

        * Interfaces/IWebViewPrivate.idl:
        Add addAdditionalPluginPath method.
        
        * WebKit.vcproj/WebKit.vcproj:
        Copy NP includes so they can be included by the test plugin.
        
        * WebView.cpp:
        (WebView::stringByEvaluatingJavaScriptFromString):
        Hold JSLock while we call JSValue::getString().
        
        (WebView::addAdditionalPluginPath):
        * WebView.h:
        Implement addAdditionalPluginPath.

2007-03-27  Dave Hyatt  <hyatt@apple.com>

        Enable complex text.  Selection and small-caps support are now enabled with this patch.
        
        Reviewed by aroben

        * WebPreferences.cpp:
        (WebPreferences::initialize):

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

        Reviewed by Ada

        This one didn't actually have any leaks, but I just felt like doing the
        same style cleanup as the others :)
        
        * WebPreferences.cpp:
        (WebPreferences::stringValueForKey):
        (WebPreferences::integerValueForKey):
        (WebPreferences::floatValueForKey):
        (WebPreferences::setStringValue):
        (WebPreferences::setIntegerValue):
        (WebPreferences::save):
        (WebPreferences::load):

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

        Reviewed by Ada

        <rdar://5090412> - Plug CFNumberRef leaks in WebCache
        
        * WebCache.cpp:
        (WebCache::statistics):

2007-03-26  Beth Dakin  <bdakin@apple.com>

        Reviewed by Geoff.

        Fix build without breaking anything.

        * WebHistory.cpp:
        (releaseUserInfo): Added silly void statement for now.

2007-03-26  Beth Dakin  <bdakin@apple.com>

        Rubber-stamped by Brady.

        Build fix for release build.

        * WebHistory.cpp:
        (releaseUserInfo): Do not store userInfo->Release() in a local 
        variable since it is only used for an ASSERT.

2007-03-26  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Lou.
        
        <rdar://problem/5088764> Move the "Icon.db" file under "Local Settings"

        * WebIconDatabase.cpp:
        (userIconDatabasePath): Move icon database to non-roaming location

2007-03-25  Brady Eidson  <beidson@apple.com>

        Reviewed by Oliver
        
        <rdar://problem/5086888> - WebHistory(Item) Leak
        
        This is a pretty thourough touchup up style and correctness that
        plugs at least 1 definite leak and many potential leaks with
        extensive use of RetainPtr and COMPtr.
        
        This should result in no change in behavior

        * MarshallingHelpers.cpp: Add kIUnknownDictionaryValueCallBacks
        * MarshallingHelpers.h: Ditto
        
        * WebHistory.cpp:
        (createUserInfoFromArray):
        (createUserInfoFromHistoryItem):
        (releaseUserInfo):
        (WebHistory::WebHistory):
        (WebHistory::~WebHistory):
        (WebHistory::loadFromURL):
        (createHistoryListFromStream): Split of the Structured Exception
          Handling to a seperate function to cooperate with C++
        (WebHistory::loadHistoryGutsFromURL):
        (WebHistory::saveToURL):
        (WebHistory::saveHistoryGuts):
        (WebHistory::datesArray):
        (WebHistory::addItems):
        (WebHistory::removeItems):
        (WebHistory::removeAllItems):
        (WebHistory::orderedLastVisitedDays):
        (WebHistory::orderedItemsLastVisitedOnDay):
        (WebHistory::removeItem):
        (WebHistory::addItem):
        (WebHistory::addItemForURL):
        (WebHistory::itemForURLString):
        (WebHistory::itemForURL):
        (WebHistory::containsItemForURLString):
        (WebHistory::removeItemForURLString):
        (WebHistory::addItemToDateCaches):
        (WebHistory::removeItemFromDateCaches):
        (WebHistory::findIndex):
        (WebHistory::insertItem):
        (WebHistory::ageLimitDate):
        * WebHistory.h:
        
        * WebHistoryItem.cpp:
        (WebHistoryItem::dictionaryRepresentation):
        (WebHistoryItem::mergeAutoCompleteHints):

2007-03-25  Adam Roben  <aroben@apple.com>

        Reviewed by Oliver.

        WebKit part of <rdar://problem/5086934> DumpRenderTree doesn't support
        layoutTestController.queueLoad

        * WebFrame.cpp:
        (WebFrame::findFrameNamed): Implemented.
        * WebHistoryItem.cpp:
        (WebHistoryItem::children): Don't increment i twice per loop!

2007-03-25  Adam Roben  <aroben@apple.com>

        Build fix.

        * WebDownload.h: Include RetainPtr from WTF.

2007-03-24  Steve Falkenburg  <sfalken@apple.com>

        Build fix.

        * WebDownload.h: Remove WebCore namespace

2007-03-24  Adam Roben  <aroben@apple.com>

        Reviewed by Oliver.

        WebKit part of <rdar://problem/5086932> DumpRenderTree doesn't support
        layoutTestController.dumpBackForwardList

        * Interfaces/IWebHistoryItemPrivate.idl: Added declarations.
        * WebFrame.cpp:
        (WebFrame::childFrames): Removed unused variable.
        * WebHistoryItem.cpp:
        (WebHistoryItem::target): Implemented.
        (WebHistoryItem::isTargetItem): Implemented.
        (WebHistoryItem::children): Implemented.
        * WebHistoryItem.h: Added declarations.

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

        Reviewed by Adam
        
        <rdar://5086194> - WebHistory overreleases a CFNumber
        
        * WebHistory.cpp:
        (WebHistory::loadHistoryGutsFromURL): Don't CFRelease what we didn't 
          legitimately get a ref for!

2007-03-23  Adam Roben  <aroben@apple.com>

        Reviewed by Darin.

        WebKit part of <rdar://problem/5084881> Add a "turn of site-specific
        hacks" menu item to the Debug menu

        Added new IWebPrivate::setAllowSiteSpecificHacks SPI.

        * Interfaces/IWebViewPrivate.idl: Added declaration.
        * WebView.cpp:
        (WebView::userAgentForKURL): Only give a site-specific UA if
        site-specific hacks are turned on.
        (WebView::setAllowSiteSpecificHacks): Added.
        * WebView.h:
        (WebView::allowSiteSpecificHacks): Added.

2007-03-23  Beth Dakin  <bdakin@apple.com>

        Reviewed by Hyatt.

        Fix for <rdar://problem/5083914> Cursor is wrong for all context 
        menus

        * WebView.cpp:
        (WebView::handleContextMenuEvent): Set the cursor to the pointer 
        cursor.

2007-03-23  Alice Liu  <alice.liu@apple.com>

        Reviewed by Adam.

        Fixed <rdar://5084888> need to add flickr to spoof list in Boomer WebKit

        * WebView.cpp:
        (WebView::userAgentForKURL):
        added flickr spoof

2007-03-23  Adam Roben  <aroben@apple.com>

        Reviewed by Oliver.

        WebKit part of <rdar://problem/5085170> DumpRenderTree doesn't print
        frame scroll offsets

        Implemented some WebFrame methods to support dumping frame scroll
        offsets in DRT.

        * Interfaces/IWebFrame.idl: Changed signature of IWebFrame::childFrames.
        * Interfaces/IWebFramePrivate.idl: Added scrollOffset declaration.
        * WebFrame.cpp:
        (WebFrame::name): Implemented.
        (WebFrame::childFrames): Implemented.
        (WebFrame::scrollOffset): Implemented.
        * WebFrame.h: Updated/added declarations.

2007-03-23  Adam Roben  <aroben@apple.com>

        Reviewed by Oliver.

        WebKit part of fix for <rdar://problem/4990740>.

        Added IWebDataSourcePrivate::mainDocumentError.

        * Interfaces/IWebDataSource.idl: Added method declaration and updated
        copyrights.
        * WebDataSource.cpp:
        (WebDataSource::mainDocumentError): Implemented.
        * WebDataSource.h: Added declaration.

2007-03-23  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam.
        
        <rdar://problem/5083645> Spoofed UA for gmail doesn't work - should be removed

        * WebView.cpp:
        (WebView::userAgentForKURL): Remove gmail spoof

2007-03-22  Dave Hyatt  <hyatt@apple.com>

        Fix for <rdar://problem/5083072>.

        Reviewed by aroben
  
        * ChangeLog:
        * WebFrame.cpp:
        (WebFrame::setPrinting):
        (WebFrame::spoolPages):
        * WebFrame.h:

2007-03-22  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Maciej.

        <rdar://problem/5082270>
        Crash in windows media player at MTV.COM
        
        Ignore any WM_PAINT events we get while painting.
        
        * WebView.cpp:
        (WebView::WebView):
        (WebView::updateBackingStore):
        (WebView::paint):
        (WebViewWndProc):
        * WebView.h:
        (WebView::isPainting):

2007-03-22  Adele Peterson  <adele@apple.com>

        Reviewed by Anders.

        Fix for <rdar://problem/5071358> window.open won't work with empty urls (24fun test)

        * Interfaces/IWebURLRequest.idl:
        * WebMutableURLRequest.cpp: (WebMutableURLRequest::isEmpty): Added. Checks whether the ResourceRequest is empty.  On the mac,
          NSURLRequests created from empty ResourceRequests are nil.  We may want to consider that in the future, but there were too
          many places in the app that expected the IWebURLRequest to be non-null.
        * WebMutableURLRequest.h:

2007-03-22  Dave Hyatt  <hyatt@apple.com>

        Fix for crasher in layout caused by paints that happen without layout being current.  Change to be
        more like the Mac and crawl the frame tree up front ensuring everyone is up to date before painting.

        Reviewed by olliej

        * WebFrame.cpp:
        (WebFrame::WebFramePrivate::m_policyFunction):
        (WebFrame::layoutIfNeededRecursive):
        * WebFrame.h:
        * WebView.cpp:
        (WebView::updateBackingStore):
        (WebView::paint):
        (WebViewWndProc):

2007-03-22  Ada Chan  <adachan@apple.com>

        Reviewed by Hyatt and Alice.
        
        Changed the mouse event processing in the WebView wndproc so we actually
        allow a mouse event with click count > 3, which matches the mac safari behavior.
        
        Set globalPrevButton and globalPrevPoint also in mouse down.

        * WebView.cpp:
        (WebView::handleMouseEvent):

2007-03-21  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        * WebView.cpp:
        (WebView::initWithFrame):
        Remove #ifdef now that DRT no longer crashes.

2007-03-21  Beth Dakin  <bdakin@apple.com>

        Reviewed by Adam.

        <rdar://problem/5074274> right-clicking in certain iframes ends up 
        left-clicking, and context menu appears far away

        * WebView.cpp:
        (WebView::handleContextMenuEvent): We were always calling 
        sendContextMenuEvent() on the main frame!! Instead, call it on the 
        focused or main frame.

2007-03-21  Adele Peterson  <adele@apple.com>

        Reviewed by Adam.
        
        Fix for <rdar://problem/5076213> fast/forms/input-text-enter.html fails
        
        Added updateActiveState SPI for DumpRenderTree.

        * Interfaces/IWebViewPrivate.idl:
        * WebView.cpp:
        (WebViewWndProc): Added comments where we do similar work when the webview gets and loses focus.  We should merge this logic into updateActiveState eventually.
        (WebView::updateActiveState):
        * WebView.h:

2007-03-19  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Geoff and Adam.

        - <rdar://problem/4041141> JavaScriptCore is not thread-safe on Windows

        * WebView.cpp:
        (WebView::WebView): Tell JavaScriptCore what the main thread is.

2007-03-20  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        <rdar://problem/5050512>
        Need invalid/expired certificate alerts
        
        Add setAllowsAnyHTTPSCertificate method to IWebMutableURLRequest and have it 
        call down to WebCore.
        
        * Interfaces/IWebMutableURLRequest.idl:
        * WebMutableURLRequest.cpp:
        (WebMutableURLRequest::setAllowsAnyHTTPSCertificate):
        * WebMutableURLRequest.h:

2007-03-20  Adam Roben  <aroben@apple.com>

        Rubberstamped by Anders.

        Workaround a CFNetwork crash that affects DRT.

        * WebView.cpp:
        (WebView::initWithFrame): Commented out cookie storage initialization.

2007-03-20  Adam Roben  <aroben@apple.com>

        Build fix.

        * WebView.cpp: Added missing #include.

2007-03-20  Adam Roben  <aroben@apple.com>

        Reviewed by Oliver.

        Implemented [set]TabKeyCyclesThroughElements.

        * Interfaces/IWebViewPrivate.idl: Added new declarations.
        * WebView.cpp:
        (WebView::setTabKeyCyclesThroughElements): Implemented.
        (WebView::tabKeyCyclesThroughElements): Implemented.
        * WebView.h: Updated.

2007-03-20  Dave Hyatt  <hyatt@apple.com>

        Land advanced text code path (turned off).
       
        Reviewed by aroben

        * WebKit.vcproj/WebKit.vcproj:

2007-03-20  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        <rdar://problem/4921198>
        Cookie acceptance policy not settable
        
        * WebView.cpp:
        (WebView::updateWebCoreSettingsFromPreferences):
        Update the cookie storage accept policy.
        
        (WebView::initWithFrame):
        Initialize the cookie storage.

2007-03-19  Adam Roben  <aroben@apple.com>

        Build fix.

        * WebKit.vcproj/WebKitGUID.vcproj:

2007-03-19  Adam Roben  <aroben@apple.com>

        Reviewed by Anders and Darin.

        Added WebJavaScriptCollector for <rdar://problems/5071653>.

        * Interfaces/IWebJavaScriptCollector.idl: Added.
        * Interfaces/WebKit.idl:
        * WebJavaScriptCollector.cpp: Added.
        (WebJavaScriptCollector::WebJavaScriptCollector):
        (WebJavaScriptCollector::~WebJavaScriptCollector):
        (WebJavaScriptCollector::createInstance):
        (WebJavaScriptCollector::QueryInterface):
        (WebJavaScriptCollector::AddRef):
        (WebJavaScriptCollector::Release):
        (WebJavaScriptCollector::collect):
        (WebJavaScriptCollector::collectOnAlternateThread):
        (WebJavaScriptCollector::objectCount):
        * WebJavaScriptCollector.h: Added.
        * WebKit.vcproj/Interfaces.vcproj: Added IWebJavaScriptCollector.idl.
        * WebKit.vcproj/WebKit.vcproj: Added WebJavaScriptCollector.(cpp|h).
        * WebKit.vcproj/WebKitGUID.vcproj: Added IWebJavaScriptCollector_i.c.
        * WebKitClassFactory.cpp:
        (WebKitClassFactory::CreateInstance): Added cases for
        WebJavaScriptCollector.
        * WebKitDLL.cpp:
        (DllGetClassObject): Ditto.

2007-03-19  Adam Roben  <aroben@apple.com>

        Build fix.

        * Interfaces/IWebView.idl:

2007-03-18  Adam Roben  <aroben@apple.com>

        Reviewed by Hyatt.

        Implemented getting/setting of the editing delegate (we don't actually
        use it for anything yet, though. See <rdar://problem/5071598>).

        * Interfaces/IWebEditingDelegate.idl: Renamed IWebViewEditingDelegate
        to IWebEditingDelegate to match our other delegates.
        * Interfaces/IWebView.idl: Updated for rename.
        * WebView.cpp:
        (WebView::setEditingDelegate): Implemented.
        (WebView::editingDelegate): Ditto.
        * WebView.h: Updated for rename.

2007-03-18  Adam Roben  <aroben@apple.com>

        Reviewed by Geoff.

        Added IWebFramePrivate::layout to support eventSender in DRT.

        Made IWebView inherit from IDropTarget to match Mac, and added
        IWebUIDelegatePrivate::doDragDrop to support drag-and-drop in DRT.

        * Interfaces/IWebFramePrivate.idl: Added layout().
        * Interfaces/IWebUIDelegatePrivate.idl: Added doDragDrop().
        * Interfaces/IWebView.idl: Added inheritance from IDropTarget.
        * WebDragClient.cpp:
        (WebDragClient::startDrag): Call the UI delegate if possible,
        otherwise fallback to OLE's DoDragDrop.
        * WebFrame.cpp:
        (WebFrame::layout): Implemented.
        * WebFrame.h:
        * WebView.h:

2007-03-17  Adam Roben  <aroben@apple.com>

        Reviewed by Brady.

        Fix repro ASSERT when logging in to facebook.com.

        * WebMutableURLRequest.cpp:
        (WebMutableURLRequest::valueForHTTPHeaderField): Implemented.

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

        Reviewed by Oliver

        Make the WebDownload fix a little more correct.
        
        * WebDownload.cpp:
        (WebDownload::init): Release the connection from the ResourceHandle after the CFURLDownload has been created

2007-03-16  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Dave Hyatt.
        
        Fixed "called Frame::paint with nil renderer" console messages.
        You can now launch and exit the app without seeing any
        error messages!

        * WebView.cpp:
        (WebView::paintIntoBackingStore): Only tell the FrameView to
        paint if it has a renderer. This isn't an issue on the Mac
        because we don't create a FrameView until you load a page.

2007-03-16  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        Add setters and getters for cookie storage accept policy.
        
        * Interfaces/IWebPreferences.idl:
        * WebPreferenceKeysPrivate.h:
        * WebPreferences.cpp:
        (WebPreferences::initialize):
        (WebPreferences::cookieStorageAcceptPolicy):
        (WebPreferences::setCookieStorageAcceptPolicy):
        * WebPreferences.h:

2007-03-16  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam and Dave Hyatt.

        <rdar://problem/5069226>
        Boomer fails Acid2.
        
        Fix acid2 test.
        
        * WebFrame.cpp:
        (WebFrame::shouldFallBack):
        Implement this function.

2007-03-16  Ada Chan  <adachan@apple.com>

        Reviewed by Steve.
        
        Implemented a couple of DOM methods so we can set the font-size of an element directly in the app.

        * DOMCSSClasses.cpp:
        (DOMCSSStyleDeclaration::setProperty):
        * DOMCoreClasses.cpp:
        (DOMElement::style):

2007-03-15  Alice Liu  <alice.liu@apple.com>

        Reviewed by Ada.

        Fixing some leaks

        * WebFrame.cpp:
        (WebFrame::dispatchDidReceiveAuthenticationChallenge):
        (WebFrame::dispatchDidCancelAuthenticationChallenge):

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

        Reviewed by Oliver

        CFNetwork related cleanup that was a work around for previous deficiencies in CFURLDownload
        This might fix some of the random crashers we see on stress testing if they end up 
        downloading links.

        * WebDownload.cpp:
        (WebDownload::init): Release the connection from the handle so it no longer refers to it
        
2007-03-15  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Geoff and Steve.
        
        - fixed <rdar://problem/5029776> iBench JavaScript test slower than Opera
        - fixes to use FastMalloc on Windows

        * WebKit.vcproj/WebKit.def: Add exports of WTF symbols.
        * WebKit.vcproj/WebKit_debug.def: ditto
        * WebKit.vcproj/WebKit.vcproj: Link pthreads, now needed by WTF.

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

        Reviewed by Alice
        
        Due to OpenSource r20178, all of the sudden we were trying to handle page caching on Windows
        even though it is not hooked up yet.  The resulted in very particular cases ending up calling 
        clear() in FrameLoader::provisionalLoadStarted().  One such particular case was if a page *would*
        be "cachable" (no frames, no passwords, etc etc), and you start a download from that page.
        
        The fix for now is to manually set the pageCacheSize to 0 whenever we create new pages on Windows.
        This prevents the "Should I cache this page?" checking from getting far enough to clear the document.
        It so happens this involves exactly one line.
        
        * WebView.cpp:
        (WebView::initWithFrame): Set page cache size to zero on new pages, and add a fixme to remove later

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

        Reviewed by Maciej

        <rdar://problem/4429701>
        Implements a port blocking black list that matches Firefox's
        
        * Interfaces/IWebError.idl: Add the custom error code for blocked error

        * WebFrame.cpp:
        (WebFrame::blockedError): FrameLoaderClient fill-in + a Fixme
        (WebFrame::interruptForPolicyChangeError): Add a Fixme for localization
        * WebFrame.h:

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

        Rubberstamped by Brady.

        * WebKitLogging.cpp: Turn of Download logging by default.

2007-03-14  Ada Chan  <adachan@apple.com>

        Reviewed by Lou.

        Added a method in IWebViewPrivate to clear the current focus node.  This is called in the app
        when focus has been transferred to the address field or search field.

        * Interfaces/IWebViewPrivate.idl:
        * WebView.cpp:
        (WebView::clearFocusNode):
        * WebView.h:

2007-03-14  Adele Peterson  <adele@apple.com>

        Reviewed by Ada.

        Allow empty commands to be sent by doTextFieldCommandFromEvent.  Our autocomplete code relies on this.

        * WebEditorClient.cpp: (WebEditorClient::doTextFieldCommandFromEvent):

2007-03-14  Steve Falkenburg  <sfalken@apple.com>

        <rdar://problem/5050470> Reproducible crash doing find on page at cnn.com
        
        Add frame->document() null checks in cases where frame could be a
        sub-frame that hasn't started loading yet.

        * WebView.cpp:
        (WebView::rectsForTextMatches): Add null check

2007-03-14  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        WebKit part of fix for <rdar://problem/5057371> REGRESSION: Shift-selection stopped working in text fields

        This fixes doCommandBySelector to take a command string instead of a key code.

        * Interfaces/IWebEditingDelegate.idl: Changed parameter to BSTR.
        * Interfaces/IWebFormDelegate.idl: ditto.
        * WebEditorClient.cpp:
        (WebEditorClient::doTextFieldCommandFromEvent): Calls doCommandBySelector with a BString that it gets from interpretKeyEvent instead of a key code.
        (WebEditorClient::textWillBeDeletedInTextField): Calls doCommandBySelector with a BString to represent the BackwardDelete command.
        (WebEditorClient::handleKeypress): Calls handleEditingKeyboardEvent with just the KeyboardEvent.
        * WebView.cpp: Added commands that will be used by doCommandBySelector to the table (Cancel, InsertTab, InsertBacktab, InsertNewline).
        (WebView::interpretKeyEvent): Added. Returns a command string for a KeyboardEvent. Removed static editCommandForKey.
        (WebView::handleEditingKeyboardEvent): Call Editor methods instead of calling handleTextInputEvent directly.
        * WebView.h:

2007-03-14  Administrator  <acarlsson@apple.com>

        Build fixes.
        
        * WebDataSource.cpp:
        (WebDataSource::subresourceForURL):
        * WebKitDLL.cpp:
        (loadResourceIntoBuffer):

2007-03-12  Adele Peterson  <adele@apple.com>

        Reviewed by Oliver.

        WebKit part of fix for <rdar://problem/5044790> preventing default of keypress event doesn't work (affects .mac)

        Removed special handling of the WM_CHAR message.  All this work is now done by WM_KEYDOWN, which will dispatch the keydown event, 
        which causes the keypress event to be dispatched, which calls WebEditorClient::handleKeyPress to do all the hard work.
        
        * WebEditorClient.cpp: (WebEditorClient::handleKeypress): Removed special call to doTextFieldCommandFromEvent since this will now 
        happen during normal key event processing. Call handleEditingKeyboardEvent.  Now editing actions can be prevented from the keypress event handler.
        * WebView.cpp:
        (WebView::WebView): Added m_currentCharacterCode, so we can reuse the computed code from keyDown for keyUp events.
        (WebView::keyUp): Renamed arguments.  Don't dispatch event for shift, ctrl, or capslock keys. Use m_currentCharacterCode when constructing the PlatformKeyboardEvent.
        (WebView::handleEditingKeyboardEvent): Now takes a KeyboardEvent instead of a PlatformKeyboardEvent.  If no editCommand is created
         from the event, then call handleTextInputEvent.
        (WebView::keyDown): Peek at the next message in the message loop.  If its a WM_CHAR, then get the character code and remove that message from the queue.
         Renamed arguments.  Don't dispatch event for shift, ctrl, or capslock keys. Set m_currentCharacterCode and use it when constructing the PlatformKeyboardEvent.
        (WebViewWndProc):  Removed handling of WM_CHAR, since this is now done from WM_KEYDOWN by dispatching the keydown event, which will eventually call handleKeyPress.
        * WebView.h: Made handleEditingKeyboardEvent public so it can be accessed from WebEditorClient.

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

        Reviewed by Adele.

        Stubbed WebEditorClient::respondToChangedSelection

        * WebEditorClient.cpp:
        (WebEditorClient::respondToChangedSelection):
        * WebEditorClient.h:

2007-03-10  Anders Carlsson <acarlsson@apple.com>

        Reviewed by Adam.

        * DOMCoreClasses.cpp:
        (DOMNode::textContent):
        Implement this.

2007-03-09  Anders Carlsson <acarlsson@apple.com>

        Reviewed by Adam.

        * WebURLResponse.cpp:
        (WebURLResponse::suggestedFilename):
        Get the suggested filename from the ResourceResponse object.

2007-03-09  Adam Roben  <aroben@apple.com>

        Rubberstamped by Steve.

        B&I build fix.

        * WebKit.vcproj/WebKit.vcproj: Removed all references to iconv.

2007-03-08  Anders Carlsson <acarlsson@apple.com>

        Build fix.
        
        * WebView.cpp:
        (WebView::isLoading):

2007-03-08  Anders Carlsson <acarlsson@apple.com>

        Reviewed by Adam.

        Implement WebView::isLoading.
        
        * WebView.cpp:
        (WebView::isLoading):

2007-03-07  Adam Roben  <aroben@apple.com>

        Rubberstamped by Anders.

        Return E_POINTER for null parameters.

        * WebScrollBar.cpp:
        (WebScrollBar::value):
        (WebScrollBar::capturingMouse):
        (WebScrollBar::frameGeometry):
        (WebScrollBar::width):
        (WebScrollBar::height):
        (WebScrollBar::requestedWidth):
        (WebScrollBar::requestedHeight):
        (WebScrollBar::windowClipRect):

2007-03-07  Adam Roben  <aroben@apple.com>

        Reviewed by Oliver.

        Added requestedWidth and requestedHeight methods to WebScrollBar.

        * Interfaces/IWebScrollBarPrivate.idl: Added new declarations.
        * WebScrollBar.cpp:
        (WebScrollBar::requestedWidth): Implemented.
        (WebScrollBar::requestedHeight): Implemented.
        * WebScrollBar.h: Added method declarations.

2007-03-07  Adam Roben  <aroben@apple.com>

        Rubberstamped by Anders.

        * WebFrame.cpp:
        (WebFrame::cancelledError): Use the WebURLErrorDomain constant.
        (WebFrame::interruptForPolicyChangeError): Use the WebKitErrorDomain constant.

2007-03-07  Adam Roben  <aroben@apple.com>

        Rubberstamped by Anders.

        Switch the definition of WebURLErrorDomain to "CFURLErrorDomain" so
        that we will send the right errors once <rdar://problem/5034136> is
        fixed.

        * Interfaces/IWebError.idl: Changed definition.

2007-03-07  Adele Peterson  <adele@apple.com>

        Build fix.

        * WebEditorClient.cpp: (WebEditorClient::handleInputMethodKeypress):

2007-03-07  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.

        WebKitWin part of fix for:
        http://bugs.webkit.org/show_bug.cgi?id=10871
        http://bugs.webkit.org/show_bug.cgi?id=12677
        <rdar://problem/4823129> REGRESSION: IME key events different in nightly
        <rdar://problem/4759563> REGRESSION: Return key is always sent when you confirm a clause in kotoeri

        * WebEditorClient.cpp:
        (WebEditorClient::handleKeypress): Changed handleKeyPress to handleKeypress.
        (WebEditorClient::handleInputMethodKeypress): Added.
        * WebEditorClient.h:

2007-03-07  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        * WebFrame.cpp:
        (WebFrame::makeDocumentView):
        Assert that frame is not null.

2007-03-06  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        * WebFrame.cpp:
        (WebFrame::makeDocumentView):
        Call resetMultipleFormSubmissionProtection() so that submitting the same form from separate loads works.

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

        Reviewed by Adam

        Adapt to an API change in CFURLDownload
        
        * WebDownload.cpp:
        (WebDownload::init):

2007-03-06  Steve Falkenburg  <sfalken@apple.com>

        Rubber-stamped by Adam.
        
        Fix disney.com more.  Disney redirects to disney.go.com.

        * WebView.cpp:
        (WebView::userAgentForKURL): Added disney.go.com

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

        Reviewed by Anders.

        Always keep rounding hacks on to be consistent.

        * WebDragClient.cpp:
        (createDragImageForLink): Tell StringTruncator to keep rounding hacks on.
        * WebKitGraphics.cpp:
        (CenterTruncateStringToWidth): Ditto.
        (RightTruncateStringToWidth): Ditto.

2007-03-06  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam.
        
        Allow custom user agents per site.
        
        This fixes:
        
        http://www.disney.com
        http://www.yahoo.com
        http://mail.google.com
        iTunes store links (w/ latest unsubmitted CFNetwork from our root share)

        * WebView.cpp:
        (WebView::userAgentForKURL): Check URL host against a list of known offenders, return them what they're looking for.

2007-03-06  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.
        
        Pass the user agent on.
        
        * WebFrame.cpp:
        (WebFrame::userAgent):
        * WebFrame.h:

2007-03-04  Adam Roben  <aroben@apple.com>

        Reviewed by Steve.

        Added line spacing querying to FontMetrics to support line wrapping.

        * WebKitGraphics.cpp:
        (FontMetrics): Return the line spacing.
        * WebKitGraphics.h: Added lineSpacing parameter.

2007-03-02  Adam Roben  <aroben@apple.com>

        Reviewed by Beth.

        Make submenus draw using the UIDelegate.

        * Interfaces/IWebUIDelegate.idl: Added new delegate method to add
        custom drawing data for menus.
        * WebView.cpp:
        (WebView::onInitMenuPopup): Added. Calls new delegate method.
        (WebViewWndProc): Added handler for WM_INITMENUPOPUP, which is called
        for all submenus.
        * WebView.h: Added declaration.

2007-03-02  Adam Roben  <aroben@apple.com>

        Reviewed by Anders.

        Added optional underlining of a single character to WebKitGraphics.

        * WebKitGraphics.cpp:
        (DrawTextAtPoint): Passed optional underlinedIndex parameter to
        WebCoreTextRenderer.
        * WebKitGraphics.h: Added optional underlinedIndex parameter.

2007-03-01  Adam Roben  <aroben@apple.com>

        Reviewed by Kevin M.

        Add support for right-truncation to WebKitGraphics.

        * WebKit.vcproj/WebKit.def: Added new export.
        * WebKit.vcproj/WebKit_debug.def: Ditto.
        * WebKitGraphics.cpp:
        (RightTruncateStringToWidth): Added.
        * WebKitGraphics.h: Added declaration.

2007-02-28  Adam Roben  <aroben@apple.com>

        Reviewed by Anders.

        Made WebKitGraphics more flexible.

        * WebDragClient.cpp:
        (WebDragClient::createDragImageForLink): Updated for changes to
        WebKitGraphics/WebCoreTextRenderer.
        * WebKit.vcproj/WebKit.def: Added new exported methods.
        * WebKit.vcproj/WebKit_debug.def: Ditto.
        * WebKitGraphics.cpp:
        (makeFont): Added.
        (DrawTextAtPoint): Simplified arguments, changed to take a
        CGContextRef, and updated for WebCoreTextRenderer changes.
        (TextFloatWidth): Added.
        (FontMetrics): Added.
        (CenterTruncateStringToWidth): Added.
        * WebKitGraphics.h: Updated declarations.

2007-02-28  Steve Falkenburg  <sfalken@apple.com>

        Fix build (for new SDK) / Break build (for old SDK)

        * WebDownload.cpp:
        (WebDownload::initToResumeWithBundle):

2007-02-27  Ada Chan  <adachan@apple.com>

        Reviewed by Steve and Adam.
        
        WebKitWin changes to get the aqua scrollbar into the app.

        * Interfaces/IWebScrollBarDelegatePrivate.idl: Added.
        COM interface for the WebKit scrollbar
        * Interfaces/IWebScrollBarPrivate.idl: Added.
        COM interface that allows the WebKit scrollbar to update the client.
        * Interfaces/WebKit.idl:
        * WebKit.vcproj/Interfaces.vcproj:
        * WebKit.vcproj/WebKit.vcproj:
        * WebKit.vcproj/WebKitGUID.vcproj:
        * WebKitClassFactory.cpp:
        (WebKitClassFactory::CreateInstance):
        Added changes needed to create the WebKitScrollBar through COM
        * WebKitDLL.cpp:
        (DllGetClassObject):
        * WebScrollBar.cpp: Added.
        WebKitScrollBar wraps the WebCore's PlatformScrollbar.  This allows the app to
        make its own scroll bar that's the same aqua scrollbar in the engine.
        (WebScrollBar::WebScrollBar):
        (WebScrollBar::~WebScrollBar):
        (WebScrollBar::createInstance):
        (WebScrollBar::QueryInterface):
        (WebScrollBar::AddRef):
        (WebScrollBar::Release):
        (WebScrollBar::init): instantiate PlatformScrollbar.
        (WebScrollBar::setEnabled): call through to PlatformScrollbar
        (WebScrollBar::setSteps): ditto
        (WebScrollBar::setProportion): ditto
        (WebScrollBar::setRect): ditto
        (WebScrollBar::setValue): ditto
        (WebScrollBar::value): ditto
        (WebScrollBar::capturingMouse): ditto
        (WebScrollBar::paint): ditto
        (WebScrollBar::frameGeometry): ditto
        (WebScrollBar::width): ditto
        (WebScrollBar::height): ditto
        (WebScrollBar::handleMouseEvent): ditto
        (WebScrollBar::scroll): ditto
        (WebScrollBar::valueChanged): call valueChanged on the delegate
        (WebScrollBar::windowClipRect): get the rect from the scrollbar's containing window
        * WebScrollBar.h: Added.

2007-02-27  Alice Liu  <alice.liu@apple.com>

        Reviewed by Steve, Adam, Maciej, and their mothers.

        This is a general leaks fix but helps the effort towards fixing
        <rdar://4974495> Boomer leaks while running HTML iBench
        However, this fix doens't close that bug. 

        * WebFrame.cpp:
        (WebFrame::setTitle):
            fix a leak of WebHistory
        * WebHistory.cpp:
        (_WebCoreHistoryProvider::containsItemForURLUnicode):
            fix a leak of WebHistory

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

        Reviewed by Anders.

        Fix <rdar://problem/5004615> View source menu option is always disabled
        when Netscape 8 is installed

        The bug was caused by Netscape's npTrident.dll plugin, which registers
        itself as a handler for text/html and text/xml.

        * WebFrame.cpp:
        (WebFrame::canProvideDocumentSource): Explicitly allow viewing the
        source of HTML and XML documents, rather than disallowing text, image,
        and plugin documents. Plugins can register themselves as handlers for
        HTML and XML MIME types, but we still want to display source in those
        cases.

2007-02-27  Beth Dakin  <bdakin@apple.com>

        Reviewed by Adam.

        Make msimg32.lib available to the engine so that we can use 
        AlphaBlend.

        * WebKit.vcproj/WebKit.vcproj:

2007-02-27  Ada Chan  <adachan@apple.com>

        Fixed build.

        * WebFrame.cpp:

2007-02-27  Oliver Hunt  <oliver@apple.com>

        Reviewed by Lou and Steve.
        
        Handle the WM_CURSOR message to stop cursor flickering
        to fix <rdar://problem/4788352>

        * WebView.cpp:
        (WebViewWndProc):

2007-02-27  Ada Chan  <adachan@apple.com>

        Reviewed by Steve and Anders.

        <rdar://4983106> Stop/reload button never changes back to
        reload when a click on a link spawns a download

        * WebError.cpp:
        (WebError::isPolicyChangeError): fixed string comparison
        * WebFrame.cpp:
        (WebFrame::interruptForPolicyChangeError): implemented the method

2007-02-26  Adam Roben  <aroben@apple.com>

        Reviewed by Adele.

        Stop bizarre crashes from happening on startup.

        * WebKit.vcproj/WebKit.vcproj: Use new ENABLE_* macros instead of *_SUPPORT.

2007-02-24  Steve Falkenburg  <sfalken@apple.com>

        Pre-emptive build fix.
        Removed CGPThreads DLL copy

        * WebKit.vcproj/WebKit.vcproj:

2007-02-22  Adele Peterson  <adele@apple.com>

        Updating this file to match WebCore.

        * WebKit.vcproj/textAreaResizeCorner.png:

2007-02-22  Beth Dakin  <bdakin@apple.com>

        Reviewed by Adam.

        Fix for http://bugs.webkit.org/show_bug.cgi?id=12399 REGRESSION: 
        Unable to prevent default context menu from appearing. <rdar://
        problem/5017416>

        * WebView.cpp:
        (WebView::handleContextMenuEvent): Clear the controller's context 
        menu before propagating a new context menu event through the DOM.

2007-02-22  Oliver Hunt  <oliver@apple.com>

        Reviewed by Ada, Lou, and Steve.

        Last of the major changes for drag and drop
        - Move COMPtr.h to WebCore
        - Added WebDragSource, a modified version of SDataSource from the App
          that can notify a WebView's eventhandler of drag events
        - Implement the last bits of the DragClient
        - As part of drag client added code to draw the "doubled" text used by
          drag links.  May be useful for other parts of WebKit/App
        
        * COMPtr.h: Removed.
          Moving to WebCore
        * WebDragClient.cpp:
        (WebDragClient::actionMaskForDrag):
        (WebDragClient::willPerformDragDestinationAction):
        (WebDragClient::dragSourceActionMaskForPoint):
        (WebDragClient::willPerformDragSourceAction):
          Removing WebCore:: as i'm now using the WebCore namespace
        (WebDragClient::startDrag):
          Implemented client method
        (allocImage):
        (dragLabelFont):
          Helper functions for generating the link dragging image
        (WebDragClient::createDragImageForLink):
          Implemented client method
          
        * WebDropSource.cpp: Added.
        (WebDropSource::createInstance):
        (WebDropSource::WebDropSource):
        (WebDropSource::QueryInterface):
        (WebDropSource::AddRef):
        (WebDropSource::Release):
        (generateMouseEvent):
          Generates a mouse event for the EventHandler
        (WebDropSource::QueryContinueDrag):
        (WebDropSource::GiveFeedback):
          Copied from SDataObject in the App.  Minor changes per suggestions
          from Ada and Steve (error codes, potential leaks)
          Also includes logic to notify the source WebView of drag events (moving 
          and drag end)
          
        * WebDropSource.h: Added.
          Header for the above
          
        * WebKit.vcproj/WebKit.vcproj:
          Removing COMPtr.h, and adding WebDropSource.{h,cpp}
          
        * WebKitGraphics.cpp:
        (DrawDoubledTextAtPoint):
          Utility function for drawing double text, as used by link dragging image
          
        * WebKitGraphics.h:
          Defining the above function

2007-02-21  Brady Eidson  <beidson@apple.com>

        Reviewed by the build-fix fairies

        * WebDownload.cpp:
        (WebDownload::initToResumeWithBundle): Conditionally use CFURLDownload API for the resume case.
         I totally made up the flag

2007-02-21  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders' rubberstamp
        
        * WebDownload.cpp:
        (WebDownload::initToResumeWithBundle): Make a copy of the string we truncate
         so it doesn't affect the original

2007-02-21  Brady Eidson  <beidson@apple.com>

        Reviewed by Adam

        <rdar://problem/4964763> - Hookup resume downloads on the engine side
        
        NOTE: Resume downloads are broken in the current ChickenCat - this functionality requires 
        a custom ToT CFNetwork as of CFNetwork r3372, or will require CFNetwork 172 or later
        
        * WebDownload.cpp:
        (WebDownload::initWithRequest): Changed some logging, plugged some potential leaks
        (WebDownload::initToResumeWithBundle): Added a real implementation - this now works!
        (WebDownload::didFinish): Added some logging and fixed up some lifetime issues
        (extractResumeDataFromBundle): Renamed to imply the modification of the file.  Truncate
          the resume data from the file once it is extracted

2007-02-20  Beth Dakin  <bdakin@apple.com>

        Reviewed by Maciej.

        Move copyImage functionality from the ContextMenuClient to the 
        Pasteboard.

        * WebContextMenuClient.cpp:
        * WebContextMenuClient.h:

2007-02-20  Adam Roben  <aroben@apple.com>

        Reviewed by Darin and Anders.

        Fix <rdar://problem/5003318> App: Status bar text is more difficult to
        read than Mac OS X Safari

        * WebKitGraphics.cpp:
        (DrawTextAtPoint): Added bottomAlign and centerTruncate parameters.
        * WebKitGraphics.h: Ditto.

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

        Reviewed by Anders.

        * WebFrame.cpp: (WebFrame::redirectDataToPlugin): Update for changes to
        FrameLoader and DocumentLoader.

2007-02-19  Adam Roben  <aroben@apple.com>

        Reviewed by Darin.

        Fix <rdar://problem/5007566> Crash in WebFrame::dataSource on dni.ru

        The fix for the bug was to zero out WebFrame's Frame pointer in
        WebFrame::frameLoaderDestroyed, and then to null-check or ASSERT
        non-null as appropriate. All IWebFrame methods that depend on the Frame
        pointer will return E_FAIL if it is null, and everywhere within
        WebFrame that wasn't null-checking before will now explicitly ASSERT.

        I also changed all uses of d->frame and WebFrame::impl() to use the
        core() function for consistency, and so that there is only one code
        path for getting from a WebFrame to a Frame.

        Additional more specific comments below.

        * WebChromeClient.cpp:
        (WebChromeClient::scrollBackingStore):
        (WebChromeClient::updateBackingStore):
        * WebFrame.cpp:
        (kit): Null-check the frame parameter.
        (core): Added two overloads of this.
        (WebFrame::DOMDocument): Added argument checking.
        (WebFrame::currentForm):
        (WebFrame::loadRequest):
        (WebFrame::loadData):
        (WebFrame::dataSource): Added argument checking, and return E_FAIL if the dataSource is null.
        (WebFrame::provisionalDataSource): Ditto.
        (WebFrame::stopLoading):
        (WebFrame::reload):
        (WebFrame::parentFrame):
        (WebFrame::renderTreeAsExternalRepresentation): Added argument checking.
        (WebFrame::firstLayoutDone): Ditto.
        (WebFrame::loadType): Ditto.
        (WebFrame::invalidate):
        (WebFrame::setTextSizeMultiplier):
        (WebFrame::inViewSourceMode): Added argument checking, and changed to return an HRESULT.
        (WebFrame::setInViewSourceMode): Changed to return an HRESULT.
        (WebFrame::searchForLabelsBeforeElement): Added argument checking.
        (WebFrame::matchLabelsAgainstElement): Ditto.
        (WebFrame::frameLoaderDestroyed): Zero out the Frame pointer because the Frame is being destroyed.
        (WebFrame::createFrame):
        (WebFrame::loadURLIntoChild): Added some assertions.
        (WebFrame::dispatchWillSubmitForm):
        (WebFrame::frameLoadCompleted):
        (WebFrame::receivedData):
        (WebFrame::setUpPolicyListener):
        (WebFrame::receivedPolicyDecision):
        (WebFrame::dispatchDecidePolicyForMIMEType):
        (WebFrame::dispatchDecidePolicyForNewWindowAction):
        (WebFrame::dispatchDecidePolicyForNavigationAction):
        (WebFrame::dispatchCreatePage):
        (WebFrame::createPlugin):
        (WebFrame::redirectDataToPlugin):
        (WebFrame::createJavaAppletWidget):
        (WebFrame::windowObjectCleared):
        (WebFrame::setPrinting):
        (WebFrame::setInPrintingMode):
        (WebFrame::computePageRects):
        (WebFrame::getPrintedPageCount): Zero out the out parameter before proceeding.
        (WebFrame::spoolPages):
        (WebFrame::forceLayoutWithPageWidthRange):
        * WebFrame.h:
        * WebView.cpp:
        (WebView::paint): Silently fail on a null Frame, because this method could be called at any time.
        (WebView::mouseWheel): Ditto.
        (WebViewWndProc): Ditto.
        (WebView::inViewSourceMode): Return whatever WebFrame::setInViewSourceMode returns.
        (WebView::setInViewSourceMode): Ditto.
        (WebView::setCustomTextEncodingName): Replaced check for a null
        FrameLoader with a check for a null Frame, which is equivalent but, as
        a bonus, won't crash.
        (WebView::stringByEvaluatingJavaScriptFromString):
        (WebView::elementAtPoint): Added argument checking.
        (WebView::selectedText): Ditto.
        (WebView::centerSelectionInVisibleArea):

2007-02-19  Adam Roben  <aroben@apple.com>

        Build fix.

        * WebFrame.cpp:
        (WebFrame::computePageRects):

2007-02-18  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver.

        - Adapt for Lars's patch to clean up Frame

        * WebChromeClient.cpp:
        (WebChromeClient::tabsToLinks):
        (WebChromeClient::windowResizerRect):
        (WebChromeClient::addToDirtyRegion):
        (WebChromeClient::scrollBackingStore):
        (WebChromeClient::updateBackingStore):
        * WebChromeClient.h:
        * WebEditorClient.cpp:
        (WebEditorClient::shouldChangeSelectedRange):
        (WebEditorClient::textFieldDidBeginEditing):
        (WebEditorClient::textFieldDidEndEditing):
        (WebEditorClient::textDidChangeInTextField):
        (WebEditorClient::doTextFieldCommandFromEvent):
        (WebEditorClient::textWillBeDeletedInTextField):
        (WebEditorClient::textDidChangeInTextArea):
        * WebEditorClient.h:
        * WebElementPropertyBag.cpp:
        (WebElementPropertyBag::Read):
        * WebFrame.cpp:
        (kit):
        (WebFrame::initWithWebFrameView):
        (WebFrame::searchForLabelsBeforeElement):
        (WebFrame::matchLabelsAgainstElement):
        (WebFrame::createPlugin):
        (WebFrame::createJavaAppletWidget):
        (WebFrame::computePageRects):
        (WebFrame::getPrintedPageCount):
        (WebFrame::spoolPages):
        * WebFrame.h:
        * WebView.cpp:
        (WebView::handleEditingKeyboardEvent):
        (WebView::keyDown):
        (WebView::generateSelectionImage):
        * WebView.h:

2007-02-18  Ada Chan  <adachan@apple.com>

        Reviewed by Adam.
        
        Move app text controls to use webview

        * DOMCoreClasses.cpp:
        (DOMNode::parentNode): implemented
        (DOMElement::blur): implemented
        * Interfaces/IWebUIDelegatePrivate.idl: added API for focus/blur notifications
        * WebKit.vcproj/WebKit.def: added DrawTextAtPoint
        * WebKit.vcproj/WebKit.vcproj: added WebKitGraphics.h/cpp
        * WebKit.vcproj/WebKit_debug.def: added DrawTextAtPoint
        * WebKitGraphics.cpp: Added.
        (DrawTextAtPoint): calls WebCoreDrawTextAtPoint to render text
        * WebKitGraphics.h: Added.
        * WebView.cpp:
        (WebViewWndProc): notify setfocus and killfocus through IWebUIDelegatePrivate delegate.
        (WebView::unmarkAllTextMatches): added null check

2007-02-18  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adam.

        Stubs to keep the build going

        * WebDragClient.cpp:
        (WebDragClient::willPerformDragSourceAction):
        (WebDragClient::startDrag):
        (WebDragClient::createDragImageForLink):
        * WebDragClient.h:

2007-02-17  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam.

        <rdar://problem/4918821> Find: clicking on the webview does not hide findoverlay
        <rdar://problem/4956428> Find: Showing/hiding the Find banner should not push the page contents down when possible

        * Interfaces/IWebViewPrivate.idl: Added scrollBy, visibleContentRect
        * WebView.cpp:
        (WebView::scrollOffset): Add null check
        (WebView::scrollBy): Added so we can scroll a webview easily (matches scroll position getter here)
        (WebView::visibleContentRect):  Added so we can size find overlay appropriately (not including scroll bars)
        * WebView.h: Added scrollBy, visibleContentRect

2007-02-17  Adele Peterson  <adele@apple.com>

        Reviewed by Hyatt.

        Fix for <rdar://problem/5006194> Caret is not revealed when a newline is entered into a textarea

        * WebView.cpp: (WebView::handleEditingKeyboardEvent):
        Use shared code in Editor class to insertParagraphSeparator (or insertLineBreak for plain text).
        This will also reveal the selection properly.

2007-02-16  Anders Carlsson  <acarlsson@apple.com>

        Build fixes.
        
        * WebDownload.cpp:
        (WebDownload::init):
        (WebDownload::initWithRequest):

2007-02-15  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam.
        
        <rdar://problem/5001181> Crash: autofilling empty page
        
        Return an error from WebFrame::DOMDocument if there's no document

        * WebFrame.cpp:
        (WebFrame::DOMDocument): null document now maps to E_FAIL

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

        Reviewed by Adam

        <rdar://4778394> - Save scroll position in the back/forward list
        
        * WebFrame.cpp:
        (WebFrame::restoreViewState):  Renamed, as scroll position was pushed to WebCore
        (WebFrame::saveViewStateToItem):  Ditto
        * WebFrame.h:

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

        Reviewed by Anders.

        Fix <rdar://problem/4968731> Printing scales frames to page width
        instead of doing a layout at that width

        * Interfaces/IWebFramePrivate.idl: Added setInPrintingMode method.
        * WebFrame.cpp:
        (WebFrame::WebFrame): Initialize new member.
        (printerRect): New helper function.
        (WebFrame::setPrinting): Ported from WebHTMLView.
        (WebFrame::setInPrintingMode): Implemented.
        (WebFrame::computePageRects): Changed to store the page rects.
        (WebFrame::getPrintedPageCount): Added an ASSERT and updated for change to computePageRects.
        (WebFrame::spoolPages): Use the stored page rects, and set mediaBox's
        size using the print rect instead of the page rect so we will scale the
        pages to the full width of the print DC.
        (WebFrame::forceLayoutWithPageWidthRange): Ported from WebFrameBridge.
        * WebFrame.h: Updated declarations.

2007-02-15  Lou Amadio  <lamadio@apple.com>

        Reviewed by Steve.

        <rdar://problem/4945799> CGText: should use correct mechanism to set font smoothing style
        
        * WebKit.vcproj/WebKit.vcproj:
        * WebPreferences.cpp:
        (WebPreferences::setFontSmoothing):
        * WebView.cpp:
        (WebViewWndProc):

2007-02-13  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam.
        
        <rdar://problem/4950378> AddressBook autofill doesn't fill rest of form when tabbing out of a completed field
        
        Send tab keypresses to IWebFormDelegate::doCommandBySelector.

        * WebEditorClient.cpp:
        (WebEditorClient::handleKeyPress): Call doTextFieldCommandFromEvent if we get a tab keypress

2007-02-12  Ada Chan  <adachan@apple.com>

        Reviewed by Steve.
        
        Also, checked in a fix in WebContextMenuClient that Adam made on my machine, reviewed by me.

        <rdar://4952715> Events not being passed from WebCore/WebKit up through IWebForm::doCommandBySelector
        Inform form delegate about delete key press.
        
        DOM event fixes:
        - Removed DOMEventTarget class.
        - IDOMEventTarget no longer extends IDOMObject
        - DOMNode now implements IDOMEventTarget
        - DOMEvent::CoCreateInstance creates the correct subclasses
        of DOMEvents based on the type of event
        - Added IDOMDocumentEvent interface, which DOMDocument implements.
        - Fixed the out parameter in IDOMUIEvent::view to be IDOMWindow**
        
        Implemented DOMHTMLDocument::body and DOMHTMLElement::setInnerText.

        * DOMCoreClasses.cpp:
        (DOMNode::addEventListener): added as DOMNode now needs to implement IDOMEventTarget
        (DOMNode::removeEventListener): ditto above
        (DOMNode::dispatchEvent): ditto above
        (DOMDocument::QueryInterface): DOMDocument now also implements IDOMDocumentEvent
        (DOMDocument::createEvent): added as DOMDocument implements IDOMDocumentEvent
        (DOMElement::focus): implemented
        * DOMCoreClasses.h:
        * DOMEventsClasses.cpp:
        (DOMEvent::DOMEvent): The data member m_event is now a RefPtr, and the WebCore::Event is now
        passed into the constructor via a PassRefPtr.
        (DOMEvent::~DOMEvent): No longer need to deref m_event since we are using a RefPtr.
        (DOMEvent::createInstance): instantiate the correct DOMEvent subclass based on event type.
        (DOMEvent::QueryInterface): be able to QI IID_DOMEvent, which returns back the DOMEvent type.
        (DOMUIEvent::view): fixed the API
        (DOMKeyboardEvent::ctrlKey): call .get() on RefPtr
        (DOMKeyboardEvent::shiftKey): ditto above
        (DOMKeyboardEvent::altKey): ditto above
        (DOMKeyboardEvent::metaKey): ditto above
        (DOMKeyboardEvent::altGraphKey): ditto above
        (DOMMouseEvent::ctrlKey): ditto above
        (DOMMouseEvent::shiftKey): ditto above
        (DOMMouseEvent::altKey): ditto above
        (DOMMouseEvent::metaKey): ditto above
        * DOMEventsClasses.h:
        (DOMEvent::coreEvent): Added an API to get the WebCore::Event out of a DOMEvent.  Used in DOMNode::dispatchEvent.
        (DOMUIEvent::DOMUIEvent): made public so it can be called in DOMEvent::createInstance
        (DOMKeyboardEvent::DOMKeyboardEvent): ditto above
        (DOMKeyboardEvent::view): fixed API
        (DOMMouseEvent::DOMMouseEvent): made public so it can be called in DOMEvent::createInstance
        (DOMMouseEvent::view): fixed API
        (DOMMutationEvent::DOMMutationEvent): made public so it can be called in DOMEvent::createInstance
        (DOMOverflowEvent::DOMOverflowEvent): made public so it can be called in DOMEvent::createInstance
        (DOMWheelEvent::DOMWheelEvent): made public so it can be called in DOMEvent::createInstance
        (DOMWheelEvent::view): fixed API
        * DOMHTMLClasses.cpp:
        (DOMHTMLDocument::body):
        (DOMHTMLElement::setInnerText):
        * Interfaces/DOMEvents.idl: IDOMEventTarget no longer extends IDOMObject.  Added IDOMDocumentEvent.
        * WebContextMenuClient.cpp:
        (WebContextMenuClient::getCustomMenuFromDefaultItems): check for error from calling contextMenuItemsForElement.
        * WebFrame.cpp:
        (WebFrame::textWillBeDeletedInTextField): call form delegate callback doCommandBySelector with VK_BACK 
        when deleting text.

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

        Fixing line endings.

        * WebResource.cpp:
        * WebResource.h:

2007-02-10  Adam Roben  <aroben@apple.com>

        Reviewed by Steve.

        Fix <rdar://problem/4989705> Loading eBay puts many items into back list

        The bug was that WebFrame::createFrame was calling loadRequest on the
        new child frame, which would initiate a load of FrameLoadTypeStandard,
        when in fact we wanted to do a FrameLoadTypeInternal load. I ported
        -[WebFrame _loadURL:referrer:intoChild:] to WebFrame, which contains
        the logic we need.

        * WebFrame.cpp:
        (WebFrame::createFrame): Use a COMPtr to manage the new WebFrame, and
        call loadURLIntoChild instead of just calling loadRequest.
        (WebFrame::loadURLIntoChild): Ported from Mac WebFrame.
        * WebFrame.h: Added declaration.

2007-02-09  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Adam, Steve.
        
        - fixed <rdar://problem/4976975> Need WEbKit API to revtrieve current or first frame and form from a WebView

        * Interfaces/IWebFrame.idl: added currentForm
        * Interfaces/IWebView.idl: added focusedFrame
        * WebFrame.cpp:
        (WebFrame::currentForm): Get the "current" form for a frame,
        as determined by WebCore::Frame
        * WebFrame.h:
        * WebView.cpp:
        (WebView::focusedFrame): Get the currently focused frame
        (via FocusController).
        * WebView.h:

2007-02-09  Alice Liu  <alice.liu@apple.com>

        Reviewed by Brady and Adam.

        Fixed <rdar://4986194> Typing in content editable body does not automatically scroll to reveal cursor
        fix depends on corresponding fix in WebCoreWin

        * WebView.cpp:
        (WebViewWndProc):
        call the editor to handle inserting text and scrolling/focus changes

2007-02-09  John Sullivan  <sullivan@apple.com>

        Reviewed by Beth

        - WebKitWin part of fix for radar 4939636, problems with context menu items and binaries linked
          against WebKit 2.0.

        * Interfaces/IWebUIDelegate.idl:
        bumped enum value for new SPI tags to match change in WebCore/WebKit

2007-02-08  Alice Liu  <alice.liu@apple.com>

        Reviewed by Adam.

        Fixed <rdar://4920436> Find: Regression: Find banner does not select in orange on pages with frame

        * WebView.cpp:
        (WebView::searchFor):
        Ever since 11396, the widget no longer handles frame focus changes.
        This is now the page's focus controller responsibility

2007-02-07  Brady Eidson  <beidson@apple.com>

        Reviewed by Steve, Ada, Darin, and Adam
        
        <rdar://problem/4964763> - Download resume support
        
        Note I did my work with a ToT CFNetwork.  
        This will compile on stock CFNetwork, but will not function until they submit resume support.
        
        * Interfaces/IWebDownload.idl:  Reworked the API a bit
        
        * MarshallingHelpers.cpp:
        (MarshallingHelpers::PathStringToFileCFURLRef):
        (MarshallingHelpers::FileCFURLRefToPathString):
        * MarshallingHelpers.h:

        * WebDownload.cpp:
        (WebDownload::initToResumeWithBundle): The app needs simply to pass in a bundle path to resume it
        (WebDownload::cancelForResume): Cancel the download, writing out the resume data
        (WebDownload::bundlePathForTargetPath): Helper for the app
        (WebDownload::setDestination): Cache the destination inside the WebDownload
        (WebDownload::didCreateDestination): Hide the bundle distinction from the app
        (WebDownload::didFinish): Hide the bundle distinction from the app
        (createResumeDataFromBundle): Extract the resume data from the bundle
        (appendResumeDataToBundle): Add the resume data to the bundle
        * WebDownload.h:

2007-02-08  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        <rdar://problem/4972772>
        Implement IWebResource::Data.
        
        <rdar://problem/4972777>
        Implement IWebDataSource::subresourceForURL.
        
        * MemoryStream.cpp:
        (MemoryStream::MemoryStream):
        (MemoryStream::createInstance):
        (MemoryStream::Clone):
        * MemoryStream.h:
        Remove notion of buffer owner, it's not needed now that the buffer itself is reference counted.
        
        * WebDataSource.cpp:
        (WebDataSource::subresourceForURL):
        Implement this.
                
        * WebKit.vcproj/WebKit.vcproj:
        Add WebResource.cpp and WebResource.h
        
        * WebResource.cpp: Added.
        (WebResource::WebResource):
        (WebResource::~WebResource):
        (WebResource::createInstance):
        (WebResource::QueryInterface):
        (WebResource::AddRef):
        (WebResource::Release):
        (WebResource::initWithData):
        (WebResource::data):
        (WebResource::URL):
        (WebResource::MIMEType):
        (WebResource::textEncodingName):
        (WebResource::frameName):
        * WebResource.h: Added.
        
        * WebView.cpp:
        (WebView::formDelegate):
        Return E_FAIL if there's no form delegate.

2007-02-08  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        Add shouldInterruptJavaScript to the API.
        
        * Interfaces/IWebUIDelegatePrivate.idl:
        * WebChromeClient.cpp:
        (WebChromeClient::addMessageToConsole):
        (WebChromeClient::shouldInterruptJavaScript):

2007-02-07  Anders Carlsson  <acarlsson@apple.com>

        * WebChromeClient.cpp:
        * WebChromeClient.h:
        Build fix.
        
2007-02-06  Alice Liu  <alice.liu@apple.com>

        Reviewed by Maciej.

        Fix for <rdar://4973323> PageUp/PageDown don't move the caret in textareas

        * WebView.cpp:
        (WebView::keyDown):
        added key entry for function to scroll by page and move 
        caret in scrolling editable regions

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

        Reviewed by Ada and Oliver.
        
        Add some GDI object logging to help catch leaks.

        * WebFrame.cpp:
        (WebFrame::layoutIfNeeded):
        * WebView.cpp:
        (WebView::addToDirtyRegion):
        (WebView::scrollBackingStore):
        (WebView::updateBackingStore):
        (WebView::paint):
        (WebView::paintIntoBackingStore):
        (WebView::paintIntoWindow):

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

        Rubberstamped by Adam
        
        Added #include "config.h" to 3 files that didn't have it before
        I was tipped off when some work I was doing resulted in these 3 files
        trying to use the wrong MAX() - YET AGAIN...

        * CFDictionaryPropertyBag.cpp:
        * MarshallingHelpers.cpp:
        * WebHistory.cpp:

2007-02-05  Ada Chan  <adachan@apple.com>

        Reviewed by Anders.
        
        <rdar://4945519> Crash when back/forward buttons are clicked several times
        Clear loader's previous history item when frame load is completed (got that code from the mac side).

        * WebFrame.cpp:
        (WebFrame::frameLoadCompleted):

2007-02-04  Ada Chan  <adachan@apple.com>

        Reviewed by Steve.
        
        <rdar://4946475> Private browsing is not working correctly
        Implemented FrameLoaderClient::privateBrowsingEnabled().

        * WebFrame.cpp:
        (WebFrame::privateBrowsingEnabled):

2007-02-04  Alice Liu  <alice.liu@apple.com>

        Reviewed by Steve.

        Fix some memory leaks.  This fixes WebFrame leak as well. 
        Can be considered a partial fix for <rdar://4974495> Boomer leaks while running HTML iBench

        * WebActionPropertyBag.cpp:
        (WebActionPropertyBag::WebActionPropertyBag):
        * WebDataSource.cpp:
        (WebDataSource::representation):
        * WebURLResponse.cpp:
        (:m_refCount):

2007-02-04  Adam Roben  <aroben@apple.com>

        Reviewed by Steve.

        Fix <rdar://problem/4972498> REGRESSION: Crash while closing View Source window

        * WebView.cpp:
        (WebView::WebView): Initialize new member.
        (WebViewWndProc): Set flag when we receive WM_DESTROY, and don't handle
        WM_SIZE if that flag is true.
        (WebView::mainFrame): Added argument check.
        * WebView.h:
        (WebView::setIsBeingDestroyed): Added.
        (WebView::isBeingDestroyed): Added.

2007-02-04  Adam Roben  <aroben@apple.com>

        Reviewed by Hyatt.

        Fix <rdar://problem/4968183> Cross-window frame targeting doesn't work

        * Interfaces/IWebView.idl: Pass RECT by value.
        * WebView.cpp:
        (WebView::initWithFrame): Uses the passed-in RECT for the frame, and
        sets the frame/group names.
        * WebView.h: Updated declaration.

2007-02-03  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam.
        
        <rdar://problem/4930947> Regression: History is not saved when boomer window is closed.
        
        Fix boolean test causing lost history regression.

        * WebHistoryItem.cpp:
        (WebHistoryItem::hasURLString): isEmpty returns true if there is NO url, not if there is one.

2007-02-02  Alice Liu  <alice.liu@apple.com>

        Reviewed by Maciej.

        Fixed <rdar://4956286> Find: Deleting all text in the Find banner search field should clear the page's selection

        * Interfaces/IWebView.idl:
        * WebView.cpp:
        (WebView::clearSelection):
        * WebView.h:
            Added a clearSelection function to webview so the findbanner can call it. 

2007-02-02  Adam Roben  <aroben@apple.com>

        Reviewed by Anders.

        Fix a crash when running the PLT.

        * WebView.cpp:
        (WebView::initWithFrame):
            Added assertions to make catching this easier.

2007-02-01  Ada Chan  <adachan@apple.com>

        Reviewed by Anders.
        
        Forgot to assign document to 0 in case of failure in WebView::mainFrameDocument().

        * WebView.cpp:
        (WebView::mainFrameDocument):

2007-02-01  Ada Chan  <adachan@apple.com>

        Reviewed by Steve, Geoff.
        
        <rdar://4969341> Regression: crash: when Resetting Safari
        <rdar://4953390> Closing my two open boomer windows produced a crash
        Fixed crash when closing second window and doing the close 
        all safari window option in Reset Safari.

        * WebFrame.cpp:
        WebFramePrivate has a pointer to frameView but does not hold a reference
        to it.  The frame holds a ref to the frameView anyway, so it's safest to get
        the frameView through the frame.  The crash happened because frame already has
        cleared out its frameView but WebFrame was still accessing the old stale frameView
        through that data member in WebFramePrivate.
        (WebFrame::WebFramePrivate::m_policyFunction):
        (WebFrame::WebFramePrivate::frameView):
        (WebFrame::initWithWebFrameView):
        (WebFrame::layoutIfNeeded):
        (WebFrame::hasFrameView):
        * WebView.cpp:
        (WebView::paintIntoBackingStore): bail if frameView is null.
        (WebView::setHostWindow): don't set the view window's parent to 0.
        It'll end up creating a standalone window.

2007-02-01  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        <rdar://problem/4969348>
        REGRESSION: Crash loading pdf
        
        * WebView.cpp:
        (WebView::canShowMIMEType):
        Return true if the MIME type can be handled by a plug-in.

2007-02-01  Adam Roben  <aroben@apple.com>

        Reviewed by Steve.

        Fix <rdar://problem/4849601> Implement printing of individual subframes

        This just moves some functions from IWebViewPrivate to IWebFramePrivate.

        * Interfaces/IWebFramePrivate.idl: Added declarations.
        * Interfaces/IWebViewPrivate.idl: Removed declarations.
        * WebFrame.cpp: Added functions from WebView.cpp.
        (WebFrame::computePageRects):
        (WebFrame::getPrintedPageCount):
        (WebFrame::spoolPages):
        * WebFrame.h: Added declarations.
        * WebView.cpp: Moved functions to WebFrame.cpp.
        * WebView.h: Removed declarations.

2007-01-31  Ada Chan  <adachan@apple.com>

        Reviewed by Adam.
        
        Adam and I found a missing retain on WebFrame::setUpPolicyListener().  The mac
        code returns a RefPtr which retains it, but we are returning the raw pointer.
        Changed the code to return a COMPtr.  Without this change, loading bogus urls
        will crash.

        * WebFrame.cpp:
        (WebFrame::dispatchWillSubmitForm):
        (WebFrame::setUpPolicyListener):
        (WebFrame::dispatchDecidePolicyForMIMEType):
        (WebFrame::dispatchDecidePolicyForNewWindowAction):
        (WebFrame::dispatchDecidePolicyForNavigationAction):
        * WebFrame.h:

2007-01-31  Ada Chan  <adachan@apple.com>

        Reviewed by Anders.
        
        Implement WebView::mainFrameDocument.

        * WebView.cpp:
        (WebView::mainFrameDocument):

2007-01-31  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Ada.
        
        Fixes to BSTR handling required for username/password autofill.

        * WebURLProtectionSpace.cpp:
        (WebURLProtectionSpace::authenticationMethod): Return BSTRs instead of bare LPCTSTRs
        (coreScheme): Compare against BSTRs
        (WebURLProtectionSpace::initWithHost): Compare against BSTRs
        (WebURLProtectionSpace::protocol): Return BSTRs instead of bare LPCTSTRs

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

        Patch by Anders
        Reviewed and landed by Brady

        Fixes <rdar://problem/4889160>
        If there's no backing store bitmap, don't try to update it!
        
        * WebView.cpp:
        (WebView::updateBackingStore):

2007-01-30  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Lou.

        Checkpoint of <rdar://problem/4712459> Account/Password forms autofill

        Implemented dependencies in WebKit for account/password autofill.

        * DOMCoreClasses.cpp:
        (DOMElement::isEqual): Fixed crash if other ele is 0
        (DOMElement::isFocused):  Added
        * DOMCoreClasses.h:
        * DOMHTMLClasses.cpp:
        (DOMHTMLCollection::DOMHTMLCollection): Added
        (DOMHTMLCollection::createInstance): Added
        (DOMHTMLCollection::length): Implemented
        (DOMHTMLCollection::item): Implemented
        (DOMHTMLDocument::forms): Implemented
        * DOMHTMLClasses.h:
        * Interfaces/DOMPrivate.idl: Added isFocused
        * Interfaces/WebKit.idl: Added WebURLProtectionSpace
        * WebKitClassFactory.cpp:
        (WebKitClassFactory::CreateInstance): Added CLSID_WebURLProtectionSpace
        * WebKitDLL.cpp:
        (DllGetClassObject): Added CLSID_WebURLProtectionSpace
        * WebURLAuthenticationChallenge.cpp:
        (WebURLAuthenticationChallenge::initWithProtectionSpace): Use CLSID_WebURLProtectionSpace instead of IID_WebURLProtectionSpace
        * WebURLProtectionSpace.cpp:
        (WebURLProtectionSpace::QueryInterface): Use CLSID_WebURLProtectionSpace instead of IID_WebURLProtectionSpace
        * WebURLProtectionSpace.h:

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

        Reviewed by Oliver

        * WebDownload.cpp:
        (WebDownload::init): Use RetainPtr.adopt(), and create the CFURLDownload after we store the request
        (WebDownload::initWithRequest): Ditto

2007-01-29  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Adam & Steve.
        
        - hook up new cross-platform data-loading code
        - fixed <rdar://4910106> - Need to support loadData and loadHTMLString

        * WebFrame.cpp:
        (WebFrame::loadData): add a SharedBuffer overload, and implement
        IStream* version using that.
        (WebFrame::loadHTMLString): implement using loadData
        * WebFrame.h: prototype new method

2007-01-29  Adele Peterson  <adele@apple.com>

        Reviewed by Darin. 

        * WebEditorClient.cpp:
        (WebEditorClient::handleKeyPress): Removed EventTargetNode paramenter. 
        * WebEditorClient.h:

2007-01-29  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Oliver.

        <rdar://problem/4892067>
        DnD a font file in Boomer locks it up.

        Create a drop target helper so we get snazzy drag images.

        * WebView.cpp:
        (WebView::WebView):
        (WebView::DragEnter):
        (WebView::DragOver):
        (WebView::DragLeave):
        (WebView::Drop):
        * WebView.h:

2007-01-29  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adam.

        Basic implementation of new dragclient method

        * WebDragClient.cpp:
        (WebDragClient::dragSourceActionMaskForPoint):
        * WebDragClient.h:

2007-01-29  Maciej Stachowiak  <mjs@apple.com>

        - fix build

        * WebFrame.h:

2007-01-29  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Mark.
        
        <rdar://problem/4910106> Need to support loadData and loadHTMLString
        
        I added the underlying support, but did not turn on the new cross-platform versions yet as I've
        not had sufficient time to test.

        * WebDocumentLoader.cpp:
        (WebDocumentLoader::WebDocumentLoader):
        * WebDocumentLoader.h:
        * WebFrame.cpp:
        (WebFrame::createDocumentLoader):
        * WebFrame.h:

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

        Reviewed by Oliver.

        Fix <rdar://problem/4944863> WebError::localizedDescription needs to be implemented.

        This was so simple, I don't know why I didn't do this before.

        * WebError.cpp:
        (WebError::localizedDescription): Implemented.

2007-01-26  Steve Falkenburg  <sfalken@apple.com>

        B&I build fix

        * WebKit.vcproj/WebKit.vcproj:

2007-01-26  Adam Roben  <aroben@apple.com>

        Reviewed by Oliver.

        Engine side of fix for <rdar://problem/4958371> Boomer leaks WebViews

        The problem was that we were calling RevokeDragDrop after our view
        window had been destroyed, RevokeDragDrop wouldn't call Release on us.

        Fix <rdar://problem/4958382> WebViews leak their HWND if no host window is set

        * WebView.cpp:
        (WebView::~WebView): Call DestroyWindow if our view window hasn't been
        destroyed yet.
        (WebViewWndProc): Added an ASSERT, and added call to revokeDragDrop
        when handling WM_DESTROY.
        (WebView::initWithFrame): Call our own registerDragDrop.
        (WebView::close): Removed call to RevokeDragDrop. At this point our
        window has been destroyed, so it's too late to do this.
        (WebView::registerDragDrop): Added.
        (WebView::revokeDragDrop): Added.
        * WebView.h: Added declarations.

2007-01-26  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.
        
        * WebKitDLL.cpp:
        Add WebURLRequest entries to the big array.

2007-01-26  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        <rdar://problem/4923845>
        Implement IWebURLRequest.
        
        * Interfaces/WebKit.idl:
        * WebKitClassFactory.cpp:
        (WebKitClassFactory::CreateInstance):
        * WebKitDLL.cpp:
        (DllGetClassObject):
        * WebMutableURLRequest.cpp:
        (WebMutableURLRequest::WebMutableURLRequest):
        (WebMutableURLRequest::createInstance):
        (WebMutableURLRequest::createImmutableInstance):
        (WebMutableURLRequest::QueryInterface):
        * WebMutableURLRequest.h:

2007-01-26  Steve Falkenburg  <sfalken@apple.com>

        B&I build fix

        * WebKit.vcproj/WebKit.vcproj:

2007-01-25  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        Don't pretend that we're an IWebHTTPURLResponse when we're not.
        
        * WebURLResponse.cpp:
        (WebURLResponse::QueryInterface):
        (WebURLResponse::allHeaderFields):
        (WebURLResponse::localizedStringForStatusCode):
        (WebURLResponse::statusCode):
        
        * WebView.cpp:
        (WebView::canShowMIMEType):
        Implement this.

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

        Reviewed by Anders

        Took one of Adam's comments to heart, allow ::start() and others to E_FAIL
        
        * WebDownload.cpp:
        (WebDownload::start): NULL check m_download
        (WebDownload::cancel):  Ditto
        (WebDownload::deletesFileUponFailure):  Yup
        (WebDownload::setDeletesFileUponFailure):  Uh huh!
        (WebDownload::setDestination):  Ooo, ooo - me too!

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

        Reviewed by Adam

        Make downloads no longer start themselves
        
        * Interfaces/IWebDownload.idl:
        * WebContextMenuClient.cpp:
        (WebContextMenuClient::downloadURL):
        * WebDownload.cpp:
        (WebDownload::init):
        (WebDownload::initWithRequest):
        (WebDownload::start):
        * WebDownload.h:

2007-01-25  Ada Chan  <adachan@apple.com>

        WebDownload.cpp reviewed by Brady.
        WebFrame.cpp reviewed by Anders.

        * WebDownload.cpp:
        (WebDownload::cancel): added null check
        * WebFrame.cpp:
        (WebFrame::dispatchDecidePolicyForMIMEType): fixed bug that we treated loading image urls as downloads.

2007-01-25  Adam Roben  <aroben@apple.com>

        Reviewed by Steve and Darin.

        Fix <rdar://problem/4940645> Implement WebError::domain

        Also added some error codes.

        * WebError.cpp:
        (WebError::domain): Implemented.
        (WebError::localizedDescription): Added a stub implementation.
        * WebFrame.cpp:
        (WebFrame::redirectDataToPlugin): Corrected uses of WebKitError* constants.
        * Interfaces/IWebError.idl:
            - Updated copyright.
            - Changed WebURLErrorDomain to "NSURLErrorDomain" to match what CFNet gives us.
            - Added all NSURLError* values as WebURLError*.
            - Added all WebKitError* values.
            - Added a POSIX error used by WebBrowser/SafariWin.
            - Added failingURL declaration.
        * Interfaces/IWebErrorPrivate.idl: Updated copyright.

2007-01-25  Adam Roben  <aroben@apple.com>

        Reviewed by Anders.

        Part of <rdar://problem/4855618> HTML-based load failure pages.

        * Interfaces/IWebError.idl: Added failingURL method declaration.
        * WebError.cpp:
        (WebError::failingURL): Implemented.
        * WebError.h: Updated for interface changes.
        * WebFrame.cpp:
        (WebFrame::loadHTMLString): New protected helper method called by
        IWebFrame::loadHTMLString and IWebFrame::loadAlternateHTMLString.
        (WebFrame::loadAlternateHTMLString): Calls loadHTMLString.
        * WebFrame.h: Added new declaration.

2007-01-25  Ada Chan  <adachan@apple.com>

        Reviewed by Maciej.
        
        Added init methods instead of doing all the initialization in the constructor.
        There was a lifetime issue with passing the WebDownload to delegate calls when
        its ref count is still 0.

        * WebDownload.cpp:
        (WebDownload::init):
        (WebDownload::createInstance):
        * WebDownload.h:

2007-01-24  Adele Peterson  <adele@apple.com>

        Reviewed by Brady and Oliver.

        Moved keyEvent method from FrameWin to EventHandler and updated
        call sites.  Now this method is shared with the mac.

        * WebView.cpp:
        (WebView::keyUp):
        (WebView::keyDown):

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

        Reviewed by Steve

        Added cancelling downloads and do it in the destructor
        
        * WebDownload.cpp:
        (WebDownload::~WebDownload):
        (WebDownload::cancel):

2007-01-24  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak, Steve Falkenberg, Adam Roben.
        
        Fixed 4946729 -- CFNetwork needs some JS API symbols.
        
        Added hack to compile JSStringRefCF symbols with WebKit, to avoid having to fork
        the JavaScriptCore project into the internal repository.

        * WebKit.vcproj/WebKit.def: Export the symbols.
        * WebKit.vcproj/WebKit.vcproj:

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

        Reviewed by Ada
        
        Added debug-only instrumentation to help track CFNetwork performance and hangs

        * WebDownload.cpp:
        (WebDownload::didStart):
        (WebDownload::didReceiveData):
        (WebDownload::didFinish):
        * WebDownload.h:

2007-01-24  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Lou.

        Checkpoint of <rdar://problem/4712469> Address Book forms autofill.
        
        Call through to the Frame to do autofill, after marshalling parameters to core types.

        * DOMHTMLClasses.cpp:
        (DOMHTMLInputElement::readOnly): Implemented
        (DOMHTMLInputElement::rectOnScreen): Implemented
        * WebFrame.cpp:
        (elementFromDOMElement): Added
        (WebFrame::currentForm): Added
        (WebFrame::searchForLabelsBeforeElement): Added
        (WebFrame::matchLabelsAgainstElement): Added
        * WebFrame.h:
        * WebHTMLRepresentation.cpp:
        (WebHTMLRepresentation::currentForm): Implemented

2007-01-24  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Maciej.

        * WebView.cpp:
        (WebViewWndProc):
        Don't send focus/blur events when the previous/newly focused window is a child of ours.

2007-01-24  Ada Chan  <adachan@apple.com>

        Forgot a null check.

        * WebDownload.cpp:
        (WebDownload::request):

2007-01-24  Ada Chan  <adachan@apple.com>

        Reviewed by Brady.
        
        More hookup of Downloads.
        
        - Implemented WebDownload::request().
        - Implemented accessors for download delegate in webview.

        * Interfaces/IWebDownload.idl:
        * Interfaces/IWebError.idl:
        * WebDownload.cpp:
        (WebDownload::WebDownload):
        (WebDownload::initWithRequest):
        (WebDownload::request):
        (WebDownload::willSendRequest):
        * WebDownload.h:
        * WebView.cpp:
        (WebView::setDownloadDelegate):
        (WebView::downloadDelegate):
        * WebView.h:

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

        Reviewed by Steve

        Initial hookup of Downloads
        
        - The default download delegate will let downloads operate for testing
          and for when clients forget to set their our download delegates.  
          It saves files to the desktop, and doesn't do anything else fancy
        * DefaultDownloadDelegate.cpp: Added.
        (DefaultDownloadDelegate::DefaultDownloadDelegate):
        (DefaultDownloadDelegate::~DefaultDownloadDelegate):
        (DefaultDownloadDelegate::sharedInstance):
        (DefaultDownloadDelegate::createInstance):
        (DefaultDownloadDelegate::QueryInterface):
        (DefaultDownloadDelegate::AddRef):
        (DefaultDownloadDelegate::Release):
        (DefaultDownloadDelegate::decideDestinationWithSuggestedFilename):
        (DefaultDownloadDelegate::didCancelAuthenticationChallenge):
        (DefaultDownloadDelegate::didCreateDestination):
        (DefaultDownloadDelegate::didFailWithError):
        (DefaultDownloadDelegate::didReceiveAuthenticationChallenge):
        (DefaultDownloadDelegate::didReceiveDataOfLength):
        (DefaultDownloadDelegate::didReceiveResponse):
        (DefaultDownloadDelegate::shouldDecodeSourceDataOfMIMEType):
        (DefaultDownloadDelegate::willResumeWithResponse):
        (DefaultDownloadDelegate::willSendRequest):
        (DefaultDownloadDelegate::didBegin):
        (DefaultDownloadDelegate::didFinish):
        * DefaultDownloadDelegate.h: Added.
        
        - Had to do some weird reordering of interface includes to make things compile...
          Ada watched through this one and was as bewildered as I by the compile errors, 
          but settled on the "do what makes it happy" philosophy
        * Interfaces/IWebDataSource.idl:
        * Interfaces/IWebDownload.idl:
        * Interfaces/IWebResourceLoadDelegate.idl:
               
        * Interfaces/WebKit.idl:  Added WebDownload CLSID

        * WebContextMenuClient.cpp:
        (WebContextMenuClient::downloadURL):  Actually download a file!

        * WebDownload.cpp: Added. Incomplete yet functional implementation of the 
          IWebDownload interface
        (WebDownload::WebDownload):
        (WebDownload::~WebDownload):
        (WebDownload::createInstance):
        (WebDownload::QueryInterface):
        (WebDownload::AddRef):
        (WebDownload::Release):
        (WebDownload::initWithRequest):
        (WebDownload::initWithResumeData):
        (WebDownload::canResumeDownloadDecodedWithEncodingMIMEType):
        (WebDownload::cancel):
        (WebDownload::deletesFileUponFailure):
        (WebDownload::request):
        (WebDownload::resumeData):
        (WebDownload::setDeletesFileUponFailure):
        (WebDownload::setDestination):
        
        - WebDownload acts as its own WebURLAuthenticationChallengeSender 
        (WebDownload::cancelAuthenticationChallenge):
        (WebDownload::continueWithoutCredentialForAuthenticationChallenge):
        (WebDownload::useCredential):
        
        - CFURLDownload callbacks
        (WebDownload::didStart):
        (WebDownload::willSendRequest):
        (WebDownload::didReceiveAuthenticationChallenge):
        (WebDownload::didReceiveResponse):
        (WebDownload::willResumeWithResponse):
        (WebDownload::didReceiveData):
        (WebDownload::shouldDecodeDataOfMIMEType):
        (WebDownload::decideDestinationWithSuggestedObjectName):
        (WebDownload::didCreateDestination):
        (WebDownload::didFinish):
        (WebDownload::didFail):
        
        - The following are all the raw C-function callbacks for CFURLDownload
        (didStartCallback):
        (willSendRequestCallback):
        (didReceiveAuthenticationChallengeCallback):
        (didReceiveResponseCallback):
        (willResumeWithResponseCallback):
        (didReceiveDataCallback):
        (shouldDecodeDataOfMIMETypeCallback):
        (decideDestinationWithSuggestedObjectNameCallback):
        (didCreateDestinationCallback):
        (didFinishCallback):
        (didFailCallback):
        * WebDownload.h: Added.
        
        * WebFrame.cpp:
        (WebFrame::dispatchDecidePolicyForMIMEType):  Temporary and minimal Policy decision that actually results in a download
        (WebFrame::download):  Actually download... in theory.  Blocked on CFNetwork for now
        
        - More CLSID voodoo
        * WebKit.vcproj/WebKit.vcproj:
        * WebKitClassFactory.cpp:
        (WebKitClassFactory::CreateInstance):
        * WebKitDLL.cpp:
        (DllGetClassObject):
        
        * WebKitLogging.cpp: Added. I needed these for downloads, and just kept the default channels from WebKitMac
        (initializeLogChannel):
        (WebKitInitializeLoggingChannelsIfNecessary):
        * WebKitLogging.h: Added.
        
        * WebView.cpp:
        (WebView::downloadDelegate):  Change ASSERT_NOT_REACHED() to LOG_NOIMPL() to not stop the app

2007-01-23  Steve Falkenburg  <sfalken@apple.com>

        Copy new CGPThreads DLL (build fix for new SDK).

        * WebKit.vcproj/WebKit.vcproj:

2007-01-23  Alice Liu  <alice.liu@apple.com>

        Reviewed by Brady.

        Fixed <rdar://4949278> cut/copy/paste not working in subframes

        * WebView.cpp:
        (WebView::cutEnabled):
        (WebView::copyEnabled):
        (WebView::pasteEnabled):
        (WebView::deleteEnabled):
        (WebView::editingEnabled):
        (WebView::deleteSelection):
        (WebView::copy):
        (WebView::cut):
        (WebView::paste):
        (WebView::copyURL):
        (WebView::delete_):
        get the focusedOrMainFrame() instead of mainFrame()

2007-01-23  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin.

        <rdar://problem/4919754>
        Boomer freezes after attempt to play video.
        
        * Interfaces/IWebError.idl:
        Add error code.
        
        * WebFrame.cpp:
        (WebFrame::redirectDataToPlugin):
        Cancel loading the main resource.
        
        (WebFrame::windowObjectCleared):
        Use toRef.

2007-01-23  Alice Liu  <alice.liu@apple.com>

        Reviewed Maciej.

        fixed <rdar://4923535> pressing shift-backspace inserts a bad character        
        fixed <rdar://4923536> shift-pageup/shift-pagedown do nothing in textareas

        * WebView.cpp:
        added to keyEntries an entry for the commands accounting for modifiers

2007-01-23  Adele Peterson  <adele@apple.com>

        Reviewed by Darin.
   
        Reorganized some event handling code for keyPress events to
        prepare for another fix.
        
        * WebEditorClient.cpp: (WebEditorClient::handleKeyPress): Added.
        * WebEditorClient.h: Removed unnecessary forward declarations.

2007-01-23  Anders Carlsson  <acarlsson@apple.com>

        Build fixes.
        
        * WebFrame.cpp:
        (WebFrame::createFrame):
        (WebFrame::createPlugin):
        (WebFrame::redirectDataToPlugin):
        (WebFrame::createJavaAppletWidget):
        (WebFrame::objectContentType):
        (WebFrame::overrideMediaType):
        (WebFrame::windowObjectCleared):
        * WebFrame.h:
        Move functions here from WebFrameLoaderWin in WebCore.

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

        Reviewed by Adam.

        Attaching the DragController logic to the WebView

        * Interfaces/IWebUIDelegate.idl:
          Fixed a couple of function definitions to use IDataObject instead of IDropSource

        * WebDragClient.cpp: Added.
        (WebDragClient::WebDragClient):
        (WebDragClient::actionMaskForDrag):
        (WebDragClient::willPerformDragDestinationAction):
        * WebDragClient.h: Added.
          DragClient implementation.

        * WebKit.vcproj/WebKit.vcproj:
        * WebView.cpp:
        (WebView::WebView):
        (WebView::initWithFrame):
        (dragOperationToDragCursor):
        (keyStateToDragOperation):
        (WebView::DragEnter):
        (WebView::DragOver):
        (WebView::DragLeave):
        (WebView::Drop):
          Set up and register WebView as an IDropTarget, and pass off 
          drag events to the DragController
        * WebView.h:
          Ditto

2007-01-22  Adam Roben  <aroben@apple.com>

        Reviewed by Anders, Brady, and Steve.

        WebKit part of <rdar://problem/4601321> HTTP Authentication Alerts

        Made WebURLCredential use a registered CLSID so the app can get instantiate it:

        * Interfaces/IWebURLAuthenticationChallenge.idl: Changed method name.
        * Interfaces/WebKit.idl: Added GUIDs for WebURLCredential.
        * WebKitClassFactory.cpp:
        (WebKitClassFactory::CreateInstance): Added case for WebURLCredential.
        * WebKitDLL.cpp: Added WebURLCredential and WebError (it was omitted
        from r11821).
        (DllGetClassObject):
        * WebURLAuthenticationChallenge.cpp:
        (WebURLAuthenticationChallenge::initWithProtectionSpace): Changed to
        use CLSID, and return the failing HRESULT.
        (WebURLAuthenticationChallenge::initWithAuthenticationChallenge):
        Changed to return the failing HRESULT.
        * WebURLAuthenticationChallengeSender.cpp:
        (WebURLAuthenticationChallengeSender::useCredential): Ditto.
        * WebURLCredential.cpp: Removed IID definition.
        (WebURLCredential::QueryInterface): Switched to use CLSID.
        (WebURLCredential::initWithUser): Updated method name.
        * WebURLCredential.h: Ditto.

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

        Updated strings not to be localized, added native line endings svn flag.

        * English.lproj/StringsNotToBeLocalized.txt:

2007-01-22  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Brady.

        * Interfaces/IWebError.idl:
        Clean up the IWebError interface.
        
        * Interfaces/WebKit.idl:
        * WebKitClassFactory.cpp:
        (WebKitClassFactory::CreateInstance):
        Make it possible for clients to create WebErrors.
        
        * WebError.cpp:
        (WebError::QueryInterface):
        (WebError::init):
        * WebError.h:
        * WebURLAuthenticationChallenge.cpp:
        (WebURLAuthenticationChallenge::initWithProtectionSpace):
        Get rid of IID_WebError and use CLSID_WebError instad.
        
        * WebView.cpp:
        (WebView::canHandleRequest):
        Return true for "about" URLs.
        
        (WebView::canHandleRequest):
        Add private COM method.
        
        (WebView::close):
        Reset the policy delegate.

2007-01-19  Ada Chan  <adachan@apple.com>

        Fixed build.

        Reviewed by Anders.
        Added IWebResourceLoadDelegatePrivate which has one method: didLoadResourceFromMemoryCache.

        * Interfaces/IWebResourceLoadDelegatePrivate.idl: Added.
        * WebFrame.cpp:
        (WebFrame::dispatchDidFinishDocumentLoad):
        * WebKit.vcproj/Interfaces.vcproj:
        * WebKit.vcproj/WebKitGUID.vcproj:

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

        Reviewed by Lou.
        
        Added mechanism for new callbacks, to try to avoid breaking the Windows build.

        * Interfaces/IWebFrameLoadDelegatePrivate.idl:
        * WebFrame.cpp:
        (WebFrame::dispatchDidFinishDocumentLoad):
        * WebFrame.h:

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

        Reviewed by Ada

        Much more realistic WebDownload interface that delegates will actually have to implement
        
        * Interfaces/IWebDownload.idl:

2007-01-18  Ada Chan  <adachan@apple.com>

        Reviewed by Steve.
        
        <rdar://4601522> Activity Window
        - Added some NSURL equivalent constants in IWebURLResponse.idl and IWebError.idl
        - Added IWebErrorPrivate.idl which contains some private error codes
        - Added IWebHTTPURLResponse interface which extends IWebURLResponse.  It has the
        same API as NSHTTPURLResponse.

        * Interfaces/IWebError.idl:
        * Interfaces/IWebErrorPrivate.idl: Added.
        * Interfaces/IWebHTTPURLResponse.idl: Added.
        * Interfaces/IWebResourceLoadDelegate.idl: fixed a typo in parameter name
        * Interfaces/IWebURLResponse.idl: added WebURLResponseUnknownLength
        * WebKit.vcproj/Interfaces.vcproj: for adding IWebErrorPrivate.idl and IWebHTTPURLResponse.idl
        * WebKit.vcproj/WebKitGUID.vcproj: for the new IID_IWebHTTPURLResponse
        * WebURLResponse.cpp:
        (WebURLResponse::QueryInterface): also returns the new IWebHTTPURLResponse interface
        (WebURLResponse::allHeaderFields): Added stub for IWebHTTPURLResponse::allHeaderFields.
        (WebURLResponse::localizedStringForStatusCode): Added stub for IWebHTTPURLResponse::localizedStringforStatusCode
        (WebURLResponse::statusCode): Implemented IWebHTTPURLResponse::statusCode.
        * WebURLResponse.h:

2007-01-19  Anders Carlsson  <acarlsson@apple.com>

        The obligatory build fix.
        
        * WebChromeClient.cpp:
        (WebChromeClient::runJavaScriptPrompt):

2007-01-18  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        * WebChromeClient.cpp:
        (WebChromeClient::runJavaScriptAlert):
        (WebChromeClient::runJavaScriptConfirm):
        (WebChromeClient::runJavaScriptPrompt):
        (WebChromeClient::setStatusbarText):
        * WebChromeClient.h:
        Add new ChromeClient methods.
        
        * WebFrame.cpp:
        (WebFrame::userAgent):
        (WebFrame::updateGlobalHistoryForReload):
        * WebFrame.h:
        Remove unused FrameWinClient functions.

2007-01-18  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        * WebView.cpp:
        (WebView::scrollBackingStore):
        Only try to scroll the backing store if it actually exists.

2007-01-18  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Lou and Adam.

        Call all policy, frame load and resource load delegate methods.
        
        * Interfaces/IWebPolicyDelegate.idl:
        Add some definitions needed.
        
        * WebActionPropertyBag.cpp: Added.
        (WebActionPropertyBag::WebActionPropertyBag):
        (WebActionPropertyBag::~WebActionPropertyBag):
        (WebActionPropertyBag::createInstance):
        (WebActionPropertyBag::QueryInterface):
        (WebActionPropertyBag::AddRef):
        (WebActionPropertyBag::Release):
        (isEqual):
        (findMouseEvent):
        (WebActionPropertyBag::Read):
        (WebActionPropertyBag::Write):
        * WebActionPropertyBag.h: Added.
        New class which wraps a NavigationAction in a property bag.
        
        * WebFrame.cpp:
        (WebFrame::dispatchWillSubmitForm):
        (WebFrame::clearUnarchivingState):
        (WebFrame::dispatchDecidePolicyForMIMEType):
        (WebFrame::dispatchDecidePolicyForNewWindowAction):
        (WebFrame::dispatchDecidePolicyForNavigationAction):
        (WebFrame::dispatchWillSendRequest):
        (WebFrame::dispatchDidFailLoading):
        * WebFrame.h:
        Dispatch correct delegate methods.
        
        * WebKit.vcproj/WebKit.vcproj:
        Add WebActionPropertyBag files.
        
        * WebURLResponse.cpp:
        (WebURLResponse::createInstance):
        Return 0 for null responses.
        
2007-01-18  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by John Sullivan

        * WebView.cpp:
        (WebView::searchFor):
        Build fix.

2007-01-17  Alice Liu  <alice.liu@apple.com>

        Added stubs to keep the boomer build from failing.

        * WebEditorClient.cpp:
        (WebEditorClient::didSetSelectionTypesForPasteboard):
        * WebEditorClient.h:
 
2007-01-17  Brady Eidson  <beidson@apple.com>

        Reviewed by Maciej

        Final hookup of HTTP Auth plumbing
        
        * WebFrame.cpp:
        (WebFrame::dispatchDidReceiveAuthenticationChallenge): Call to the ResourceLoadDelegate so the app 
          can handle the Auth request.  Fail gracefully if the delegate doesn't exist or fails
        (WebFrame::dispatchDidCancelAuthenticationChallenge):  Call to the Delegate so the app can cancel
          an in-progress challenge
        * WebURLAuthenticationChallenge.h:

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

        Reviewed by Steve Falkenburg

        Next round of plumbing for HTTP Auth, or as I like to call it:
        "Implementing platform dependent wrappers for my platform independent 
         wrappers which wrap platform dependent objects"
        
        *sigh*
        
        Also, not included in this ChangeLog, I changed the eol property to
        native on a handful of WebKitWin files who didn't have it set yet
        
        * Interfaces/IWebURLAuthenticationChallenge.idl: Added some string constants, nuked an unneeded 
          initializer from IWebCredential
          
        * WebError.cpp: Added QueryInterface for new GUID
        (WebError::resourceError): Added accessor to WebCore backer
        * WebError.h: Added GUID
        
        * WebKit.vcproj/WebKit.vcproj:
        
        * WebURLAuthenticationChallenge.cpp: Added.
        (WebURLAuthenticationChallenge::WebURLAuthenticationChallenge):
        (WebURLAuthenticationChallenge::~WebURLAuthenticationChallenge):
        (WebURLAuthenticationChallenge::createInstance):
        (WebURLAuthenticationChallenge::QueryInterface):
        (WebURLAuthenticationChallenge::AddRef):
        (WebURLAuthenticationChallenge::Release):
        (WebURLAuthenticationChallenge::initWithProtectionSpace):
        (WebURLAuthenticationChallenge::initWithAuthenticationChallenge):
        (WebURLAuthenticationChallenge::error):
        (WebURLAuthenticationChallenge::failureResponse):
        (WebURLAuthenticationChallenge::previousFailureCount):
        (WebURLAuthenticationChallenge::proposedCredential):
        (WebURLAuthenticationChallenge::protectionSpace):
        (WebURLAuthenticationChallenge::sender):
        (WebURLAuthenticationChallenge::authenticationChallenge):
        * WebURLAuthenticationChallenge.h: Added.
        
        * WebURLAuthenticationChallengeSender.cpp: Added.
        (WebURLAuthenticationChallengeSender::WebURLAuthenticationChallengeSender):
        (WebURLAuthenticationChallengeSender::~WebURLAuthenticationChallengeSender):
        (WebURLAuthenticationChallengeSender::createInstance):
        (WebURLAuthenticationChallengeSender::QueryInterface):
        (WebURLAuthenticationChallengeSender::AddRef):
        (WebURLAuthenticationChallengeSender::Release):
        (WebURLAuthenticationChallengeSender::cancelAuthenticationChallenge):
        (WebURLAuthenticationChallengeSender::continueWithoutCredentialForAuthenticationChallenge):
        (WebURLAuthenticationChallengeSender::useCredential):
        (WebURLAuthenticationChallengeSender::resourceHandle):
        * WebURLAuthenticationChallengeSender.h: Added.
        
        * WebURLCredential.cpp: Added.
        (WebURLCredential::WebURLCredential):
        (WebURLCredential::~WebURLCredential):
        (WebURLCredential::createInstance):
        (WebURLCredential::QueryInterface):
        (WebURLCredential::AddRef):
        (WebURLCredential::Release):
        (WebURLCredential::hasPassword):
        (WebURLCredential::initWithuser):
        (WebURLCredential::password):
        (WebURLCredential::persistence):
        (WebURLCredential::user):
        (WebURLCredential::credential):
        * WebURLCredential.h: Added.
        
        * WebURLProtectionSpace.cpp: Added.
        (WebURLProtectionSpace::WebURLProtectionSpace):
        (WebURLProtectionSpace::~WebURLProtectionSpace):
        (WebURLProtectionSpace::createInstance):
        (WebURLProtectionSpace::QueryInterface):
        (WebURLProtectionSpace::AddRef):
        (WebURLProtectionSpace::Release):
        (WebURLProtectionSpace::authenticationMethod):
        (WebURLProtectionSpace::host):
        (coreScheme): Helper for the init methods
        (WebURLProtectionSpace::initWithHost):
        (WebURLProtectionSpace::initWithProxyHost):
        (WebURLProtectionSpace::isProxy):
        (WebURLProtectionSpace::port):
        (WebURLProtectionSpace::protocol):
        (WebURLProtectionSpace::proxyType):
        (WebURLProtectionSpace::realm):
        (WebURLProtectionSpace::receivesCredentialSecurely):
        (WebURLProtectionSpace::protectionSpace):
        * WebURLProtectionSpace.h: Added.
        
        * WebURLResponse.cpp:  Added QueryInterface for new GUID
        (WebURLResponse::resourceResponse): Added accessor to WebCore backer
        * WebURLResponse.h:  Added GUID

2007-01-16  Alice Liu  <alice.liu@apple.com>

        Added stubs to keep the boomer build from failing.

        * WebEditorClient.cpp:
        (WebEditorClient::didWriteSelectionToPasteboard):
        * WebEditorClient.h:

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

        Reviewed by Adam.

        Fix for <rdar://problem/4874565> Draw context menus using CG

        Added new delegate calls to the UIDelegate to draw context menus 
        that match the context menus in the app.

        * Interfaces/IWebUIDelegate.idl: Added five new delegate calls. 
        They take care of asking if there is a custom menu implementation,  
        adding custom drawing data to the menu items and tracking the popup 
        in a custom way, measuring the items when it comes time to draw the 
        menus, actually drawing the items, and properly destroying the 
        custom data when the menu is destroyed.
        * WebView.cpp:
        (WebView::handleContextMenuEvent): This function now takes care of 
        popping up the menu after the event is dispatched through WebCore. 
        WebCore used to pop up the menu itself, but having WebKit pop up 
        the menu matches the Mac and allows up to get rid of two functions 
        on ContextMenu that are empty on the Mac. It also makes more sense 
        to have this code reside in WebKit now that there are calls over 
        the UIDelegate to draw the menus. 
        (WebView::onMeasureItem): Helper function to call over the 
        UIDelegate.
        (WebView::onDrawItem): Same.
        (WebView::onUninitMenuPopup): Same.
        (WebViewWndProc): Now that we are drawing the menus ourselves, we 
        need to handle WM_MEASUREITEM, WM_DRAWITEM, and WM_UNINITMENUPOPUP.
        * WebView.h:

2007-01-16  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Lou.

        Change version numbering scheme for files from the form 3.0.521.32
        to the form 3.521.32.11.
        
        This will fix our upgrade installer logic.

        * WebKit.vcproj/WebKit.rc:

2007-01-15  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.
        
        Fix: <rdar://problem/4925504> ASSERT when finished running iBench HTML Load Speed

        * WebFrame.cpp:
        (WebFrame::cancelledError): Return a pseudo-CFNet cancelled error instead of a null ResourceError.

2007-01-15  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        <rdar://problem/4889203>
        Implement WebFrame::canHandleRequest.
        
        * WebDataSource.cpp:
        (WebDataSource::webFrame):
        Implement webFrame accessor.
        
        * WebFrame.cpp:
        (WebFrame::canHandleRequest):
        * WebView.cpp:
        (WebView::canHandleRequest):
        * WebView.h:
        Implement canHandleRequest.

2007-01-15  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        Loader related improvements.
        
        * Interfaces/IWebFrameLoadDelegate.idl:
        Change method signature to match what we have on Mac more closely.
        
        * WebDataSource.cpp:
        (WebDataSource::pageTitle):
        Implement.
        
        * WebError.cpp: Added.
        * WebError.h: Added.
        Add (currently stubbed out) IWebError implementation.
        
        * WebFrame.cpp:
        (WebFrame::dispatchDidCancelClientRedirect):
        (WebFrame::dispatchWillPerformClientRedirect):
        (WebFrame::dispatchDidReceiveIcon):
        (WebFrame::dispatchUnableToImplementPolicy):
        (WebFrame::dispatchDidFailProvisionalLoad):
        (WebFrame::dispatchDidFailLoad):
        Implement these.
        
        * WebKit.vcproj/WebKit.vcproj:
        Add WebError.h and WebError.cpp
        
2007-01-15  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.
        
        * WebFrame.cpp:
        (WebFrame::postProgressStartedNotification):
        (WebFrame::postProgressEstimateChangedNotification):
        (WebFrame::postProgressFinishedNotification):
        * WebFrame.h:
        Post the correct notifications.
        
        * WebView.cpp:
        (WebView::estimatedProgress):
        Ask the progress tracker for the estimated progress.

2007-01-15  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        * Interfaces/IWebView.idl:
        Add progress notifications.

2007-01-15  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        Call resource load delegate methods.
        
        * Interfaces/IWebResourceLoadDelegate.idl:
        Use unsigned long instead of UINT.
        
        * WebBackForwardList.cpp:
        * WebBackForwardList.h:
        Get rid of the createInstance method that takes no arguments.

        * WebFrame.cpp:
        (WebFrame::assignIdentifierToInitialRequest):
        (WebFrame::dispatchDidReceiveResponse):
        (WebFrame::dispatchDidReceiveContentLength):
        (WebFrame::dispatchDidFinishLoading):
        (WebFrame::dispatchDidFailLoading):
        Call the right resource load delegate methods.
        
        * WebView.cpp:
        (WebView::setResourceLoadDelegate):
        (WebView::resourceLoadDelegate):
        (WebView::setPolicyDelegate):
        (WebView::policyDelegate):
        * WebView.h:
        Add getters and setters for the resource load delegate and the policy delegate.

2007-01-14  Alice Liu  <alice.liu@apple.com>

        Reviewed by Lou.

        Fixed: <rdar://problem/4888908> Find: "Use selection to find" and "Jump to selection" are not implemented

        * Interfaces/IWebView.idl:
        * WebView.cpp:
        (WebView::selectedText):
        (WebView::centerSelectionInVisibleArea):
        * WebView.h:

2007-01-14  Adam Roben  <aroben@apple.com>

        Reviewed by Steve.

        Fix: <rdar://4831292> Implement WebKitStatistics

        * Interfaces/IWebKitStatistics.idl: Added.
        * Interfaces/WebKit.idl: Added WebKitStatistics declaration.
        * WebKit.vcproj/Interfaces.vcproj: Added new files.
        * WebKit.vcproj/WebKit.vcproj: Ditto.
        * WebKit.vcproj/WebKitGUID.vcproj: Ditto.
        * WebKitClassFactory.cpp: Updated to include WebKitStatistics.
        (WebKitClassFactory::CreateInstance):
        * WebKitDLL.cpp: Ditto.
        (DllGetClassObject):
        * WebKitStatistics.cpp: Added.
        (WebKitStatistics::WebKitStatistics):
        (WebKitStatistics::~WebKitStatistics):
        (WebKitStatistics::createInstance):
        (WebKitStatistics::QueryInterface):
        (WebKitStatistics::AddRef):
        (WebKitStatistics::Release):
        (WebKitStatistics::webViewCount):
        (WebKitStatistics::frameCount):
        (WebKitStatistics::dataSourceCount):
        (WebKitStatistics::viewCount):
        (WebKitStatistics::HTMLRepresentationCount):
        * WebKitStatistics.h: Added.
        * WebKitStatisticsPrivate.h: Added.

        Added object counting:

        * WebDataSource.cpp:
        (WebDataSource::WebDataSource):
        (WebDataSource::~WebDataSource):
        * WebFrame.cpp:
        (WebFrame::WebFrame):
        (WebFrame::~WebFrame):
        * WebHTMLRepresentation.cpp:
        (WebHTMLRepresentation::WebHTMLRepresentation):
        (WebHTMLRepresentation::~WebHTMLRepresentation):
        * WebView.cpp:
        (WebView::WebView): Initialize m_page member.
        (WebView::~WebView):

2007-01-12  Anders Carlsson  <acarlsson@apple.com>

        Build fixes.
        
        * WebFrame.cpp:
        (WebFrame::assignIdentifierToInitialRequest):
        (WebFrame::dispatchWillSendRequest):
        (WebFrame::dispatchDidReceiveResponse):
        (WebFrame::dispatchDidReceiveContentLength):
        (WebFrame::dispatchDidFinishLoading):
        (WebFrame::dispatchDidFailLoading):
        (WebFrame::incrementProgress):
        (WebFrame::completeProgress):
        (WebFrame::dispatchDidReceiveAuthenticationChallenge):
        (WebFrame::dispatchDidCancelAuthenticationChallenge):
        * WebFrame.h:

2007-01-12  Ada Chan  <adachan@apple.com>

        Reviewed by Steve.
        
        <rdar://4602355> More Undo/Redo
        - Added IWebBackForwardListPrivate which contains the removeItem method, used in undo/redo of closing tabs.
        - Fixed a null dereference I ran into in WebFrame::dispatchDidFirstLayout.

        * Interfaces/IWebBackForwardListPrivate.idl: Added.
        * WebBackForwardList.cpp:
        (WebBackForwardList::QueryInterface):
        (WebBackForwardList::removeItem):
        * WebBackForwardList.h:
        * WebFrame.cpp:
        (WebFrame::dispatchDidFirstLayout):
        * WebKit.vcproj/Interfaces.vcproj:
        * WebKit.vcproj/WebKitGUID.vcproj:

2007-01-12  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin.

        Move WebKitWin over to the new WebCore loader. There are still some leftover functions 
        from FrameWinClient that aren't used and should be removed.
        
        * WebDataSource.cpp:
        (WebDataSource::WebDataSource):
        (WebDataSource::~WebDataSource):
        (WebDataSource::createInstance):
        (WebDataSource::documentLoader):
        (WebDataSource::overrideEncoding):
        (WebDataSource::setOverrideEncoding):
        (WebDataSource::QueryInterface):
        (WebDataSource::initWithRequest):
        (WebDataSource::data):
        (WebDataSource::representation):
        (WebDataSource::webFrame):
        (WebDataSource::initialRequest):
        (WebDataSource::request):
        (WebDataSource::response):
        (WebDataSource::textEncodingName):
        (WebDataSource::isLoading):
        (WebDataSource::unreachableURL):
        * WebDataSource.h:
        * WebFrame.cpp:
        (WebFrame::WebFramePrivate::m_policyFunction):
        (WebFrame::WebFrame):
        (WebFrame::~WebFrame):
        (WebFrame::QueryInterface):
        (WebFrame::loadRequest):
        (WebFrame::loadData):
        (getWebDataSource):
        (WebFrame::dataSource):
        (WebFrame::provisionalDataSource):
        (WebFrame::stopLoading):
        (WebFrame::reload):
        (WebFrame::firstLayoutDone):
        (WebFrame::loadType):
        (WebFrame::stopMainResourceLoad):
        (WebFrame::canProvideDocumentSource):
        (WebFrame::createFrame):
        (WebFrame::submitForm):
        (WebFrame::setTitle):
        (WebFrame::originalRequestURL):
        (WebFrame::hasWebView):
        (WebFrame::hasFrameView):
        (WebFrame::dispatchDidReceiveServerRedirectForProvisionalLoad):
        (WebFrame::dispatchDidReceiveTitle):
        (WebFrame::dispatchDidFirstLayout):
        (WebFrame::dispatchShow):
        (WebFrame::cancelPolicyCheck):
        (WebFrame::dispatchWillSubmitForm):
        (WebFrame::finishedLoading):
        (WebFrame::canHandleRequest):
        (WebFrame::canShowMIMEType):
        (WebFrame::representationExistsForURLScheme):
        (WebFrame::updateGlobalHistoryForStandardLoad):
        (WebFrame::shouldGoToHistoryItem):
        (WebFrame::createDocumentLoader):
        (WebFrame::receivedData):
        (WebFrame::setUpPolicyListener):
        (WebFrame::receivedPolicyDecision):
        (WebFrame::committedLoad):
        (WebFrame::dispatchDecidePolicyForMIMEType):
        (WebFrame::dispatchCreatePage):
        (WebFrame::dispatchDidCancelAuthenticationChallenge):
        * WebFrame.h:
        * WebView.cpp:
        (WebView::WebView):
        (WebView::~WebView):
        (WebViewWndProc):
        (WebView::close):
        (WebView::frameLoadDelegate):
        (WebView::backForwardList):
        (WebView::setMaintainsBackForwardList):
        (WebView::goBack):
        (WebView::goForward):
        (WebView::goToBackForwardItem):
        (WebView::setCustomTextEncodingName):
        (WebView::customTextEncodingName):
        (WebView::canGoBack):
        (WebView::canGoForward):
        (WebView::frameLoadDelegatePrivate):
        * WebView.h:

2007-01-12  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Geoff.

        More loader preparations.
                
        * WebContextMenuClient.cpp:
        (WebContextMenuClient::getCustomMenuFromDefaultItems):
        (WebContextMenuClient::contextMenuItemSelected):
        Use ::createInstance to create the element property bags.
        
        * WebElementPropertyBag.cpp:
        (WebElementPropertyBag::WebElementPropertyBag):
        (WebElementPropertyBag::~WebElementPropertyBag):
        (WebElementPropertyBag::createInstance):
        (convertStringToVariant):
        * WebElementPropertyBag.h:
        Fix ownership issues so WebElementPropertyBag can one day be a value in another property bag.
        
        * WebFramePolicyListener.cpp: Added.
        (WebFramePolicyListener::WebFramePolicyListener):
        (WebFramePolicyListener::~WebFramePolicyListener):
        (WebFramePolicyListener::createInstance):
        (WebFramePolicyListener::QueryInterface):
        (WebFramePolicyListener::AddRef):
        (WebFramePolicyListener::Release):
        (WebFramePolicyListener::use):
        (WebFramePolicyListener::download):
        (WebFramePolicyListener::ignore):
        (WebFramePolicyListener::continueSubmit):
        (WebFramePolicyListener::receivedPolicyDecision):
        (WebFramePolicyListener::invalidate):
        * WebFramePolicyListener.h: Added.
        Add policy listener implementation.
        
        * WebFrame.cpp:
        (WebFrame::receivedPolicyDecision):
        * WebFrame.h:
        Add stub to be used by the policy listener.

        * WebView.cpp:
        (WebView::WebView):
        (WebView::~WebView):
        (WebView::paint):
        (WebView::closeWindow):
        (WebView::handleMouseEvent):
        (WebViewWndProc):
        (WebView::initWithFrame):
        (WebView::setUIDelegate):
        (WebView::uiDelegate):
        (WebView::setFrameLoadDelegate):
        (WebView::frameLoadDelegate):
        (WebView::preferences):
        (WebView::elementAtPoint):
        (WebView::setFormDelegate):
        (WebView::formDelegate):
        (WebView::setFrameLoadDelegatePrivate):
        (WebView::frameLoadDelegatePrivate):
        * WebView.h:
        Cleanup, use COMPtr in a couple of places.
        
2007-01-11  Steve Falkenburg  <sfalken@apple.com>

        B&I build change - copy WebKit.resources to dstroot for installer

        * WebKit.vcproj/WebKit.make:

2007-01-11  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Lou.

        Implement "Make Text Normal Size".

        * WebView.cpp:
        (WebView::canMakeTextStandardSize): Added
        (WebView::makeTextStandardSize): Added
        (WebView::toggleContinuousSpellChecking): Added
        (WebView::toggleSmartInsertDelete): Added

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

        Reviewed by NOBODY.
        
        Make it build again after my OpenSource http auth checkin

        * WebFrame.cpp:
        (WebFrame::dispatchDidReceiveAuthenticationChallenge):
        (WebFrame::dispatchDidCancelAuthenticationChallenge):
        * WebFrame.h:

2007-01-10  Anders Carlsson  <acarlsson@apple.com>

        Another build fix.
        
        * WebContextMenuClient.cpp:
        (WebContextMenuClient::lookUpInDictionary):
        * WebContextMenuClient.h:

2007-01-10  Beth Dakin  <bdakin@apple.com>

        Reviewed by John.

        Fix for <rdar://problem/4914258> REGRESSION: Search in Google now 
        operates on the current WebView instead of invoking Safari's 
        service

        * WebContextMenuClient.cpp:
        (WebContextMenuClient::searchWithGoogle): Do all of the work we 
        used to do in WebCore over here in WebKit.
        * WebContextMenuClient.h:

2007-01-10  Anders Carlsson  <acarlsson@apple.com>

        Build fix.
        
        * WebFrame.cpp:
        (WebFrame::dispatchDidFirstLayout):
        * WebFrame.h:

2007-01-10  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin.

        Add WebDocumentLoader. Implement some of the FrameLoaderClient methods.
        Add a resourceRequest() getter to WebMutableURLRequest.
        
        * WebDocumentLoader.cpp: Added.
        (WebDocumentLoader::WebDocumentLoader):
        (WebDocumentLoader::setDataSource):
        (WebDocumentLoader::dataSource):
        (WebDocumentLoader::attachToFrame):
        (WebDocumentLoader::detachFromFrame):
        * WebDocumentLoader.h: Added.
        * WebFrame.cpp:
        (WebFrame::dispatchWillPerformClientRedirect):
        (WebFrame::dispatchDidChangeLocationWithinPage):
        (WebFrame::dispatchWillClose):
        (WebFrame::dispatchDidStartProvisionalLoad):
        (WebFrame::dispatchDidReceiveTitle):
        (WebFrame::dispatchDidCommitLoad):
        (WebFrame::dispatchDidFinishLoad):
        (WebFrame::updateGlobalHistoryForStandardLoad):
        (WebFrame::updateGlobalHistoryForReload):
        (WebFrame::dispatchDecidePolicyForMIMEType):
        (WebFrame::dispatchDecidePolicyForNewWindowAction):
        (WebFrame::dispatchDecidePolicyForNavigationAction):
        (WebFrame::dispatchDidFailProvisionalLoad):
        (WebFrame::dispatchDidFailLoad):
        * WebKit.vcproj/WebKit.vcproj:
        * WebMutableURLRequest.cpp:
        (WebMutableURLRequest::resourceRequest):
        * WebMutableURLRequest.h:

2007-01-10  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Brady.

        Make WebBackForwardList wrap a WebCore::BackForwardList. Add wrapper map to WebHistoryItem.

        * WebBackForwardList.cpp:
        (backForwardListWrappers):
        (WebBackForwardList::WebBackForwardList):
        (WebBackForwardList::~WebBackForwardList):
        (WebBackForwardList::createInstance):
        (WebBackForwardList::addItem):
        (WebBackForwardList::goBack):
        (WebBackForwardList::goForward):
        (WebBackForwardList::goToItem):
        (WebBackForwardList::backItem):
        (WebBackForwardList::currentItem):
        (WebBackForwardList::forwardItem):
        (WebBackForwardList::backListWithLimit):
        (WebBackForwardList::forwardListWithLimit):
        (WebBackForwardList::capacity):
        (WebBackForwardList::setCapacity):
        (WebBackForwardList::backListCount):
        (WebBackForwardList::forwardListCount):
        (WebBackForwardList::containsItem):
        (WebBackForwardList::itemAtIndex):
        (WebBackForwardList::setPageCacheSize):
        (WebBackForwardList::pageCacheSize):
        (WebBackForwardList::setDefaultPageCacheSizeIfNecessary):
        * WebBackForwardList.h:
        * WebHistoryItem.cpp:
        (historyItemWrappers):
        (WebHistoryItem::WebHistoryItem):
        (WebHistoryItem::~WebHistoryItem):
        (WebHistoryItem::createInstance):
        (WebHistoryItem::initFromDictionaryRepresentation):
        (WebHistoryItem::QueryInterface):
        (WebHistoryItem::initWithURLString):
        (WebHistoryItem::historyItem):
        * WebHistoryItem.h:

2007-01-09  Ada Chan  <adachan@apple.com>

        Reviewed by Steve.

        <rdar://4602355> Undo/Redo
        - Added new undo methods in the IWebUIDelegate.
        - Removed the internal WebUndoManager in WebEditorClient.
        Instead, we'll call methods on the ui delegate to register
        undo operations, execute undo/redo, etc.
        
        * English.lproj/Localizable.strings:
        Added localized strings for all the edit command actions.
        * Interfaces/IWebUIDelegate.idl:
        Added undo delegate callbacks.
        * Interfaces/IWebUndoTarget.idl: Added.
        Added a IWebUndoTarget interface that targets of undo
        operations need to implement.
        * WebEditorClient.cpp:
        Added WebEditorUndoTarget class that implements IWebUndoTarget.
        (WebEditorUndoTarget::WebEditorUndoTarget):
        (WebEditorUndoTarget::QueryInterface):
        (WebEditorUndoTarget::AddRef):
        (WebEditorUndoTarget::Release):
        (WebEditorUndoTarget::invoke):
        (WebEditorClient::WebEditorClient):
        (WebEditorClient::~WebEditorClient):
        WebEditorUndoCommand implements IWebUndoCommand and wraps an
        EditCommand in it.  
        (WebEditorUndoCommand::WebEditorUndoCommand):
        (WebEditorUndoCommand::execute):
        (WebEditorUndoCommand::QueryInterface):
        (WebEditorUndoCommand::AddRef):
        (WebEditorUndoCommand::Release):
        (undoNameForEditAction):
        The undo operations in WebEditorClient now calls through to the
        undo methods in IWebUIDelegate rather than keeping an internal
        undo/redo stack.
        (WebEditorClient::registerCommandForUndo):
        (WebEditorClient::registerCommandForRedo):
        (WebEditorClient::clearUndoRedoOperations):
        (WebEditorClient::canUndo):
        (WebEditorClient::canRedo):
        (WebEditorClient::undo):
        (WebEditorClient::redo):
        * WebEditorClient.h:
        * WebKit.vcproj/Interfaces.vcproj:  added IWebUndoTarget.idl
        * WebKit.vcproj/WebKitGUID.vcproj:  added IWebUndoTarget_i.c
        * WebLocalizableStrings.h:

2007-01-09  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin.

        Add COMPtr. Make MemoryStream backed by a SharedBuffer. Use SharedBuffer in
        WebFrame.
        
        * COMPtr.h: Added.
        (COMPtr::COMPtr):
        (COMPtr::~COMPtr):
        (COMPtr::get):
        (COMPtr::operator*):
        (COMPtr::operator->):
        (COMPtr::operator&):
        (COMPtr::operator!):
        (COMPtr::operator UnspecifiedBoolType):
        (::copyTo):
        (::adopt):
        (::operator):
        * MemoryStream.cpp:
        (MemoryStream::MemoryStream):
        (MemoryStream::~MemoryStream):
        (MemoryStream::createInstance):
        (MemoryStream::Clone):
        * MemoryStream.h:
        * WebFrame.cpp:
        (WebFrame::WebFrame):
        (WebFrame::didReceiveResponse):
        (WebFrame::didReceiveData):
        * WebFrame.h:
        (WebFrame::data):
        * WebKit.vcproj/WebKit.vcproj:

2007-01-09  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Lou.
        
        <rdar://4906546> Win2K: crash when entering new URL in address field

        Win2K compatibility fix.  SafeArrayCreateVector doesn't work correctly on older systems (Win2K, etc.)        
        
        Some references to people stumbling across this bug (apologies for not being able to find a Microsoft support article):        
        http://discuss.develop.com/archives/wa.exe?A2=ind0104a&L=dotnet&D=0&T=0&P=69575
        http://www.eggheadcafe.com/ng/microsoft.public.platformsdk.com_ole/Jul2005/post22989606.asp
        http://www.pcreview.co.uk/forums/thread-1470025.php

        * MarshallingHelpers.cpp:
        (MarshallingHelpers::stringArrayToSafeArray):
        (MarshallingHelpers::intArrayToSafeArray):
        (MarshallingHelpers::intRectToSafeArray):
        (MarshallingHelpers::iunknownArrayToSafeArray):

2007-01-08  Lou Amadio  <lamadio@apple.com>

        Reviewed by ggaren

        * DOMCoreClasses.cpp:
        (DOMNode::createInstance):
                Build break
        * WebView.cpp:
        (WebView::handleMouseEvent):
                passing incorrect flag

2007-01-08  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Brady.
        
        Use a WebCore HistoryItem object to back WebHistoryItem.
        
        * WebHistoryItem.cpp:
        (WebHistoryItem::WebHistoryItem):
        (WebHistoryItem::~WebHistoryItem):
        (WebHistoryItem::createInstance):
        (WebHistoryItem::initFromDictionaryRepresentation):
        (WebHistoryItem::dictionaryRepresentation):
        (WebHistoryItem::hasURLString):
        (WebHistoryItem::visitCount):
        (WebHistoryItem::setVisitCount):
        (WebHistoryItem::mergeAutoCompleteHints):
        (WebHistoryItem::setLastVisitedTimeInterval):
        (WebHistoryItem::setTitle):
        (WebHistoryItem::RSSFeedReferrer):
        (WebHistoryItem::setRSSFeedReferrer):
        (WebHistoryItem::initWithURLString):
        (WebHistoryItem::URLString):
        (WebHistoryItem::title):
        (WebHistoryItem::lastVisitedTimeInterval):
        * WebHistoryItem.h:

2007-01-05  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        Add stubs for FrameLoaderClient methods.
        
        * WebFrame.cpp:
        (WebFrame::setMainDocumentError):
        (WebFrame::cancelledError):
        (WebFrame::cannotShowURLError):
        (WebFrame::interruptForPolicyChangeError):
        (WebFrame::cannotShowMIMETypeError):
        (WebFrame::fileDoesNotExistError):
        (WebFrame::committedLoad):
        (WebFrame::dispatchDecidePolicyForMIMEType):
        (WebFrame::dispatchDecidePolicyForNewWindowAction):
        (WebFrame::dispatchDecidePolicyForNavigationAction):
        (WebFrame::dispatchUnableToImplementPolicy):
        (WebFrame::download):
        (WebFrame::willUseArchive):
        (WebFrame::dispatchWillSendRequest):
        (WebFrame::dispatchDidReceiveResponse):
        (WebFrame::dispatchDidReceiveContentLength):
        (WebFrame::dispatchDidFinishLoading):
        (WebFrame::dispatchDidFailLoading):
        (WebFrame::dispatchDidLoadResourceFromMemoryCache):
        (WebFrame::dispatchDidFailProvisionalLoad):
        (WebFrame::dispatchDidFailLoad):
        (WebFrame::dispatchCreatePage):
        (WebFrame::incrementProgress):
        (WebFrame::completeProgress):
        (WebFrame::startDownload):

2007-01-05  Alice Liu  <alice.liu@apple.com>

        Reviewed by Lou.

        Fixed <rdar://problem/4853400> disable commands in the Edit menu when they're not applicable
        and <rdar://problem/4769487> Some editing operations should be disabled in View Source window

        * Interfaces/IWebView.idl:
        * WebView.cpp:
        (WebView::hasSelectedRange):
        (WebView::cutEnabled):
        (WebView::copyEnabled):
        (WebView::pasteEnabled):
        (WebView::deleteEnabled):
        (WebView::editingEnabled):
        * WebView.h:

2007-01-05  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        Add stubs for new FrameLoaderClient methods.
        
        * WebFrame.cpp:
        (WebFrame::createDocumentLoader):
        (WebFrame::setMainDocumentError):
        (WebFrame::cancelledError):
        (WebFrame::cannotShowURLError):
        (WebFrame::interruptForPolicyChangeError):
        (WebFrame::cannotShowMIMETypeError):
        (WebFrame::fileDoesNotExistError):
        (WebFrame::shouldFallBack):
        (WebFrame::committedLoad):
        * WebFrame.h:

2007-01-04  Adam Roben  <aroben@apple.com>

        Reviewed by Geoff.

        Fix: <rdar://4763580> Support tabbing between subframes
        Fix: <rdar://4763595> Support tabbing out of the document back into the
        Safari UI

        * Interfaces/IWebUIDelegate.idl: Added declarations of new methods.
        * WebBackForwardList.cpp:
        (WebBackForwardList::backItem): Changed to return E_FAIL if returning a
        null pointer.
        (WebBackForwardList::currentItem): Ditto.
        (WebBackForwardList::forwardItem): Ditto.
        * WebChromeClient.cpp:
        (WebChromeClient::canTakeFocus): Added new click method.
        (WebChromeClient::takeFocus): Ditto.
        (WebChromeClient::focus): Removed unnecessary null check.
        (WebChromeClient::unfocus): Ditto.
        (WebChromeClient::createWindow): Ditto.
        (WebChromeClient::createModalDialog): Ditto.
        (WebChromeClient::show): Ditto.
        (WebChromeClient::canRunModal): Ditto.
        (WebChromeClient::runModal): Ditto.
        (WebChromeClient::setToolbarsVisible): Ditto.
        (WebChromeClient::toolbarsVisible): Ditto.
        (WebChromeClient::setStatusbarVisible): Ditto.
        (WebChromeClient::statusbarVisible): Ditto.
        (WebChromeClient::setMenubarVisible): Ditto.
        (WebChromeClient::menubarVisible): Ditto.
        (WebChromeClient::setResizable): Ditto.
        (WebChromeClient::addMessageToConsole): Ditto.
        * WebChromeClient.h: Added declarations.

2007-01-04  Beth Dakin  <bdakin@apple.com>

        Reviewed by Adam.

        A few changes needed to turn on WebCore context menus on the Mac.

        * WebContextMenuClient.cpp: Name change and have the 
        former getCustomMenuFromDefaultItems function return the 
        PlatformMenuDescription since it feels funny to have the client set 
        the new platform description.
        (WebContextMenuClient::getCustomMenuFromDefaultItems): Same.
        * WebContextMenuClient.h: Same.

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

        Reviewed by Lou
        
        Temporary Link Stub fix for Back/Forward cache landing in OpenSource

        * WebFrame.cpp:
        (WebFrame::setDocumentViewFromPageCache):
        (WebFrame::updateGlobalHistoryForStandardLoad):
        (WebFrame::updateGlobalHistoryForReload):
        (WebFrame::shouldGoToHistoryItem):
        (WebFrame::saveScrollPositionAndViewStateToItem):
        (WebFrame::saveDocumentViewToPageCache):
        (WebFrame::canCachePage):
        * WebFrame.h:

2006-12-26  Geoffrey Garen  <ggaren@apple.com>

        Build fix.

        * WebFrame.cpp: Removed willCloseDocument, which is now gone from 
        WebCore::FrameLoaderClient.
        * WebFrame.h: ditto

2006-12-25  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Removed WebCoreSettings, cleaned up WebCore::Settings.

        * WebFrame.cpp:
        (WebFrame::initWithWebFrameView): Used core() here, now that WebView::settings()
        is gone.

        * WebView.cpp:
        (WebView::updateWebCoreSettingsFromPreferences): Simplified this code, now
        that WebCore handles most of it.

        * WebView.h: Removed settings() accessor. Settings belong to the WebCore
        page, not the WebView.

2006-12-22  Alice Liu  <alice.liu@apple.com>

        Reviewed by Geoff.

        Fixed <rdar://4766681> and <rdar://4766685> concerning editable link behavior

        * Interfaces/IWebPreferences.idl:
        * WebHistoryItem.cpp:
        (WebHistoryItem::dictionaryRepresentation):
        * WebPreferenceKeysPrivate.h:
        * WebPreferences.cpp:
        (WebPreferences::initialize):
        (WebPreferences::editableLinkBehavior):
        (WebPreferences::setEditableLinkBehavior):
        * WebPreferences.h:
        * WebView.cpp:
        (WebView::updateWebCoreSettingsFromPreferences):

2006-12-20  Adam Roben  <aroben@apple.com>

        Reviewed by Mark Rowe.

        Fix: <rdar://4895655> Status bar doesn't display correct text when
        WebView is scrolled.

        * WebView.cpp:
        (WebView::handleMouseEvent): Convert the event coordinates to document
        coordinates before calling elementAtPoint.

2006-12-19  Alice Liu  <alice.liu@apple.com>

        In r11349 I accidentally checked in my local change to the user agent.  
        Here I am changing it back to what it used to be. 

        * WebView.cpp:
        (WebView::userAgentForKURL):

2006-12-19  Alice Liu  <alice.liu@apple.com>

        Reviewed by Brady.

        <rdar://problem/4796729> add "deleteButton" image resource

        * WebKit.vcproj/WebKit.rc:
        * WebKit.vcproj/deleteButton.png: Added.
        * WebKit.vcproj/deleteButtonPressed.png: Added.

2006-12-19  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam, Darin.

        <rdar://problem/4769830>
        logging to JS console.
        
        Add isError argument to addMessageToConsole.
        
        * Interfaces/IWebUIDelegatePrivate.idl:
        * WebChromeClient.cpp:
        (WebChromeClient::addMessageToConsole):

2006-12-19  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Lou, Adele.
        
        Added CLSID for WebPreferences

        * Interfaces/WebKit.idl:
        * WebKitClassFactory.cpp:
        (WebKitClassFactory::CreateInstance):
        * WebKitDLL.cpp:
        (DllGetClassObject):

2006-12-18  Ada Chan  <adachan@apple.com>

        Reviewed by Adam.
        
        - Added runBeforeUnloadConfirmPanelWithMessage to IWebUIDelegate.
        - implemented canRunBeforeUnloadConfirmPanel, runBeforeUnloadConfirmPanel, and closeWindowSoon
        in WebChromeClient
        - implemented WebView::closeWindow().

        * Interfaces/IWebUIDelegate.idl:
        * WebChromeClient.cpp:
        (WebChromeClient::canRunBeforeUnloadConfirmPanel):
        (WebChromeClient::runBeforeUnloadConfirmPanel):
        (WebChromeClient::closeWindowSoon):
        * WebChromeClient.h:
        * WebFrame.h:
        * WebView.cpp:
        (WebView::closeWindow):
        * WebView.h:

2006-12-18  Brady Eidson  <beidson@apple.com>

        Reviewed by Alice
        
        Fixes <rdar://4821724> - Wrong site icon displays for sites who don't actually have an icon
        
        We judged whether or not a site has an icon based on whether or not the IconDatabase returned
        a valid Image.
        In the case of sites without an icon, we actually get returned a valid Image with dimensions 0x0.
        WebKit on OS X correctly handles this case via NSImage goodness - now we manually handle it on Windows

        * WebIconDatabase.cpp:
        (WebIconDatabase::iconForURL): Check the width() as an additional case to fallback to the default icon

2006-12-18  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam.
        
        Added loadType to IWebFramePrivate.

        * Interfaces/IWebFramePrivate.idl: Added loadType
        * WebFrame.cpp: Fixed line endings
        (WebFrame::loadType): Added
        * WebFrame.h: Fixed line endings
        * WebKit.vcproj/WebKit.vcproj: Moved WebLocalizableStrings.h to proper folder

2006-12-18  Alice Liu  <alice.liu@apple.com>

        Reviewed by Adam.

        <rdar://problem/4853363> hook up various deletion-related functions in WebView

        * WebView.cpp:
        (WebView::execCommand):
        Removed the case for ForwardDelete, since it shouldn't be handled there
        (WebView::deleteSelection):
        Implemented
        (WebView::copy):
        (WebView::cut):
        (WebView::paste):
        (WebView::delete_):
        Use the Editor's execCommand for these editor-responsible functions

2006-12-18  Kevin McCullough  <KMcCullough@apple.com>

        Reviewed by Oliver.

        - Remove CG header includes in open source files

        * WebView.cpp:

2006-12-16  Beth Dakin  <bdakin@apple.com>

        Reviewed by Adam.

        In the process of making enabled/disabled items and item state work
        on Boomer, we discovered that we could not get our sub-menus to
        work with using notify by position. This switches the Boomer
        context menus over to use the more conventional menu command
        notification of id. This sends a WM_COMMAND message instead of a
        WM_MENUCOMMAND message. We can differentiate the context menu
        WM_COMMAND messaged from the other ones because the high word of
        wParam is 0 when the message comes from a menu. So now WM_COMMAND
        handles the context menu actions.

        * Interfaces/IWebUIDelegate.idl: If-def not needed here.
        * WebContextMenuClient.cpp:
        (WebContextMenuClient::contextMenuItemSelected): Now takes a
        pointer to the parentMenu.
        * WebContextMenuClient.h:
        * WebView.cpp:
        (WebView::performContextMenuAction):
        (WebViewWndProc):

2006-12-14  Adele Peterson  <adele@apple.com>

        Reviewed by Adam.

        Build Fix.

        * WebContextMenuClient.h:

2006-12-14  Ada Chan  <adachan@apple.com>

        Reviewed by Steve.

        Implemented WebChromeClient::pageRect() to return the bounds of the WebView.
        Implemented WebFrame::parentFrame().
        Added a temporary implementation of WebDataSource::isLoading().

        * WebChromeClient.cpp:
        (WebChromeClient::pageRect):
        * WebDataSource.cpp:
        (WebDataSource::isLoading):
        * WebFrame.cpp:
        (kit):
        (WebFrame::parentFrame):
        * WebView.cpp:
        (WebView::frameRect):
        * WebView.h:

2006-12-13  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler, Dave Hyatt.
        
        Fixed <rdar://problem/4840261> Frame::setIsActive not called when frames 
        are focused/unfocused
        
        Updated WebKit to use new FocusController tracking of the focused frame.
        
        * WebView.cpp:
        (WebViewWndProc): Fixed a minor bug where we wouldn't fire the blur event
        when changing focus to the location bar.

2006-12-12  Anders Carlsson  <acarlsson@apple.com>

        * WebFrame.cpp:
        (WebFrame::loadDataSource):
        Update for changes to ResourceHandle.

2006-12-11  Beth Dakin  <bdakin@apple.com>

        Reviewed by Adam.

        Boomer WebKit support for editing sub-menu actions for WebCore
        context menus.

        * Interfaces/IWebUIDelegate.idl: Re-named some of the spelling
        sub-menu tags.
        * WebContextMenuClient.cpp: New functions for the speech sub-menu.
        (WebContextMenuClient::speak):
        (WebContextMenuClient::stopSpeaking):
        * WebContextMenuClient.h:
        * WebEditorClient.cpp: New functions to toggle spelling/grammar
        checking.
        (WebEditorClient::toggleContinuousSpellChecking):
        (WebEditorClient::toggleGrammarChecking):
        * WebEditorClient.h:

2006-12-11  Alice Liu  <alice.liu@apple.com>

        Reviewed by ggaren.

        Fixed <rdar://problem/4854901> "Copy Link" and "Copy Image Address" context menu items don't work

        * Interfaces/IWebView.idl:
        Added copyURL.
        
        * WebContextMenuClient.cpp:
        * WebContextMenuClient.h:
        Removed copyLinkToClipboard
        
        * WebView.cpp:
        (WebView::copy):
        (WebView::cut):
        (WebView::paste):
        Trivial cleanup of these
        
        (WebView::copyURL):
        Added this.
        
        * WebView.h:
        Added copyURL.

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

        Reviewed by Brady.

        - http://bugs.webkit.org/show_bug.cgi?id=11794
          fix lifetime problems affecting Frame's ownerElement pointer

        * WebFrame.h:
        * WebFrame.cpp:
        (WebFrame::initWithWebFrameView): Changed to use HTMLFrameOwnerElement.
        (WebFrame::createFrame): Ditto.

2006-12-08  Lou Amadio  <lamadio@apple.com>

        * WebView.cpp:
        (WebView::handleMouseEvent):
        Route mouse event to the delegate
        (WebView::initWithFrame):
        Removed CW_USEDEFAULT on the CreateWindow - incorrect to use on a child window.

2006-12-09  Adam Roben  <aroben@apple.com>

        Reviewed by Darin.

        Build fix.

        * WebKit.vcproj/WebKit.vcproj: Added WebCore/ForwardingHeaders to the
        include path.
        * WebView.cpp: Updated to reflect the newly-flattend JSCore headers.

2006-12-08  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adam.

        - createWebViewWithRequest now increases the ref count for the new window it returns.
        This is standard practice for COM, and fixes a crash.

        * WebFrame.cpp:
        (WebFrame::openURL):

2006-12-07  Adam Roben  <aroben@apple.com>

        Reviewed by Anders.

        Two small fixes for bugs discovered while implementing the Snippet
        Editor.

        * WebView.cpp:
        (registerWebViewWindowClass): Set the WebView's default cursor to be
        IDC_ARROW.
        (WebView::uiDelegate): Return E_FAIL if there's no UI delegate.

2006-12-07  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Lou.
        
        Add LPCTSTR_UI_STRING and LPCTSTR_UI_STRING_KEY.
        Added caching to prevent re-converting strings unnecessarily.

        * WebKit.vcproj/WebKit.def: Export LPCTSTR localization function
        * WebKit.vcproj/WebKit_debug.def: Export LPCTSTR localization function
        * WebLocalizableStrings.cpp:
        (createWebKitBundle): Added using namespace so we don't need to qualify String
        (WebLocalizedLPCTSTR): Added
        * WebLocalizableStrings.h: Added LPCTSTR localization support

2006-12-07  Beth Dakin  <bdakin@apple.com>

        Reviewed by Brady.

        Make some parameters const and const references.

        * WebContextMenuClient.cpp:
        (WebContextMenuClient::contextMenuItemSelected):
        (WebContextMenuClient::copyLinkToClipboard):
        (WebContextMenuClient::downloadURL):
        (WebContextMenuClient::copyImageToClipboard):
        * WebContextMenuClient.h:

2006-12-06  Anders Carlsson  <acarlsson@apple.com>

        Fix the build.

        * WebFrame.cpp:
        (WebFrame::loadDataSource):
        (WebFrame::didReceiveData):
        (WebFrame::didFail):
        * WebFrame.h:

2006-12-06  Steve Falkenburg  <sfalken@apple.com>

        Rubber-stamped by Adam.
        
        Don't copy WebKit{_debug}.dll back to AppleInternal/bin (SDK)

        * WebKit.vcproj/WebKit.vcproj:

2006-12-04  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Darin.

        Checkpoint of <rdar://4601521>
        Use CoreFoundation bundles w/ Localizable.strings for localization.

        We're using the WebKit extract-localizable-strings script to generate these files,
        and will use a cross-platform merged string file when we ship.

        * English.lproj/Localizable.strings: Added.
        * English.lproj/StringsNotToBeLocalized.txt: Added.
        * WebKit.vcproj/WebKit.def: Export WebLocalizableStrings routines
        * WebKit.vcproj/WebKit.vcproj: define FRAMEWORK_NAME=WebKit, added WebLocalizableStings, copy English.lproj to bin/en.lproj to get localized strings
        * WebKit.vcproj/WebKit_debug.def: Export WebLocalizableStrings routines
        * WebLocalizableStrings.cpp: Added.
        * WebLocalizableStrings.h: Added.

2006-12-04  Steve Falkenburg  <sfalken@apple.com>
       
        Checkpoint of <rdar://4601521>
        Use CoreFoundation bundles w/ Localizable.strings for localization.

        We're using the WebKit extract-localizable-strings script to generate these files,
        and will use a cross-platform merged string file when we ship.        

        * WebLocalizableStrings.h: Added.

2006-12-04  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin, Geoff.

        Don't use ResourceHandle::kill().

        * WebFrame.cpp:
        (WebFrame::stopMainResourceLoad):

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

        Reviewed by Oliver.

        Fixed <rdar://problem/4822632> clicks don't work if you move mouse immediately
        This bug was fixed by implementing EventHandler::handleDrag.

        * WebView.cpp:
        (WebView::WebView):
        Added a data member
        (WebView::handleMouseEvent):
        Create the mouse event telling it it activated the webview
        (WebViewWndProc):
        Call setMouseActivated upon receiving the relevent message
        * WebView.h:
        (WebView::setMouseActivated):
        Added this function so that the webview knows if it 
        was brought to the foreground by a mouse event

2006-12-02  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Ada.
        
        <rdar://4853816> CFNetwork crash on Vista loading any SSL page

        Change link order so secur32.dll is initialized prior to its
        indirect use in code called by CoreGraphics DllMain.
        
        To help avoid similar problems in the future, I reordered the
        imported DLLs by level/dependency so things like CoreFoundation
        is listed prior to CFNetwork and CoreGraphics.        

        * WebKit.vcproj/WebKit.vcproj:

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

        Reviewed by Adam.

        Changes to support sub-menus for WebCore ContextMenus.

        * Interfaces/IWebUIDelegate.idl: New tags.
        * WebContextMenuClient.cpp:
        (WebContextMenuClient::contextMenuItemSelected): ContextMenu::menu
        () is now called parentMenu()

2006-12-01  Steve Falkenburg  <sfalken@apple.com>

        Fix post-build step.
        Need to copy CoreFoundation resources.
        Bundles aren't config specific - removed ConfigSuffix from copy commands for resources.

        * WebKit.vcproj/WebKit.vcproj:

2006-11-30  Steve Falkenburg  <sfalken@apple.com>

        Fix build.
        Link against new WTF.lib

        * WebKit.vcproj/WebKit.vcproj:

2006-11-30  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Beth Dakin.
        
        Fixed <rdar://problem/4844838> Whole document leak seen 
        running HTML iBench

        Copied *very nice* (NOT!) WebKit Mac idiom of calling
        FrameLoader::detachFromParent when closing the WebView.
        We need to do this so event listeners that retain the document
        get destroyed, and so the unload event gets dispatched.

        This is pretty silly. Instead, the document/frame/interpreter should
        be responsible for cleaning up after itself.
        
        * WebView.cpp:
        (WebView::close):

2006-11-30  Steve Falkenburg  <sfalken@apple.com>

        build WebKit.lib to proper directory

        * WebKit.vcproj/WebKit.vcproj:

2006-11-29  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Anders.
        
        Minor fix to my recent COM registration/Vista fix.
        Ignore errors during registration.  Vista locks off more of
        HKCU\Software\Classes than I thought.

        * WebKitDLL.cpp:

2006-11-29  Adam Roben  <aroben@apple.com>

        Reviewed by Adele.

        Give archive builds a separate set of CLSIDs so that they may be
        installed/run alongside B&I builds and development builds.

        * Interfaces/WebKit.idl:
        * WebKit.vcproj/Interfaces.vcproj:
        * WebKit.vcproj/WebKit.vcproj: Don't register WebKit.dll if
        ARCHIVE_BUILD or BuildBot is defined.

2006-11-28  Ada Chan  <adachan@apple.com>

        Reviewed by Adam.

        <rdar://4850020> Clear cache in WebKit
        - Added the IWebCache interface, which contains API to clear and 
        disable the cache
        - Added implementation of WebCache which implements IWebCache.
        - the page cache related calls added in WebHistoryItem are
        just stubs right now because we haven't implemented page cache yet.        

        * Interfaces/IWebCache.idl: Added.
        * Interfaces/IWebHistoryItemPrivate.idl:
        * Interfaces/WebKit.idl:
        * WebBackForwardList.cpp:
        (WebBackForwardList::WebBackForwardList):
        (WebBackForwardList::clearPageCache):
        (WebBackForwardList::setPageCacheSize):
        (WebBackForwardList::pageCacheSize):
        * WebBackForwardList.h:
        * WebCache.cpp: Added.
        (WebCache::WebCache):
        (WebCache::~WebCache):
        (WebCache::createInstance):
        (WebCache::QueryInterface):
        (WebCache::AddRef):
        (WebCache::Release):
        (WebCache::statistics):
        (WebCache::empty):
        (WebCache::setDisabled):
        * WebCache.h: Added.
        * WebFrame.cpp:
        (WebSystemMainMemory):
        * WebFrame.h:
        * WebHistoryItem.cpp:
        (WebHistoryItem::releaseAllPendingPageCaches):
        (WebHistoryItem::hasPageCache):
        (WebHistoryItem::setHasPageCache):
        * WebHistoryItem.h:
        * WebKit.vcproj/Interfaces.vcproj:
        * WebKit.vcproj/WebKit.vcproj:
        * WebKit.vcproj/WebKitGUID.vcproj:
        * WebKitClassFactory.cpp:
        (WebKitClassFactory::CreateInstance):
        * WebKitDLL.cpp:
        (DllGetClassObject):

2006-11-28  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Beth Dakin.

        Fixed <rdar://problem/4844855> Should clarify when to create clients in 
        the WebCore client API
        
        All clients must now be supplied as constructor arguments. This clarifies 
        when you need to create clients, and also guarantees that objects can't 
        (for the most part) be in a clientless state.

        Layout tests pass. No leaks reported.
        
        * WebFrame.cpp:
        (WebFrame::initWithWebFrameView):

2006-11-28  Steve Falkenburg  <sfalken@apple.com>
       
        Make COM registration fall back to per-user for Vista LUA compatibility.

        Only affects our development builds since the installer will set these
        reg keys itself.

        * WebKitDLL.cpp:

2006-11-28  Adam Roben  <aroben@apple.com>

        Reviewed by Ada and Beth.

        Fix: <rdar://problem/4601523> Contextual Menus (in web content)

        * Interfaces/IWebUIDelegate.idl: Added a new delegate method to be
        called when the user clicks on one of the application's context menu
        items.

        Client updates from WebCore.

        * WebContextMenuClient.cpp:
        (WebContextMenuClient::addCustomContextMenuItems): Updated for method
        name changes.
        (WebContextMenuClient::contextMenuItemSelected): New client method that
        calls the UI delegate.
        * WebContextMenuClient.h: Updated to match ContextMenuClient.h

        Windows context menu event handling.

        * WebView.cpp:
        (WebView::handleContextMenuEvent): New method to send a context menu
        event down into WebCore.
        (WebView::performContextMenuAction): New method to tell the
        ContextMenuController that the user clicked on a context menu item.
        (WebView::handleMouseEvent): Return a bool to signify whether the event
        was handled.
        (WebView::mouseWheel): Ditto.
        (WebViewWndProc): Handle WM_CONTEXTMENU and WM_MENUCOMMAND messages,
        and pass unhandled events to DefWindowProc.
        * WebView.h: New declarations.

        Small (but necessary) fixes.

        * WebElementPropertyBag.cpp:
        (isEqual): Fixed to deal with LPCWSTRs, which is what was being passed
        in anyway.
        (WebElementPropertyBag::Read): Use FAILED() to check the return value
        of QueryInterface.
        * WebElementPropertyBag.h: Added missing #include.

2006-11-28  Alice Liu  <alice.liu@apple.com>

        Reviewed by Ada, Adam, and Lou.

        * WebEditorClient.h:
        * WebEditorClient.cpp:
        These 3 functions are, for now, hard-coded to return true, letting paste work.
        Commented out previous unused code because the app would crash if the editingDelegate was called
        (WebEditorClient::shouldDeleteRange):
        (WebEditorClient::shouldInsertNode):
        (WebEditorClient::shouldInsertText):
        stub impl for:
        (WebEditorClient::smartInsertDeleteEnabled):

        * WebView.cpp:
        moved where cut/copy/paste was handled from
        (WebView::execCommand):
        (WebViewWndProc):
        
        call the editor's version of these 4:
        (WebView::copy):
        (WebView::cut):
        (WebView::paste):
        (WebView::delete_):

2006-11-28  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Adam.

        Fixed <rdar://problem/4844848> REGRESSION: extra cross-library ref/deref 
        calls cause .5% PLT regression.
        
        Changed ref/deref calls to a single 'xxxDestroyed' call. Moved EditorClient
        from the Frame to the Page, since it's only responsible for
        Webview-level delegate calls.
        
        I don't really love this design, but it fixes the regression and allows
        a single WebKit object to implement multiple client interfaces.
        
        Layout tests pass.

2006-11-27  Beth Dakin  <bdakin@apple.com>

        Reviewed by Adam.

        Stub for canHandleRequest() to remove FIXME from ContextMenu.cpp

        * WebFrame.cpp:
        (WebFrame::canHandleRequest):
        * WebFrame.h:

2006-11-27  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        <rdar://problem/4814582>
        JavaScript window.resizeTo doesn't work
        
        * Interfaces/IWebUIDelegate.idl:
        Fix declarations.
        
        * WebChromeClient.cpp:
        (WebChromeClient::setWindowRect):
        (WebChromeClient::windowRect):
        Call the COM methods.

2006-11-26  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        Add "addMessageToConsole" method to the private ui delegate, and have the client call it.
        
        * Interfaces/IWebUIDelegatePrivate.idl:
        * WebFrame.cpp:
        (WebFrame::addMessageToConsole):
        * WebFrame.h:

2006-11-27  Brady Eidson  <beidson@apple.com>

        Reviewed by Ada
        
        Added removeAllIcons() for cache clearing

        * Interfaces/IWebIconDatabase.idl:
        * WebIconDatabase.cpp:
        (WebIconDatabase::removeAllIcons): Added
        * WebIconDatabase.h:

2006-11-21  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        Various fixes for getting file upload working.
        
        * WebFrame.cpp:
        (WebFrame::loadDataSource):
        Set the header fields on the new request.
        
        (WebFrame::submitForm):
        * WebFrame.h:
        Update submitForm, it now takes a FrameLoadRequest.
        
        * WebMutableURLRequest.cpp:
        (WebMutableURLRequest::addHTTPHeaderFields):
        (WebMutableURLRequest::httpHeaderFields):
        * WebMutableURLRequest.h:
        New functions for getting and setting HTTP headers.

2006-11-20  Anders Carlsson  <acarlsson@apple.com>

        Fix build.
        
        * WebEditorClient.cpp:
        (WebEditorClient::shouldInsertNode):
        (WebEditorClient::shouldInsertText):
        * WebEditorClient.h:

2006-11-19  Beth Dakin  <bdakin@apple.com>

        Reviewed by Adam.

        * WebContextMenuClient.cpp: Stubs for the currently client-
        dependent menu actions.
        (WebContextMenuClient::copyLinkToClipboard):
        (WebContextMenuClient::downloadURL):
        (WebContextMenuClient::copyImageToClipboard):
        (WebContextMenuClient::lookUpInDictionary):
        * WebContextMenuClient.h:
        * WebEditorClient.cpp:
        (WebEditorClient::shouldInsertText): Remove comment markers since 
        this is implemented now on the Mac.
        * WebEditorClient.h:

2006-11-17  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        Make sure that all .cpp files and none of the headers include config.h.
        
        * MemoryStream.cpp:
        * WebBackForwardList.cpp:
        * WebBackForwardList.h:
        * WebElementPropertyBag.cpp:
        * WebHTMLRepresentation.cpp:
        * WebKitClassFactory.cpp:
        * WebKitDLL.cpp:
        * WebMutableURLRequest.cpp:
        * WebMutableURLRequest.h:
        * WebURLResponse.cpp:
        * WebURLResponse.h:

2006-11-18  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        - fix leak of Document ref count seen in updateCounterpartURLForRSS

        * WebScriptObject.h: Changed destructor to be virtual. Without this,
        when the COM object was released we wouldn't release the underlying
        WebCore::Node.

2006-11-18  Darin Adler  <darin@apple.com>

        Reviewed by Adele.

        - fix leak of WebView when you close a tab or window

        * Interfaces/IWebView.idl: Added a close function, like the close method
        we added to WebView on the Macintosh side.

        * WebView.h: Added close function.
        * WebView.cpp: (WebView::close): First cut at implementation of close.

2006-11-16  Adam Roben  <aroben@apple.com>

        Reviewed by Steve, Ada.

        Added new WebMenuItemBaseApplicationTag to the WebMenuItemTag enum to
        keep WebKit apps from conflicting with WebKit context menu identifiers.

        * Interfaces/IWebUIDelegate.idl:

2006-11-15  Adam Roben  <aroben@apple.com>

        Reviewed by Anders.

        Added new WebContextMenuClient class, and moved context menu-related
        code there from WebChromeClient.

        * WebChromeClient.cpp:
        (WebChromeClient::setResizable):
        * WebChromeClient.h:
        * WebContextMenuClient.cpp: Added.
        (WebContextMenuClient::create):
        (WebContextMenuClient::WebContextMenuClient):
        (WebContextMenuClient::ref):
        (WebContextMenuClient::deref):
        (WebContextMenuClient::addCustomContextMenuItems):
        * WebContextMenuClient.h: Added.
        * WebKit.vcproj/WebKit.vcproj: Added new files.
        * WebView.cpp:
        (WebView::initWithFrame):

2006-11-15  Beth Dakin  <bdakin@apple.com>
        &   Adam Roben  <aroben@apple.com>

        Reviewed by Adam and Beth.

        Internal side of r17796.

        * WebChromeClient.cpp:
        (WebChromeClient::addCustomContextMenuItems):
        * WebChromeClient.h:

2006-11-15  Ada Chan  <adachan@apple.com>

        Reviewed by Steve.

        Fixed a bad free in DllRegisterServer.

        * WebKitDLL.cpp:
        (DllRegisterServer):

2006-11-15  Steve Falkenburg  <sfalken@apple.com>

        Take another pass at fixing COM registration

        * WebKitDLL.cpp:
        (substituteGUID):

2006-11-15  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Darin.

        Add an undo manager to the editor client. Make it possible for applications to invoke undo/redo.        

        * Interfaces/IWebView.idl:
        * WebEditorClient.cpp:
        (WebUndoManager::WebUndoManager):
        (WebUndoManager::~WebUndoManager):
        (WebUndoManager::clearCommands):
        (WebUndoManager::registerCommand):
        (WebUndoManager::undo):
        (WebUndoManager::redo):
        (WebUndoManager::canUndo):
        (WebUndoManager::canRedo):
        (WebUndoManager::undoOrRedo):
        (WebEditorClient::WebEditorClient):
        (WebEditorUndoCommand::WebEditorUndoCommand):
        (WebEditorUndoCommand::execute):
        (WebEditorClient::registerCommandForUndo):
        (WebEditorClient::registerCommandForRedo):
        (WebEditorClient::clearUndoRedoOperations):
        (WebEditorClient::canUndo):
        (WebEditorClient::canRedo):
        (WebEditorClient::undo):
        (WebEditorClient::redo):
        * WebEditorClient.h:
        * WebView.cpp:
        (WebView::execCommand):

2006-11-15  Steve Falkenburg  <sfalken@apple.com>

        Fix bug in my last check-in preventing proper COM registration

        * WebKitDLL.cpp:
        (DllRegisterServer):

2006-11-15  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam.

        Use separate CLSIDs for buildbot builds.
        
        This allows independent installs of an official build (for everyday web browsing/dogfooding)
        alongside a developer build (to write code, debug in Visual Studio).

        * Interfaces/WebKit.idl: Add a second set of CLSIDs for builbot-based builds.
        * WebKit.vcproj/Interfaces.vcproj: Add a preprocessor define __BUILDBOT__ set to 1 for official builds, 0 otherwise (use #if to check).
        * WebKitDLL.cpp: Convert CLSIDs to strings via code instead of copying string literals from elsewhere.
        (substituteGUID): Added.
        (DllUnregisterServer): Substitute CLSIDs into reg keys.
        (DllRegisterServer): Substitute CLSIDs into reg keys.

2006-11-15  Adam Roben  <aroben@apple.com>

        It's too early in the morning to be fixing the build.

        * WebEditorClient.cpp:
        (WebEditorClient::selectWordBeforeMenuEvent):
        (WebEditorClient::isEditable):

2006-11-15  Adam Roben  <aroben@apple.com>

        Build fix.

        * WebEditorClient.cpp:
        (selectWordBeforeMenuEvent):
        (isEditable):
        * WebEditorClient.h:

2006-11-14  Darin Adler  <darin@apple.com>

        Reviewed by Anders.

        - update for creation of EventHandler

        * WebView.cpp:
        (WebView::handleMouseEvent): Call methods now moved to EventHandler.
        (WebView::mouseWheel): Ditto.
        (WebView::elementAtPoint): Ditto.

2006-11-14  Anders Carlsson  <acarlsson@apple.com>

        Build fix.
        
        * WebEditorClient.cpp:
        (WebEditorClient::registerCommandForUndo):
        (WebEditorClient::registerCommandForRedo):
        (WebEditorClient::clearUndoRedoOperations):
        (WebEditorClient::canUndo):
        (WebEditorClient::canRedo):
        (WebEditorClient::undo):
        (WebEditorClient::redo):
        * WebEditorClient.h:

2006-11-14  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders

        Additional tweek to the FormData change

        * WebFrame.cpp:
        (WebFrame::loadDataSource):

2006-11-14  Adam Roben  <aroben@apple.com>

        Reviewed by Steve.

        Replace all instances of DebugBreak() with ASSERT_NOT_REACHED() so that
        it will be compiled out for Release builds.

        * DOMCSSClasses.cpp:
        * DOMCoreClasses.cpp:
        * DOMHTMLClasses.cpp:
        * WebBackForwardList.cpp:
        * WebDataSource.cpp:
        * WebFrame.cpp:
        * WebHTMLRepresentation.cpp:
        * WebHistoryItem.cpp:
        * WebIconDatabase.cpp:
        * WebMutableURLRequest.cpp:
        * WebNotification.cpp:
        * WebPreferences.cpp:
        * WebScriptObject.cpp:
        * WebView.cpp:

2006-11-13  Brady Eidson  <beidson@apple.com>

        Rubberstamped by Maciej

        Windows half of 17755 - Make FormData shared
        
        * WebFrame.cpp:
        (WebFrame::loadDataSource):
        (WebFrame::submitForm):
        * WebFrame.h:
        * WebMutableURLRequest.cpp:
        (WebMutableURLRequest::setFormData):
        (WebMutableURLRequest::formData):
        * WebMutableURLRequest.h:

2006-11-13  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        Various editing fixes.
        
        * WebView.cpp:
        (WebView::execCommand):
        Use the focused frame, not the main frame.
        
        (WebView::focusedTarget):
        Add FIXME comment.
        
        (WebView::keyDown):
        Return false for unknown keydown messages when not in editing mode.

2006-11-13  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Anders, Lou.
        
        Bump version for submit
        Copy CharacterSets directory for CF

        * WebKit.vcproj/VERSION: Bump version
        * WebKit.vcproj/WebKit.vcproj: Copy CharacterSets

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

        Reviewed by Darin Adler, Anders Carlsson.
        
        More window.open work.
        
        - Hooked up all of WebChromeClient that the App currently supports.

        * WebChromeClient.cpp:
        (WebChromeClient::scaleFactor):
        (WebChromeClient::focus):
        (WebChromeClient::unfocus):
        (WebChromeClient::createModalDialog):
        (WebChromeClient::show):
        (WebChromeClient::canRunModal):
        (WebChromeClient::runModal):
        (WebChromeClient::setToolbarsVisible):
        (WebChromeClient::toolbarsVisible):
        (WebChromeClient::setStatusbarVisible):
        (WebChromeClient::statusbarVisible):
        (WebChromeClient::setMenubarVisible):
        (WebChromeClient::menubarVisible):
        (WebChromeClient::setResizable):

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

        Fix line-endings and svn properties.

        * WebChromeClient.cpp:
        * WebChromeClient.h:

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

        Build fix.

        * MarshallingHelpers.cpp:
        * WebChromeClient.cpp:
        * WebChromeClient.h:
        * WebEditorClient.h:
        * WebMutableURLRequest.h:

2006-11-12  Geoffrey Garen  <ggaren@apple.com>

        * WebChromeClient.cpp: Fixed up #include.

2006-11-12  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Steve Falkenberg.

        Implemented window.open. Rough around the edges right now.

        - Converted WebMutableURLRequest to use a ResourceRequest as its
        backing store, to avoid yet another way of representing this data.
        - Changed WebMutableURLRequests's timeoutInterval to double, to match
        ResourceRequest and NSURLRequest.
        - Added BSTRToKURL and KURLToBSTR helper functions.
        - Added page accessor on WebView, and core(), for converting from WebView
        to page.

        * MarshallingHelpers.h: Removed unnecessary variable names from declarations.

2006-11-12  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Steve Falkenberg.
        
        Fixed up work-arounds to MSVC warning silliness.
        
        Replaced in-place disabling of "conditional expression is constant" warning
        with project-wide setting. (We use do { } while(0); for macro scoping.)
        
        Replaced in-place and project-wide disabling of "xxx was declared deprecated" 
        warning with project-wide setting only to disable Microsoft's made-up deprecation 
        warnings related to std:: functions.

        * WebChromeClient.cpp:
        (WebChromeClient::setResizable):
        * WebKit.vcproj/WebKit.vcproj:
        * WebKitDLL.h:

2006-11-11  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.

        - Fixed <rdar://problem/4831461> Crash in FrameLoader::~FrameLoader when navigating away from ebay.com 

        - Changed WebKit clients to match new virtual ref/deref scheme in WebCore.

        - Removed WebEditorClient from the WebCore namespace because it's a 
        WebKit class, not a WebCore class.

        - Standardized some header #includes to match Mac:
            - alphabetical
            - config.h, WebKitDLL.h, and class headers go together at the top
            - everything else comes after a line break

2006-11-11  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Oliver.

        Clean up the event handling code.
        
        * WebEditorClient.cpp:
        (WebEditorClient::shouldBeginEditing):
        (WebEditorClient::shouldEndEditing):
        (WebEditorClient::shouldApplyStyle):
        Change these to return true. Eventually they will call the editing delegate.
        
        * WebView.cpp:
        (WebView::execCommand):
        Update to call the editor's execCommand.
        
        (WebView::keyUp):
        New function that forwards the event to FrameWin.
        
        (editCommandForKey):
        New function that given a key returns an edit command from a table. Eventually this table
        should be moved into WebCore.
        
        (WebView::handleEditingKeyboardEvent):
        New function that handles editing events.
        
        (WebView::keyDown):
        If the frame is editable, call handleEditingKeyboardEvent.
        
        (WebViewWndProc):
        * WebView.h:

2006-11-11  Adam Roben  <aroben@apple.com>

        Reviewed by Geoff.

        Update WebCore #includes to use a flat directory structure.

        * DOMCSSClasses.cpp:
        * DOMCSSClasses.h:
        * DOMCoreClasses.cpp:
        * DOMEventsClasses.cpp:
        * DOMHTMLClasses.cpp:
        * MarshallingHelpers.cpp:
        * WebChromeClient.cpp:
        * WebChromeClient.h:
        * WebDataSource.cpp:
        * WebEditorClient.cpp:
        * WebEditorClient.h:
        * WebElementPropertyBag.cpp:
        * WebFrame.cpp:
        * WebFrame.h:
        * WebHTMLRepresentation.cpp:
        * WebHistory.cpp:
        * WebIconDatabase.cpp:
        * WebIconDatabase.h:
        * WebKit.vcproj/WebKit.vcproj:
        * WebKitDLL.cpp:
        * WebMutableURLRequest.cpp:
        * WebNotificationCenter.cpp:
        * WebPreferences.cpp:
        * WebURLResponse.cpp:
        * WebURLResponse.h:
        * WebView.cpp:
        * WebView.h:

2006-11-10  Adam Roben  <aroben@apple.com>

        Reviewed by Steve.

        Archive builds should still copy SDK .dlls into $WebKitOutputDir.

        * WebKit.vcproj/WebKit.vcproj:

2006-11-10  Brady Eidson  <beidson@apple.com>

        Enthousiastically review by Beth (with exclamation marks and everything!!!1!!one!)

        No need for WebIconDatabase to keep its own reference to the
        WebCore::IconDatabase
        
        * WebIconDatabase.cpp:
        (WebIconDatabase::WebIconDatabase):
        (WebIconDatabase::init):
        (WebIconDatabase::iconForURL):
        (WebIconDatabase::retainIconForURL):
        (WebIconDatabase::releaseIconForURL):
        * WebIconDatabase.h:

2006-11-10  Steve Falkenburg  <sfalken@apple.com>

        Bump version number for submission

        * WebKit.vcproj/VERSION:

2006-11-10  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin

        Keep windows build from breaking

        * WebFrame.cpp:
        (WebFrame::dispatchDidReceiveIcon):
        * WebFrame.h:

2006-11-10  Oliver Hunt  <oliver@apple.com>

        Build fix
        
        sprintf -> format (from Maciej's earlier change to WebCore)

        * WebView.cpp:
        (osVersion):
        (WebView::userAgentForKURL):

2006-11-09  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam.
        
        Copy resources for CFNetwork (needed for next SDK)

        * WebKit.vcproj/WebKit.vcproj:

2006-11-09  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej.
        
        Fix crash on unknown protocol
        
        * WebFrame.cpp:
        (WebFrame::didFailWithError):

2006-11-09  Lou Amadio  <lamadio@apple.com>

        Reviewed by mjs
        Correct the broken search implementations based on original webkit
        <rdar://4827714>

        * WebView.cpp:
        (WebView::searchFor):
        (WebView::generateSelectionImage):
        (WebView::selectionImageRect):

2006-11-09  Adam Roben  <aroben@apple.com>

        Reviewed by Steve.

        Put the OpenSource revision in the WebKit.dll version info.

        * WebKit.vcproj/WebKit.vcproj: touch WebKit.rc before building to force
        it to recompile.
        * WebKit.vcproj/auto-version.sh: Get the OpenSource revision and put it in autoversion.h.

2006-11-09  Adam Roben  <aroben@apple.com>

        Fix line-endings.

        * WebEditorClient.cpp:

2006-11-09  Oliver Hunt  <oliver@apple.com>

        Reviewed by Anders.

        Build fixes

        * WebEditorClient.cpp:
        (WebEditorClient::respondToChangedContents):
        * WebEditorClient.h:

2006-11-08  Adam Roben  <aroben@apple.com>

        Reviewed by Steve.

        Make the same change here as made in r11013.

        * WebKit.vcproj/auto-version.sh:

2006-11-08  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Geoff.

        - added ResourceError class and didFailWithError client method
        
        * WebFrame.cpp:
        (WebFrame::didFinishLoading):
        (WebFrame::didFailWithError):
        * WebFrame.h:

2006-11-08  Adam Roben  <aroben@apple.com>

        Build fix.

        * WebEditorClient.cpp: Added stubs for new methods from EditorClient.h.
        (WebEditorClient::shouldBeginEditing):
        (WebEditorClient::shouldEndEditing):
        (WebEditorClient::didBeginEditing):
        (WebEditorClient::didEndEditing):
        * WebEditorClient.h: Added new methods from EditorClient.h and cleaned
        up placement of *s.

2006-11-08  Beth Dakin  <bdakin@apple.com>

        Reviewed by Adam.

        Add clause for new WebElementIsContentEditableKey to the Read 
        fucntion.

        * Interfaces/IWebView.idl:
        * WebElementPropertyBag.cpp:
        (WebElementPropertyBag::Read):

2006-11-07  Ada Chan  <adachan@apple.com>

        Reviewed by Steve.
        
        Added a new API in IWebFramePrivate called firstLayoutDone that returns whether the frame has done its first layout.
        Implement that API in WebFrame.

        * Interfaces/IWebFramePrivate.idl:
        * WebFrame.cpp:
        (WebFrame::WebFrame):
        (WebFrame::firstLayoutDone):
        (WebFrame::loadDataSource):
        (WebFrame::didFirstLayout):
        * WebFrame.h:

2006-11-07  Lou Amadio  <lamadio@apple.com>

        Reviewed by sfalken, adam
         Implemented Find banner, overlay, bouncy.
         plummed some find, search and marking in WebCore & WebKit
         Added SDC - a DC wrapper with knowledge of CG
         Added button element
         Ported AppKit's oval button drawing code
         Abstracted the high performance animations

        * Interfaces/IWebUIDelegatePrivate.idl:
        * Interfaces/IWebView.idl:
        * WebFrame.h:
        * WebView.cpp:
        (WebView::scrollBackingStore):
        (incrementFrame):
        (WebView::searchFor):
        (WebView::markAllMatchesForText):
        (WebView::unmarkAllTextMatches):
        (WebView::rectsForTextMatches):
        (WebView::generateSelectionImage):
        (WebView::selectionImageRect):
        (EnumTextMatches::EnumTextMatches):
        (EnumTextMatches::QueryInterface):
        (EnumTextMatches::AddRef):
        (EnumTextMatches::Release):
        (EnumTextMatches::Next):
        (EnumTextMatches::Skip):
        (EnumTextMatches::Reset):
        (EnumTextMatches::Clone):
        (createMatchEnumerator):
        * WebView.h:

2006-11-08  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        More fiddling with midl to get our JSC API types recognized.
        
        * Interfaces/IWebFrameLoadDelegate.idl:

2006-11-07  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Anders.
        
        Removed ScreenClient. It was highly unpopular, risking my midterm re-election.
        
        None of Screen's responsibilities require up-calls to WebKit or delegates, 
        so WebCore can handle it all.

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

        Reviewed by Geoff.

        - moved loader code from Frame/FrameMac to FrameLoader

        * WebFrame.cpp:
        (WebFrame::loadData):
        (WebFrame::loadHTMLString):
        (WebFrame::stopLoading):
        (WebFrame::reload):
        (WebFrame::initWithWebFrameView):
        (WebFrame::loadDataSource):
        (WebFrame::didReceiveResponse):
        (WebFrame::didReceiveData):
        (WebFrame::didFinishLoading):
        (WebFrame::setTitle):
        (WebFrame::dispatchDidHandleOnloadEvents):
        (WebFrame::detachFrameLoader):
        (WebFrame::hasWebView):
        (WebFrame::hasFrameView):
        (WebFrame::hasBackForwardList):
        (WebFrame::resetBackForwardList):
        (WebFrame::provisionalItemIsTarget):
        (WebFrame::loadProvisionalItemFromPageCache):
        (WebFrame::invalidateCurrentItemPageCache):
        (WebFrame::privateBrowsingEnabled):
        (WebFrame::makeDocumentView):
        (WebFrame::makeRepresentation):
        (WebFrame::forceLayout):
        (WebFrame::forceLayoutForNonHTML):
        (WebFrame::updateHistoryForCommit):
        (WebFrame::updateHistoryForBackForwardNavigation):
        (WebFrame::updateHistoryForReload):
        (WebFrame::updateHistoryForStandardLoad):
        (WebFrame::updateHistoryForInternalLoad):
        (WebFrame::updateHistoryAfterClientRedirect):
        (WebFrame::setCopiesOnScroll):
        (WebFrame::tokenForLoadErrorReset):
        (WebFrame::resetAfterLoadError):
        (WebFrame::doNotResetAfterLoadError):
        (WebFrame::willCloseDocument):
        (WebFrame::detachedFromParent1):
        (WebFrame::detachedFromParent2):
        (WebFrame::detachedFromParent3):
        (WebFrame::detachedFromParent4):
        (WebFrame::loadedFromPageCache):
        (WebFrame::dispatchDidReceiveServerRedirectForProvisionalLoad):
        (WebFrame::dispatchDidCancelClientRedirect):
        (WebFrame::dispatchWillPerformClientRedirect):
        (WebFrame::dispatchDidChangeLocationWithinPage):
        (WebFrame::dispatchWillClose):
        (WebFrame::dispatchDidStartProvisionalLoad):
        (WebFrame::dispatchDidReceiveTitle):
        (WebFrame::dispatchDidCommitLoad):
        (WebFrame::dispatchDidFinishLoad):
        (WebFrame::dispatchDidFirstLayout):
        (WebFrame::dispatchShow):
        (WebFrame::cancelPolicyCheck):
        (WebFrame::dispatchWillSubmitForm):
        (WebFrame::dispatchDidLoadMainResource):
        (WebFrame::clearLoadingFromPageCache):
        (WebFrame::isLoadingFromPageCache):
        (WebFrame::revertToProvisionalState):
        (WebFrame::clearUnarchivingState):
        (WebFrame::progressStarted):
        (WebFrame::progressCompleted):
        (WebFrame::setMainFrameDocumentReady):
        (WebFrame::willChangeTitle):
        (WebFrame::didChangeTitle):
        (WebFrame::finishedLoading):
        (WebFrame::finalSetupForReplace):
        (WebFrame::setDefersLoading):
        (WebFrame::isArchiveLoadPending):
        (WebFrame::cancelPendingArchiveLoad):
        (WebFrame::clearArchivedResources):
        (WebFrame::canShowMIMEType):
        (WebFrame::representationExistsForURLScheme):
        (WebFrame::generatedMIMETypeForURLScheme):
        (WebFrame::frameLoadCompleted):
        (WebFrame::restoreScrollPositionAndViewState):
        (WebFrame::provisionalLoadStarted):
        (WebFrame::shouldTreatURLAsSameAsCurrent):
        (WebFrame::addHistoryItemForFragmentScroll):
        (WebFrame::didFinishLoad):
        (WebFrame::prepareForDataSourceReplacement):
        (WebFrame::userAgent):
        * WebFrame.h:
        * WebView.cpp:
        (WebView::stringByEvaluatingJavaScriptFromString):

2006-11-07  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Oliver.

        Call IWebFrameLoadDelegate::windowScriptObject available when the
        window script object is available.
        
        * Interfaces/IWebFrameLoadDelegate.idl:
        Get MIDL to understand the JSC API types.
        
        * WebFrame.cpp:
        (WebFrame::windowScriptObjectAvailable):
        Call into the delegate.
        
        * WebFrame.h:

2006-11-07  Steve Falkenburg  <sfalken@apple.com>

        Versioning

        * WebKit.vcproj/VERSION:

2006-11-06  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Geoff.
        
        Export JavaScriptCore C API via WebKit.

        * WebKit.vcproj/WebKit.def:
        * WebKit.vcproj/WebKit_debug.def:

2006-11-06  Kevin McCullough  <kmccullough@apple.com>

        -Fix test fields accepting text.

        * WebKit.vcproj/WebKit.vcproj:

2006-11-06  Geoffrey Garen  <ggaren@apple.com>

        Oops. Forgot to add these files.
        
        Changed comment that Darin mentioned, too.

        * WebChromeClient.cpp:
        * WebScreenClient.cpp: Added.
        (WebScreenClient::create):
        (WebScreenClient::WebScreenClient):
        (WebScreenClient::depth):
        (WebScreenClient::depthPerComponent):
        (WebScreenClient::isMonochrome):
        (WebScreenClient::rect):
        (WebScreenClient::usableRect):
        * WebScreenClient.h: Added.

2006-11-06  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin.
        
        Stubbed out the Chrome and Screen clients.

        * WebChromeClient.cpp:
        (WebChromeClient::setWindowRect):
        (WebChromeClient::windowRect):
        (WebChromeClient::pageRect):
        (WebChromeClient::scaleFactor):
        (WebChromeClient::focus):
        (WebChromeClient::unfocus):
        (WebChromeClient::createWindow):
        (WebChromeClient::createModalDialog):
        (WebChromeClient::show):
        (WebChromeClient::setToolbarsVisible):
        (WebChromeClient::toolbarsVisible):
        (WebChromeClient::setStatusbarVisible):
        (WebChromeClient::statusbarVisible):
        (WebChromeClient::setScrollbarsVisible):
        (WebChromeClient::scrollbarsVisible):
        (WebChromeClient::setMenubarVisible):
        (WebChromeClient::menubarVisible):
        (WebChromeClient::setResizable):
        * WebChromeClient.h:
        * WebKit.vcproj/WebKit.vcproj:
        * WebView.cpp:
        (WebView::initWithFrame):

2006-11-06  Beth Dakin  <bdakin@apple.com>

        Reviewed by Anders.

        Oops! Silly mistake!

        * WebElementPropertyBag.cpp:
        (convertStringToVariant):

2006-11-06  Steve Falkenburg  <sfalken@apple.com>

        Fix build

        * WebMutableURLRequest.cpp:

2006-11-05  Beth Dakin  <bdakin@apple.com>

        Reviewed by Steve and Anders. And sort of Maciej.

        Here is a basic implementation of elementAtPoint for Boomer.

        * Interfaces/IWebView.idl: The definitions of the 
        WebElementPropertyBag keys.
        * MarshallingHelpers.cpp:
        (MarshallingHelpers::intRectToSafeArray): New safe array creation
        function that creates a safe array out of an IntRect.
        * MarshallingHelpers.h:
        * WebElementPropertyBag.cpp: Added. This is the equivalent of
        WebElementDictionary on the Mac.
        (WebElementPropertyBag::WebElementPropertyBag):
        (WebElementPropertyBag::~WebElementPropertyBag):
        (WebElementPropertyBag::QueryInterface):
        (WebElementPropertyBag::AddRef):
        (WebElementPropertyBag::Release):
        (isEqual):
        (convertStringToVariant):
        (WebElementPropertyBag::Read): This is the bulk of the class. It
        compares the input key to all of the possible keys and calls the
        appropriate function for each.
        (WebElementPropertyBag::Write): Writing is not actually allowed.
        * WebElementPropertyBag.h: Added.
        * WebKit.vcproj/WebKit.vcproj:
        * WebView.cpp:
        (WebView::elementAtPoint): Call into frame to get the HitTestResult
        for the point and set elementDictionary to the
        WebElementPropertyBag for the result.

2006-11-05  Steve Falkenburg  <sfalken@apple.com>

        Fix build breaks

        * WebFrame.cpp:
        * WebFrame.h:

2006-11-04  Darin Adler  <darin@apple.com>

        * WebView.cpp: (WebView::initWithFrame): Removed setMainFrame call and
        deref of Frame, now handled by Frame's constructor.

2006-11-03  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Adele.
        
        - replaced receivedRedirect with new willSendRequest delegate
        - removed most mac-specific loader functions
        - use ResourceResponse more in loader code

        * WebFrame.cpp:
        (WebFrame::willSendRequest): Rearranged from former receivedRedirect.
        * WebFrame.h:

2006-11-03  Anders Carlsson  <acarlsson@apple.com>

        Build fix.
        
        * WebChromeClient.cpp:
        
2006-11-03  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin, Beth.

        Updated to use ChromeClient.
        
        * WebChromeClient.cpp: Added.
        (WebChromeClient::create):
        (WebChromeClient::WebChromeClient):
        (WebChromeClient::canRunModal):
        (WebChromeClient::runModal):
        * WebChromeClient.h: Added.
        * WebKit.vcproj/WebKit.vcproj:
        * WebView.cpp:
        (WebView::initWithFrame):

2006-11-01  Ada Chan  <adachan@apple.com>

        Reviewed by sfalken.
        
        Implemented the DOM API that pubsub needs:
        IDOMDocument::getElementsByTagName
        IDOMDocument::getElementsByTagNameNS (they don't need this, but might as well add it)
        IDOMNodeList
        IDOMNode::nodeValue
        
        Added something I'll need for RSS integration:
        IWebHistoryItemPrivate::RSSFeedReferrer
        IWebHistoryItemPrivate::setRSSFeedReferrer

        * DOMCoreClasses.cpp:
        (DOMNode::nodeValue):
        (DOMNode::DOMNode):
        (DOMNode::~DOMNode):
        (DOMNode::createInstance):
        (DOMNodeList::QueryInterface):
        (DOMNodeList::item):
        (DOMNodeList::length):
        (DOMNodeList::DOMNodeList):
        (DOMNodeList::~DOMNodeList):
        (DOMNodeList::createInstance):
        (DOMDocument::getElementsByTagName):
        (DOMDocument::getElementsByTagNameNS):
        (DOMDocument::DOMDocument):
        (DOMDocument::~DOMDocument):
        (DOMElement::DOMElement):
        (DOMElement::~DOMElement):
        * DOMCoreClasses.h:
        (DOMNodeList::AddRef):
        (DOMNodeList::Release):
        (DOMNodeList::throwException):
        (DOMNodeList::callWebScriptMethod):
        (DOMNodeList::evaluateWebScript):
        (DOMNodeList::removeWebScriptKey):
        (DOMNodeList::stringRepresentation):
        (DOMNodeList::webScriptValueAtIndex):
        (DOMNodeList::setWebScriptValueAtIndex):
        (DOMNodeList::setException):
        * Interfaces/IWebHistoryItemPrivate.idl:
        * WebHistoryItem.cpp:
        (WebHistoryItem::WebHistoryItem):
        (WebHistoryItem::~WebHistoryItem):
        (WebHistoryItem::RSSFeedReferrer):
        (WebHistoryItem::setRSSFeedReferrer):
        * WebHistoryItem.h:

2006-10-31  Marvin Decker  <marv.decker@gmail.com>
        
        Reviewed by Maciej.
        
        - merged changes for:
        
                - fixed "Stop and reload don't work on the WebView"
                http://bugs.webkit.org/show_bug.cgi?id=11285
        
        Most of htis was already in this tree.

        * WebFrame.cpp:
        (WebFrame::stopLoading): Implement. Added FIXME.

2006-10-31  Steve Falkenburg  <sfalken@apple.com>

        Bumped version to 521.29

        * WebKit.vcproj/VERSION:

2006-10-30  Kevin McCullough  <KMcCullough@apple.com>

        Reviewed by Steve.

        - Added basic functionality for running javascript from the address bar.  Currently no return results are evaluated so use alert messages to see the results.

        * WebView.cpp:
        (WebView::stringByEvaluatingJavaScriptFromString):

2006-10-31  Adam Roben  <aroben@apple.com>

        Build fixes.

        * WebEditorClient.cpp: Add stubs for new methods.
        (WebEditorClient::isContinuousSpellCheckingEnabled):
        (WebEditorClient::isGrammarCheckingEnabled):
        (WebEditorClient::spellCheckerDocumentTag):
        * WebEditorClient.h: Add declarations for new methods.
        * WebFrame.cpp: Fix #includes to use new platform/graphics directory.
        * WebView.cpp: Ditto.
        * WebKit.vcproj/WebKit.vcproj: Add platform/graphics to include path.

2006-10-29  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam, Ada.

        Expose printing methods in IWebViewPrivate and removed LPARAM-based dispatching.
        Call StretchDIBits instead of BitBlt.
        Add a maximum DPI (currently set at 300) to speed up printing.
        Add support needed for print preview.

        * Interfaces/IWebViewPrivate.idl: added startPrintJob, endPrintJob, getPrintedPageCount, printPage
        * WebView.cpp: Added MAXIMUM_DPI setting to limit the size of print jobs for performance reasons
        (getPrintRects): Added. Factored out of print, added maximum DPI handling.
        (WebView::startPrintJob): Factored out of print
        (WebView::endPrintJob): Factored out of print
        (WebView::getPrintedPageCount): Factored out of print
        (WebView::printPage): Factored out of print.  Replaced call to BitBlt with StretchDIBits
        (WebViewWndProc): Re-add support for printing a window (used by bug reporter code)
        * WebView.h: added startPrintJob, endPrintJob, getPrintedPageCount, printPage

2006-10-30  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Adam.

        Add "null plugin" image resource.
        
        * WebKit.vcproj/WebKit.rc:
        * WebKit.vcproj/WebKit.vcproj:
        * WebKit.vcproj/nullplugin.png: Added.
        * WebKit.vcproj/resource.h:
        * WebKitDLL.cpp:
        (loadResourceIntoArray):

2006-10-29  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Anders.

        - added ResourceResponse class and didReceiveResponse delegate call

        * WebFrame.cpp:
        (WebFrame::didReceiveResponse): Updated from receivedResponse.
        * WebFrame.h:
        * WebURLResponse.cpp:
        (WebURLResponse::WebURLResponse): Reimplemented to work in terms
        of WebCore::ResourceResponse (ditto for below). Uses BString
        to convert strings as needed.
        (WebURLResponse::~WebURLResponse):
        (WebURLResponse::createInstance):
        (WebURLResponse::expectedContentLength):
        (WebURLResponse::initWithURL):
        (WebURLResponse::MIMEType):
        (WebURLResponse::suggestedFilename):
        (WebURLResponse::textEncodingName):
        (WebURLResponse::URL):
        (WebURLResponse::suggestedFileExtension):
        * WebURLResponse.h:

2006-10-29  Maciej Stachowiak  <mjs@apple.com>

        Rubber stamped by Darin.

        - renamed ResourceLoader to ResourceHandle (and same for related classes)

        * WebFrame.cpp:
        (WebFrame::loadDataSource):
        (WebFrame::receivedRedirect):
        (WebFrame::receivedResponse):
        (WebFrame::didReceiveData):
        (WebFrame::didFinishLoading):
        * WebFrame.h:
        * WebURLResponse.cpp:
        (WebURLResponse::createInstance):
        * WebURLResponse.h:
        * WebView.cpp:

2006-10-27  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Maciej.
        
        Tighten up warning levels by removing #pragma warning(push, 0), pop

        * WebBackForwardList.h:
        * WebFrame.h:
        * WebIconDatabase.h:

2006-10-25  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Darin.
        
        Checked in Luke's CG printing code

        * WebView.cpp:
        (WebView::print): added
        (WebViewWndProc): call print from WM_PRINTCLIENT
        * WebView.h: added print, m_pages, rearranged includes

2006-10-24  Steve Falkenburg  <sfalken@apple.com>

        Bump version to 521.28.6

        * WebKit.vcproj/VERSION:

2006-10-24  Anders Carlsson  <acarlsson@apple.com>

        * WebFrame.cpp:
        (WebFrame::loadDataSource):
        Forgot to save before committing. Call begin before trying to access the document.

2006-10-24  Anders Carlsson  <acarlsson@apple.com>

        Fix build. (Update for changes to ResourceLoader)
        
        * WebFrame.cpp:
        (WebFrame::loadDataSource):
        * WebURLResponse.cpp:
        (WebURLResponse::createInstance):

2006-10-23  Ada Chan  <adachan@apple.com>

        Reviewed by sfalken.
        
        We forgot to add a reference in WebNotificationCenter::addObserver.

        * WebNotificationCenter.cpp:
        (WebNotificationCenter::addObserver):

2006-10-23  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Lou.

        * MarshallingHelpers.cpp:
        (MarshallingHelpers::BSTRToCFStringRef): Fix leak in BSTRToCFStringRef
        * WebEditorClient.cpp:
        (WebEditorClient::WebEditorClient): Break dependency cycle by not holding a COM ref to the WebView
        (WebEditorClient::~WebEditorClient): Break dependency cycle by not holding a COM ref to the WebView
        * WebFrame.cpp:
        (WebFrame::initWithWebFrameView):
        (WebFrame::windowResizerRect): Fix reference leaks
        * WebHistory.cpp:
        (createUserInfoFromArray): Fixed leak of key CFStringRef.
        (WebHistory::setOptionalSharedHistory): Made this callable with a 0 to release shared history
        (_WebCoreHistoryProvider::_WebCoreHistoryProvider): Don't hold a ref to the WebHistory
        (_WebCoreHistoryProvider::~_WebCoreHistoryProvider): Don't hold a ref to the WebHistory
        (_WebCoreHistoryProvider::containsItemForURLLatin1): Don't hold a ref to the WebHistoryPrivate
        * WebHistoryItem.cpp:
        (WebHistoryItem::WebHistoryItem): Don't hold a reference to the WebIconDatabase
        * WebIconDatabase.cpp:
        (WebIconDatabase::~WebIconDatabase): Delete core icon db on delete
        * WebNotificationCenter.cpp:
        (ObserverKey::ObserverKey): Init data to 0 before calling assignment op
        (ObserverKey::operator=): Free old string, release old ref if needed before copy

2006-10-23  Adam Roben  <aroben@apple.com>

        Build fix.

        * WebFrame.cpp: Change header paths to point to new platform/network
        directory and subdirectories.
        * WebFrame.h: Ditto.
        * WebURLResponse.cpp: Ditto.
        * WebURLResponse.h: Ditto.
        * WebView.cpp: Ditto.
        * WebKit.vcproj/WebKit.vcproj: Add platform/network and subdirectories
        to AdditionalIncludeDirectories.

2006-10-23  Maciej Stachowiak  <mjs@apple.com>

        Rubber-stamped by Anders.

        - fixed for ResourceLoader refactoring.

        * WebFrame.cpp:
        (WebFrame::didReceiveData):
        (WebFrame::didFinishLoading):
        * WebFrame.h:

2006-10-21  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Geoff.

        Stub out the new shouldShowDeleteInterface method.

        * WebEditorClient.cpp:
        (WebEditorClient::shouldShowDeleteInterface):
        * WebEditorClient.h:

2006-10-20  Dave Hyatt  <hyatt@apple.com>

        Fix build bustage with spaces in names in cygwin home dirs with webkit's auto-version.sh script.
       
        * WebKit.vcproj/auto-version.sh:
       
        Fix a horrible memory leak with multiple windows.  WebViews need to delete their backing stores.
        
        * WebView.cpp:
        (WebView::~WebView):

2006-10-20  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Hyatt.
        
        Make the auto-version script work with paths that contain spaces

        * WebKit.vcproj/auto-version.sh:

2006-10-20  Steve Falkenburg  <sfalken@apple.com>

        Build fix.

        * WebView.cpp:
        (webKitVersion):

2006-10-20  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Ada.
        
        <rdar://4778502> Boomer userAgent string needs to support pulling in proper build #, plus customization
        
        Useragent/versioning changes
        
        Stamp auto-generated version number into DLL and into user agent.
        Generate a real user agent string instead of hardcoding one.
        Support client supplying an application name for the user agent.
        Support client overriding the useragent (for debug menu).
        Support per-URL user agents (not used at least for now).

        Also fixed a bug I recently introduced that broke form submit.
        
        * WebFrame.cpp:
        (WebFrame::loadData): stash original request URL
        (WebFrame::loadHTMLString): stash original request URL
        (WebFrame::loadDataSource): stash original request URL
        (WebFrame::userAgentForURL): implemented
        (WebFrame::originalRequestURL): implemented
        * WebFrame.h: Changed FrameWinClient userAgent() to userAgentForURL in case we want to serve specific URLs for compatibility, added originalRequestURL
        * WebKit.vcproj/PRODUCTVERSION: Added.
        * WebKit.vcproj/VERSION: Added.
        * WebKit.vcproj/WebKit.rc: Stamp autogenerated version number at build time.
        * WebKit.vcproj/WebKit.vcproj: Stamp autogenerated version number at build time.
        * WebKit.vcproj/auto-version.sh: Added.
        * WebKit.vcproj/autoversion.h: Removed.
        * WebView.cpp:
        (WebView::WebView): Remove some no longer needed initialization
        (WebView::~WebView): Remove some no longer needed cleanup
        (osVersion): call to return the OS version as a string
        (language): call to return the language as a string
        (webKitVersion): call to return the version of WebKit as a string
        (WebView::userAgentForKURL): fast version of userAgentForURL (no BSTR marshalling)
        (WebView::initWithFrame): Use String instead of BSTR. 
        (WebView::setApplicationNameForUserAgent): implemented
        (WebView::applicationNameForUserAgent): implemented
        (WebView::setCustomUserAgent): implemented
        (WebView::customUserAgent): implemented
        (WebView::userAgentForURL): implemented
        (WebView::setCustomTextEncodingName): switch to WebCore::String storage
        (WebView::customTextEncodingName): switch to WebCore::String storage
        (WebView::setGroupName): switch to WebCore::String storage
        (WebView::groupName): switch to WebCore::String storage
        (WebView::onNotify):
        * WebView.h: Switch over to using WebCore::Strings instead of BSTRs in a few places, added m_applicationName, removed m_frameName.

2006-10-20  Alice Liu  <alice.liu@apple.com>

        Reviewed by Steve and Maciej.

        Adding knowledge of the Editor and EditorClient to Windows WebKit

        * Interfaces/IWebEditingDelegate.idl:
        needs IWebView.idl
        
        * WebEditorClient.cpp: Added
        (WebEditorClient::WebEditorClient):
        (WebEditorClient::~WebEditorClient):
        (WebEditorClient::shouldDeleteRange):
        (WebEditorClient::shouldBeginEditingInRange):
        (WebEditorClient::shouldEndEditingInRange):
        (WebEditorClient::shouldInsertNode):
        (WebEditorClient::shouldApplyStyle):
        (WebEditorClient::shouldChangeTypingStyle):
        (WebEditorClient::webViewDidBeginEditing):
        (WebEditorClient::webViewDidChange):
        (WebEditorClient::webViewDidEndEditing):
        (WebEditorClient::webViewDidChangeTypingStyle):
        (WebEditorClient::webViewDidChangeSelection):
        
        * WebEditorClient.h: Added.
        
        * WebFrame.cpp:
        (WebFrame::initWithWebFrameView):
        created an editor client
        
        * WebKit.vcproj/WebKit.vcproj:
        added WebEditorClient files

2006-10-20  Steve Falkenburg  <sfalken@apple.com>

        Implement (barely) more of DOMWindow.idl.

        * Interfaces/DOMWindow.idl:

2006-10-20  Adam Roben  <aroben@apple.com>

        Reviewed by Darin.

        Build fix.
        Stubbing out DOMWindow.idl, which was forgotten in the last checkin.

        * Interfaces/DOMWindow.idl: Added.

2006-10-19  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam.

        <rdar://4771958>
        Holding down Ctrl when a redirect happens opens the redirected page in a new tab

        <rdar://4781981> 
        View Source is using syntax highlighting and should probably punt on
        that (due to its many issues) and show the original data in a WebView
        as plaintext.
        
        Also added a bunch of DOM bindings for events.

        * DOMEventsClasses.cpp: Added.
        * DOMEventsClasses.h: Added.
        * Interfaces/DOMEvents.idl: Added.
        * WebFrame.cpp:
        (WebFrame::loadData): Implemented
        (WebFrame::openURL): Added triggeringEvent parameter
        * WebFrame.h: Added triggeringEvent parameter
        * WebKit.vcproj/Interfaces.vcproj: Added DOMEvents.idl, DOMWindow.idl
        * WebKit.vcproj/WebKit.vcproj: Added DOMEventsClasses.cpp, DOMEventsClasses.h 
        * WebKit.vcproj/WebKitGUID.vcproj: Added DOMEvents_i.c

2006-10-19  Anders Carlsson <acarlsson@apple.com>

        * WebFrame.cpp:
        (WebFrame::initWithWebFrameView):
        Build fix.

2006-10-18  Alice Liu  <alice.liu@apple.com>

        Reviewed by Steve.

        Any file that #includes WebView.h also needed to include 
        IWebURLResponse.h since IWebView.h needed it.  Adding this 
        to the IDL file.
        
        * Interfaces/IWebDataSource.idl:
        re-arranged imports because not all were being generated due to weird IDL file compiler bug

        * Interfaces/IWebView.idl:
        added reference to IWebURLResponse.h
                
        * WebFrame.cpp:
        * WebKitClassFactory.cpp:
        * WebView.cpp:
        removed reference to IWebURLResponse.h
        

2006-10-18  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Lou.

        <rdar://4781998> Need API for setting the rendering modes
        
        Added font smoothing preference
        Fixed some COM interface typos
        Removed use of IWebImage (we use HBITMAP instead)

        * DOMHTMLClasses.cpp:
        (DOMHTMLDocument::body): fixed typos
        (DOMHTMLFormElement::elements): fixed typos
        (DOMHTMLInputElement::form): fixed typos
        (DOMHTMLTextAreaElement::form): fixed typos
        * DOMHTMLClasses.h: fixed typos
        * Interfaces/DOMCSS.idl: fixed typos
        * Interfaces/DOMHTML.idl: fixed typos
        * Interfaces/DOMRange.idl: fixed typos
        * Interfaces/IWebArchive.idl: fixed typos
        * Interfaces/IWebDataSource.idl: fixed typos
        * Interfaces/IWebDocument.idl: fixed typos
        * Interfaces/IWebEditingDelegate.idl: fixed typos
        * Interfaces/IWebFrameLoadDelegate.idl: fixed typos
        * Interfaces/IWebFrameView.idl: fixed typos
        * Interfaces/IWebHistoryItem.idl: fixed typos
        * Interfaces/IWebIconDatabase.idl: fixed typos
        * Interfaces/IWebImage.idl: Removed.
        * Interfaces/IWebPreferences.idl: added font smoothing getter/setter
        * Interfaces/IWebURLAuthenticationChallenge.idl:
        * Interfaces/IWebView.idl: fixed typos
        * Interfaces/WebKit.idl: removed IWebImage
        * WebDataSource.cpp:
        (WebDataSource::webArchive): fixed typos
        (WebDataSource::mainResource): fixed typos
        (WebDataSource::subresourceForURL): fixed typos
        * WebDataSource.h: fixed typos
        * WebHistoryItem.cpp:
        (WebHistoryItem::icon): fixed typos
        * WebHistoryItem.h: fixed typos
        * WebKit.vcproj/Interfaces.vcproj: removed IWebImage
        * WebKit.vcproj/WebKitGUID.vcproj: removed IWebImage
        * WebPreferenceKeysPrivate.h: added font smoothing prefs key
        * WebPreferences.cpp:
        (WebPreferences::initialize): font smoothing pref
        (WebPreferences::fontSmoothing): added
        (WebPreferences::setFontSmoothing): added
        * WebPreferences.h: added font smoothing getter/setter
        * WebView.cpp:
        (WebView::windowScriptObject): fixed typos
        (WebView::mainFrameIcon): removed IWebImage
        (WebView::undoManager): fixed typos
        * WebView.h:

2006-10-17  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by ggaren.

        <rdar://4781999> History menu gets borked if you visit a page with no title.
        <rdar://4782002> The History menu is frequently utterly corrupted, with incorrect favicons next to mismatched titles.
        <rdar://4780252> Page titles in History menu are incorrect
        <rdar://4760334> Pages without title show an old title instead of a default title

        * Interfaces/IWebHistoryItemPrivate.idl: added setTitle to set title for a page after we receive it
        * WebFrame.cpp: Removed unnecessary WebFramePrivate::title
        (WebFrame::goToItem): Get back/forward list via frame-aware getter
        (WebFrame::receivedRedirect): Use BString
        (WebFrame::receivedResponse): Use BString. Get back/forward list, history via frame-aware getters.
        (WebFrame::createFrame): Use BString
        (WebFrame::submitForm): Clean up up BSTR usage
        (WebFrame::setTitle): Set title in back/forward, history when received
        (WebFrame::backForwardList): Frame-aware getter for back/forward
        (WebFrame::webHistory): Frame-aware getter for history
        * WebFrame.h: Added frame-aware getters for history, back/forward
        * WebHistory.cpp: Reorder includes.
        (WebHistory::QueryInterface): Support QI to WebHistory via CLSID (avoids yucky static cast in other places)
        * WebHistoryItem.cpp:
        (WebHistoryItem::setTitle): Added
        * WebHistoryItem.h: Added setTitle
        * WebView.cpp:
        (WebView::QueryInterface): Support QI to WebView via CLSID

2006-10-17  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Maciej.
        
        Switch over to ICU 3.6

        * WebKit.vcproj/WebKit.vcproj:

2006-10-17  Oliver Hunt  <oliver@apple.com>

        Reviewed by Brady.

        Fix flickering cursor

        * WebView.cpp:
        (registerWebViewWindowClass):

2006-10-15  Adam Roben  <aroben@apple.com>

        Reviewed by Geoff, Anders.

        Fix crash on startup.

        We were crashing somewhere inside Frame::setResourceRequest. I'm not
        sure what change made this start crashing.

        * WebFrame.cpp:
        (WebFrame::receivedResponse): Remove useless calls to
        Frame::resourceRequest and Frame::setResourceRequest.

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

        Make sure the backing store is flushed when themes are changed.

        Reviewed by aroben

        * WebView.cpp:
        (WebViewWndProc):

2006-10-12  Adam Roben  <aroben@apple.com>

        Build fix (broken by OpenSource r17006)

        * WebFrame.cpp:
        (WebFrame::receivedResponse):

2006-10-12  Dave Hyatt  <hyatt@apple.com>

        Implement full-blown double buffering (keeping a bitmap in the WebView that holds the backing store for it).
        
        Reviewed by mjs
        
        * WebFrame.cpp:
        (WebFrame::addToDirtyRegion):
        (WebFrame::scrollBackingStore):
        (WebFrame::updateBackingStore):
        * WebFrame.h:
        * WebView.cpp:
        (WebView::WebView):
        (WebView::ensureBackingStore):
        (WebView::addToDirtyRegion):
        (WebView::scrollBackingStore):
        (WebView::updateBackingStore):
        (WebView::paint):
        (WebView::paintIntoBackingStore):
        (WebView::paintIntoWindow):
        (WebViewWndProc):
        * WebView.h:
        (WebView::topLevelFrame):

2006-10-10  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam.
        
        <rdar://4775676>
        Crash in CoreFoundation parsing a "corrupt" plist
        
        Prevent crash when we encounter a corrupt history plist by using
        structured exception handling to catch the crash and return
        an empty history list.

        * WebHistory.cpp:
        (WebHistory::loadHistoryGutsFromURL):

2006-10-11  Darin Adler  <darin@apple.com>

        Reviewed by Beth.

        - fix problem where you can't type in subframes

        * WebView.cpp: (WebViewWndProc): Use WebView's focusedTargetFrame()
        function instead of sending everything to the main frame.

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

        Reviewed by Steve

        <rdar://4721579> - WebPreferences for IconDatabase hooked up
        This completes the above task by implementing the icon database location preference
        
        * WebIconDatabase.cpp:
        (WebIconDatabase::init): Get the location from the prefs, fallback to the default via shell call
        * WebPreferenceKeysPrivate.h:
        * WebPreferences.cpp:
        (WebPreferences::initialize):
        (WebPreferences::iconDatabaseLocation):
        (WebPreferences::setIconDatabaseLocation):

2006-10-07  Adam Roben  <aroben@apple.com>

        Reviewed by Anders.

        Merge of OpenSource r16884
        http://bugs.webkit.org/show_bug.cgi?id=11199
        Update Session History when a load is committed rather than completed.

        * WebFrame.cpp:
        (WebFrame::receivedResponse):
        (WebFrame::receivedAllData):

2006-10-07  Adam Roben  <aroben@apple.com>

        Reviewed by Steve.

        Fix for failed ASSERT on iBench.

        * WebFrame.cpp:
        (WebFrame::receivedAllData): Be a bit more lenient about what
        ResourceLoader has called WebFrame::receivedAllData

2006-10-06  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Adam Roben, esq.
        
        Fixed <rdar://4768789> Crash on ebay.com in Frame::didOpenURL
        
        The issue was a resource loader making a callback to a
        frame after the frame had been destroyed. This doesn't happen on Mac
        because Mac WebKit cancels all loads before tearing down frames.
        
        The solution is to add a callback to Win WebKit to allow a frame
        to cancel its main resource load. This is a temporary work-around.
        It is temporary because it doesn't address pending subresource loads.
        The long-term solution we anticipate is to have a legitimate loader
        inside WebCore.

        * WebFrame.cpp:
        (WebFrame::loadDataSource):
        (WebFrame::stopMainResourceLoad):
        (WebFrame::receivedAllData):
        * WebFrame.h:

006-10-06  Steve Falkenburg  <sfalken@apple.com>

        Use a better versioning scheme.
        
        Out version #s for Boomer are the same as the last Mac
        submission + the addition of "b".
        
        This first versioned submission is 521.28b

        * WebKit.vcproj/WebKit.rc:

2006-10-06  Steve Falkenburg  <sfalken@apple.com>

        Bump version number.

        * WebKit.vcproj/WebKit.rc:

2006-10-06  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam, Lou.

        <rdar://4754295> Corrupt history.plist = crash on startup
        
        Fix improper CF usage that likely led to retain/release imbalances.

        Resizer fixes.
        We now properly invalidate and draw overlapping contents or opaque.

        * Interfaces/IWebUIDelegatePrivate.idl:
        * WebFrame.cpp:
        (WebFrame::paintGripper):
        * WebHistory.cpp:
        (WebHistory::saveHistoryGuts):
        * WebHistoryItem.cpp:
        (WebHistoryItem::dictionaryRepresentation):

2006-10-06  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by aroben.

        Scrollbars now dodge resizing gripper.
        Resizing gripper now paints via web ui delegate.
        Debug vcproj fixes.
        Fix redirects to search.com.
        Add support for painting and cursor tracking of resizer.

        * Interfaces/IWebUIDelegatePrivate.idl: added webViewDrawResizer.
        * WebFrame.cpp:
        (WebFrame::paint): added gripper drawing code.
        (WebFrame::receivedResponse): tell the app when we commit a page load.
        (WebFrame::windowResizerRect): added.
        (WebFrame::paintGripper): added.
        * WebFrame.h: added windowResizerRect, paintGripper.
        * WebKit.vcproj/WebKit.vcproj: Link against debug libs, debug MSVC library in debug build.
        * WebView.cpp:
        (WebView::WebView):
        (WebView::~WebView):
        (WebView::inResizer):
        (WebViewWndProc):
        (WebView::setUIDelegate):
        * WebView.h:

2006-10-05  Dave Hyatt  <hyatt@apple.com>

        Fix clipping and transforms by making sure to propagate them as they happen on the CGContext over into the HDC.
        
        * WebFrame.cpp:
        (WebFrame::paintSingleRect):

2006-10-05  Adam Roben  <aroben@apple.com>

        Build fix.

        * WebKit.vcproj/WebKitGUID.vcproj: Fix patch to IWebFramePrivate_i.c

2006-10-05  Anders Carlsson <acarlsson@apple.com>

        Reviewed by Maciej.

        A couple of changes needed for the new DumpRenderTree.
        
        * DOMCoreClasses.cpp:
        (DOMDocument::documentElement):
        Implement.
        
        * DOMHTMLClasses.cpp:
        (DOMHTMLElement::innerHTML):
        (DOMHTMLElement::setInnerHTML):
        (DOMHTMLElement::innerText):
        (DOMHTMLElement::setInnerText):
        * DOMHTMLClasses.h:
        (DOMHTMLFormElement::innerHTML):
        (DOMHTMLFormElement::setInnerHTML):
        (DOMHTMLFormElement::innerText):
        (DOMHTMLFormElement::setInnerText):
        (DOMHTMLSelectElement::innerHTML):
        (DOMHTMLSelectElement::setInnerHTML):
        (DOMHTMLSelectElement::innerText):
        (DOMHTMLSelectElement::setInnerText):
        (DOMHTMLOptionElement::innerHTML):
        (DOMHTMLOptionElement::setInnerHTML):
        (DOMHTMLOptionElement::innerText):
        (DOMHTMLOptionElement::setInnerText):
        (DOMHTMLInputElement::innerHTML):
        (DOMHTMLInputElement::setInnerHTML):
        (DOMHTMLInputElement::innerText):
        (DOMHTMLInputElement::setInnerText):
        (DOMHTMLTextAreaElement::innerHTML):
        (DOMHTMLTextAreaElement::setInnerHTML):
        (DOMHTMLTextAreaElement::innerText):
        (DOMHTMLTextAreaElement::setInnerText):
        * Interfaces/DOMHTML.idl:
        Implement innerText and add stubs for innerHTML, setInnerHTML and setInnerText.
        
        * Interfaces/IWebFramePrivate.idl: Added.
        * WebFrame.cpp:
        (WebFrame::QueryInterface):
        (WebFrame::renderTreeAsExternalRepresentation):
        (WebFrame::receivedAllData):
        Call Frame::end() before calling the frame load delegate methods. This matches the mac behavior.
        
        (WebFrame::didFirstLayout):
        (WebFrame::handledOnloadEvents):
        Add null checks for frameLoadDelegatePriv, all clients might not use it.
        
        * WebFrame.h:
        * WebKit.vcproj/Interfaces.vcproj:
        * WebKit.vcproj/WebKitGUID.vcproj:
        Add new interface, IWebFramePrivate, which supports getting the render tree as text.

2006-10-05  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Adam.

        - changed ResourceLoader to be refcounted

        It keeps a ref on itself while loading as well. This makes
        for a much saner memory management model than the previous.

        In addition, keep it ref'd across all of ResourceLoaderWndProc
        to avoid sending messages to jobs that get deleted partway.

        This fixes <rdar://problem/4766859> Crash in ResourceLoaderWndProc - line 232 at televisionwithoutpity.com, washingtonpost.com


        * WebFrame.cpp:
        (WebFrame::loadDataSource):

2006-10-05  Dave Hyatt  <hyatt@apple.com>

        Make key events work with iframes.  Implement scrolling keyboard behavior.  Fix a bug with mouse wheeling that
        made it fail on iframes nested within iframes.
        
        Reviewed by mjs

        * WebView.cpp:
        (WebView::handleMouseEvent):
        (WebView::focusedTarget):
        (WebView::focusedTargetFrame):
        (WebView::keyPress):
        (WebViewWndProc):
        * WebView.h:

2006-10-04  Adele Peterson  <adele@apple.com>

        Reviewed by Adam. 

        - Fix for <rdar://problem/4762933> When typing past the end of a text field, the field doesn't auto-scroll to display the active caret

        Reveal the selection after inserting text.   
        
        * WebView.cpp:
        (WebViewWndProc):

2006-10-05  Darin Adler  <darin@apple.com>

        Reviewed by Adam.

        - fix <rdar://problem/4764253>
          frame targeting not implemented.

        * WebFrame.h: Added newWindow parameter to openURL and changed the URL
        parameter to a String.
        * WebFrame.cpp: (WebFrame::openURL): Changed code to use BString to convert
        the String to a BSTR. Also respect the newWindow parameter and changed the
        new window code slightly, adding a FIXME.

2006-10-04 Dave Hyatt  <hyatt@apple.com>

        Fix painting so that we only do a layout if one is really needed.  This actually fixes the non-blinking caret in
        text fields.
       
        * WebFrame.cpp:
        (WebFrame::WebFramePrivate::needsLayout):
        (WebFrame::paint):
        (WebFrame::layoutIfNeeded):
        (WebFrame::setNeedsLayout):
        * WebFrame.h:
        * WebView.cpp:
        (WebViewWndProc):

2006-10-03  Dave Hyatt  <hyatt@apple.com>

        Implement the same smart rect painting algorithm that I implemented on Mac a while back (where sometimes we don't use
        the big unioned invalidation rect but instead paint single rects out of the update region.
        
        Reviewed by anders

        * WebFrame.cpp:
        (WebFrame::paint):
        (WebFrame::paintSingleRect):
        * WebFrame.h:
        * WebView.cpp:
        (WebViewWndProc):
        (WebView::initWithFrame):

2006-10-03  Adam Roben  <aroben@apple.com>

        Reviewed by Darin.

        Part of fix for <rdar://problem/4603342>
        Keyboard navigability

        Implement methods to determine tabbing preferences.

        * WebFrame.cpp:
        (WebFrame::tabsToLinks):
        * WebFrame.h:

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

        Reviewed by Adam.

        * WebView.cpp: (WebView::handleMouseEvent): Pass message when creating a PlatformMouseEvent.

2006-10-02  Adam Roben  <aroben@apple.com>

        Backing out change from r10549 because it breaks installer builds.

        * WebKit.vcproj/WebKit.vcproj:

2006-10-02  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Geoff, Hyatt.
        
        <rdar://4757389> Browser locks up while navigating to a new page
        <rdar://4757407> Images fail to load at https://webmail.apple.com

        * WebFrame.cpp: Preserve old document until new doc has started loading.
        (WebFrame::loadDataSource): Don't destroy old document when a new load kicks off.
        (WebFrame::receivedResponse): Destroy old document when first data is received for new doc.
        * WebView.cpp: Fix painting suppression code.
        (WebViewWndProc): Suppress painting, mouse events until first layout instead of while loading.

2006-10-02  Adam Roben  <aroben@apple.com>

        Build fix: Don't copy WebKit(_debug).dll into $WebKitSDKDir

        * WebKit.vcproj/WebKit.vcproj: Remove xcopy call

2006-09-30  Dave Hyatt  <hyatt@apple.com>

        Switch over from SetDIBBitsToDevice to BitBlt, since BitBlt is supposedly faster according to MSDN.

        * WebFrame.cpp:
        (WebFrame::paint):

2006-09-29  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Geoff.

        Allow WebKit to query for the rect
        of the resizer rather than just its size.

        * Interfaces/IWebUIDelegatePrivate.idl:

2006-09-29  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam, Geoff.
        
        Fix <rdar://4757392>
        Plug-ins flash to white while scrolling.
        
        Set WS_CLIPCHILDREN on browser windows to clip out plug-in HWNDs
        when drawing.

        * WebView.cpp:
        (WebView::initWithFrame):

2006-09-29  Dave Hyatt  <hyatt@apple.com>

        Fix mouse event click handling to be correct.
        
        Reviewed by mjs

        * WebView.cpp:
        (WebView::handleMouseEvent):
        (WebViewWndProc):
        * WebView.h:

2006-09-28  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Maciej.

        Use $(ConfigSuffix) set via vsprops files to add _debug
        to end of debug filenames.

        Update B&I build script.
        Don't register WebKit.dll during official builds.

        * WebKit.vcproj/Interfaces.vcproj:
        * WebKit.vcproj/WebKit.make:
        * WebKit.vcproj/WebKit.vcproj:
        * WebKit.vcproj/WebKitGUID.vcproj:
        * WebKit.vcproj/WebKit_debug.def: Added.
        * WebKit.vcproj/debug.vsprops: Added.
        * WebKit.vcproj/release.vsprops: Added.

2006-09-27  Alice Liu  <alice.liu@apple.com>

        Reviewed by Steve & Adam.

        This patch implements keyboard selection and select-all.  
        This patch also hooks up engine side of copy/cut/paste but that won't work until we have clipboards.  

        * Interfaces/IWebView.idl:
        Added enum for commands to be called by name
        * WebView.cpp:
        next 3 functions handle mouseevents so that multiple-click selection works
        (WebView::mouseMoved):
        (WebView::mouseDown):
        (WebView::mouseUp):
        (WebView::execCommand):
        Handled cut/copy/paste/delete/selectall
        (WebView::keyPress):
        Handled keyboard selection
        (WebViewWndProc):
        * WebView.h:
        Added prototype for execCommand function

2006-09-27  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Maciej.

        Leave ChickenCat SDK untouched by build.
        
        This change will become necessary once we have JavaScriptCore,
        WebCore, WebKit, and SafariWin in the ChickenCat SDK.
        
        Prefer pulling project dependencies from WebKitOutputDir over
        WebKitSDKDir.  Don't copy build output back over to WebKitSDKDir.

        * WebKit.vcproj/WebKit.vcproj:
        * WebKit.vcproj/WebKitGUID.vcproj:
        * WebKit.vcproj/dstroot-to-sdk.cmd: Removed.

2006-09-27  Steve Falkenburg  <sfalken@apple.com>

        B&I build script tweaks.

        * WebKit.vcproj/WebKit.make:

2006-09-27  Brady Eidson  <beidson@apple.com>

        Reviewed by Steve

        -Flipped the icon database back to ON by default as the crasher is resolved in WebCore
        -WebHistoryItems now retain/release their URLs in the Icon DB
        
        * WebHistoryItem.cpp:
        (WebHistoryItem::WebHistoryItem): Make sure the shared icon database has been referenced
        (WebHistoryItem::initFromDictionaryRepresentation): Retain/release the url
        (WebHistoryItem::initWithURLString): Ditto
        
        * WebHistoryItem.h: Keep a static reference to the shared icon database
        
        * WebIconDatabase.cpp:
        (WebIconDatabase::sharedWebIconDatabase): Added - for the shared WebIconDatabase object 
        (WebIconDatabase::sharedIconDatabase): Changed to return the shared WebIconDatabase as the shared IWebIconDatabase
        * WebIconDatabase.h:
        
        * WebPreferences.cpp:
        (WebPreferences::initialize): IconDatabase ON by default

2006-09-27  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam.
        
        Fix <rdar://problem/4753220>.
        Hang using bugreporter in Boomer.
        
        Force text into simple code path in all cases.

        * WebFrame.cpp:
        (FormValuesPropertyBag::GetPropertyInfo):
        * WebPreferences.cpp:
        (WebPreferences::initialize):

2006-09-26  Steve Falkenburg  <sfalken@apple.com>

        Build fix for clean release build.

        * WebKit.vcproj/WebKitGUID.vcproj:

2006-09-27  Brady Eidson  <beidson@apple.com>

        Disabled WebIconDatabase for now until I can figure out the crash...!

        * WebPreferences.cpp:
        (WebPreferences::initialize):

2006-09-26  Steve Falkenburg  <sfalken@apple.com>

        Build tweaks

        * WebKit.vcproj/WebKit.make: Added.
        * WebKit.vcproj/WebKit.vcproj:

2006-09-26  Sean Gies  <seangies@apple.com>

        Reviewed by Brady Eidson.

        * WebFrame.cpp:
        (WebFrame::paint): Flip coordinates of CGBitmapContext.

2006-09-26  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Fixed encoding menu.
        Set mime type in request.

        * WebFrame.cpp:
        (WebFrame::receivedResponse):
        * WebView.cpp:
        (WebView::setCustomTextEncodingName):

2006-09-26  Sean Gies  <seangies@apple.com>

        Reviewed by Adam Roben.

        * WebKit.vcproj/WebKit.vcproj: Link to debug libraries for debug config.
            Copy debug libraries to target dir.  Copy .pdb files along with .dll files.
        * WebKit.vcproj/WebKitGUID.vcproj: Link to Debug DLL C runtime.

2006-09-26  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Geoff.
        
        Don't add subframes to global history or back/forward.

        * WebFrame.cpp:
        (WebFrame::receivedAllData):
        (WebFrame::createFrame):

2006-09-26  Dave Hyatt  <hyatt@apple.com>

        Make sure we respond to Windows XP theme changes in the engine.
        
        Reviewed by andersca

        * WebView.cpp:
        (WebViewWndProc):

2006-09-25  Steve Falkenburg  <sfalken@apple.com>

        Add missing parameters to CG paint case.

        * WebFrame.cpp:
        (WebFrame::paint):

2006-09-24  Steve Falkenburg  <sfalken@apple.com>

        Implemented WM_PRINTCLIENT so we can take a screenshot
        of the current webpage for the "Report Bugs to Apple" sheet.
        
        Also may be useful in initial printing hook-up.

        * WebFrame.cpp:
        (WebFrame::paint):
        * WebFrame.h:
        * WebView.cpp:
        (WebViewWndProc):

2006-09-22  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Ada.
        
        Added IWebUIDelegatePrivate::webViewResizerSize so the engine can
        leave space for the vertical scroll bar.

        * Interfaces/IWebUIDelegatePrivate.idl: Added.
        * WebKit.vcproj/Interfaces.vcproj:
        * WebKit.vcproj/WebKit.vcproj:
        * WebKit.vcproj/WebKitGUID.vcproj:

2006-09-22  Alice Liu  <alice.liu@apple.com>

        Reviewed by Adele.

        Windows release build fix 

        * WebFrame.cpp:
        (WebFrame::initWithWebFrameView):

2006-09-21  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej, Hyatt, Steve.

        frames!
        
        Prep work:
            - fixed WebFrame/WebView circular reference leak: ownership now looks like this
              (same as Mac):
                - WebView -> WebCore::Page -> WebCore::Frame 
                                                    -> WebFrame
                                                    -> WebCore::FrameTree -> WebCore::Frame...
            - fixed notification center circular reference leak: The notification center
              no longer retains its clients; clients must take care to remove themselves
              upon destruction.

        Real work:
            - The WebView's onSize handler now updates the frame geometry of the main frame. 
            This used to happen implicitly, since the WebView window and the main frame were
            synonymous.
            
            - Changed WebFrame painting code to use WebCore's FrameView painting code instead
            of rolling its own.
            
            - Removed WebFrame::initWithName from the public COM API and replaced it with
            the private initializer, WebFrame::initWithWebFrameView. We intend to deprecate 
            initWithName on Mac because it's meaningless -- only WebCore should create frames.
        
2006-09-21  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Anders.
        
        <rdar://4516072>
        <rdar://4601320>
        
        Implemented JavaScript alert/confirm/prompt inside app.
        This is done via IWebUIDelegate.

        * WebFrame.cpp:
        (WebFrame::userAgent):
        (WebFrame::runJavaScriptAlert):
        (WebFrame::runJavaScriptConfirm):
        (WebFrame::runJavaScriptPrompt):
        * WebFrame.h:

2006-09-21  Sean Gies  <seangies@apple.com>

        Reviewed by Adam Roben.

        Support form controls when rendering with CG. 
        Fix some re-painting issues.

        * WebFrame.cpp: (WebFrame::paint):
            Added debug code to flash redrawn area.
            Construct GraphicsContext using DIB HDC, rather than a CGContext.
            Blit offscreen buffer using the dirty rectangle's offset.

2006-09-21  Sean Gies  <seangies@apple.com>

        Reviewed by Adam Roben.

        * WebKit.vcproj/WebKit.vcproj: Link against CoreGraphics.

2006-09-21  Dave Hyatt <hyatt@apple.com>

        Implement mouse wheel scrolling on Win32.

        * WebView.cpp:
        (WebView::mouseWheel):
        (WebViewWndProc):
        * WebView.h:

2006-09-20  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Ada Chan.
        
        <rdar://4601547> Character encoding menu/switching
        
        Encoding menu and prefs pop-up are now hooked up and working.
        
        There's currently a problem where the encoding doesn't get
        picked up out of the incoming HTML document out of <meta>, so
        the text encoding menu comes in especially handy at the moment.

        * Interfaces/IWebDataSource.idl:
        * WebDataSource.cpp:
        (WebDataSource::WebDataSource):
        (WebDataSource::~WebDataSource):
        (WebDataSource::overrideEncoding):
        (WebDataSource::setOverrideEncoding):
        (WebDataSource::QueryInterface):
        (WebDataSource::textEncodingName):
        * WebDataSource.h:
        * WebFrame.cpp:
        (WebFrame::WebFrame):
        (WebFrame::loadRequest):
        (WebFrame::reloadAllowingStaleDataWithOverrideEncoding):
        (WebFrame::receivedResponse):
        (WebFrame::receivedData):
        (WebFrame::receivedAllData):
        * WebFrame.h:
        * WebKit.vcproj/WebKitGUID.vcproj:
        * WebMutableURLRequest.cpp:
        (WebMutableURLRequest::WebMutableURLRequest):
        (WebMutableURLRequest::setCachePolicy):
        * WebMutableURLRequest.h:
        * WebURLResponse.cpp:
        (WebURLResponse::textEncodingName):
        * WebView.cpp:
        (WebView::WebView):
        (WebView::supportsTextEncoding):
        (WebView::setCustomTextEncodingName):
        (WebView::customTextEncodingName):
        * WebView.h:

2006-09-20  Brady Eidson  <beidson@apple.com>

        Reviewed by Steve

        Hooked up the preference for enabled/disabling the icon database
        
        * Interfaces/IWebPreferences.idl:
        * WebIconDatabase.cpp:
        (WebIconDatabase::init):
        * WebPreferenceKeysPrivate.h:
        * WebPreferences.cpp:
        (WebPreferences::initialize):
        (WebPreferences::iconDatabaseEnabled):
        (WebPreferences::setIconDatabaseEnabled):
        * WebPreferences.h:

2006-09-20  Brady Eidson  <beidson@apple.com>

        Reviewed by Adam
        
        Removed an overzealous assertion that was made irrelevant by an earlier checking to WebCore::IconDatabase

        * WebIconDatabase.cpp:
        (WebIconDatabase::init):

2006-09-18  Sean Gies  <seangies@apple.com>

        Reviewed by Adam Roben.

        * WebKit.vcproj/WebKit.vcproj:  Link to CoreGraphics and copy its binaries to output dir.

2006-09-18  Adam Roben  <aroben@apple.com>

        Build fix (release).

        * WebHistory.cpp:
        (_WebCoreHistoryProvider::containsItemForURLLatin1): Remove unused HRESULT.
        (_WebCoreHistoryProvider::containsItemForURLUnicode): Ditto.

2006-09-17  Adam Roben  <aroben@apple.com>

        Build fix.

        * WebView.cpp:
        (WebView::keyPress): Add new "userTriggered" argument to calls to
        SelectionController::modify

2006-09-15  Adam Roben  <aroben@apple.com>

        Reviewed by sfalken.

        Implement historyContains() on Windows (rdar://4733770)

        * WebHistory.cpp: Add new private _WebCoreHistoryProvider class.
        (WebHistory::setOptionalSharedHistory): Call
        WebCore::WebCoreHistory::setHistoryProvider so that WebCore can access
        history.
        (WebHistory::itemForURL): Extract itemForURLString method.
        (WebHistory::itemForURLString): Added.
        (WebHistory::containsItemForURLString): Added.
        (_WebCoreHistoryProvider::_WebCoreHistoryProvider): Added.
        (_WebCoreHistoryProvider::~_WebCoreHistoryProvider): Added.
        (matchLetter): Ported from Mac's WebHistory.m.
        (matchUnicodeLetter): Ditto.
        (_WebCoreHistoryProvider::containsItemForURLLatin1): Ditto.
        (_WebCoreHistoryProvider::containsItemForURLUnicode): Ditto.
        * WebHistory.h: Fix typo: IID_WebHistoryItemPrivate -->
        IID_WebHistoryPrivate, added new methods to IWebHistoryPrivate and
        WebHistory

2006-09-14  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Lou Amadio.

        iBench fix - fix null deref in form submission case without a form element.

        * WebFrame.cpp:
        (WebFrame::submitForm):

2006-09-12  Steve Falkenburg  <sfalken@apple.com>

        Get Boomer ready for B&I submission.
      
        Projects can now all build independent of one another
        without groping for headers or source across trees.

        * DOMCSSClasses.cpp: Use more explicit include paths to highlight external headers.
        * DOMCSSClasses.h: Use more explicit include paths to highlight external headers.
        * DOMCoreClasses.cpp: Use more explicit include paths to highlight external headers.
        * DOMHTMLClasses.cpp: Use more explicit include paths to highlight external headers.
        * WebDataSource.cpp: Use more explicit include paths to highlight external headers.
        * WebFrame.cpp: Use more explicit include paths to highlight external headers.
        * WebFrame.h: Use more explicit include paths to highlight external headers.
        * WebHTMLRepresentation.cpp: Use more explicit include paths to highlight external headers.
        * WebHistory.cpp: Fix capitalization of wtf.
        * WebKit.vcproj/Interfaces.vcproj: Updated to new obj layout.
        * WebKit.vcproj/WebKit.sln: Updated standalone sln for use by B&I.
        * WebKit.vcproj/WebKit.vcproj: Updated to new obj layout.
        * WebKit.vcproj/WebKitGUID.vcproj: Updated to new obj layout.
        * WebKit.vcproj/dstroot-to-sdk.cmd: Copy built bits back to WebKitSDKDir for dependent builds.
        * WebKitDLL.cpp: Use more explicit include paths to highlight external headers.
        * WebNotificationCenter.cpp: Use more explicit include paths to highlight external headers.
        * WebPreferences.cpp: Fix capitalization of wtf.
        * WebURLResponse.cpp: Use more explicit include paths to highlight external headers.
        * WebURLResponse.h: Use more explicit include paths to highlight external headers.
        * WebView.cpp: Use more explicit include paths to highlight external headers.

2006-09-13  Ada Chan  <adachan@apple.com>

        Reviewed by sfalken
        
        - WebBackForwardList::containsItem()
            - we can break once we've found the item
        - Fixed a crashing bug with WebNotificationCenter::addObserver.

        * WebBackForwardList.cpp:
        (WebBackForwardList::containsItem):
        * WebNotificationCenter.cpp:
        (ObserverKey::ObserverKey):
        (ObserverKey::operator=):

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

        Reviewed by Steve Falkenburg
        
        Made changes to IWebIconDatabase and implemented it in WebIconDatabase
        
        * Interfaces/IWebIconDatabase.idl:  Returns HBITMAPs, not IWebImages
        * WebIconDatabase.cpp:
        (WebIconDatabase::WebIconDatabase): 
        (userIconDatabasePath): Get the user's datapath via a shell call
        (WebIconDatabase::init): Initialize the WebCore::IconDatabase
        (WebIconDatabase::sharedIconDatabase): Get the shared IWebIconDatabase
        (WebIconDatabase::iconForURL): Implemented
        (WebIconDatabase::defaultIconWithSize): Ditto
        (WebIconDatabase::retainIconForURL): Ditto
        (WebIconDatabase::releaseIconForURL): Ditto
        (createDIB): Created a DIB of a given size for storage in a hash
        (WebIconDatabase::getOrCreateSharedBitmap): Get a "shared" bitmap from the hash, or create and store it
        (WebIconDatabase::getOrCreateDefaultIconBitmap): Ditto for the Default Icons HBITMAPs
        * WebIconDatabase.h: 
        * WebKit.vcproj/WebKit.vcproj: 

2006-09-10  Steve Falkenburg  <sfalken@apple.com>

        Rubber-stamp by aroben.
        
        Pick up SDK from $(WebKitSDKDir).

        * WebKit.vcproj/WebKit.vcproj:

2006-09-09  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by aroben.

        Boomer SDK migration.  Pull all external dependencies in from Boomer SDK.
        
        SDK should be installed into C:\AppleInternal
        (substitute your system drive letter for C - scripts don't hard-code the drive letter)
        
        Also fixed CFNetwork build variant

        * WebKit.vcproj/WebKit.vcproj:
        * WebKit.vcproj/WebKitGUID.vcproj:
        * WebURLResponse.cpp:
        (WebURLResponse::createInstance):

2006-09-08  Brady Eidson  <beidson@apple.com>

        Reviewed by Adam

        Add stubs for an IconDatabase path stored as a preference
        
        * Interfaces/IWebPreferences.idl:
        * WebPreferences.cpp:
        (WebPreferences::iconDatabaseLocation):
        (WebPreferences::setIconDatabaseLocation):
        * WebPreferences.h:

2006-09-07  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Lou Amadio.
        
        Fix CFArray allocator usage for cases where we store CF types in the array.

        * WebHistory.cpp:
        (WebHistory::WebHistory):
        (WebHistory::datesArray):

2006-09-06  Brady Eidson  <beidson@apple.com>

        Reviewed by Steve and Sarge

        Added urlIcon.png as a resource for WebCore images

        * WebKit.vcproj/WebKit.rc:
        * WebKit.vcproj/resource.h:
        * WebKit.vcproj/urlIcon.png: Added.
        * WebKitDLL.cpp:
        (loadResourceIntoArray): Added case for "urlIcon"

2006-09-06  Adam Roben  <aroben@apple.com>

        Reviewed by Darin.

        Fixed various Windows build problems caused by previous checkins.

        * WebKitDLL.h: Disable deprecation warning triggered by using std::copy on a Vector.
        * WebView.cpp:
        (WebView::keyPress): Rename selection to selectionController.

2006-09-05  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Lou Amadio.

        File Open/Save <rdar://4601527>
        Implemened Save As to save raw page source (we don't support web archives).
        
        Currently we are saving a copy of the raw data in the FrameView (to
        return when requested via IWebDataSource::data).  This needs to be
        shared with CFNetwork once CFNetwork integration is complete.

        * MemoryStream.cpp: Added.
        (MemoryStream::MemoryStream):
        (MemoryStream::~MemoryStream):
        (MemoryStream::createInstance):
        (MemoryStream::QueryInterface):
        (MemoryStream::AddRef):
        (MemoryStream::Release):
        (MemoryStream::Read):
        (MemoryStream::Write):
        (MemoryStream::Seek):
        (MemoryStream::SetSize):
        (MemoryStream::CopyTo):
        (MemoryStream::Commit):
        (MemoryStream::Revert):
        (MemoryStream::LockRegion):
        (MemoryStream::UnlockRegion):
        (MemoryStream::Stat):
        (MemoryStream::Clone):
        * MemoryStream.h: Added.
        * WebDataSource.cpp:
        (WebDataSource::data):
        * WebFrame.cpp:
        (WebFrame::controlsInForm):
        (WebFrame::canProvideDocumentSource):
        (WebFrame::receivedResponse):
        (WebFrame::receivedData):
        * WebFrame.h:
        (WebFrame::data):
        * WebHTMLRepresentation.cpp:
        (WebHTMLRepresentation::canProvideDocumentSource):
        * WebKit.vcproj/WebKit.vcproj:
        * WebURLResponse.cpp:
        (WebURLResponse::createInstance):
        (WebURLResponse::suggestedFilename):
        (WebURLResponse::suggestedFileExtension):
        * WebURLResponse.h:

2006-09-01  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by adachan.

        Process redirects received in networking layer through to application.
        With this change, the address bar url edit field shows the proper
        redirected URL.

        Fixed GetAsyncKeyState() calls.

        * WebFrame.cpp:
        (WebFrame::receivedRedirect):
        * WebMutableURLRequest.cpp:
        (WebMutableURLRequest::setURL):

2006-09-01  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by kevin.
        
        Fix back/forward regression.
        
        Combining the two receivedAllData methods into one broke back/forward navigation,
        since we put the resetting of m_quickRedirectComing and m_loadType at the start
        of the combined method, but have code in the rest of receivedAllData that
        relies on these having their old values.

        * WebFrame.cpp:
        (WebFrame::receivedAllData):

2006-08-30  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Ada Chan.

        Forms Auto-complete checkpoint.
        Generic forms autocomplete drop-downs are now functional.
        Address book autocomplete (and credit card autocomplete) is not functional.
        
        To do:
        - username/password pairs autofill
        - address book autofill
        - single-click autofill
        - credit card autofill
        - keychain equivalent secure store for username/passwords and credit cards
          (we currently use DPAPI to encrypt the form values plist but will want to
           protect this more sensitive info using an additional user supplied password)

        DOMCoreClasses.cpp,.h:
        Fix typo in DOMNode::QueryInterface.
        Add IDOMViewCSS.
        Additional DOMDocument implementation.
        Add IDOMNodeExtensions, IDOMElementCSSInlineStyle, IDOMElementExtensions.
        
        DOMCSSClasses.h:
        Added.
        
        DOMHTMLClasses.cpp,.h:
        Additional implementation.
        
        WebFrame.cpp,.h:
        Added IWebFormSubmissionListener.
        Additional implementation.
        
        DOMPrivate.idl:
        Added.
        
        DOMCore.idl:
        Add IDOMElementCSSInlineStyle
        Add IDOMElementExtensions
        
        DOMExtensions.idl:
        Added
        
        IWebFormDelegate.idl:
        Fix typos.
        
        DOMCSS.idl:
        Added IDOMViewCSS.
        
        DOMHTML.idl:
        Add selectionStart, selectionEnd.
        
        DOMCSSClasses.cpp:
        Added.
        
        WebKitGUID.vcproj:
        Added DOMExtensions_i.c, DOMPrivate_i.c.
        
        Interfaces.vcproj:
        Added DOMExtensions.idl, DOMPrivate.idl.
        
        WebKit.vcproj:
        Added DOMCSSClasses.cpp.
        
        WebHTMLRepresentation.cpp:
        Implemented elementIsPassword, controlsInForm.
        
        * DOMCSSClasses.cpp: Added.
        (DOMCSSStyleDeclaration::DOMCSSStyleDeclaration):
        (DOMCSSStyleDeclaration::~DOMCSSStyleDeclaration):
        (DOMCSSStyleDeclaration::createInstance):
        (DOMCSSStyleDeclaration::QueryInterface):
        (DOMCSSStyleDeclaration::cssText):
        (DOMCSSStyleDeclaration::setCssText):
        (DOMCSSStyleDeclaration::getPropertyValue):
        (DOMCSSStyleDeclaration::getPropertyCSSValue):
        (DOMCSSStyleDeclaration::removeProperty):
        (DOMCSSStyleDeclaration::getPropertyPriority):
        (DOMCSSStyleDeclaration::setProperty):
        (DOMCSSStyleDeclaration::length):
        (DOMCSSStyleDeclaration::item):
        (DOMCSSStyleDeclaration::parentRule):
        * DOMCSSClasses.h: Added.
        (DOMCSSStyleDeclaration::AddRef):
        (DOMCSSStyleDeclaration::Release):
        (DOMCSSStyleDeclaration::throwException):
        (DOMCSSStyleDeclaration::callWebScriptMethod):
        (DOMCSSStyleDeclaration::evaluateWebScript):
        (DOMCSSStyleDeclaration::removeWebScriptKey):
        (DOMCSSStyleDeclaration::stringRepresentation):
        (DOMCSSStyleDeclaration::webScriptValueAtIndex):
        (DOMCSSStyleDeclaration::setWebScriptValueAtIndex):
        (DOMCSSStyleDeclaration::setException):
        * DOMCoreClasses.cpp:
        (DOMNode::QueryInterface):
        (DOMDocument::QueryInterface):
        (DOMDocument::getElementsByTagNameNS):
        (DOMDocument::getComputedStyle):
        (DOMDocument::DOMDocument):
        (DOMDocument::~DOMDocument):
        (DOMDocument::createInstance):
        (DOMElement::QueryInterface):
        (DOMElement::lineBoxRects):
        (DOMElement::focus):
        (DOMElement::blur):
        (DOMElement::style):
        (DOMElement::offsetLeft):
        (DOMElement::offsetTop):
        (DOMElement::offsetWidth):
        (DOMElement::offsetHeight):
        (DOMElement::offsetParent):
        (DOMElement::clientWidth):
        (DOMElement::clientHeight):
        (DOMElement::scrollLeft):
        (DOMElement::setScrollLeft):
        (DOMElement::scrollTop):
        (DOMElement::setScrollTop):
        (DOMElement::scrollWidth):
        (DOMElement::scrollHeight):
        (DOMElement::scrollIntoView):
        (DOMElement::scrollIntoViewIfNeeded):
        * DOMCoreClasses.h:
        (DOMDocument::AddRef):
        (DOMDocument::Release):
        (DOMDocument::document):
        * DOMHTMLClasses.cpp:
        (DOMHTMLSelectElement::QueryInterface):
        (DOMHTMLSelectElement::activateItemAtIndex):
        (DOMHTMLInputElement::QueryInterface):
        (DOMHTMLInputElement::disabled):
        (DOMHTMLInputElement::setValue):
        (DOMHTMLInputElement::select):
        (DOMHTMLInputElement::click):
        (DOMHTMLInputElement::setSelectionStart):
        (DOMHTMLInputElement::selectionStart):
        (DOMHTMLInputElement::setSelectionEnd):
        (DOMHTMLInputElement::selectionEnd):
        (DOMHTMLInputElement::isTextField):
        (DOMHTMLInputElement::rectOnScreen):
        (DOMHTMLInputElement::replaceCharactersInRange):
        (DOMHTMLInputElement::selectedRange):
        (DOMHTMLInputElement::setAutofilled):
        * DOMHTMLClasses.h:
        (DOMHTMLDocument::DOMHTMLDocument):
        (DOMHTMLDocument::doctype):
        (DOMHTMLDocument::implementation):
        (DOMHTMLDocument::documentElement):
        (DOMHTMLDocument::createElement):
        (DOMHTMLDocument::createDocumentFragment):
        (DOMHTMLDocument::createTextNode):
        (DOMHTMLDocument::createComment):
        (DOMHTMLDocument::createCDATASection):
        (DOMHTMLDocument::createProcessingInstruction):
        (DOMHTMLDocument::createAttribute):
        (DOMHTMLDocument::createEntityReference):
        (DOMHTMLDocument::getElementsByTagName):
        (DOMHTMLDocument::importNode):
        (DOMHTMLDocument::createElementNS):
        (DOMHTMLDocument::createAttributeNS):
        (DOMHTMLDocument::getElementsByTagNameNS):
        (DOMHTMLDocument::getElementById):
        (DOMHTMLElement::focus):
        (DOMHTMLElement::blur):
        (DOMHTMLFormElement::focus):
        (DOMHTMLFormElement::blur):
        (DOMHTMLSelectElement::focus):
        (DOMHTMLSelectElement::blur):
        (DOMHTMLOptionElement::focus):
        (DOMHTMLOptionElement::blur):
        (DOMHTMLInputElement::focus):
        (DOMHTMLInputElement::blur):
        (DOMHTMLTextAreaElement::focus):
        (DOMHTMLTextAreaElement::blur):
        * Interfaces/DOMCSS.idl:
        * Interfaces/DOMCore.idl:
        * Interfaces/DOMExtensions.idl: Added.
        * Interfaces/DOMHTML.idl:
        * Interfaces/DOMPrivate.idl: Added.
        * Interfaces/IWebFormDelegate.idl:
        * WebFrame.cpp:
        (FormValuesPropertyBag::FormValuesPropertyBag):
        (FormValuesPropertyBag::QueryInterface):
        (FormValuesPropertyBag::AddRef):
        (FormValuesPropertyBag::Release):
        (FormValuesPropertyBag::Read):
        (FormValuesPropertyBag::Write):
        (FormValuesPropertyBag::CountProperties):
        (FormValuesPropertyBag::GetPropertyInfo):
        (FormValuesPropertyBag::LoadObject):
        (WebFrame::WebFrame):
        (WebFrame::QueryInterface):
        (WebFrame::DOMDocument):
        (WebFrame::continueSubmit):
        (WebFrame::elementWithName):
        (WebFrame::formForElement):
        (WebFrame::elementDoesAutoComplete):
        (WebFrame::controlsInForm):
        (WebFrame::elementIsPassword):
        (WebFrame::submitForm):
        (WebFrame::doTextFieldCommandFromEvent):
        (WebFrame::textWillBeDeletedInTextField):
        (WebFrame::textDidChangeInTextArea):
        * WebFrame.h:
        * WebHTMLRepresentation.cpp:
        (WebHTMLRepresentation::elementIsPassword):
        (WebHTMLRepresentation::controlsInForm):
        * WebKit.vcproj/Interfaces.vcproj:
        * WebKit.vcproj/WebKit.vcproj:
        * WebKit.vcproj/WebKitGUID.vcproj:

2006-08-29  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Ada.

        * WebKitDLL.cpp:
        (DllMain):
        Set the global instance handle.

2006-08-28  Ada Chan  <adachan@apple.com>

        Reviewed by sfalken.
        
        Free a malloc'ed string in an error condition.

        * MarshallingHelpers.cpp:
        (MarshallingHelpers::BSTRToCFStringRef):

2006-08-25  David Hyatt  <hyatt@apple.com>

        Add code path for doing painting of a WebFrame using CG.

        * WebFrame.cpp:
        (WebFrame::paint):

2006-08-24  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Ada Chan.
        
        Forms autocomplete checkpoint
        
        DOMCoreClasses.cpp/.h
        Add missing DOMNode methods
        Add IDOMElementPrivate
        Implement DOMElement::boundingBox
        Implement DOMElement::getAttribute

        DOMHTMLClasses.cpp
        Implemented DOMHTMLInputElement::value

        IWebViewPrivate.idl
        WebView.cpp/.h
        Added IWebViewPrivate::scrollOffset

        IWebHTMLRepresentation.idl
        WebHTMLRepresentation.cpp/.h
        WebKitGUID.vcproj
        Interfaces.vcproj
        WebKit.vcproj
        Added IWebHTMLRepresentation

        WebDataSource.cpp/.h
        Implemented WebDataSource::representation

        IWebFrame.idl
        WebFrame.cpp/.h
        Fixed typos in some methods
        Add additional methods to support representation

        DOMCore.idl
        Add missing methods
        Add IDOMElementPrivate
        
        * DOMCoreClasses.cpp:
        (DOMNode::isSameNode):
        (DOMNode::isEqualNode):
        (DOMNode::textContent):
        (DOMNode::setTextContent):
        (DOMNode::boundingBox):
        (DOMNode::lineBoxRects):
        (DOMElement::QueryInterface):
        (DOMElement::boundingBox):
        (DOMElement::getAttribute):
        (DOMElement::coreElement):
        (DOMElement::isEqual):
        * DOMCoreClasses.h:
        (DOMDocument::isSameNode):
        (DOMDocument::isEqualNode):
        (DOMDocument::textContent):
        (DOMDocument::setTextContent):
        (DOMDocument::boundingBox):
        (DOMDocument::lineBoxRects):
        (DOMElement::isSameNode):
        (DOMElement::isEqualNode):
        (DOMElement::textContent):
        (DOMElement::setTextContent):
        (DOMElement::lineBoxRects):
        (DOMElement::element):
        * DOMHTMLClasses.cpp:
        (DOMHTMLInputElement::value):
        * DOMHTMLClasses.h:
        (DOMHTMLDocument::isSameNode):
        (DOMHTMLDocument::isEqualNode):
        (DOMHTMLDocument::textContent):
        (DOMHTMLDocument::setTextContent):
        (DOMHTMLDocument::boundingBox):
        (DOMHTMLDocument::lineBoxRects):
        (DOMHTMLElement::isSameNode):
        (DOMHTMLElement::isEqualNode):
        (DOMHTMLElement::textContent):
        (DOMHTMLElement::setTextContent):
        (DOMHTMLElement::boundingBox):
        (DOMHTMLElement::lineBoxRects):
        (DOMHTMLFormElement::isSameNode):
        (DOMHTMLFormElement::isEqualNode):
        (DOMHTMLFormElement::textContent):
        (DOMHTMLFormElement::setTextContent):
        (DOMHTMLFormElement::boundingBox):
        (DOMHTMLFormElement::lineBoxRects):
        (DOMHTMLSelectElement::isSameNode):
        (DOMHTMLSelectElement::isEqualNode):
        (DOMHTMLSelectElement::textContent):
        (DOMHTMLSelectElement::setTextContent):
        (DOMHTMLSelectElement::boundingBox):
        (DOMHTMLSelectElement::lineBoxRects):
        (DOMHTMLOptionElement::isSameNode):
        (DOMHTMLOptionElement::isEqualNode):
        (DOMHTMLOptionElement::textContent):
        (DOMHTMLOptionElement::setTextContent):
        (DOMHTMLOptionElement::boundingBox):
        (DOMHTMLOptionElement::lineBoxRects):
        (DOMHTMLInputElement::isSameNode):
        (DOMHTMLInputElement::isEqualNode):
        (DOMHTMLInputElement::textContent):
        (DOMHTMLInputElement::setTextContent):
        (DOMHTMLInputElement::boundingBox):
        (DOMHTMLInputElement::lineBoxRects):
        (DOMHTMLTextAreaElement::isSameNode):
        (DOMHTMLTextAreaElement::isEqualNode):
        (DOMHTMLTextAreaElement::textContent):
        (DOMHTMLTextAreaElement::setTextContent):
        (DOMHTMLTextAreaElement::boundingBox):
        (DOMHTMLTextAreaElement::lineBoxRects):
        * Interfaces/DOMCore.idl:
        * Interfaces/IWebFrame.idl:
        * Interfaces/IWebHTMLRepresentation.idl: Added.
        * Interfaces/IWebViewPrivate.idl:
        * WebDataSource.cpp:
        (WebDataSource::WebDataSource):
        (WebDataSource::~WebDataSource):
        (WebDataSource::createInstance):
        (WebDataSource::initWithRequest):
        (WebDataSource::representation):
        (WebDataSource::webFrame):
        * WebDataSource.h:
        * WebFrame.cpp:
        (formElementFromDOMElement):
        (inputElementFromDOMElement):
        (WebFrame::webView):
        (WebFrame::frameView):
        (WebFrame::frameElement):
        (WebFrame::elementWithName):
        (WebFrame::formForElement):
        (WebFrame::elementDoesAutoComplete):
        * WebFrame.h:
        * WebHTMLRepresentation.cpp: Added.
        (WebHTMLRepresentation::WebHTMLRepresentation):
        (WebHTMLRepresentation::~WebHTMLRepresentation):
        (WebHTMLRepresentation::createInstance):
        (WebHTMLRepresentation::QueryInterface):
        (WebHTMLRepresentation::AddRef):
        (WebHTMLRepresentation::Release):
        (WebHTMLRepresentation::supportedMIMETypes):
        (WebHTMLRepresentation::supportedNonImageMIMETypes):
        (WebHTMLRepresentation::supportedImageMIMETypes):
        (WebHTMLRepresentation::attributedStringFromDOMNodes):
        (WebHTMLRepresentation::elementWithName):
        (WebHTMLRepresentation::elementDoesAutoComplete):
        (WebHTMLRepresentation::elementIsPassword):
        (WebHTMLRepresentation::formForElement):
        (WebHTMLRepresentation::currentForm):
        (WebHTMLRepresentation::controlsInForm):
        (WebHTMLRepresentation::searchForLabels):
        (WebHTMLRepresentation::matchLabels):
        (WebHTMLRepresentation::setDataSource):
        (WebHTMLRepresentation::receivedData):
        (WebHTMLRepresentation::receivedError):
        (WebHTMLRepresentation::finishedLoadingWithDataSource):
        (WebHTMLRepresentation::canProvideDocumentSource):
        (WebHTMLRepresentation::documentSource):
        (WebHTMLRepresentation::title):
        * WebHTMLRepresentation.h: Added.
        * WebKit.vcproj/Interfaces.vcproj:
        * WebKit.vcproj/WebKit.vcproj:
        * WebKit.vcproj/WebKitGUID.vcproj:
        * WebView.cpp:
        (WebView::scrollOffset):
        * WebView.h:

2006-08-23  Ada Chan  <adachan@apple.com>

        Reviewed by sfalken.

        Fixed WebHistory::removeItem() to actually remove the item from history.
        
        * WebHistory.cpp:
        (WebHistory::removeItem):

2006-08-22  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Lou Amadio.
        
        Interface changes/additions in preparation for forms autofill.
        
        IWebView.idl
        WebView.cpp/.h
        Added missing methods.

        IWebViewPrivate.idl
        Added calls to set/get FrameLoadDelegatePrivate

        IWebScriptObject.idl
        Fixed typo

        DOMHTML.idl
        WebScriptObject.cpp/.h
        DOMCoreClasses.cpp/.h
        DOMHTMLClasses.cpp/.h
        WebKit.vcproj
        Added additional DOM interfaces

        WebFrame.cpp/.h
        Fix key handling typo.
        Bridge IWebFormDelegate calls.
        Bridge IWebFrameLoadDelegatePrivate calls.

        TemporaryLinkStubs.cpp
        Removed handledOnloadEvents (now implemented).

        FrameWin.cpp/.h
        Bridge IWebFrameLoadDelegatePrivate calls.

        * DOMCoreClasses.cpp: Added.
        (DOMObject::QueryInterface):
        (DOMNode::QueryInterface):
        (DOMNode::nodeName):
        (DOMNode::nodeValue):
        (DOMNode::setNodeValue):
        (DOMNode::nodeType):
        (DOMNode::parentNode):
        (DOMNode::childNodes):
        (DOMNode::firstChild):
        (DOMNode::lastChild):
        (DOMNode::previousSibling):
        (DOMNode::nextSibling):
        (DOMNode::attributes):
        (DOMNode::ownerDocument):
        (DOMNode::insertBefore):
        (DOMNode::replaceChild):
        (DOMNode::removeChild):
        (DOMNode::appendChild):
        (DOMNode::hasChildNodes):
        (DOMNode::cloneNode):
        (DOMNode::normalize):
        (DOMNode::isSupported):
        (DOMNode::namespaceURI):
        (DOMNode::prefix):
        (DOMNode::setPrefix):
        (DOMNode::localName):
        (DOMNode::hasAttributes):
        (DOMDocument::QueryInterface):
        (DOMDocument::doctype):
        (DOMDocument::implementation):
        (DOMDocument::documentElement):
        (DOMDocument::createElement):
        (DOMDocument::createDocumentFragment):
        (DOMDocument::createTextNode):
        (DOMDocument::createComment):
        (DOMDocument::createCDATASection):
        (DOMDocument::createProcessingInstruction):
        (DOMDocument::createAttribute):
        (DOMDocument::createEntityReference):
        (DOMDocument::getElementsByTagName):
        (DOMDocument::importNode):
        (DOMDocument::createElementNS):
        (DOMDocument::createAttributeNS):
        (DOMDocument::getElementsByTagNameNS):
        (DOMDocument::getElementById):
        (DOMElement::QueryInterface):
        (DOMElement::tagName):
        (DOMElement::getAttribute):
        (DOMElement::setResult):
        (DOMElement::removeAttribute):
        (DOMElement::getAttributeNode):
        (DOMElement::setAttributeNode):
        (DOMElement::removeAttributeNode):
        (DOMElement::getElementsByTagName):
        (DOMElement::getAttributeNS):
        (DOMElement::setAttributeNS):
        (DOMElement::removeAttributeNS):
        (DOMElement::getAttributeNodeNS):
        (DOMElement::setAttributeNodeNS):
        (DOMElement::getElementsByTagNameNS):
        (DOMElement::hasAttribute):
        (DOMElement::hasAttributeNS):
        (DOMElement::DOMElement):
        (DOMElement::~DOMElement):
        (DOMElement::createInstance):
        * DOMCoreClasses.h: Added.
        (DOMObject::AddRef):
        (DOMObject::Release):
        (DOMObject::throwException):
        (DOMObject::callWebScriptMethod):
        (DOMObject::evaluateWebScript):
        (DOMObject::removeWebScriptKey):
        (DOMObject::stringRepresentation):
        (DOMObject::webScriptValueAtIndex):
        (DOMObject::setWebScriptValueAtIndex):
        (DOMObject::setException):
        (DOMNode::AddRef):
        (DOMNode::Release):
        (DOMNode::throwException):
        (DOMNode::callWebScriptMethod):
        (DOMNode::evaluateWebScript):
        (DOMNode::removeWebScriptKey):
        (DOMNode::stringRepresentation):
        (DOMNode::webScriptValueAtIndex):
        (DOMNode::setWebScriptValueAtIndex):
        (DOMNode::setException):
        (DOMDocument::AddRef):
        (DOMDocument::Release):
        (DOMDocument::throwException):
        (DOMDocument::callWebScriptMethod):
        (DOMDocument::evaluateWebScript):
        (DOMDocument::removeWebScriptKey):
        (DOMDocument::stringRepresentation):
        (DOMDocument::webScriptValueAtIndex):
        (DOMDocument::setWebScriptValueAtIndex):
        (DOMDocument::setException):
        (DOMDocument::nodeName):
        (DOMDocument::nodeValue):
        (DOMDocument::setNodeValue):
        (DOMDocument::nodeType):
        (DOMDocument::parentNode):
        (DOMDocument::childNodes):
        (DOMDocument::firstChild):
        (DOMDocument::lastChild):
        (DOMDocument::previousSibling):
        (DOMDocument::nextSibling):
        (DOMDocument::attributes):
        (DOMDocument::ownerDocument):
        (DOMDocument::insertBefore):
        (DOMDocument::replaceChild):
        (DOMDocument::removeChild):
        (DOMDocument::appendChild):
        (DOMDocument::hasChildNodes):
        (DOMDocument::cloneNode):
        (DOMDocument::normalize):
        (DOMDocument::isSupported):
        (DOMDocument::namespaceURI):
        (DOMDocument::prefix):
        (DOMDocument::setPrefix):
        (DOMDocument::localName):
        (DOMDocument::hasAttributes):
        (DOMElement::AddRef):
        (DOMElement::Release):
        (DOMElement::throwException):
        (DOMElement::callWebScriptMethod):
        (DOMElement::evaluateWebScript):
        (DOMElement::removeWebScriptKey):
        (DOMElement::stringRepresentation):
        (DOMElement::webScriptValueAtIndex):
        (DOMElement::setWebScriptValueAtIndex):
        (DOMElement::setException):
        (DOMElement::nodeName):
        (DOMElement::nodeValue):
        (DOMElement::setNodeValue):
        (DOMElement::nodeType):
        (DOMElement::parentNode):
        (DOMElement::childNodes):
        (DOMElement::firstChild):
        (DOMElement::lastChild):
        (DOMElement::previousSibling):
        (DOMElement::nextSibling):
        (DOMElement::attributes):
        (DOMElement::ownerDocument):
        (DOMElement::insertBefore):
        (DOMElement::replaceChild):
        (DOMElement::removeChild):
        (DOMElement::appendChild):
        (DOMElement::hasChildNodes):
        (DOMElement::cloneNode):
        (DOMElement::normalize):
        (DOMElement::isSupported):
        (DOMElement::namespaceURI):
        (DOMElement::prefix):
        (DOMElement::setPrefix):
        (DOMElement::localName):
        (DOMElement::hasAttributes):
        * DOMHTMLClasses.cpp: Added.
        (DOMHTMLCollection::QueryInterface):
        (DOMHTMLCollection::length):
        (DOMHTMLCollection::item):
        (DOMHTMLCollection::namedItem):
        (DOMHTMLOptionsCollection::QueryInterface):
        (DOMHTMLOptionsCollection::length):
        (DOMHTMLOptionsCollection::setLength):
        (DOMHTMLOptionsCollection::item):
        (DOMHTMLOptionsCollection::namedItem):
        (DOMHTMLDocument::QueryInterface):
        (DOMHTMLDocument::title):
        (DOMHTMLDocument::setTitle):
        (DOMHTMLDocument::referrer):
        (DOMHTMLDocument::domain):
        (DOMHTMLDocument::URL):
        (DOMHTMLDocument::body):
        (DOMHTMLDocument::setBody):
        (DOMHTMLDocument::images):
        (DOMHTMLDocument::applets):
        (DOMHTMLDocument::links):
        (DOMHTMLDocument::forms):
        (DOMHTMLDocument::anchors):
        (DOMHTMLDocument::cookie):
        (DOMHTMLDocument::setCookie):
        (DOMHTMLDocument::open):
        (DOMHTMLDocument::close):
        (DOMHTMLDocument::write):
        (DOMHTMLDocument::writeln):
        (DOMHTMLDocument::getElementById_):
        (DOMHTMLDocument::getElementsByName):
        (DOMHTMLElement::QueryInterface):
        (DOMHTMLElement::idName):
        (DOMHTMLElement::setIdName):
        (DOMHTMLElement::title):
        (DOMHTMLElement::setTitle):
        (DOMHTMLElement::lang):
        (DOMHTMLElement::setLang):
        (DOMHTMLElement::dir):
        (DOMHTMLElement::setDir):
        (DOMHTMLElement::className):
        (DOMHTMLElement::setClassName):
        (DOMHTMLFormElement::QueryInterface):
        (DOMHTMLFormElement::elements):
        (DOMHTMLFormElement::length):
        (DOMHTMLFormElement::name):
        (DOMHTMLFormElement::setName):
        (DOMHTMLFormElement::acceptCharset):
        (DOMHTMLFormElement::setAcceptCharset):
        (DOMHTMLFormElement::action):
        (DOMHTMLFormElement::setAction):
        (DOMHTMLFormElement::encType):
        (DOMHTMLFormElement::setEnctype):
        (DOMHTMLFormElement::method):
        (DOMHTMLFormElement::setMethod):
        (DOMHTMLFormElement::target):
        (DOMHTMLFormElement::setTarget):
        (DOMHTMLFormElement::submit):
        (DOMHTMLFormElement::reset):
        (DOMHTMLSelectElement::QueryInterface):
        (DOMHTMLSelectElement::type):
        (DOMHTMLSelectElement::selectedIndex):
        (DOMHTMLSelectElement::setSelectedIndx):
        (DOMHTMLSelectElement::value):
        (DOMHTMLSelectElement::setValue):
        (DOMHTMLSelectElement::length):
        (DOMHTMLSelectElement::form):
        (DOMHTMLSelectElement::options):
        (DOMHTMLSelectElement::disabled):
        (DOMHTMLSelectElement::setDisabled):
        (DOMHTMLSelectElement::multiple):
        (DOMHTMLSelectElement::setMultiple):
        (DOMHTMLSelectElement::name):
        (DOMHTMLSelectElement::setName):
        (DOMHTMLSelectElement::size):
        (DOMHTMLSelectElement::setSize):
        (DOMHTMLSelectElement::tabIndex):
        (DOMHTMLSelectElement::setTabIndex):
        (DOMHTMLSelectElement::add):
        (DOMHTMLSelectElement::remove):
        (DOMHTMLSelectElement::blur):
        (DOMHTMLSelectElement::focus):
        (DOMHTMLOptionElement::QueryInterface):
        (DOMHTMLOptionElement::form):
        (DOMHTMLOptionElement::defaultSelected):
        (DOMHTMLOptionElement::setDefaultSelected):
        (DOMHTMLOptionElement::text):
        (DOMHTMLOptionElement::index):
        (DOMHTMLOptionElement::disabled):
        (DOMHTMLOptionElement::setDisabled):
        (DOMHTMLOptionElement::label):
        (DOMHTMLOptionElement::setLabel):
        (DOMHTMLOptionElement::selected):
        (DOMHTMLOptionElement::setSelected):
        (DOMHTMLOptionElement::value):
        (DOMHTMLOptionElement::setValue):
        (DOMHTMLInputElement::QueryInterface):
        (DOMHTMLInputElement::defaultValue):
        (DOMHTMLInputElement::setDefaultValue):
        (DOMHTMLInputElement::defaultChecked):
        (DOMHTMLInputElement::setDefaultChecked):
        (DOMHTMLInputElement::form):
        (DOMHTMLInputElement::accept):
        (DOMHTMLInputElement::setAccept):
        (DOMHTMLInputElement::accessKey):
        (DOMHTMLInputElement::setAccessKey):
        (DOMHTMLInputElement::align):
        (DOMHTMLInputElement::setAlign):
        (DOMHTMLInputElement::alt):
        (DOMHTMLInputElement::setAlt):
        (DOMHTMLInputElement::checked):
        (DOMHTMLInputElement::setChecked):
        (DOMHTMLInputElement::disabled):
        (DOMHTMLInputElement::setDisabled):
        (DOMHTMLInputElement::maxLength):
        (DOMHTMLInputElement::setMaxLength):
        (DOMHTMLInputElement::name):
        (DOMHTMLInputElement::setName):
        (DOMHTMLInputElement::readOnly):
        (DOMHTMLInputElement::setReadOnly):
        (DOMHTMLInputElement::size):
        (DOMHTMLInputElement::setSize):
        (DOMHTMLInputElement::src):
        (DOMHTMLInputElement::setSrc):
        (DOMHTMLInputElement::tabIndex):
        (DOMHTMLInputElement::setTabIndex):
        (DOMHTMLInputElement::type):
        (DOMHTMLInputElement::setType):
        (DOMHTMLInputElement::useMap):
        (DOMHTMLInputElement::setUseMap):
        (DOMHTMLInputElement::value):
        (DOMHTMLInputElement::setValue):
        (DOMHTMLInputElement::blur):
        (DOMHTMLInputElement::focus):
        (DOMHTMLInputElement::select):
        (DOMHTMLInputElement::click):
        (DOMHTMLTextAreaElement::QueryInterface):
        (DOMHTMLTextAreaElement::defaultValue):
        (DOMHTMLTextAreaElement::setDefaultValue):
        (DOMHTMLTextAreaElement::form):
        (DOMHTMLTextAreaElement::accessKey):
        (DOMHTMLTextAreaElement::setAccessKey):
        (DOMHTMLTextAreaElement::cols):
        (DOMHTMLTextAreaElement::setCols):
        (DOMHTMLTextAreaElement::disabled):
        (DOMHTMLTextAreaElement::setDisabled):
        (DOMHTMLTextAreaElement::name):
        (DOMHTMLTextAreaElement::setName):
        (DOMHTMLTextAreaElement::readOnly):
        (DOMHTMLTextAreaElement::setReadOnly):
        (DOMHTMLTextAreaElement::rows):
        (DOMHTMLTextAreaElement::setRows):
        (DOMHTMLTextAreaElement::tabIndex):
        (DOMHTMLTextAreaElement::setTabIndex):
        (DOMHTMLTextAreaElement::type):
        (DOMHTMLTextAreaElement::value):
        (DOMHTMLTextAreaElement::setValue):
        (DOMHTMLTextAreaElement::blur):
        (DOMHTMLTextAreaElement::focus):
        (DOMHTMLTextAreaElement::select):
        * DOMHTMLClasses.h: Added.
        (DOMHTMLCollection::AddRef):
        (DOMHTMLCollection::Release):
        (DOMHTMLCollection::throwException):
        (DOMHTMLCollection::callWebScriptMethod):
        (DOMHTMLCollection::evaluateWebScript):
        (DOMHTMLCollection::removeWebScriptKey):
        (DOMHTMLCollection::stringRepresentation):
        (DOMHTMLCollection::webScriptValueAtIndex):
        (DOMHTMLCollection::setWebScriptValueAtIndex):
        (DOMHTMLCollection::setException):
        (DOMHTMLOptionsCollection::AddRef):
        (DOMHTMLOptionsCollection::Release):
        (DOMHTMLOptionsCollection::throwException):
        (DOMHTMLOptionsCollection::callWebScriptMethod):
        (DOMHTMLOptionsCollection::evaluateWebScript):
        (DOMHTMLOptionsCollection::removeWebScriptKey):
        (DOMHTMLOptionsCollection::stringRepresentation):
        (DOMHTMLOptionsCollection::webScriptValueAtIndex):
        (DOMHTMLOptionsCollection::setWebScriptValueAtIndex):
        (DOMHTMLOptionsCollection::setException):
        (DOMHTMLDocument::AddRef):
        (DOMHTMLDocument::Release):
        (DOMHTMLDocument::throwException):
        (DOMHTMLDocument::callWebScriptMethod):
        (DOMHTMLDocument::evaluateWebScript):
        (DOMHTMLDocument::removeWebScriptKey):
        (DOMHTMLDocument::stringRepresentation):
        (DOMHTMLDocument::webScriptValueAtIndex):
        (DOMHTMLDocument::setWebScriptValueAtIndex):
        (DOMHTMLDocument::setException):
        (DOMHTMLDocument::nodeName):
        (DOMHTMLDocument::nodeValue):
        (DOMHTMLDocument::setNodeValue):
        (DOMHTMLDocument::nodeType):
        (DOMHTMLDocument::parentNode):
        (DOMHTMLDocument::childNodes):
        (DOMHTMLDocument::firstChild):
        (DOMHTMLDocument::lastChild):
        (DOMHTMLDocument::previousSibling):
        (DOMHTMLDocument::nextSibling):
        (DOMHTMLDocument::attributes):
        (DOMHTMLDocument::ownerDocument):
        (DOMHTMLDocument::insertBefore):
        (DOMHTMLDocument::replaceChild):
        (DOMHTMLDocument::removeChild):
        (DOMHTMLDocument::appendChild):
        (DOMHTMLDocument::hasChildNodes):
        (DOMHTMLDocument::cloneNode):
        (DOMHTMLDocument::normalize):
        (DOMHTMLDocument::isSupported):
        (DOMHTMLDocument::namespaceURI):
        (DOMHTMLDocument::prefix):
        (DOMHTMLDocument::setPrefix):
        (DOMHTMLDocument::localName):
        (DOMHTMLDocument::hasAttributes):
        (DOMHTMLElement::DOMHTMLElement):
        (DOMHTMLElement::AddRef):
        (DOMHTMLElement::Release):
        (DOMHTMLElement::throwException):
        (DOMHTMLElement::callWebScriptMethod):
        (DOMHTMLElement::evaluateWebScript):
        (DOMHTMLElement::removeWebScriptKey):
        (DOMHTMLElement::stringRepresentation):
        (DOMHTMLElement::webScriptValueAtIndex):
        (DOMHTMLElement::setWebScriptValueAtIndex):
        (DOMHTMLElement::setException):
        (DOMHTMLElement::nodeName):
        (DOMHTMLElement::nodeValue):
        (DOMHTMLElement::setNodeValue):
        (DOMHTMLElement::nodeType):
        (DOMHTMLElement::parentNode):
        (DOMHTMLElement::childNodes):
        (DOMHTMLElement::firstChild):
        (DOMHTMLElement::lastChild):
        (DOMHTMLElement::previousSibling):
        (DOMHTMLElement::nextSibling):
        (DOMHTMLElement::attributes):
        (DOMHTMLElement::ownerDocument):
        (DOMHTMLElement::insertBefore):
        (DOMHTMLElement::replaceChild):
        (DOMHTMLElement::removeChild):
        (DOMHTMLElement::appendChild):
        (DOMHTMLElement::hasChildNodes):
        (DOMHTMLElement::cloneNode):
        (DOMHTMLElement::normalize):
        (DOMHTMLElement::isSupported):
        (DOMHTMLElement::namespaceURI):
        (DOMHTMLElement::prefix):
        (DOMHTMLElement::setPrefix):
        (DOMHTMLElement::localName):
        (DOMHTMLElement::hasAttributes):
        (DOMHTMLElement::tagName):
        (DOMHTMLElement::getAttribute):
        (DOMHTMLElement::setResult):
        (DOMHTMLElement::removeAttribute):
        (DOMHTMLElement::getAttributeNode):
        (DOMHTMLElement::setAttributeNode):
        (DOMHTMLElement::removeAttributeNode):
        (DOMHTMLElement::getElementsByTagName):
        (DOMHTMLElement::getAttributeNS):
        (DOMHTMLElement::setAttributeNS):
        (DOMHTMLElement::removeAttributeNS):
        (DOMHTMLElement::getAttributeNodeNS):
        (DOMHTMLElement::setAttributeNodeNS):
        (DOMHTMLElement::getElementsByTagNameNS):
        (DOMHTMLElement::hasAttribute):
        (DOMHTMLElement::hasAttributeNS):
        (DOMHTMLFormElement::DOMHTMLFormElement):
        (DOMHTMLFormElement::AddRef):
        (DOMHTMLFormElement::Release):
        (DOMHTMLFormElement::throwException):
        (DOMHTMLFormElement::callWebScriptMethod):
        (DOMHTMLFormElement::evaluateWebScript):
        (DOMHTMLFormElement::removeWebScriptKey):
        (DOMHTMLFormElement::stringRepresentation):
        (DOMHTMLFormElement::webScriptValueAtIndex):
        (DOMHTMLFormElement::setWebScriptValueAtIndex):
        (DOMHTMLFormElement::setException):
        (DOMHTMLFormElement::nodeName):
        (DOMHTMLFormElement::nodeValue):
        (DOMHTMLFormElement::setNodeValue):
        (DOMHTMLFormElement::nodeType):
        (DOMHTMLFormElement::parentNode):
        (DOMHTMLFormElement::childNodes):
        (DOMHTMLFormElement::firstChild):
        (DOMHTMLFormElement::lastChild):
        (DOMHTMLFormElement::previousSibling):
        (DOMHTMLFormElement::nextSibling):
        (DOMHTMLFormElement::attributes):
        (DOMHTMLFormElement::ownerDocument):
        (DOMHTMLFormElement::insertBefore):
        (DOMHTMLFormElement::replaceChild):
        (DOMHTMLFormElement::removeChild):
        (DOMHTMLFormElement::appendChild):
        (DOMHTMLFormElement::hasChildNodes):
        (DOMHTMLFormElement::cloneNode):
        (DOMHTMLFormElement::normalize):
        (DOMHTMLFormElement::isSupported):
        (DOMHTMLFormElement::namespaceURI):
        (DOMHTMLFormElement::prefix):
        (DOMHTMLFormElement::setPrefix):
        (DOMHTMLFormElement::localName):
        (DOMHTMLFormElement::hasAttributes):
        (DOMHTMLFormElement::tagName):
        (DOMHTMLFormElement::getAttribute):
        (DOMHTMLFormElement::setResult):
        (DOMHTMLFormElement::removeAttribute):
        (DOMHTMLFormElement::getAttributeNode):
        (DOMHTMLFormElement::setAttributeNode):
        (DOMHTMLFormElement::removeAttributeNode):
        (DOMHTMLFormElement::getElementsByTagName):
        (DOMHTMLFormElement::getAttributeNS):
        (DOMHTMLFormElement::setAttributeNS):
        (DOMHTMLFormElement::removeAttributeNS):
        (DOMHTMLFormElement::getAttributeNodeNS):
        (DOMHTMLFormElement::setAttributeNodeNS):
        (DOMHTMLFormElement::getElementsByTagNameNS):
        (DOMHTMLFormElement::hasAttribute):
        (DOMHTMLFormElement::hasAttributeNS):
        (DOMHTMLFormElement::idName):
        (DOMHTMLFormElement::setIdName):
        (DOMHTMLFormElement::title):
        (DOMHTMLFormElement::setTitle):
        (DOMHTMLFormElement::lang):
        (DOMHTMLFormElement::setLang):
        (DOMHTMLFormElement::dir):
        (DOMHTMLFormElement::setDir):
        (DOMHTMLFormElement::className):
        (DOMHTMLFormElement::setClassName):
        (DOMHTMLSelectElement::DOMHTMLSelectElement):
        (DOMHTMLSelectElement::AddRef):
        (DOMHTMLSelectElement::Release):
        (DOMHTMLSelectElement::throwException):
        (DOMHTMLSelectElement::callWebScriptMethod):
        (DOMHTMLSelectElement::evaluateWebScript):
        (DOMHTMLSelectElement::removeWebScriptKey):
        (DOMHTMLSelectElement::stringRepresentation):
        (DOMHTMLSelectElement::webScriptValueAtIndex):
        (DOMHTMLSelectElement::setWebScriptValueAtIndex):
        (DOMHTMLSelectElement::setException):
        (DOMHTMLSelectElement::nodeName):
        (DOMHTMLSelectElement::nodeValue):
        (DOMHTMLSelectElement::setNodeValue):
        (DOMHTMLSelectElement::nodeType):
        (DOMHTMLSelectElement::parentNode):
        (DOMHTMLSelectElement::childNodes):
        (DOMHTMLSelectElement::firstChild):
        (DOMHTMLSelectElement::lastChild):
        (DOMHTMLSelectElement::previousSibling):
        (DOMHTMLSelectElement::nextSibling):
        (DOMHTMLSelectElement::attributes):
        (DOMHTMLSelectElement::ownerDocument):
        (DOMHTMLSelectElement::insertBefore):
        (DOMHTMLSelectElement::replaceChild):
        (DOMHTMLSelectElement::removeChild):
        (DOMHTMLSelectElement::appendChild):
        (DOMHTMLSelectElement::hasChildNodes):
        (DOMHTMLSelectElement::cloneNode):
        (DOMHTMLSelectElement::normalize):
        (DOMHTMLSelectElement::isSupported):
        (DOMHTMLSelectElement::namespaceURI):
        (DOMHTMLSelectElement::prefix):
        (DOMHTMLSelectElement::setPrefix):
        (DOMHTMLSelectElement::localName):
        (DOMHTMLSelectElement::hasAttributes):
        (DOMHTMLSelectElement::tagName):
        (DOMHTMLSelectElement::getAttribute):
        (DOMHTMLSelectElement::setResult):
        (DOMHTMLSelectElement::removeAttribute):
        (DOMHTMLSelectElement::getAttributeNode):
        (DOMHTMLSelectElement::setAttributeNode):
        (DOMHTMLSelectElement::removeAttributeNode):
        (DOMHTMLSelectElement::getElementsByTagName):
        (DOMHTMLSelectElement::getAttributeNS):
        (DOMHTMLSelectElement::setAttributeNS):
        (DOMHTMLSelectElement::removeAttributeNS):
        (DOMHTMLSelectElement::getAttributeNodeNS):
        (DOMHTMLSelectElement::setAttributeNodeNS):
        (DOMHTMLSelectElement::getElementsByTagNameNS):
        (DOMHTMLSelectElement::hasAttribute):
        (DOMHTMLSelectElement::hasAttributeNS):
        (DOMHTMLSelectElement::idName):
        (DOMHTMLSelectElement::setIdName):
        (DOMHTMLSelectElement::title):
        (DOMHTMLSelectElement::setTitle):
        (DOMHTMLSelectElement::lang):
        (DOMHTMLSelectElement::setLang):
        (DOMHTMLSelectElement::dir):
        (DOMHTMLSelectElement::setDir):
        (DOMHTMLSelectElement::className):
        (DOMHTMLSelectElement::setClassName):
        (DOMHTMLOptionElement::DOMHTMLOptionElement):
        (DOMHTMLOptionElement::AddRef):
        (DOMHTMLOptionElement::Release):
        (DOMHTMLOptionElement::throwException):
        (DOMHTMLOptionElement::callWebScriptMethod):
        (DOMHTMLOptionElement::evaluateWebScript):
        (DOMHTMLOptionElement::removeWebScriptKey):
        (DOMHTMLOptionElement::stringRepresentation):
        (DOMHTMLOptionElement::webScriptValueAtIndex):
        (DOMHTMLOptionElement::setWebScriptValueAtIndex):
        (DOMHTMLOptionElement::setException):
        (DOMHTMLOptionElement::nodeName):
        (DOMHTMLOptionElement::nodeValue):
        (DOMHTMLOptionElement::setNodeValue):
        (DOMHTMLOptionElement::nodeType):
        (DOMHTMLOptionElement::parentNode):
        (DOMHTMLOptionElement::childNodes):
        (DOMHTMLOptionElement::firstChild):
        (DOMHTMLOptionElement::lastChild):
        (DOMHTMLOptionElement::previousSibling):
        (DOMHTMLOptionElement::nextSibling):
        (DOMHTMLOptionElement::attributes):
        (DOMHTMLOptionElement::ownerDocument):
        (DOMHTMLOptionElement::insertBefore):
        (DOMHTMLOptionElement::replaceChild):
        (DOMHTMLOptionElement::removeChild):
        (DOMHTMLOptionElement::appendChild):
        (DOMHTMLOptionElement::hasChildNodes):
        (DOMHTMLOptionElement::cloneNode):
        (DOMHTMLOptionElement::normalize):
        (DOMHTMLOptionElement::isSupported):
        (DOMHTMLOptionElement::namespaceURI):
        (DOMHTMLOptionElement::prefix):
        (DOMHTMLOptionElement::setPrefix):
        (DOMHTMLOptionElement::localName):
        (DOMHTMLOptionElement::hasAttributes):
        (DOMHTMLOptionElement::tagName):
        (DOMHTMLOptionElement::getAttribute):
        (DOMHTMLOptionElement::setResult):
        (DOMHTMLOptionElement::removeAttribute):
        (DOMHTMLOptionElement::getAttributeNode):
        (DOMHTMLOptionElement::setAttributeNode):
        (DOMHTMLOptionElement::removeAttributeNode):
        (DOMHTMLOptionElement::getElementsByTagName):
        (DOMHTMLOptionElement::getAttributeNS):
        (DOMHTMLOptionElement::setAttributeNS):
        (DOMHTMLOptionElement::removeAttributeNS):
        (DOMHTMLOptionElement::getAttributeNodeNS):
        (DOMHTMLOptionElement::setAttributeNodeNS):
        (DOMHTMLOptionElement::getElementsByTagNameNS):
        (DOMHTMLOptionElement::hasAttribute):
        (DOMHTMLOptionElement::hasAttributeNS):
        (DOMHTMLOptionElement::idName):
        (DOMHTMLOptionElement::setIdName):
        (DOMHTMLOptionElement::title):
        (DOMHTMLOptionElement::setTitle):
        (DOMHTMLOptionElement::lang):
        (DOMHTMLOptionElement::setLang):
        (DOMHTMLOptionElement::dir):
        (DOMHTMLOptionElement::setDir):
        (DOMHTMLOptionElement::className):
        (DOMHTMLOptionElement::setClassName):
        (DOMHTMLInputElement::DOMHTMLInputElement):
        (DOMHTMLInputElement::AddRef):
        (DOMHTMLInputElement::Release):
        (DOMHTMLInputElement::throwException):
        (DOMHTMLInputElement::callWebScriptMethod):
        (DOMHTMLInputElement::evaluateWebScript):
        (DOMHTMLInputElement::removeWebScriptKey):
        (DOMHTMLInputElement::stringRepresentation):
        (DOMHTMLInputElement::webScriptValueAtIndex):
        (DOMHTMLInputElement::setWebScriptValueAtIndex):
        (DOMHTMLInputElement::setException):
        (DOMHTMLInputElement::nodeName):
        (DOMHTMLInputElement::nodeValue):
        (DOMHTMLInputElement::setNodeValue):
        (DOMHTMLInputElement::nodeType):
        (DOMHTMLInputElement::parentNode):
        (DOMHTMLInputElement::childNodes):
        (DOMHTMLInputElement::firstChild):
        (DOMHTMLInputElement::lastChild):
        (DOMHTMLInputElement::previousSibling):
        (DOMHTMLInputElement::nextSibling):
        (DOMHTMLInputElement::attributes):
        (DOMHTMLInputElement::ownerDocument):
        (DOMHTMLInputElement::insertBefore):
        (DOMHTMLInputElement::replaceChild):
        (DOMHTMLInputElement::removeChild):
        (DOMHTMLInputElement::appendChild):
        (DOMHTMLInputElement::hasChildNodes):
        (DOMHTMLInputElement::cloneNode):
        (DOMHTMLInputElement::normalize):
        (DOMHTMLInputElement::isSupported):
        (DOMHTMLInputElement::namespaceURI):
        (DOMHTMLInputElement::prefix):
        (DOMHTMLInputElement::setPrefix):
        (DOMHTMLInputElement::localName):
        (DOMHTMLInputElement::hasAttributes):
        (DOMHTMLInputElement::tagName):
        (DOMHTMLInputElement::getAttribute):
        (DOMHTMLInputElement::setResult):
        (DOMHTMLInputElement::removeAttribute):
        (DOMHTMLInputElement::getAttributeNode):
        (DOMHTMLInputElement::setAttributeNode):
        (DOMHTMLInputElement::removeAttributeNode):
        (DOMHTMLInputElement::getElementsByTagName):
        (DOMHTMLInputElement::getAttributeNS):
        (DOMHTMLInputElement::setAttributeNS):
        (DOMHTMLInputElement::removeAttributeNS):
        (DOMHTMLInputElement::getAttributeNodeNS):
        (DOMHTMLInputElement::setAttributeNodeNS):
        (DOMHTMLInputElement::getElementsByTagNameNS):
        (DOMHTMLInputElement::hasAttribute):
        (DOMHTMLInputElement::hasAttributeNS):
        (DOMHTMLInputElement::idName):
        (DOMHTMLInputElement::setIdName):
        (DOMHTMLInputElement::title):
        (DOMHTMLInputElement::setTitle):
        (DOMHTMLInputElement::lang):
        (DOMHTMLInputElement::setLang):
        (DOMHTMLInputElement::dir):
        (DOMHTMLInputElement::setDir):
        (DOMHTMLInputElement::className):
        (DOMHTMLInputElement::setClassName):
        (DOMHTMLTextAreaElement::DOMHTMLTextAreaElement):
        (DOMHTMLTextAreaElement::AddRef):
        (DOMHTMLTextAreaElement::Release):
        (DOMHTMLTextAreaElement::throwException):
        (DOMHTMLTextAreaElement::callWebScriptMethod):
        (DOMHTMLTextAreaElement::evaluateWebScript):
        (DOMHTMLTextAreaElement::removeWebScriptKey):
        (DOMHTMLTextAreaElement::stringRepresentation):
        (DOMHTMLTextAreaElement::webScriptValueAtIndex):
        (DOMHTMLTextAreaElement::setWebScriptValueAtIndex):
        (DOMHTMLTextAreaElement::setException):
        (DOMHTMLTextAreaElement::nodeName):
        (DOMHTMLTextAreaElement::nodeValue):
        (DOMHTMLTextAreaElement::setNodeValue):
        (DOMHTMLTextAreaElement::nodeType):
        (DOMHTMLTextAreaElement::parentNode):
        (DOMHTMLTextAreaElement::childNodes):
        (DOMHTMLTextAreaElement::firstChild):
        (DOMHTMLTextAreaElement::lastChild):
        (DOMHTMLTextAreaElement::previousSibling):
        (DOMHTMLTextAreaElement::nextSibling):
        (DOMHTMLTextAreaElement::attributes):
        (DOMHTMLTextAreaElement::ownerDocument):
        (DOMHTMLTextAreaElement::insertBefore):
        (DOMHTMLTextAreaElement::replaceChild):
        (DOMHTMLTextAreaElement::removeChild):
        (DOMHTMLTextAreaElement::appendChild):
        (DOMHTMLTextAreaElement::hasChildNodes):
        (DOMHTMLTextAreaElement::cloneNode):
        (DOMHTMLTextAreaElement::normalize):
        (DOMHTMLTextAreaElement::isSupported):
        (DOMHTMLTextAreaElement::namespaceURI):
        (DOMHTMLTextAreaElement::prefix):
        (DOMHTMLTextAreaElement::setPrefix):
        (DOMHTMLTextAreaElement::localName):
        (DOMHTMLTextAreaElement::hasAttributes):
        (DOMHTMLTextAreaElement::tagName):
        (DOMHTMLTextAreaElement::getAttribute):
        (DOMHTMLTextAreaElement::setResult):
        (DOMHTMLTextAreaElement::removeAttribute):
        (DOMHTMLTextAreaElement::getAttributeNode):
        (DOMHTMLTextAreaElement::setAttributeNode):
        (DOMHTMLTextAreaElement::removeAttributeNode):
        (DOMHTMLTextAreaElement::getElementsByTagName):
        (DOMHTMLTextAreaElement::getAttributeNS):
        (DOMHTMLTextAreaElement::setAttributeNS):
        (DOMHTMLTextAreaElement::removeAttributeNS):
        (DOMHTMLTextAreaElement::getAttributeNodeNS):
        (DOMHTMLTextAreaElement::setAttributeNodeNS):
        (DOMHTMLTextAreaElement::getElementsByTagNameNS):
        (DOMHTMLTextAreaElement::hasAttribute):
        (DOMHTMLTextAreaElement::hasAttributeNS):
        (DOMHTMLTextAreaElement::idName):
        (DOMHTMLTextAreaElement::setIdName):
        (DOMHTMLTextAreaElement::title):
        (DOMHTMLTextAreaElement::setTitle):
        (DOMHTMLTextAreaElement::lang):
        (DOMHTMLTextAreaElement::setLang):
        (DOMHTMLTextAreaElement::dir):
        (DOMHTMLTextAreaElement::setDir):
        (DOMHTMLTextAreaElement::className):
        (DOMHTMLTextAreaElement::setClassName):
        * Interfaces/DOMHTML.idl:
        * Interfaces/IWebScriptObject.idl:
        * WebFrame.cpp:
        (WebFrame::openURL):
        (WebFrame::textFieldDidBeginEditing):
        (WebFrame::textFieldDidEndEditing):
        (WebFrame::textDidChangeInTextField):
        (WebFrame::doTextFieldCommandFromEvent):
        (WebFrame::textWillBeDeletedInTextField):
        (WebFrame::textDidChangeInTextArea):
        * WebKit.vcproj/WebKit.vcproj:
        * WebScriptObject.cpp: Added.
        (WebScriptObject::WebScriptObject):
        (WebScriptObject::~WebScriptObject):
        (WebScriptObject::QueryInterface):
        (WebScriptObject::AddRef):
        (WebScriptObject::Release):
        (WebScriptObject::throwException):
        (WebScriptObject::callWebScriptMethod):
        (WebScriptObject::evaluateWebScript):
        (WebScriptObject::removeWebScriptKey):
        (WebScriptObject::stringRepresentation):
        (WebScriptObject::webScriptValueAtIndex):
        (WebScriptObject::setWebScriptValueAtIndex):
        (WebScriptObject::setException):
        * WebScriptObject.h: Added.
        * WebURLResponse.cpp:
        (WebURLResponse::WebURLResponse):
        (WebURLResponse::~WebURLResponse):
        (WebURLResponse::createInstance):
        (WebURLResponse::QueryInterface):
        (WebURLResponse::AddRef):
        (WebURLResponse::Release):
        (WebURLResponse::expectedContentLength):
        (WebURLResponse::initWithURL):
        (WebURLResponse::MIMEType):
        (WebURLResponse::suggestedFilename):
        (WebURLResponse::textEncodingName):
        (WebURLResponse::URL):
        * WebView.cpp:
        (WebView::setFormDelegate):
        (WebView::formDelegate):
        * WebView.h:

2006-08-17  Anders Carlsson  <andersca@apple.com>

        Reviewed by Maciej.

        * WebKit.vcproj/WebKit.vcproj:
        Add version.lib

2006-08-15  Steve Falkenburg  <sfalken@apple.com>

        Fix this to build in my tree.

        * WebFrame.cpp:
        (WebFrame::textFieldDidBeginEditing):
        (WebFrame::doTextFieldCommandFromEvent):
        (WebFrame::textWillBeDeletedInTextField):
        * WebKit.vcproj/Interfaces.vcproj:
        * WebKit.vcproj/WebKit.sln:
        * WebKit.vcproj/WebKit.vcproj:

2006-08-15  Steve Falkenburg  <sfalken@apple.com>

        Initial check-in.

        * CFDictionaryPropertyBag.cpp: Added.
        (CFDictionaryPropertyBag::CFDictionaryPropertyBag):
        (CFDictionaryPropertyBag::~CFDictionaryPropertyBag):
        (CFDictionaryPropertyBag::createInstance):
        (CFDictionaryPropertyBag::setDictionary):
        (CFDictionaryPropertyBag::QueryInterface):
        (CFDictionaryPropertyBag::AddRef):
        (CFDictionaryPropertyBag::Release):
        (ConvertCFTypeToVariant):
        (ConvertVariantToCFType):
        (CFDictionaryPropertyBag::Read):
        (CFDictionaryPropertyBag::Write):
        * CFDictionaryPropertyBag.h: Added.
        * ChangeLog: Added.
        * Interfaces/DOMCSS.idl: Added.
        * Interfaces/DOMCore.idl: Added.
        * Interfaces/DOMHTML.idl: Added.
        * Interfaces/DOMRange.idl: Added.
        * Interfaces/IWebArchive.idl: Added.
        * Interfaces/IWebAttributedString.idl: Added.
        * Interfaces/IWebBackForwardList.idl: Added.
        * Interfaces/IWebDataSource.idl: Added.
        * Interfaces/IWebDocument.idl: Added.
        * Interfaces/IWebDownload.idl: Added.
        * Interfaces/IWebEditingDelegate.idl: Added.
        * Interfaces/IWebError.idl: Added.
        * Interfaces/IWebFormDelegate.idl: Added.
        * Interfaces/IWebFrame.idl: Added.
        * Interfaces/IWebFrameLoadDelegate.idl: Added.
        * Interfaces/IWebFrameLoadDelegatePrivate.idl: Added.
        * Interfaces/IWebFrameView.idl: Added.
        * Interfaces/IWebHistory.idl: Added.
        * Interfaces/IWebHistoryItem.idl: Added.
        * Interfaces/IWebHistoryItemPrivate.idl: Added.
        * Interfaces/IWebIconDatabase.idl: Added.
        * Interfaces/IWebImage.idl: Added.
        * Interfaces/IWebMutableURLRequest.idl: Added.
        * Interfaces/IWebNotification.idl: Added.
        * Interfaces/IWebNotificationCenter.idl: Added.
        * Interfaces/IWebNotificationObserver.idl: Added.
        * Interfaces/IWebPolicyDelegate.idl: Added.
        * Interfaces/IWebPreferences.idl: Added.
        * Interfaces/IWebResource.idl: Added.
        * Interfaces/IWebResourceLoadDelegate.idl: Added.
        * Interfaces/IWebScriptObject.idl: Added.
        * Interfaces/IWebUIDelegate.idl: Added.
        * Interfaces/IWebURLAuthenticationChallenge.idl: Added.
        * Interfaces/IWebURLRequest.idl: Added.
        * Interfaces/IWebURLResponse.idl: Added.
        * Interfaces/IWebUndoManager.idl: Added.
        * Interfaces/IWebView.idl: Added.
        * Interfaces/IWebViewPrivate.idl: Added.
        * Interfaces/WebKit.idl: Added.
        * MarshallingHelpers.cpp: Added.
        (MarshallingHelpers::BSTRToCFURLRef):
        (MarshallingHelpers::BSTRToCFStringRef):
        (MarshallingHelpers::CFStringRefToBSTR):
        (MarshallingHelpers::CFNumberRefToInt):
        (MarshallingHelpers::intToCFNumberRef):
        (MarshallingHelpers::windowsEpochAbsoluteTime):
        (MarshallingHelpers::DATEToCFAbsoluteTime):
        (MarshallingHelpers::CFAbsoluteTimeToDATE):
        (MarshallingHelpers::stringArrayToSafeArray):
        (MarshallingHelpers::intArrayToSafeArray):
        (MarshallingHelpers::iunknownArrayToSafeArray):
        (MarshallingHelpers::safeArrayToStringArray):
        (MarshallingHelpers::safeArrayToIntArray):
        (MarshallingHelpers::safeArrayToIUnknownArray):
        (MarshallingHelpers::IUnknownRetainCallback):
        (MarshallingHelpers::IUnknownReleaseCallback):
        * MarshallingHelpers.h: Added.
        * WebBackForwardList.cpp: Added.
        (WebBackForwardList::WebBackForwardList):
        (WebBackForwardList::~WebBackForwardList):
        (WebBackForwardList::createInstance):
        (WebBackForwardList::QueryInterface):
        (WebBackForwardList::AddRef):
        (WebBackForwardList::Release):
        (WebBackForwardList::addItem):
        (WebBackForwardList::goBack):
        (WebBackForwardList::goForward):
        (WebBackForwardList::goToItem):
        (WebBackForwardList::backItem):
        (WebBackForwardList::currentItem):
        (WebBackForwardList::forwardItem):
        (WebBackForwardList::backListWithLimit):
        (WebBackForwardList::forwardListWithLimit):
        (WebBackForwardList::capacity):
        (WebBackForwardList::setCapacity):
        (WebBackForwardList::backListCount):
        (WebBackForwardList::forwardListCount):
        (WebBackForwardList::containsItem):
        (WebBackForwardList::itemAtIndex):
        (WebBackForwardList::setPageCacheSize):
        (WebBackForwardList::pageCacheSize):
        * WebBackForwardList.h: Added.
        * WebDataSource.cpp: Added.
        (WebDataSource::WebDataSource):
        (WebDataSource::~WebDataSource):
        (WebDataSource::createInstance):
        (WebDataSource::setResponse):
        (WebDataSource::QueryInterface):
        (WebDataSource::AddRef):
        (WebDataSource::Release):
        (WebDataSource::initWithRequest):
        (WebDataSource::data):
        (WebDataSource::representation):
        (WebDataSource::webFrame):
        (WebDataSource::initialRequest):
        (WebDataSource::request):
        (WebDataSource::response):
        (WebDataSource::textEncodingName):
        (WebDataSource::isLoading):
        (WebDataSource::pageTitle):
        (WebDataSource::unreachableURL):
        (WebDataSource::webArchive):
        (WebDataSource::mainResource):
        (WebDataSource::subresources):
        (WebDataSource::subresourceForURL):
        (WebDataSource::addSubresource):
        * WebDataSource.h: Added.
        * WebFrame.cpp: Added.
        (WebFrame::WebFramePrivate::WebFramePrivate):
        (WebFrame::WebFramePrivate::~WebFramePrivate):
        (WebFrame::WebFrame):
        (WebFrame::~WebFrame):
        (WebFrame::createInstance):
        (WebFrame::QueryInterface):
        (WebFrame::AddRef):
        (WebFrame::Release):
        (WebFrame::initWithName):
        (WebFrame::name):
        (WebFrame::webView):
        (WebFrame::frameView):
        (WebFrame::DOMDocument):
        (WebFrame::frameElement):
        (WebFrame::loadRequest):
        (WebFrame::loadData):
        (WebFrame::loadHTMLString):
        (WebFrame::loadAlternateHTMLString):
        (WebFrame::loadArchive):
        (WebFrame::dataSource):
        (WebFrame::provisionalDataSource):
        (WebFrame::stopLoading):
        (WebFrame::reload):
        (WebFrame::findFrameNamed):
        (WebFrame::parentFrame):
        (WebFrame::childFrames):
        (WebFrame::paint):
        (WebFrame::impl):
        (WebFrame::loadDataSource):
        (WebFrame::loading):
        (WebFrame::goToItem):
        (WebFrame::loadItem):
        (WebSystemMainMemory):
        (WebFrame::getObjectCacheSize):
        (WebFrame::invalidate):
        (WebFrame::setTextSizeMultiplier):
        (WebFrame::inViewSourceMode):
        (WebFrame::setInViewSourceMode):
        (WebFrame::receivedRedirect):
        (WebFrame::receivedResponse):
        (WebFrame::receivedData):
        (WebFrame::receivedAllData):
        (WebFrame::openURL):
        (WebFrame::submitForm):
        (WebFrame::setTitle):
        (WebFrame::setStatusText):
        (WebFrame::textFieldDidBeginEditing):
        (WebFrame::textFieldDidEndEditing):
        (WebFrame::textDidChangeInTextField):
        (WebFrame::doTextFieldCommandFromEvent):
        (WebFrame::textWillBeDeletedInTextField):
        (WebFrame::textDidChangeInTextArea):
        * WebFrame.h: Added.
        * WebHistory.cpp: Added.
        (areEqualOrClose):
        (createUserInfoFromArray):
        (createUserInfoFromHistoryItem):
        (releaseUserInfo):
        (WebHistory::WebHistory):
        (WebHistory::~WebHistory):
        (WebHistory::createInstance):
        (WebHistory::postNotification):
        (WebHistory::getNotificationString):
        (WebHistory::QueryInterface):
        (WebHistory::AddRef):
        (WebHistory::Release):
        (WebHistory::optionalSharedHistory):
        (WebHistory::setOptionalSharedHistory):
        (WebHistory::loadFromURL):
        (WebHistory::loadHistoryGutsFromURL):
        (WebHistory::saveToURL):
        (WebHistory::saveHistoryGuts):
        (WebHistory::datesArray):
        (WebHistory::addItems):
        (WebHistory::removeItems):
        (dictReleaseApplier):
        (WebHistory::removeAllItems):
        (WebHistory::orderedLastVisitedDays):
        (WebHistory::orderedItemsLastVisitedOnDay):
        (WebHistory::itemForURL):
        (WebHistory::setHistoryItemLimit):
        (WebHistory::historyItemLimit):
        (WebHistory::setHistoryAgeInDaysLimit):
        (WebHistory::historyAgeInDaysLimit):
        (WebHistory::removeItem):
        (WebHistory::addItem):
        (WebHistory::addItemForURL):
        (WebHistory::removeItemForURLString):
        (WebHistory::addItemToDateCaches):
        (WebHistory::removeItemFromDateCaches):
        (WebHistory::findIndex):
        (WebHistory::insertItem):
        (WebHistory::timeToDate):
        (WebHistory::ageLimitDate):
        (WebHistory::optionalSharedHistoryInternal):
        * WebHistory.h: Added.
        (WebHistory::):
        * WebHistoryItem.cpp: Added.
        (WebHistoryItem::WebHistoryItem):
        (WebHistoryItem::~WebHistoryItem):
        (WebHistoryItem::createInstance):
        (WebHistoryItem::initFromDictionaryRepresentation):
        (WebHistoryItem::dictionaryRepresentation):
        (WebHistoryItem::hasURLString):
        (WebHistoryItem::visitCount):
        (WebHistoryItem::setVisitCount):
        (WebHistoryItem::mergeAutoCompleteHints):
        (WebHistoryItem::setLastVisitedTimeInterval):
        (WebHistoryItem::QueryInterface):
        (WebHistoryItem::AddRef):
        (WebHistoryItem::Release):
        (WebHistoryItem::initWithURLString):
        (WebHistoryItem::originalURLString):
        (WebHistoryItem::URLString):
        (WebHistoryItem::title):
        (WebHistoryItem::lastVisitedTimeInterval):
        (WebHistoryItem::setAlternateTitle):
        (WebHistoryItem::alternateTitle):
        (WebHistoryItem::icon):
        * WebHistoryItem.h: Added.
        * WebIconDatabase.cpp: Added.
        (WebIconDatabase::WebIconDatabase):
        (WebIconDatabase::~WebIconDatabase):
        (WebIconDatabase::createInstance):
        (WebIconDatabase::QueryInterface):
        (WebIconDatabase::AddRef):
        (WebIconDatabase::Release):
        (WebIconDatabase::sharedIconDatabase):
        (WebIconDatabase::iconForURL):
        (WebIconDatabase::defaultIconWithSize):
        (WebIconDatabase::retainIconForURL):
        (WebIconDatabase::releaseIconForURL):
        (WebIconDatabase::delayDatabaseCleanup):
        (WebIconDatabase::allowDatabaseCleanup):
        * WebIconDatabase.h: Added.
        * WebKit.vcproj/Interfaces.vcproj: Added.
        * WebKit.vcproj/WebKit.def: Added.
        * WebKit.vcproj/WebKit.rc: Added.
        * WebKit.vcproj/WebKit.sln: Added.
        * WebKit.vcproj/WebKit.vcproj: Added.
        * WebKit.vcproj/WebKitGUID.vcproj: Added.
        * WebKit.vcproj/autoversion.h: Added.
        * WebKit.vcproj/missingImage.png: Added.
        * WebKit.vcproj/resource.h: Added.
        * WebKit.vcproj/textAreaResizeCorner.png: Added.
        * WebKitClassFactory.cpp: Added.
        (WebKitClassFactory::WebKitClassFactory):
        (WebKitClassFactory::~WebKitClassFactory):
        (WebKitClassFactory::QueryInterface):
        (WebKitClassFactory::AddRef):
        (WebKitClassFactory::Release):
        (WebKitClassFactory::CreateInstance):
        (WebKitClassFactory::LockServer):
        * WebKitClassFactory.h: Added.
        * WebKitDLL.cpp: Added.
        (DllMain):
        (DllGetClassObject):
        (DllCanUnloadNow):
        (DllUnregisterServer):
        (DllRegisterServer):
        (loadResourceIntoArray):
        * WebKitDLL.h: Added.
        * WebMutableURLRequest.cpp: Added.
        (WebMutableURLRequest::WebMutableURLRequest):
        (WebMutableURLRequest::~WebMutableURLRequest):
        (WebMutableURLRequest::createInstance):
        (WebMutableURLRequest::QueryInterface):
        (WebMutableURLRequest::AddRef):
        (WebMutableURLRequest::Release):
        (WebMutableURLRequest::requestWithURL):
        (WebMutableURLRequest::allHTTPHeaderFields):
        (WebMutableURLRequest::cachePolicy):
        (WebMutableURLRequest::HTTPBody):
        (WebMutableURLRequest::HTTPBodyStream):
        (WebMutableURLRequest::HTTPMethod):
        (WebMutableURLRequest::HTTPShouldHandleCookies):
        (WebMutableURLRequest::initWithURL):
        (WebMutableURLRequest::mainDocumentURL):
        (WebMutableURLRequest::timeoutInterval):
        (WebMutableURLRequest::URL):
        (WebMutableURLRequest::valueForHTTPHeaderField):
        (WebMutableURLRequest::addValue):
        (WebMutableURLRequest::setAllHTTPHeaderFields):
        (WebMutableURLRequest::setCachePolicy):
        (WebMutableURLRequest::setHTTPBody):
        (WebMutableURLRequest::setHTTPBodyStream):
        (WebMutableURLRequest::setHTTPMethod):
        (WebMutableURLRequest::setHTTPShouldHandleCookies):
        (WebMutableURLRequest::setMainDocumentURL):
        (WebMutableURLRequest::setTimeoutInterval):
        (WebMutableURLRequest::setURL):
        (WebMutableURLRequest::setValue):
        (WebMutableURLRequest::setFormData):
        (WebMutableURLRequest::formData):
        * WebMutableURLRequest.h: Added.
        * WebNotification.cpp: Added.
        (WebNotification::WebNotification):
        (WebNotification::~WebNotification):
        (WebNotification::createInstance):
        (WebNotification::QueryInterface):
        (WebNotification::AddRef):
        (WebNotification::Release):
        (WebNotification::notificationWithName):
        (WebNotification::name):
        (WebNotification::getObject):
        (WebNotification::userInfo):
        * WebNotification.h: Added.
        * WebNotificationCenter.cpp: Added.
        (ObserverKey::ObserverKey):
        (ObserverKey::~ObserverKey):
        (ObserverKey::operator==):
        (ObserverKeyTraits::deletedValue):
        (ObserverHash::equal):
        (ObserverHash::hash):
        (WebNotificationCenter::WebNotificationCenter):
        (WebNotificationCenter::~WebNotificationCenter):
        (WebNotificationCenter::createInstance):
        (WebNotificationCenter::QueryInterface):
        (WebNotificationCenter::AddRef):
        (WebNotificationCenter::Release):
        (WebNotificationCenter::defaultCenterInternal):
        (WebNotificationCenter::postNotificationInternal):
        (WebNotificationCenter::defaultCenter):
        (WebNotificationCenter::addObserver):
        (WebNotificationCenter::postNotification):
        (WebNotificationCenter::postNotificationName):
        (WebNotificationCenter::removeObserver):
        * WebNotificationCenter.h: Added.
        * WebPreferenceKeysPrivate.h: Added.
        * WebPreferences.cpp: Added.
        (WebPreferences::WebPreferences):
        (WebPreferences::~WebPreferences):
        (WebPreferences::createInstance):
        (WebPreferences::postPreferencesChangesNotification):
        (WebPreferences::getInstanceForIdentifier):
        (WebPreferences::initialize):
        (WebPreferences::valueForKey):
        (WebPreferences::stringValueForKey):
        (WebPreferences::integerValueForKey):
        (WebPreferences::boolValueForKey):
        (WebPreferences::floatValueForKey):
        (WebPreferences::setStringValue):
        (WebPreferences::webPreferencesChangedNotification):
        (WebPreferences::setIntegerValue):
        (WebPreferences::setBoolValue):
        (WebPreferences::save):
        (WebPreferences::load):
        (WebPreferences::preferencesPath):
        (WebPreferences::safeCreateFileWithData):
        (WebPreferences::QueryInterface):
        (WebPreferences::AddRef):
        (WebPreferences::Release):
        (WebPreferences::standardPreferences):
        (WebPreferences::initWithIdentifier):
        (WebPreferences::identifier):
        (WebPreferences::standardFontFamily):
        (WebPreferences::setStandardFontFamily):
        (WebPreferences::fixedFontFamily):
        (WebPreferences::setFixedFontFamily):
        (WebPreferences::serifFontFamily):
        (WebPreferences::setSerifFontFamily):
        (WebPreferences::sansSerifFontFamily):
        (WebPreferences::setSansSerifFontFamily):
        (WebPreferences::cursiveFontFamily):
        (WebPreferences::setCursiveFontFamily):
        (WebPreferences::fantasyFontFamily):
        (WebPreferences::setFantasyFontFamily):
        (WebPreferences::defaultFontSize):
        (WebPreferences::setDefaultFontSize):
        (WebPreferences::defaultFixedFontSize):
        (WebPreferences::setDefaultFixedFontSize):
        (WebPreferences::minimumFontSize):
        (WebPreferences::setMinimumFontSize):
        (WebPreferences::minimumLogicalFontSize):
        (WebPreferences::setMinimumLogicalFontSize):
        (WebPreferences::defaultTextEncodingName):
        (WebPreferences::setDefaultTextEncodingName):
        (WebPreferences::userStyleSheetEnabled):
        (WebPreferences::setUserStyleSheetEnabled):
        (WebPreferences::userStyleSheetLocation):
        (WebPreferences::setUserStyleSheetLocation):
        (WebPreferences::isJavaEnabled):
        (WebPreferences::setJavaEnabled):
        (WebPreferences::isJavaScriptEnabled):
        (WebPreferences::setJavaScriptEnabled):
        (WebPreferences::javaScriptCanOpenWindowsAutomatically):
        (WebPreferences::setJavaScriptCanOpenWindowsAutomatically):
        (WebPreferences::arePlugInsEnabled):
        (WebPreferences::setPlugInsEnabled):
        (WebPreferences::allowsAnimatedImages):
        (WebPreferences::setAllowsAnimatedImages):
        (WebPreferences::allowAnimatedImageLooping):
        (WebPreferences::setAllowAnimatedImageLooping):
        (WebPreferences::setLoadsImagesAutomatically):
        (WebPreferences::loadsImagesAutomatically):
        (WebPreferences::setAutosaves):
        (WebPreferences::autosaves):
        (WebPreferences::setShouldPrintBackgrounds):
        (WebPreferences::shouldPrintBackgrounds):
        (WebPreferences::setPrivateBrowsingEnabled):
        (WebPreferences::privateBrowsingEnabled):
        (WebPreferences::setTabsToLinks):
        (WebPreferences::tabsToLinks):
        (WebPreferences::textAreasAreResizable):
        (WebPreferences::setTextAreasAreResizable):
        (WebPreferences::historyItemLimit):
        (WebPreferences::setHistoryItemLimit):
        (WebPreferences::historyAgeInDaysLimit):
        (WebPreferences::setHistoryAgeInDaysLimit):
        (WebPreferences::pageCacheSize):
        (WebPreferences::objectCacheSize):
        * WebPreferences.h: Added.
        * WebURLResponse.cpp: Added.
        (WebURLResponse::WebURLResponse):
        (WebURLResponse::~WebURLResponse):
        (WebURLResponse::createInstance):
        (WebURLResponse::QueryInterface):
        (WebURLResponse::AddRef):
        (WebURLResponse::Release):
        (WebURLResponse::expectedContentLength):
        (WebURLResponse::initWithURL):
        (WebURLResponse::MIMEType):
        (WebURLResponse::suggestedFilename):
        (WebURLResponse::textEncodingName):
        (WebURLResponse::URL):
        * WebURLResponse.h: Added.
        * WebView.cpp: Added.
        (WebView::WebView):
        (WebView::~WebView):
        (WebView::createInstance):
        (WebView::mouseMoved):
        (WebView::mouseDown):
        (WebView::mouseUp):
        (WebView::mouseDoubleClick):
        (WebView::keyPress):
        (registerWebView):
        (WebViewWndProc):
        (calculateScrollDelta):
        (scrollMessageForKey):
        (WebView::goToItem):
        (WebView::updateWebCoreSettingsFromPreferences):
        (WebView::settings):
        (WebView::QueryInterface):
        (WebView::AddRef):
        (WebView::Release):
        (WebView::canShowMIMEType):
        (WebView::canShowMIMETypeAsHTML):
        (WebView::MIMETypesShownAsHTML):
        (WebView::setMIMETypesShownAsHTML):
        (WebView::URLFromPasteboard):
        (WebView::URLTitleFromPasteboard):
        (WebView::initWithFrame):
        (WebView::setUIDelegate):
        (WebView::uiDelegate):
        (WebView::setResourceLoadDelegate):
        (WebView::resourceLoadDelegate):
        (WebView::setDownloadDelegate):
        (WebView::downloadDelegate):
        (WebView::setFrameLoadDelegate):
        (WebView::frameLoadDelegate):
        (WebView::setPolicyDelegate):
        (WebView::policyDelegate):
        (WebView::mainFrame):
        (WebView::backForwardList):
        (WebView::setMaintainsBackForwardList):
        (WebView::goBack):
        (WebView::goForward):
        (WebView::goToBackForwardItem):
        (WebView::setTextSizeMultiplier):
        (WebView::textSizeMultiplier):
        (WebView::setApplicationNameForUserAgent):
        (WebView::applicationNameForUserAgent):
        (WebView::setCustomUserAgent):
        (WebView::customUserAgent):
        (WebView::userAgentForURL):
        (WebView::supportsTextEncoding):
        (WebView::setCustomTextEncodingName):
        (WebView::customTextEncodingName):
        (WebView::setMediaStyle):
        (WebView::mediaStyle):
        (WebView::stringByEvaluatingJavaScriptFromString):
        (WebView::windowScriptObject):
        (WebView::setPreferences):
        (WebView::preferences):
        (WebView::setPreferencesIdentifier):
        (WebView::preferencesIdentifier):
        (WebView::setHostWindow):
        (WebView::hostWindow):
        (WebView::searchFor):
        (WebView::registerViewClass):
        (WebView::takeStringURLFrom):
        (WebView::stopLoading):
        (WebView::reload):
        (WebView::canGoBack):
        (WebView::canGoForward):
        (WebView::canMakeTextLarger):
        (WebView::makeTextLarger):
        (WebView::canMakeTextSmaller):
        (WebView::makeTextSmaller):
        (WebView::computedStyleForElement):
        (WebView::editableDOMRangeForPoint):
        (WebView::setSelectedDOMRange):
        (WebView::selectedDOMRange):
        (WebView::selectionAffinity):
        (WebView::setEditable):
        (WebView::isEditable):
        (WebView::setTypingStyle):
        (WebView::typingStyle):
        (WebView::setSmartInsertDeleteEnabled):
        (WebView::smartInsertDeleteEnabled):
        (WebView::setContinuousSpellCheckingEnabled):
        (WebView::isContinuousSpellCheckingEnabled):
        (WebView::spellCheckerDocumentTag):
        (WebView::undoManager):
        (WebView::setEditingDelegate):
        (WebView::editingDelegate):
        (WebView::styleDeclarationWithText):
        (WebView::replaceSelectionWithNode):
        (WebView::replaceSelectionWithText):
        (WebView::replaceSelectionWithMarkupString):
        (WebView::replaceSelectionWithArchive):
        (WebView::deleteSelection):
        (WebView::applyStyle):
        (WebView::copy):
        (WebView::cut):
        (WebView::paste):
        (WebView::copyFont):
        (WebView::pasteFont):
        (WebView::delete_):
        (WebView::pasteAsPlainText):
        (WebView::pasteAsRichText):
        (WebView::changeFont):
        (WebView::changeAttributes):
        (WebView::changeDocumentBackgroundColor):
        (WebView::changeColor):
        (WebView::alignCenter):
        (WebView::alignJustified):
        (WebView::alignLeft):
        (WebView::alignRight):
        (WebView::checkSpelling):
        (WebView::showGuessPanel):
        (WebView::performFindPanelAction):
        (WebView::startSpeaking):
        (WebView::stopSpeaking):
        (WebView::onNotify):
        (WebView::setInViewSourceMode):
        (WebView::inViewSourceMode):
        (WebView::viewWindow):
        (WebView::setFormDelegate):
        (WebView::formDelegate):
        * WebView.h: Added.

