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

