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.

