    2009-06-15  Dan Bernstein  <mitz@apple.com>

        Reviewed by Tim Hatcher.

        - use a nice source code font in the Web Inspector

        * WebCoreSupport/WebInspectorClient.cpp:
        (WebInspectorClient::createPage): Set the default monospace font to
            13px Courier New, which is the default source code font in Visual
            Studio.

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

        Reviewed by Darin Fisher.

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

        Move registerURLSchemeAsLocal from FrameLoader to SecurityOrigin.

        * WebView.cpp:
        (WebView::registerURLSchemeAsLocal):

2009-06-12  Peter Kasting  <pkasting@google.com>

        Reviewed by Eric Seidel.

        * ChangeLog: Update my email address.

2009-06-03  Brent Fulgham  <bfulgham@webkit.org>

        Build fix for Windows Cairo.

        * WebKit.vcproj/WebKit.vcproj: Remove unneeded giflib.lib
          link command.

2009-06-01  Brent Fulgham  <bfulgham@webkit.org>

        Build fix for Cairo Windows target.  Windows link definition
        files were out of sync with the Apple Windows link files.

        * WebKit.vcproj/WebKit_Cairo.def:
        * WebKit.vcproj/WebKit_Cairo_debug.def:

2009-05-29  Adam Roben  <aroben@apple.com>

        Implement WebFrame::startDownload

        Fixes the WebKit side of Bug 25729: Alt-clicking a link doesn't start
        a download <https://bugs.webkit.org/show_bug.cgi?id=25729>. Fixing
        this all the way will require a change in Safari.

        Reviewed by Darin Adler.

        * WebFrame.cpp:
        (WebFrame::startDownload): Call through to WebView::downloadURL.

2009-05-29  Adam Roben  <aroben@apple.com>

        Move WebContextMenuClient's downloading code to WebView

        This will allow other code to trigger downloads using this code, and
        matches Mac.

        Reviewed by Darin Adler.

        * WebCoreSupport/WebContextMenuClient.cpp:
        (WebContextMenuClient::downloadURL): Moved code from here...
        * WebView.cpp:
        (WebView::downloadURL): ...to here. Also tightened up the code a
        little bit and removed an unnecessary LOG_ERROR.

        * WebView.h: Added downloadURL.

2009-05-29  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Darin Adler.

        Correct Windows Cairo build error caused by @r42767.
        http://bugs.webkit.org/show_bug.cgi?id=26082.

        * WebError.cpp:
        (WebError::localizedDescription):

2009-05-23  David Kilzer  <ddkilzer@apple.com>

        Windows build fix for PassOwnPtr

        * WebHistory.cpp:
        (WebHistory::visitedURL): Changed
        std::auto_ptr<Vector<String> >() to 0.
        * WebHistoryItem.cpp:
        (WebHistoryItem::initFromDictionaryRepresentation): Changed type
        of redirectURLsVector from std::auto_ptr<Vector<String> > to
        OwnPtr<Vector<String> >.

2009-05-23  David Kilzer  <ddkilzer@apple.com>

        Part 2 of 2: Bug 25495: Implement PassOwnPtr and replace uses of std::auto_ptr

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

        Reviewed by Oliver Hunt.

        * WebCoreSupport/WebChromeClient.h:
        (WebChromeClient::createHTMLParserQuirks): Return a PassOwnPtr<>
        instead of a raw HTMLParserQuirks pointer.

2009-05-22  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=25971
        Correct some build errors for Windows Cairo variant.

        * WebKit.vcproj/WebKit.vcproj: Remove WTF.lib link commands as
          the new JavaScriptCore.dll supplies this now.

2009-05-22  Brent Fulgham <bfulgham@webkit.org>

        Reviewed by Steve Falkenburg.

        https://bugs.webkit.org/show_bug.cgi?id=25950
        JavaScriptCore Fails to build on Windows (Cairo) due to
        CoreFoundation link requirement.

        * WebKit.vcproj/WebKit.sln: Modify Debug_Cairo and Release_Cairo
          targets to use new Debug_CFLite and Release_CFLite targets
          for JavaScriptCore.

2009-05-21  Darin Fisher  <darin@chromium.org>

        Fix-up coding style.

        * WebCoreSupport/WebEditorClient.cpp:
        (WebEditorClient::getAutoCorrectSuggestionForMisspelledWord):

2009-05-20  Siddhartha Chattopadhyay  <sidchat@google.com>

        Reviewed by Justin Garcia.
        
        Add automatic spell correction support in WebKit

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

        * WebCoreSupport/WebEditorClient.cpp:
        (WebEditorClient::getAutoCorrectSuggestionForMisspelledWord):
        * WebCoreSupport/WebEditorClient.h:

2009-05-20  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        More protocolInHTTPFamily() cleanup.

        * WebHistory.cpp:
        (WebHistory::visitedURL):

2009-05-20  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Darin Adler.

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

        Make ChromeClient a interface again

        With recent additions to ChromeClient.h empty defaults were
        added. This is bad for porters as these changes go unnoticed
        and at runtime no notImplemented warning is logged and grepping
        for notImplemented will not show anything. Change this Client
        to be like the other Clients again and always have pure virtuals
        (but for stuff inside #ifdef PLATFORM(MAC)).

        Update the various WebKit/* implementations to compile again.

        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::requestGeolocationPermissionForFrame):
        * WebCoreSupport/WebChromeClient.h:
        (WebChromeClient::scrollRectIntoView):

2009-05-18  Steve Falkenburg  <sfalken@apple.com>

        <rdar://problem/6899044> Can't see Apple ad on nytimes.com unless I spoof the user agent
        
        Add user agent hack for pointroll.com.
        
        Reviewed by Sam Weinig.

        * WebView.cpp:

2009-05-13  Dmitry Titov  <dimich@chromium.org>

        Rubber-stamped by Mark Rowe.

        https://bugs.webkit.org/show_bug.cgi?id=25746
        Revert http://trac.webkit.org/changeset/43507 which caused crash in PPC nightlies with Safari 4.

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

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

        Build fix for Windows nightlies.
        Change link order to work around CFNetwork bug.

        * WebKit.vcproj/WebKit.vcproj:

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

        Reviewed by Alexey Proskuryakov and Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=25348
        Change WTF::ThreadIdentifier to be an actual (but wrapped) thread id, remove ThreadMap.

        Most of the change is in WTF and WebCore.

        * WebKit.vcproj/WebKit.def: replaced decorated names of WTF threading functions with new ones.
        Also, aliased the old implementations so the public Safari 4 beta can load the old WTF functions
        which it uses. Next time Safari 4 builds, it will pick up new functions and the deprecated ones
        can be removed.
        * WebKit.vcproj/WebKit_debug.def: same.

2009-05-10  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Dan Bernstein.

        <rdar://problem/6870383> Have to enter credentials twice when downloading from a protected page

        * WebDownloadCFNet.cpp: (WebDownload::didReceiveAuthenticationChallenge): Try to use
        credentials from WebCore storage.

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

        Rubber-stamped by Oliver Hunt.

        Fix <https://bugs.webkit.org/show_bug.cgi?id=25640>.
        Bug 25640: Crash on quit in r43384 nightly build on Leopard w/ Safari 4 beta installed
        
        Roll out r43366 as it removed symbols that Safari 4 Beta uses.

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

2009-05-06  Steve Falkenburg  <sfalken@apple.com>

        Change default value of WebKitPaintNativeControls to true.
        
        Reviewed by Adam Roben.

        * WebPreferences.cpp:
        (WebPreferences::initializeDefaultSettings):

2009-05-05  Ben Murdoch  <benm@google.com>

        Reviewed by Eric Seidel.
        
        Add #if ENABLE(DATABASE) guards around database code so toggling ENABLE_DATABASE off does not break builds.
        https://bugs.webkit.org/show_bug.cgi?id=24776

        * ForEachCoClass.h:
        * WebCoreSupport/WebChromeClient.cpp:
        * WebCoreSupport/WebChromeClient.h:
        * WebDatabaseManager.cpp:
        * WebDatabaseManager.h:
        * WebSecurityOrigin.cpp:
        (WebSecurityOrigin::usage):
        (WebSecurityOrigin::quota):
        (WebSecurityOrigin::setQuota):
        * WebSecurityOrigin.h:
        * WebView.cpp:
        (WebView::initWithFrame):

2009-05-04  Adam Roben  <aroben@apple.com>

        Add a call to notify the UI delegate when the WebView gets invalidated

        Reviewed by Steve Falkenburg.

        * Interfaces/IWebUIDelegatePrivate.idl: Added webViewDidInvalidate.
        * WebView.cpp:
        (WebView::addToDirtyRegion): Call webViewDidInvalidate.

2009-05-04  Darin Adler  <darin@apple.com>

        First try at fixing the Windows build.

        * DOMHTMLClasses.cpp: Added include of HTMLCollection.h.

2009-05-01  Geoffrey Garen  <ggaren@apple.com>

        Rubber Stamped by Sam Weinig.
        
        Renamed JSValuePtr => JSValue.

        * WebView.cpp:
        (WebView::stringByEvaluatingJavaScriptFromString):

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

        Reviewed by Timothy Hatcher.

        Add a FrameLoaderClient callback for the ResourceRetrievedByXMLHttpRequest.

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

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::dispatchDidLoadResourceByXMLHttpRequest):
        * WebCoreSupport/WebFrameLoaderClient.h:

2009-04-30  David Kilzer  <ddkilzer@apple.com>

        Provide a mechanism to create a quirks delegate for HTMLParser

        Reviewed by David Hyatt.

        * WebCoreSupport/WebChromeClient.h:
        (WebChromeClient::createHTMLParserQuirks): Added.  The default
        implementation of this factory method returns 0.

2009-04-30  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=25342
        Add MessageSource and MessageLevel parameters to the ChromeClient::addMessageToConsole.

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

2009-04-29  Eric Seidel  <eric@webkit.org>

        No review, rolling out a patch.

        Revert 43020 as it caused accessibility/lists.html to fail
        and no one is around to tell me if it's a progression or not.

        * AccessibleBase.cpp:
        (MSAARole):

2009-04-29  Sankar Aditya Tanguturi  <sankaraditya@gmail.com>

        Reviewed by Jon Honeycutt.

        Add a new accessibility role for list items. Part of
        http://bugs.webkit.org/show_id.cgi?id=20013

        * win/AccessibleBase.cpp:
        (MSAARole): Return ROLE_SYSTEM_LISTITEM for list item role.

2009-04-29  Sankar Aditya Tanguturi  <sankaraditya@gmail.com>

        Reviewed by Adele Peterson.

        https://bugs.webkit.org/show_bug.cgi?id=23583
        Populate role attribute for document objects correctly
        on Windows platform.

        * AccessibleDocument.cpp:
        (AccessibleDocument::role): Return ROLE_SYSTEM_DOCUMENT for
        document objects on windows. (Matching Firefox).
        * AccessibleDocument.h: Add the role function prototype in
        header file.

2009-04-22  Ada Chan  <adachan@apple.com>

        <rdar://problem/5115298> Don't get error msg when download is interrupted and cannot resume due to server unavailability
        If we fail to get an error description back from CFNetwork, try to get the localized description
        based on the error code.

        Reviewed by Darin Adler.

        * WebError.cpp:
        (WebError::localizedDescription):

2009-04-21  Jon Honeycutt  <jhoneycutt@apple.com>

        Allow the UI delegate to control cursor-setting.

        Reviewed by Ada Chan.

        * Interfaces/IWebUIDelegatePrivate.idl:
        Added a function to the IWebUIDelegatePrivate5 interface.

        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::setCursor):
        Try to call the UI delegate's webViewSetCursor() method. If it fails,
        fall back to calling SetCursor() with the passed cursor.

        * WebCoreSupport/WebChromeClient.h:

        * WebView.cpp:
        (WebViewWndProc):
        Call the Chrome's setCursor() method with the last set cursor.

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

        Reviewed by Jon Honeycutt.

        - Windows part of fixing <rdar://problem/6755137> Action dictionary for
          policy decision is missing keys when full-page zoom is used

        * WebActionPropertyBag.cpp:
        (WebActionPropertyBag::Read): Use absoluteLocation() instead of
        clientX() and clientY(), which are adjusted for zoom.

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

        Reviewed by Jon Honeycutt.

        - implement DOMNode::nodeName()

        * DOMCoreClasses.cpp:
        (DOMNode::nodeName):

2009-04-21  Steve Falkenburg  <sfalken@apple.com>

        Minor clean-ups to WebKitCreateInstance change.
        
        Reviewed by Jon Honeycutt.

        * WebKitCOMAPI.cpp:
        (classFactory):
        (WebKitCreateInstance):

2009-04-21  Steve Falkenburg  <sfalken@apple.com>

        Add registry-free CoCreateInstance API for WebKit clients: WebKitCreateInstance.

        Manifest-based registry-free COM continues to work for clients that have embedded
        manifests with isolated COM information.
        
        Reviewed by Adam Roben.

        * WebKit.vcproj/WebKit.def: Added WebKitCreateInstance.
        * WebKit.vcproj/WebKit.vcproj: Link against rpcrt4.dll for UUID hashing.
        * WebKit.vcproj/WebKit_debug.def: Added WebKitCreateInstance.
        * WebKitCOMAPI.cpp: Added.
        (CLSIDHash::hash):
        (CLSIDHash::equal):
        (CLSIDHashTraits::constructDeletedValue):
        (CLSIDHashTraits::isDeletedValue):
        (classFactory):
        (WebKitCreateInstance): New API.
        * WebKitCOMAPI.h: Added.

2009-04-21  Adam Roben  <aroben@apple.com>

        Rename JavaScriptCore_debug.dll to JavaScriptCore.dll in the Debug
        configuration

        This matches the naming scheme for WebKit.dll, and will be necessary
        once Safari links against JavaScriptCore.dll. This change also causes
        run-safari not to fail (because the launcher printed by FindSafari was
        always looking for JavaScriptCore.dll, never
        JavaScriptCore_debug.dll).

        Part of Bug 25305: can't run safari or drt on windows
        <https://bugs.webkit.org/show_bug.cgi?id=25305>

        Reviewed by Steve Falkenburg and Sam Weinig.

        * WebKit.vcproj/WebKit.vcproj: Use $(WebKitDLLConfigSuffix) for naming
        JavaScriptCore.{dll,lib}.

2009-04-20  Adam Roben  <aroben@apple.com>

        Build fix

        * MemoryStream.cpp:
        (MemoryStream::Clone): Fix typo introduced when implementing
        suggestions from patch review.

2009-04-20  Adam Roben  <aroben@apple.com>

        First part of <rdar://6395825> It takes over 20 sec to launch Safari
        with 500KB history file

        This ports the changes that were made to WebKit/mac's WebHistory
        implementation in r25275 to WebKit/win. WebHistory now stores a
        HashMap from CFAbsoluteTime (stored as int64_t) to CFArray of
        IWebHistoryItem*. The HashMap lets us look up the CFArray for a
        particular day's history in constant time rather than linear time. The
        precise reasons why we store the CFAbsoluteTime as an int64_t are lost
        to the mists of time, but it is likely because these CFAbsoluteTimes
        never have a decimal part, and integer comparisons are faster than
        floating-point comparisons, so storing them as int64_t should improve
        performance without losing precision. We also now use a binary search
        instead of a linear search when determining the index at which to
        insert a WebHistoryItem into its day's CFArray.

        This patch reduces the time needed to load a 100,000-item
        History.plist from ~15 seconds to ~7.5 seconds. Further improvements
        could likely be made by reducing the number of string conversions,
        reducing calls to CFTimeZone functions, and removing all the
        WebHistoryItemsAdded notifications that are sent (Mac doesn't send any
        while loading history).

        Reviewed by Darin Adler.

        * WebHistory.cpp:
        (WebHistoryWriter::WebHistoryWriter): Changed to take a
        DateToEntriesMap instead of a CFArrayRef. Initialize m_dateKeys to
        contain the keys from m_entriesByDate in ascending order.
        (WebHistoryWriter::writeHistoryItems): Now loops through m_dateKeys in
        reverse order and gets the entries array from the DateToEntriesMap.
        (WebHistory::WebHistory): Removed code to initialize
        m_datesWithEntries (which has been removed) and m_entriesByDate (which
        has been converted to a HashMap).
        (WebHistory::removeAllItems): Clear out m_entriesByDate and
        m_orderedLastVisitedDays.
        (WebHistory::orderedLastVisitedDays): If we don't already have a
        cached m_orderedLastVisitedDays array, create one by converting the
        keys from m_entriesByDate to DATEs and sorting them in descending
        order. Then copy m_orderedLastVisitedDays to the output buffer.
        (WebHistory::orderedItemsLastVisitedOnDay): Updated to use findKey
        instead of findIndex and to treat m_entriesByDate as a HashMap.
        Now that the items in each day's CFArray are stored in descending
        order (newest to oldest), we don't have to reverse them when filling
        in the output buffer. (The old comment about putting the items in
        oldest-to-newest order was incorrect -- it was putting them in
        newest-to-oldest order.)

        (WebHistory::addItemToDateCaches):
        (WebHistory::removeItemFromDateCaches):
        Changed to use findKey instead of findIndex and to treat
        m_entriesByDate as a HashMap. If we're adding a key to or removing a
        key from m_entriesByDate, also clear m_orderedLastVisitedDays so that
        we will regenerate it for the current set of keys the next time it is
        needed.

        (timeIntervalForBeginningOfDay): Added. Returns the CFAbsoluteTime
        that corresponds to the beginning of the day in which the passed-in
        DATE occurs.
        (WebHistory::findKey): Returns the key used in m_entriesByDate to
        store the CFArray that should contain the IWebHistoryItem that
        corresponds to the passed-in DATE. Replaces findIndex.
        (WebHistory::insertItem): Changed to treat m_entriesByDate as a
        HashMap rather than a CFArray. We now optimize for inserting at the
        beginning and end of the array, and use a binary rather than linear
        search when inserting into the middle of the array.
        (WebHistory::data): Changed to treat m_entriesByDate as a HashMap.

        * WebHistory.h: Changed m_entriesByDate to a DateToEntriesMap, removed
        m_datesWithEntries, added m_orderedLastVisitedDays.

2009-04-20  Adam Roben  <aroben@apple.com>

        Change MemoryStream::createInstance to return a COMPtr

        Part of Bug 25294: All WebKit/win classes should return COMPtrs from
        their static constructor members
        <https://bugs.webkit.org/show_bug.cgi?id=25294>

        Reviewed by Darin Adler.

        * MemoryStream.cpp:
        (MemoryStream::createInstance): Changed to return a COMPtr.
        (MemoryStream::Clone): Updated for createInstance change.
        * MemoryStream.h: Changed createInstance to return a COMPtr.

        * WebArchive.cpp:
        (WebArchive::data):
        * WebCoreSupport/EmbeddedWidget.cpp:
        (EmbeddedWidget::didReceiveData):
        * WebDataSource.cpp:
        (WebDataSource::data):
        * WebHistory.cpp:
        (WebHistory::data):
        * WebIconFetcher.cpp:
        (WebIconFetcherClient::finishedFetchingIcon):
        * WebResource.cpp:
        (WebResource::createInstance):
        Updated for changes to MemoryStream::createInstance.

2009-04-20  Adam Roben  <aroben@apple.com>

        Fix Bug 25295: Remove WebKit/win code that was used for Drosera
        support

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

        Reviewed by Sam Weinig.

        * ForEachCoClass.h: Removed WebScriptDebugServer.

        * Interfaces/WebKit.idl: Removed WebScriptDebugServer and references
        to removed IDL files.

        * WebKit.vcproj/Interfaces.vcproj:
        * WebKit.vcproj/WebKit.vcproj:
        Removed IDL and source files for IWebScriptCallFrame,
        IWebScriptDebugListener, IWebScriptDebugServer, WebScriptCallFrame,
        and WebScriptDebugServer.

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        * WebKitClassFactory.cpp:
        * WebKitDLL.cpp:
        Removed #includes of WebScriptDebugServer.h.

        * Interfaces/IWebScriptCallFrame.idl: Removed.
        * Interfaces/IWebScriptDebugListener.idl: Removed.
        * Interfaces/IWebScriptDebugServer.idl: Removed.
        * WebScriptCallFrame.cpp: Removed.
        * WebScriptCallFrame.h: Removed.
        * WebScriptDebugServer.cpp: Removed.
        * WebScriptDebugServer.h: Removed.

2009-04-20  Steve Falkenburg  <sfalken@apple.com>

        Separate JavaScriptCore.dll from WebKit.dll.
        Slight performance improvement or no change on benchmarks.
        
        Allows us to break a circular dependency between CFNetwork and WebKit on Windows,
        and simplifies standalone JavaScriptCore builds.

        Reviewed by Oliver Hunt.

        * WebKit.vcproj/WebKit.def: Mark JavaScriptCore re-exports as deprecated.
        * WebKit.vcproj/WebKit.vcproj: Link against JavaScriptCore.dll
        * WebKit.vcproj/WebKit_debug.def: Mark JavaScriptCore re-exports as deprecated.

2009-04-17  Ada Chan  <adachan@apple.com>

        <rdar://problem/6803905> Lots of ASSERTs firing when trying to clear history

        Reviewed by Steve Falkenburg.

        * WebHistory.cpp:
        (WebHistory::data): Return null if there are no history items.

2009-04-17  Ada Chan  <adachan@apple.com>

        - Fix a leak in WebHistoryItem::children() by adopting the created instance of WebHistoryItem.
        - Remove the unnecessary call to QueryInterface() which is not related to the leak.

        Reviewed by Adam Roben.

        * WebHistoryItem.cpp:
        (WebHistoryItem::children):

2009-04-17  Ada Chan  <adachan@apple.com>

        Fix a leak in WebHistory::data().

        Reviewed by Adam Roben.

        * WebHistory.cpp:
        (WebHistory::data):

2009-04-16  Alice Liu  <alice.liu@apple.com>

        Reviewed by Mark Rowe.

        Fix for heavy leakage of WebURLResponses seen during the stress test 

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::shouldCacheResponse):

2009-04-16  Xan Lopez  <xlopez@igalia.com>

        Unreviewed build fix.

        * WebView.cpp:

2009-04-16  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=25241
        Remove superfluous NotImplemented.h includes

        * WebDownloadCFNet.cpp:
        * WebURLAuthenticationChallengeSender.cpp:
        * WebView.cpp:

2009-04-14  Adam Roben  <aroben@apple.com>

        Remove support for profile-guided optimization on Windows

        Rubber-stamped by Steve Falkenburg.

        * WebKit.vcproj/WebKit.vcproj: Removed the Release_PGOInstrument and
        Release_PGOOptimize configurations.

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

        Windows part 2 of <rdar://5438063> Saving history containing 100,000
        entries causes pauses of 2s while browsing

        Reviewed by Brady Eidson.

        * Interfaces/IWebHistoryPrivate.idl: Added data, analagous to
        WebKit/mac's -[WebHistory _data] method.

        * WebHistory.cpp:
        (WebHistory::saveHistoryGuts): Changed to call data() to get the data for
        saving.
        (WebHistory::data): Added. Returns the data for saving as an IStream.
        (WebHistory::data): Added. Returns the data for saving as a CFDataRef.

        * WebHistory.h: Added data.

2009-04-10  Steve Falkenburg  <sfalken@apple.com>

        <rdar://problem/6676024> REGRESSION (PB-40B1): Safari crashes on launch on tablet PC
        
        r21436 changed the semantics of AXObjectCache::get() to not create
        objects on demand. Changing this get() call into a getOrCreate() call
        fixes the crash.
        
        Rubber stamped by Jon Honeycutt.

        * AccessibleDocument.cpp:
        (AccessibleDocument::AccessibleDocument):

2009-04-10  Adam Roben  <aroben@apple.com>

        Add our invidual IDL files back to Interfaces.vcproj, but disable them

        This allows the IDL files to be found in Solution Explorer.

        Rubber-stamped in advance by Steve Falkenburg.

        * WebKit.vcproj/Interfaces.vcproj:

2009-04-09  Adam Roben  <aroben@apple.com>

        Windows part 1 of <rdar://problem/5438063> Saving history containing
        100,000 entries causes pauses of 2s while browsing

        Use HistoryPropertyListWriter to implement IWebHistory::saveToURL.

        Reviewed by Darin Adler.

        * WebHistory.cpp:
        (WebHistoryWriter::WebHistoryWriter): Added.
        (WebHistoryWriter::writeHistoryItems): Added. Loop backwards through
        the entries for each date, and pass the corresponding
        WebCore::HistoryItem to writeHistoryItem.
        (WebHistory::saveHistoryGuts): Use WebHistoryWriter to serialize
        m_entriesByDate, then write the serialized data to disk using
        CFWriteStream.

        * WebHistory.h: Removed datesArray.

2009-04-08  Adam Roben  <aroben@apple.com>

        Fix security/block-test-no-port.html on Windows

        Reviewed by Beth Dakin.

        * WebMutableURLRequest.cpp:
        (WebMutableURLRequest::mainDocumentURL): Return the ResourceRequest's
        mainDocumentURL, not its URL.

2009-04-01  Darin Adler  <darin@apple.com>

        Reviewed by Geoff Garen.

        Bug 22378: Crash submitting a form when parsing an XHTML document
        https://bugs.webkit.org/show_bug.cgi?id=22378
        rdar://problem/6388377

        * WebFrame.cpp:
        (WebFrame::dispatchWillSubmitForm): Updated for the new
        textFieldValues function in FormState.

2009-03-30  Adam Roben  <aroben@apple.com>

        Build fixes after recent FrameLoader changes

        * WebCoreSupport/WebContextMenuClient.cpp:
        (WebContextMenuClient::searchWithGoogle): Updated to match
        urlSelected's current signature. We pass true for the userGesture
        parameter, since the user must have selected this item from the
        context menu.

        * WebCoreSupport/WebFrameLoaderClient.cpp: Removed
        loadURLIntoChildFrame.
        (WebFrameLoaderClient::createFrame): Changed to call
        FrameLoader::loadURLIntoChildFrame. This probably should have been
        done way back around r31281 when that function was added.

        * WebCoreSupport/WebFrameLoaderClient.h: Removed
        loadURLIntoChildFrame.

2009-03-27  Adam Roben  <aroben@apple.com>

        Don't include substitute data URLs in global history redirect chains

        <rdar://6690169>

        Reviewed by Darin Adler.

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::updateGlobalHistory): Don't call
        updateGlobalHistoryRedirectLinks. FrameLoader calls this for us now.
        (WebFrameLoaderClient::updateGlobalHistoryRedirectLinks):
        Added an assertion to help catch cases where we might be adding a
        substitute data URL into a redirect chain.

2009-03-26  Dan Bernstein  <mitz@apple.com>

        Reviewed by Adam Roben.

        - add close() to the WebView API.

        * Interfaces/IWebView.idl:
        * WebView.cpp:
        (WebView::close):
        * WebView.h:

2009-03-24  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=24779
        Conditionalize CFNetwork-specific code in WebView to permit
        support for other network backends.

        * WebView.cpp:
        (WebView::setCacheModel): Add CFNETWORK check around CFNetwork
        specific cache implementation.
        (updateSharedSettingsFromPreferencesIfNeeded): Add CFNETWORK
        check around use of CFHTTPCookie code.

2009-03-23  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Fix for <rdar://problem/6140966>
        Empty Caches does not clear the Cross-site XMLHttpRequest preflight cache

        * WebCache.cpp:
        (WebCache::empty): Also add application cache emptying to match the mac.

2009-03-18  Steve Falkenburg  <sfalken@apple.com>

        Add webViewClosing to private UI delegate.

        Reviewed by Adam Roben.

        * Interfaces/IWebUIDelegatePrivate.idl:
        * Interfaces/WebKit.idl:
        * WebView.cpp:
        (WebView::close):

2009-03-17  Dan Bernstein  <mitz@apple.com>

        Reviewed by Adam Roben.

        - WebKit part of adding a mechanism for controlling the caching of
          responses through WebFrameLoaderClient

        * Interfaces/IWebResourceLoadDelegatePrivate.idl: Added the
        IWebResourceLoadDelegatePrivate3 interface, containing the new
        delegate method shouldCacheResponse().

        * Interfaces/IWebURLRequest.idl: Added the isEqual() method.

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::shouldCacheResponse): Implemented this new
        FrameLoaderDelegate method by calling through to the resource load
        delegate, if it implements shouldCacheResponse(), and returning true
        otherwise.

        * WebCoreSupport/WebFrameLoaderClient.h:

        * WebMutableURLRequest.cpp:
        (WebMutableURLRequest::isEqual): Added.
        (WebMutableURLRequest::setValue): Implemented.

        * WebMutableURLRequest.h: Declared isEqual().

2009-03-16  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/6577174> Rename the text directionality submenus to “Paragraph Direction” and “Selection Direction”

        For now, change only the localized strings, not the terminology in the code.

        * WebCoreLocalizedStrings.cpp:
        (WebCore::contextMenuItemTagWritingDirectionMenu): Changed string here.
        (WebCore::contextMenuItemTagTextDirectionMenu): And here.

2009-03-16  Adam Roben  <aroben@apple.com>

        Add IWebFramePrivate::isDisplayingStandaloneImage

        This uses the same logic that -[WebFrame _isDisplayingStandaloneImage]
        uses.

        Reviewed by Darin Adler.

        * Interfaces/IWebFramePrivate.idl: Added isDisplayingStandaloneImage.

        * WebFrame.cpp:
        (WebFrame::isDisplayingStandaloneImage): Added. Returns true if our
        Document is an image document.

        * WebFrame.h: Added isDisplayingStandaloneImage.

2009-03-12  Peter Kasting  <pkasting@google.com>

        Reviewed by Darin Fisher.

        https://bugs.webkit.org/show_bug.cgi?id=24502
        Make horizontal scrolling on Windows always go the correct direction.

        * WebView.cpp:
        (WebView::mouseWheel):
        (WebViewWndProc):
        * WebView.h:

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

        Implement DOMHTMLDocument::title

        Reviewed by Dan Bernstein.

        * DOMHTMLClasses.cpp:
        (DOMHTMLDocument::title): Call through to WebCore::Document (with
        obligatory COM error checking/type conversions).

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

        Export functions needed by ThreadSpecific from WebKit

        Reviewed by John Sullivan.

        * WebKit.vcproj/WebKit.def:
        * WebKit.vcproj/WebKit_debug.def:
        Export WTF::tlsKeyCount and WTF::tlsKeys.

2009-03-10  Steve Falkenburg  <sfalken@apple.com>

        <rdar://problem/6662167> When clicking in Top Sites search field, WebHistory::findIndex fails causing crash in BookmarksSearcher::collectHistorySearchResults
        
        Round CFAbsoluteDates to the nearest second when converting to/from the Windows DATE format.
        
        This corrects for inaccuracies introduced by round-tripping between DATE (day based) and CFAbsoluteDate (second based).
        The WebKit COM API on Windows uses DATE, while our history storage uses CFAbsoluteTime. This could lead to WebKit
        saying there was browsing history for a particular day, and then return no history items when we requested a
        list of sites visited that day.        
        
        Reviewed by Ada Chan.

        * MarshallingHelpers.cpp:
        (MarshallingHelpers::DATEToCFAbsoluteTime):
        (MarshallingHelpers::CFAbsoluteTimeToDATE):

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

        Reviewed by Oliver Hunt.

        Split ScrollAlignment and ScrollBehavior out of RenderLayer.h so that
        Frame.h no longer needs to include it.  This cuts the size of the symbols
        for a debug build by around 3%.

        * WebView.cpp:
        (WebView::centerSelectionInVisibleArea):

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

        Reviewed by Mark Rowe.

        - WebKit part of removing build-time and run-time support for legacy
          versions of CFNetwork and Core Graphics

        * WebView.cpp:
        (WebView::setCacheModel):

2009-03-04  Adam Barth  <abath@webkit.org>

        Reviewed by Alexey Proskuryakov.

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

        Fix WebKit style for allowUniversalAccessFromFileURLs.

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

2009-02-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add a preference to reduce the power of file:// URLs.

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

2009-02-19  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=24024
        REGRESSION (r39845): Assertion failure in -[WebHistoryItem dictionaryRepresentation] when
        archiving a submission to about:blank

        I don't know how to make an automated test for this bug.

        * WebHistory.cpp: (WebHistory::visitedURL): Account for the fact that HTTP method may be
        non-empty for non-HTTP requests.

2009-02-25  Andreia Gaita  <shana@jitted.com>

        Reviewed by Alp Toker.

        Update Win def files with recent JavaScriptCore API additions.

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

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

        Reviewed by Geoffrey Garen.

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

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

2009-02-24  Adam Roben  <aroben@apple.com>

        Windows build fix

        * WebKit.vcproj/WebKit.def:
        * WebKit.vcproj/WebKit_debug.def:
        Export WTF::ThreadCondition::timedWait.

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

        Reviewed by Kevin Decker

        <rdar://problem/6582180> - Wrong HTTP method applied to history item.

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::updateGlobalHistory): Check the original request, not any
          redirected request.

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

        Fix my last checkin for more effect.

        * WebHistoryItem.cpp:
        (WebHistoryItem::initFromDictionaryRepresentation):

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

        Windows fix for Bug 22239: Implement missing animation & transition
        APIs on LayoutTestController for non-mac platforms

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

        Reviewed by Simon Fraser.

        * Interfaces/IWebFramePrivate.idl: Added pauseAnimation,
        pauseTransition, and numberOfActiveAnimations.

        * WebFrame.cpp:
        (WebFrame::pauseAnimation):
        (WebFrame::pauseTransition):
        (WebFrame::numberOfActiveAnimation):
        Added. These all call through to AnimationController.

        * WebFrame.h: Added pauseAnimation, pauseTransition, and
        numberOfActiveAnimations.

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

        Reviewed by Mark Rowe

        <rdar://problem/6570573> Some visit counts in History.plist have insanely high values, can roll over to negative

        Remove the item from the date caches before registering the visit.  Otherwise it might not be successfully removed 
        and when we add it back later it will exist in the list twice.  This will cause the entry to be written out twice,
        which would lead to doubling (or more!) the visit count on next launch when these multiple items are merged.

        * WebHistory.cpp:
        (WebHistory::loadHistoryGutsFromURL):
        (WebHistory::addItems):
        (WebHistory::addItem): Add a mode that allows the entry being added to be discarded if an entry for the URL already 
          exists.  Use that mode when reading the History.plist so only the most recent entry for a given URL will be used.
        (WebHistory::visitedURL): Swap the removeItemFromDateCaches and visitedWithTitle calls.
        * WebHistory.h:

        * WebHistoryItem.cpp:
        (WebHistoryItem::initFromDictionaryRepresentation):  Add the negative-visit-count-correction-logic as implemented
          for Mac in http://trac.webkit.org/changeset/40851.

2009-02-11  Dimitri Dupuis-latour  <dupuislatour@apple.com>

        Stub out WebInspectorClient::hiddenPanels.

        Reviewed by Timothy Hatcher.

        * WebCoreSupport/WebInspectorClient.cpp:
        (WebInspectorClient::hiddenPanels):
        * WebCoreSupport/WebInspectorClient.h:

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

        Don't release the shared WebHistory instance on quit

        This matches Mac, and prevents a race condition when the process exits
        that depends on the order in which global destructors are invoked.

        Reviewed by Alexey Proskuryakov.

        * WebHistory.cpp:
        (sharedHistoryStorage): Changed to use DEFINE_STATIC_LOCAL so the
        destructor is never called.

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

        Fix recursive WebView destruction when running DumpRenderTree

        DumpRenderTree would call DestroyWindow on a WebView's host window,
        which would send a WM_DESTROY message to the WebView's window. Inside
        the WebView's WndProc, we would hold a ref to the WebView, then call
        close() and revokeDragDrop(), which would release all remaining
        references to the WebView other than the ref we held in the WndProc.
        When the WndProc exited, the final ref to the WebView would be
        released, invoking WebView's destructor. At this point,
        IsWindow(m_viewWindow) would return true, since we were still in the
        process of handling WM_DESTROY, so we would call DestroyWindow on the
        WebView's window again, re-entering the WndProc and re-reffing the
        WebView, leading to recursive destruction.

        Reviewed by Alexey Proskuryakov.

        * WebView.cpp:
        (WebView::~WebView): Don't call DestroyWindow if our window is already
        being destroyed.
        (WebViewWndProc): Only hold an extra ref to the WebView when we're not
        being destroyed.

2009-02-06  Adam Roben  <aroben@apple.com>

        Build fix

        Reviewed by Sam Weinig.

        * WebCoreSupport/WebFrameLoaderClient.cpp: Added missing #include.
        (WebFrameLoaderClient::updateGlobalHistoryRedirectLinks): Removed
        incorrect .get(), and changed to use the new overload of
        WebHistory::itemForURLString.

        * WebHistory.cpp:
        (WebHistory::itemForURLString): Made this const.
        (WebHistory::itemForURLString): Added an overload that takes a
        WebCore::String and returns the IWebHistoryItem instead of using an
        out parameter.

        * WebHistory.h: Added public overload of itemForURLString.

        * WebView.cpp:
        (WebView::prepareCandidateWindow):
        (WebView::onIMERequestCharPosition):
        (WebView::onIMERequestReconvertString):
        Updated for toRange -> toNormalizedRange rename.

2009-02-06  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Part III of <rdar://problem/6552272>.
        
        Refactored to use the redirect data WebCore makes available, instead of
        tracking loading state in WebKit.
        
        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::updateGlobalHistory):
        (WebFrameLoaderClient::updateGlobalHistoryRedirectLinks):
        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebHistory.cpp:
        (WebHistory::visitedURL):
        * WebHistory.h:

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

        Reviewed by Anders Carlsson.

        - fix an assertion failure in Vector::at() beneath
          WebHistoryItem::dictionaryRepresentation.

        * WebHistoryItem.cpp:
        (WebHistoryItem::dictionaryRepresentation): Give the numbers vector initial
        size. Also reduced the inline capacity of the vector used for weekly visit
        counts to 5, which is the expected maximum size.

2009-02-06  Brent Fulgham  <bfulgham@webkit.org>

        Build fix.  

        * WebKit.vcproj/WebKit.vcproj: Re-enable missing file in Release
          target of Cairo.

2009-02-06  Maciej Stachowiak  <mjs@apple.com>

        Rubber stamped by Dan Bernstein.

        - fix obvious problem in previous commit (|| used instead of &&)

        * WebHistoryItem.cpp:
        (WebHistoryItem::initFromDictionaryRepresentation):

2009-02-05  Maciej Stachowiak  <mjs@apple.com> and Brady Eidson  <beidson@apple.com>

        Reviewed by Dan Bernstein and Geoff Garen..

        - WebKit code to track per-day and per-week visit counts in history

        For now this data is only exposed via SPI for performance reasons.

        * Interfaces/IWebHistoryItemPrivate.idl: Added new interface.
        * WebHistory.cpp:
        (WebHistory::visitedURL): Use new recordInitialVisit method.
        * WebHistoryItem.cpp:
        (WebHistoryItem::initFromDictionaryRepresentation): Add parsing support
        for new data.
        (WebHistoryItem::dictionaryRepresentation): Add saving support for
        new data.
        (WebHistoryItem::getDailyVisitCounts): SPI accessor.
        (WebHistoryItem::getWeeklyVisitCounts): SPI accessor.
        (WebHistoryItem::recordInitialVisit): Tell WebCore to record an initial visit.
        * WebHistoryItem.h:

2009-02-05  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Sam Weinig <sam@webkit.org>

        Build fix.  Update file for recently removed EventTargetNodeCast.
        * DOMCoreClasses.cpp:
        (DOMNode::dispatchEvent):

2009-02-05  Aaron Boodman  <aa@chromium.org>

        Reviewed by Dave Hyatt.

        https://bugs.webkit.org/show_bug.cgi?id=23708
        Adds documentElementAvailable() callback to FrameLoaderClient.

        * WebFrame.cpp:
        (WebFrame::documentElementAvailable):
        Stub out documentElementAvailable()
        * WebFrame.h:
        Ditto.

2009-02-04  Geoffrey Garen  <ggaren@apple.com>

        Build fix.

        * WebHistory.cpp:
        (WebHistory::visitedURL):

2009-02-04  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Mark Rowe.
        
        Part I of <rdar://problem/6552272>.

        Clear the redirectURLs entry when first visiting a site, so sites that
        only redirect you the first time you visit them can later learn that
        they don't redirect.

        * WebHistory.cpp:
        (WebHistory::visitedURL):

2009-02-03  Geoffrey Garen  <ggaren@apple.com>

        Build fix.

        * WebHistory.cpp:
        (WebHistory::visitedURL):

2009-02-02  Geoffrey Garen  <ggaren@apple.com>

        Build fix.

        * WebHistory.cpp:
        (WebHistory::visitedURL):

2009-02-02  Hiroaki Nakamura <hnakamur@gmail.com>

        Reviewed by Adam Roben.

        Fixes https://bugs.webkit.org/show_bug.cgi?id=15813
        Modify pre-build step to properly handle the errorlevel
        shell command.

        * WebKit.vcproj/WebKit.vcproj: Change errorlevel handling
        for all targets so prefast is only enabled in builds
        where /analyze is available.

2009-02-02  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Track redirects in global history.

        * Interfaces/IWebFramePrivate.idl: Updated for WebCore rename.

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::updateGlobalHistory):
        (WebFrameLoaderClient::updateGlobalHistoryForRedirectWithoutHistoryItem):
        Store redirect information in global history.

        (WebFrameLoaderClient::loadURLIntoChild): Updated for extra parameter.

        * WebCoreSupport/WebFrameLoaderClient.h: See above.

        * WebFrame.cpp:
        (WebFrame::loadRequest):
        (WebFrame::loadData): Updated for extra parameter.

        * WebHistory.cpp:
        (WebHistory::visitedURL):
        (WebHistory::visitedURLForRedirectWithoutHistoryItem): Store redirect
        information in global history.

        * WebHistory.h: See above.

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

        Reviewed by Dan Bernstein

        Transition Windows WebHistory to using the same "update already existing History Items" technique that Mac does.

        * Interfaces/IWebHistoryItemPrivate.idl:
        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::updateGlobalHistory):

        * WebHistory.cpp:
        (WebHistory::visitedURL):
        * WebHistory.h:

        * WebHistoryItem.cpp:
        (WebHistoryItem::visitedWithTitle):
        * WebHistoryItem.h:

2009-02-02  Anders Carlsson  <andersca@apple.com>

        Fix build.
        
        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::createPlugin):
        * WebCoreSupport/WebFrameLoaderClient.h:

2009-02-02  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Update for changes to WebCore.

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

2009-02-02  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Darin Adler.

        Move Frame::forceLayout, Frame::adjustPageHeight and Frame::forceLayoutWithPageWidthRange to FrameView

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

        FrameView::forceLayout could be killed but the comment might
        contain a value over the the plain FrameView::layout...

        Adjust the WebCore/WebKit consumers of these methods.

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::forceLayout):

2009-01-31  Matt Lilek  <webkit@mattlilek.com>

        Not reviewed, build fixes.

        * WebCoreSupport/WebContextMenuClient.cpp:
        (WebContextMenuClient::searchWithGoogle):
        * WebFrame.cpp:
        (WebFrame::setInPrintingMode):
        (WebFrame::isFrameSet):
        * WebView.cpp:
        (WebView::notifyPreferencesChanged):

2009-01-30  Adam Barth  <abarth@webkit.org>

        Reviewed by Sam Weinig.

        Add a pref to disable web security.

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

2009-01-30  Geoffrey Garen  <ggaren@apple.com>

        Build fix.

        * Interfaces/IWebFramePrivate.idl:
        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::loadURLIntoChild):

2009-01-30  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann.

        Kill FrameLoaderClient.cpp, move the code over to Frame::createView

        FrameLoaderClient is supposed to be an interface, move the
        to be shared code to Frame which is a controller and is
        allowed to create a FrameView.

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::transitionToCommittedForNewPage):

2009-01-30  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig

        Remove FrameLoaderClient code that is now handled by FrameLoader itself

        * WebFrame.cpp:
        (WebFrame::frameLoadCompleted):

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

        Fix Windows build

        * WebHistoryItem.cpp:
        (WebHistoryItem::initFromDictionaryRepresentation):

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

        Reviewed by Anders Carlsson.

        Second step in tracking the urls a HistoryItem was redirected through
        Add SPI to access the array of redirect urls associated with a HistoryItem.

        * Interfaces/IWebHistoryItemPrivate.idl:
        * WebHistoryItem.cpp:
        (WebHistoryItem::dictionaryRepresentation):
        (WebHistoryItem::redirectURLs):
        * WebHistoryItem.h:

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

        Reviewed by Mark Rowe.

        First step in tracking the urls a HistoryItem was redirected through.

        * WebHistoryItem.cpp:
        (WebHistoryItem::initFromDictionaryRepresentation):
        (WebHistoryItem::dictionaryRepresentation):

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

        Fix Bug 23623: Windowed Flash instances aren't captured when a WebView
        receives a WM_PRINTCLIENT message

        <https://bugs.webkit.org/show_bug.cgi?id=23623>
        <rdar://problem/6513921>
        <rdar://problem/6536874>

        Reviewed by Darin Adler.

        * WebFrame.cpp:
        (WebFrame::paintDocumentRectToContext):
        (WebFrame::spoolPages):
        Call GraphicsContext::setShouldIncludeChildWindows so that child
        windows will be painted into the GraphicsContext rather than painted
        directly to the screen.

        * WebView.cpp:
        (WebView::updateBackingStore): Added a windowsToPaint parameter, which
        we pass along to paintIntoBackingStore.

        (WebView::paint): Tell updateBackingStore to paint child windows if
        we're not painting to the screen.

        (WebView::paintIntoBackingStore): Added a windowsToPaint paramter,
        which we use to tell our GraphicsContext whether or not to include
        child windows.

        * WebView.h: Added windowsToPaint parameters to paintIntoBackingStore
        and updateBackingStore (which I also made private).

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

        Build fix after r40353

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::loadURLIntoChild): Removed the check for
        FrameLoadTypeReloadAllowingStaleData.

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

        Reviewed by Sam Weinig.

        Updated for WebCore rename.
        
        * WebView.cpp:
        (WebView::setCustomTextEncodingName):

2009-01-27  Brady Eidson  <beidson@apple.com>

        Reviewed by Dan Bernstein

        Rework FrameLoaderClient to work on a CachedFrame basis instead of CachedPage

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::savePlatformDataToCachedFrame):
        (WebFrameLoaderClient::transitionToCommittedFromCachedFrame):
        * WebCoreSupport/WebFrameLoaderClient.h:

        * WebFrame.cpp:
        * WebFrame.h:

2009-01-26  Adam Roben  <aroben@apple.com>

        Fix an assertion failure when Safari loads an error page

        Reviewed by Alexey Proskuryakov.

        * WebFrame.cpp:
        (WebFrame::loadData): Use the two-argument version of KURL and
        MarshallingHelpers::BSTRToKURL, for reasons mentioned in r40248.

2009-01-26  Adam Roben  <aroben@apple.com>

        Fix an assertion on launch in KURL::KURL

        All URL strings passed in to the WebKit API need to be passed to
        MarshallingHelpers::BSTRToKURL so that they may be properly parsed.

        Reviewed by Alexey Proskuryakov.

        * MarshallingHelpers.cpp:
        (MarshallingHelpers::BSTRToKURL): Changed to use the two-argument
        constructor for KURL so that the strings will be parsed rather than
        assumed to be in the correct encoding/form.

        * WebResource.cpp:
        (WebResource::initWithData):
        * WebURLResponse.cpp:
        (WebURLResponse::initWithURL):
        * WebView.cpp:
        (WebView::userAgentForURL):
        (WebView::copyURL):
        Changed to use MarshallingHelpers::BSTRToKURL instead of trying to do
        the work manually.

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

        Try to fix Windows build.

        * WebView.cpp: Added FloatQuad.h.

2009-01-23  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Darin Adler

        https://bugs.webkit.org/show_bug.cgi?id=23492
        Exclude calls to WebKitSystemInterface functions when not
        using CoreGraphics.

        * WebPreferences.cpp:
        (WebPreferences::setFontSmoothing): 
        (WebPreferences::setFontSmoothingContrast):
        * WebTextRenderer.cpp:
        (WebTextRenderer::registerPrivateFont):

2009-01-23  Brady Eidson  <beidson@apple.com>

        Rubberstamped by Darin Adler

        Rename CachedPagePlatformData to CachedFramePlatformData to more accurately reflect its true role.

        * WebCachedFramePlatformData.h: Copied from WebKit/win/WebCachedPagePlatformData.h.
        (WebCachedFramePlatformData::WebCachedFramePlatformData):
        * WebCachedPagePlatformData.h: Removed.

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::savePlatformDataToCachedPage):

        * WebKit.vcproj/WebKit.vcproj:

2009-01-22  Eric Roman  <eroman@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=20806
        Deprecate RSSFeedReferrer() and setRSSFeedReferrer().

        * WebHistoryItem.cpp:
        (WebHistoryItem::RSSFeedReferrer):
        (WebHistoryItem::setRSSFeedReferrer):

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

        Rubber-stamped by Gavin Barraclough.

        Remove temporary operator-> from JSValuePtr.

        * WebScriptCallFrame.cpp:
        (WebScriptCallFrame::jsValueToString):
        * WebView.cpp:
        (WebView::stringByEvaluatingJavaScriptFromString):

2009-01-19  Adam Roben  <aroben@apple.com>

        Windows build fix

        * DOMCoreClasses.cpp: Replaced "using namespace WebCore" with
        individual using directives for each type we need from that namespace,
        to avoid conflicts between DOMObject and WebCore::DOMObject.
        (DOMElement::font): Added a now-needed WebCore::.

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

        Build fix.

        * WebCoreSupport/WebDragClient.cpp:
        (WebDragClient::createDragImageForLink):

2009-01-17  David Hyatt  <hyatt@apple.com>

        Eliminate dependencies on backslashAsCurrencySymbol from WebKit.

        Reviewed by Oliver Hunt

        * WebFrame.cpp:
        (WebFrame::selectedString):

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

        <rdar://problem/6502511> Safari crashes if it's running while the desktop theme is changed.
        
        This was caused by mismatched ENABLE definitions across WebCore and WebKit.
        
        Several virtual methods were added to RenderTheme.h, conditionalized by ENABLE(VIDEO).
        In addition to adding ENABLE_VIDEO to WebKit, this change also adds ENABLE_DATABASE and ENABLE_ICONDATABASE
        to Windows WebCore/WebKit, and adds ENABLE_WORKERS, and several ENABLE_SVG_ flags to WebKit on Windows.
        Our Windows ENABLE flags now match Mac.
        
        Reviewed by Adele Peterson.

        * WebKit.vcproj/WebKit.vcproj:

2009-01-15  Adele Peterson  <adele@apple.com>

        Reviewed by Darin Adler.
        
        Fix for https://bugs.webkit.org/show_bug.cgi?id=21799
        <rdar://problem/6310684> Crash in dumpFramesAsText() when running http/tests/security/cross-origin-xsl-BLOCKED.html
        
        Return S_OK or E_FAIL based on the result from CreateInstance.
        This was causing DumpRenderTree to not realize it had just gotten a null documentElement.
        
        * DOMCoreClasses.cpp: Made all functions that return the result of CreateInstance consistent.
        (DOMNode::parentNode):
        (DOMNode::ownerDocument):
        (DOMNodeList::item):
        (DOMDocument::documentElement):
        (DOMDocument::createElement):
        (DOMDocument::getElementsByTagName):
        (DOMDocument::getElementsByTagNameNS):
        (DOMDocument::getElementById):
        (DOMDocument::getComputedStyle):
        (DOMDocument::createEvent):
        (DOMElement::style):

2009-01-14  Adele Peterson  <adele@apple.com>

        Reviewed by Darin Adler.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=23335
        <rdar://problem/6247650> Update <input type="search"> for RenderThemeWin
        
        Added artwork.
        
        * WebKit.vcproj/WebKit.rc:
        * WebKit.vcproj/WebKit.vcproj:
        * WebKit.vcproj/resource.h:
        * WebKit.vcproj/searchCancel.png: Added.
        * WebKit.vcproj/searchCancelPressed.png: Added.
        * WebKit.vcproj/searchMagnifier.png: Added.
        * WebKit.vcproj/searchMagnifierResults.png: Added.
        * WebKitDLL.cpp:(loadResourceIntoBuffer):

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

        Reviewed by John Sullivan.

        - update copyright

        * WebKit.resources/Info.plist:
        * WebKit.vcproj/WebKit.rc:

2009-01-13  Steve Falkenburg  <sfalken@apple.com>

        Build fix.

        * WebScriptCallFrame.cpp:
        (WebScriptCallFrame::jsValueToString):

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

        Reviewed by Dan Bernstein
        
        <rdar://problem/6490446> - Crash when going back to a cached page

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::savePlatformDataToCachedPage):  ENABLE(CFNETWORK) needed to be USE(CFNETWORK)

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

        Reviewed by Darin Adler

        <rdar://problem/6468274> - Track Non-get requests in global history

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::updateGlobalHistory):

        * WebHistory.cpp:
        (WebHistory::addItem):
        * WebHistory.h:

        * Interfaces/IWebHistoryItemPrivate.idl:
        * WebHistoryItem.cpp:
        (WebHistoryItem::initFromDictionaryRepresentation):
        (WebHistoryItem::dictionaryRepresentation):
        (WebHistoryItem::lastVisitWasHTTPNonGet):
        (WebHistoryItem::setLastVisitWasHTTPNonGet):
        * WebHistoryItem.h:

2009-01-12  Julien Chaffraix  <jchaffraix@pleyo.com>

        Reviewed by Darin Adler.

        Bug 22861: Turn the FontCache into a singleton
        https://bugs.webkit.org/show_bug.cgi?id=22861

        * WebCoreStatistics.cpp:
        (WebCoreStatistics::cachedFontDataCount):
        (WebCoreStatistics::cachedFontDataInactiveCount):
        (WebCoreStatistics::purgeInactiveFontData):
        Redirected all the static calls to the global FontCache
        instance.

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

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=23207
        Moved currentTime() to from WebCore to WTF.

        * WebDownload.cpp: a different header file included.
        * WebDropSource.cpp: a different header file included.

2009-01-09  Darin Adler  <darin@apple.com>

        Reviewed by Jon Honeycutt.

        Bug 22913: REGRESSION: Space bar doesn't scroll on windows
        https://bugs.webkit.org/show_bug.cgi?id=22913
        rdar://problem/6479834

        * WebView.cpp:
        (WebView::keyPress): Removed code to handle space bar here; put it in
        WebCore instead.

2009-01-09  Brent Fulgham  <bfulgham@gmail.com>

        Reviewed by Adam Roben.

        Fixes: http://bugs.webkit.org/show_bug.cgi?id=23092
        Separate CFNetwork-specific code in WebKit.dll into separate
        implementation files. Create cURL stub files to be populated
        with new implementation in a future bug report. 

        * WebCookieManager.cpp: Move CFNetwork-specific routines to
          the new WebCookieManagerCFNet.cpp file.
        (WebCookieManager::Release):
        * WebCookieManagerCFNet.cpp: Copied from WebCookieManager.cpp.
        (WebCookieManager::cookieStorage):
        * WebCookieManagerCurl.cpp: Added.
        (WebCookieManager::cookieStorage):
        (WebCookieManager::setCookieStorage):
        * WebCoreSupport/WebFrameLoaderClient.cpp: Conditionalize two
          methods in this file.
        (WebFrameLoaderClient::dispatchDidReceiveAuthenticationChallenge):
        (WebFrameLoaderClient::savePlatformDataToCachedPage):
        * WebDownload.cpp: Move CFNetwork-specific logic to the new
          WebDownloadCFNet.cpp
        (WebDownload::bundleExtension):
        (WebDownload::bundleMagicNumber):
        (WebDownload::bundlePathForTargetPath):
        (WebDownload::extractResumeDataFromBundle): Made static class method
          so it could be used in WebDownload.cpp and WebDownloadCFNet.cpp
        (WebDownload::appendResumeDataToBundle): Made static class method
          so it could be used in WebDownload.cpp and WebDownloadCFNet.cpp
        * WebDownload.h:
        * WebDownloadCFNet.cpp: Copied from WebDownload.cpp.
        (WebDownload::initToResumeWithBundle):
        (WebDownload::setDestination):
        (didFailCallback):
        * WebDownloadCurl.cpp: Added.
        (WebDownload::init):
        (WebDownload::initWithRequest):
        (WebDownload::initToResumeWithBundle):
        (WebDownload::start):
        (WebDownload::cancel):
        (WebDownload::cancelForResume):
        (WebDownload::deletesFileUponFailure):
        (WebDownload::setDeletesFileUponFailure):
        (WebDownload::setDestination):
        (WebDownload::cancelAuthenticationChallenge):
        (WebDownload::continueWithoutCredentialForAuthenticationChallenge):
        (WebDownload::useCredential):
        * WebKit.vcproj/WebKit.vcproj: Modify Apple targets to exclude the
          new cURL files. Modify Cairo targets to exclude CFNet files.
        * WebMutableURLRequest.cpp: Conditionalize the single method
          with a CFNetwork-speicic call.
        (WebMutableURLRequest::mutableCopy):
        * WebURLAuthenticationChallenge.cpp: Conditionalize one line that
          causes build problems for cURL. This will be removed later.
        (WebURLAuthenticationChallenge::initWithProtectionSpace):
        * WebURLAuthenticationChallengeSender.cpp:
        * WebURLAuthenticationChallengeSenderCFNet.cpp: Copied from WebURLAuthenticationChallengeSender.cpp.
        (WebURLAuthenticationChallengeSender::useCredential):
        * WebURLAuthenticationChallengeSenderCurl.cpp: Added.
        (WebURLAuthenticationChallengeSender::cancelAuthenticationChallenge):
        (WebURLAuthenticationChallengeSender::continueWithoutCredentialForAuthenticationChallenge):
        (WebURLAuthenticationChallengeSender::useCredential):
        * WebURLResponse.cpp: Exclude WebKitSystemInterface when compiling
          for the cURL target.

2009-01-09  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        Fix many appcache tests on Windows by making synchronous XMLHttpRequest throw on cache miss.

        * WebFrame.cpp: (WebFrame::cannotShowURLError): Implement, so that synchronous XHR can
        raise exceptions, as needed for AppCache tests. I do not know why this error was not
        implemented.

2009-01-09  Darin Adler  <darin@apple.com>

        Reviewed and landed by Adele Peterson.

        Bug 23160: add setMemoryCacheClientCallsEnabled SPI so Safari can be faster with activity window closed
        https://bugs.webkit.org/show_bug.cgi?id=23160

        * Interfaces/IWebViewPrivate.idl: Added setMemoryCacheDelegateCallsEnabled.
        * WebView.cpp:
        (WebView::setMemoryCacheDelegateCallsEnabled): Ditto.
        * WebView.h: Ditto.

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

        Reviewed by Adam Roben.

        - WebPreferences changes to support Core Graphics native glyph drawing

        * Interfaces/IWebPreferencesPrivate.idl: Added font smoothing contrast
        getter and setter.
        * WebPreferenceKeysPrivate.h: Added
        WebKitFontSmoothingContrastPreferenceKey.
        * WebPreferences.cpp:
        (WebPreferences::initializeDefaultSettings): Initialized
        WebKitFontSmoothingContrastPreferenceKey to 2.
        (WebPreferences::setFloatValue): Added.
        (WebPreferences::setFontSmoothing): Changed to map
        FontSmoothingTypeWindows to FontSmoothingTypeMedium.
        (WebPreferences::fontSmoothingContrast): Added.
        (WebPreferences::setFontSmoothingContrast): Added. Calls
        wkSetFontSmoothingContrast().
        * WebPreferences.h:

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

        <rdar://problem/6474244> REGRESSION(39561-39603): Heap corruption when saving passwords?
        
        Reviewed by Adam Roben.

        * WebView.cpp:
        (WebViewWndProc): Hold a ref to the WebView inside the WNDPROC, since it could go away in an event handler.

2009-01-07  Jon Honeycutt  <jhoneycutt@apple.com>

        Fix a crash with querying a WebView for its global history item when
        its associated Page has no global history item.

        Reviewed by Dan Bernstein.

        * WebView.cpp:
        (WebView::globalHistoryItem): If the Page has no global history item,
        report 0.

2009-01-06  Adam Roben  <aroben@apple.com>

        Fix Bug 22262: Clicking close ("X") button in docked Web Inspector
        clears Web Inspector but doesn't close it

        <https://bugs.webkit.org/show_bug.cgi?id=22262>
        <rdar://problem/6371873>

        Reviewed by Darin Adler.

        * WebCoreSupport/WebInspectorClient.cpp:
        (WebInspectorClient::WebInspectorClient): Initialize new member.
        (WebInspectorClient::showWindow): Moved code from here to
        showWindowWithoutNotifications.
        (WebInspectorClient::closeWindow): Moved code from here to
        closeWindowWithoutNotifications.

        (WebInspectorClient::attachWindow):
        (WebInspectorClient::detachWindow):
        Record whether or not we should be attached, then close and reopen the
        window without notifying the InspectorController. Code that was in
        these functions moved to showWindowWithoutNotifications and
        closeWindowWithoutNotifications, respectively.

        (WebInspectorClient::closeWindowWithoutNotifications): Added. Code
        came from closeWindow and detachWindow.
        (WebInspectorClient::showWindowWithoutNotifications): Added. Code came
        from showWindow and attachWindow.

        * WebCoreSupport/WebInspectorClient.h: Added
        {close,show}WindowWithoutNotifications and m_shouldAttachWhenShown.

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

        Reviewed by Sam Weinig.

        Add a way for application to provide custom, full frame, views for certain MIME types.
        
        * Interfaces/IWebEmbeddedView.idl:
        Add loading related methods.
        
        * Interfaces/IWebViewPrivate.idl:
        Add new registerEmbeddedViewMIMEType method.
        
        * WebCoreSupport/EmbeddedWidget.cpp:
        (EmbeddedWidget::didReceiveResponse):
        (EmbeddedWidget::didReceiveData):
        (EmbeddedWidget::didFinishLoading):
        (EmbeddedWidget::didFail):
        Implement these and call the IEmbeddedView methods.
        
        * WebCoreSupport/EmbeddedWidget.h:
        Inherit from PluginManualLoader.
        
        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::redirectDataToPlugin):
        Handle the case where the widget is an EnbeddedWidget.
        
        (WebFrameLoaderClient::shouldUsePluginDocument):
        Have this call WebView::shouldUseEmbeddedView.
        
        * WebView.cpp:
        (WebView::canShowMIMEType):
        Have this call WebView::shouldUseEmbeddedView.
        
        (WebView::registerEmbeddedViewMIMEType):
        Add the MIME type to the set.
        
        (WebView::shouldUseEmbeddedView):
        Given a MIME type, returns whether an embedded view should be used or not.
        
2009-01-06  David Kilzer  <ddkilzer@apple.com>

        BUILD FIX (r39641): Try to fix WebIconDatabase build errors #4

        * WebIconDatabase.cpp:
        (WebIconDatabase::isEnabled): Added 'WebIconDatabase::' to method
        signature.  (Another copy-paste error.)
        (WebIconDatabase::setEnabled): Ditto.
        * WebIconDatabase.h:
        (WebIconDatabase::startUpIconDatabase): Make private again.
        (WebIconDatabase::shutDownIconDatabase): Ditto.

2009-01-06  David Kilzer  <ddkilzer@apple.com>

        BUILD FIX (r39641): Try to fix build errors #3

        Try to fix the following (more specific) build errors:

            WebIconDatabase.cpp
            ..\WebIconDatabase.cpp(255) : error C2248: 'WebIconDatabase::shutDownIconDatabase' : cannot access private member declared in class 'WebIconDatabase'
                    ...\webkit\win\WebIconDatabase.h(61) : see declaration of 'WebIconDatabase::shutDownIconDatabase'
                    ...\webkit\win\WebIconDatabase.h(51) : see declaration of 'WebIconDatabase'
            ..\WebIconDatabase.cpp(255) : error C2352: 'WebIconDatabase::shutDownIconDatabase' : illegal call of non-static member function
                    ...\webkit\win\WebIconDatabase.h(61) : see declaration of 'WebIconDatabase::shutDownIconDatabase'
            ..\WebIconDatabase.cpp(258) : error C2248: 'WebIconDatabase::startUpIconDatabase' : cannot access private member declared in class 'WebIconDatabase'
                    ...\webkit\win\WebIconDatabase.h(60) : see declaration of 'WebIconDatabase::startUpIconDatabase'
                    ...\webkit\win\WebIconDatabase.h(51) : see declaration of 'WebIconDatabase'
            ..\WebIconDatabase.cpp(258) : error C2352: 'WebIconDatabase::startUpIconDatabase' : illegal call of non-static member function
                    ...\webkit\win\WebIconDatabase.h(60) : see declaration of 'WebIconDatabase::startUpIconDatabase'

        * WebIconDatabase.cpp:
        (setEnabled): Get instance of shared WebIconDatabase, then call
        startUp/shutDown methods on it.
        * WebIconDatabase.h:
        (WebIconDatabase::startUpIconDatabase): Make protected again.
        (WebIconDatabase::shutDownIconDatabase): Ditto.

2009-01-06  David Kilzer  <ddkilzer@apple.com>

        BUILD FIX (r39641): Try to fix build errors again

        Try to fix the following build errors:

            WebIconDatabase.cpp
            ..\WebIconDatabase.cpp(255) : error C3861: 'shutDownIconDatabase': identifier not found
            ..\WebIconDatabase.cpp(258) : error C3861: 'startUpIconDatabase': identifier not found

        * WebIconDatabase.cpp:
        (setEnabled): Add class prefix to startUpIconDatabase() and
        shutDownIconDatabase().
        * WebIconDatabase.h:
        (WebIconDatabase::startUpIconDatabase): Make private again.
        (WebIconDatabase::shutDownIconDatabase): Ditto.

2009-01-06  David Kilzer  <ddkilzer@apple.com>

        BUILD FIX (r39641): Try to fix build error

        Try to fix the following build errors:

            WebIconDatabase.cpp
            ..\WebIconDatabase.cpp(255) : error C3861: 'shutDownIconDatabase': identifier not found
            ..\WebIconDatabase.cpp(258) : error C3861: 'startUpIconDatabase': identifier not found

        * WebIconDatabase.h:
        (WebIconDatabase::startUpIconDatabase): Make protected.
        (WebIconDatabase::shutDownIconDatabase): Ditto.

2009-01-06  David Kilzer  <ddkilzer@apple.com>

        BUILD FIX (r39641): Fix more silly errors

        Fixes the following compilation errors:

            WebIconDatabase.cpp
            ..\WebIconDatabase.cpp(85) : error C2065: 'standardPrefs' : undeclared identifier
            ..\WebIconDatabase.cpp(85) : error C2227: left of '->iconDatabaseLocation' must point to class/struct/union/generic type
                    type is ''unknown-type''
            ..\WebIconDatabase.cpp(241) : error C2575: 'isEnabled' : only member functions and bases can be virtual
            ..\WebIconDatabase.cpp(248) : error C2575: 'setEnabled' : only member functions and bases can be virtual
            ..\WebIconDatabase.cpp(253) : error C3861: 'shutDownIconDatabase': identifier not found
            ..\WebIconDatabase.cpp(256) : error C3861: 'startUpIconDatabase': identifier not found

        * WebIconDatabase.cpp:
        (WebIconDatabase::startUpIconDatabase): Redeclare standardPrefs
        since this was in init() but not in this method after it was
        extracted from init().
        (isEnabled): Don't use "virtual" in method implementation
        (silly copy-paste error).
        (setEnabled): Ditto.

2009-01-06  David Kilzer  <ddkilzer@apple.com>

        BUILD FIX (r39641): Remove STDMETHODCALLTYPE from method declarations in IWebIconDatabase.idl

        * Interfaces/IWebIconDatabase.idl: Removed "STDMETHODCALLTYPE"
        from silly copy-paste error in two method declarations.

2009-01-05  David Kilzer  <ddkilzer@apple.com>

        Add API to enable, disable and check state of WebIconDatabase

        Reviewed by Darin Adler & Timothy Hatcher.

        Add WebIconDatabase::isEnabled() and WebIconDatabase::setEnabled()
        API to make it possible to enable, disable and check the state of
        the icon database.

        * Interfaces/IWebIconDatabase.idl: Declared isEnabled() and
        setEnabled() methods.
        * WebIconDatabase.cpp:
        (WebIconDatabase::init): Extracted code into startUpIconDatabase().
        (WebIconDatabase::startUpIconDatabase): Added.  Extracted from
        init().
        (WebIconDatabase::shutDownIconDatabase): Added.  Method is empty
        since there is nothing to do yet on Windows.
        (isEnabled): Added.
        (setEnabled): Added.
        * WebIconDatabase.h: Added method declarations.

2009-01-05  Anders Carlsson  <andersca@apple.com>

        Reviewed by Jon Honeycutt.

        Pass more information in the property bag passed to embeddedViewWithArguments.
        
        * Interfaces/IWebUIDelegatePrivate.idl:
        Declare new keys.
        
        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::createPlugin):
        Pass the base URL, MIME type and the containing element to embeddedViewWithArguments.

2009-01-05  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler, Jon Honeycutt.

        Add a templatized COMVariant constructor so we can make COMVariants out of
        everything that has a COMVariantSetter specialization.
        
        Add a COMVariantSetter specialization for COMVariant.
        
        * COMVariantSetter.h:
        (COMVariant::COMVariant):

2009-01-05  Brent Fulgham  <bfulgham@gmail.com>

        Reviewed by Oliver Hunt.

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

        Removes the WebKitGraphics files from the Cairo build, as well
        as excluding their link definitions.  These are not used outside
        of Safari, and should not be part of the 'Redistributable API.'

        * WebKit.vcproj/WebKit.vcproj:  Update *_Cairo targets to exclude
          the WebKitGraphics.cpp/.h files.
        * WebKit.vcproj/WebKit_Cairo.def: Added.  File without Safari
          link definitions.
        * WebKit.vcproj/WebKit_Cairo_debug.def: Added.  File without Safari
          link definitions.

2009-01-05  Anders Carlsson  <andersca@apple.com>

        Reviewed by Jon Honeycutt.

        Add a simple, memory managed, wrapper around a VARIANT struuct.
        
        * COMVariantSetter.h:
        (COMVariant::COMVariant):
        (COMVariant::~COMVariant):
        (COMVariant::operator=):
        (COMVariant::copyTo):
        (COMVariant::variantType):

2009-01-05  Adele Peterson  <adele@apple.com>

        Windows build fix.

        * WebCoreSupport/WebChromeClient.cpp:

2009-01-05  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Make it possible to have per value variant types.
        
        * COMPropertyBag.h:
        (::Read):
        Call variantType here, passing in the value.
        
        (::GetPropertyInfo):
        Ditto.
        
        * COMVariantSetter.h:
        (COMVariantSetterBase::variantType):
        Add COMVariantSetterBase, whose variantType implementation just returns the
        VariantType variable. Make all existing classes inherit from COMVariantSetterBase.

2009-01-05  Adam Treat  <adam.treat@torchmobile.com>

        Fix win build

        * WebCoreSupport/WebChromeClient.h:

2009-01-05  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by George Staikos.

        Build fix for contentsSizeChanged

        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::contentsSizeChanged):
        * WebCoreSupport/WebChromeClient.h:

2009-01-05  Anders Carlsson  <andersca@apple.com> 

        Reviewed by Kevin Decker.

        Use the ManualLoader class instead of assuming that the manual loader
        is a plug-in view.
        
        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::WebFrameLoaderClient):
        (WebFrameLoaderClient::setMainDocumentError):
        (WebFrameLoaderClient::committedLoad):
        (WebFrameLoaderClient::finishedLoading):
        (WebFrameLoaderClient::redirectDataToPlugin):
        * WebCoreSupport/WebFrameLoaderClient.h:

2009-01-04  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by George Staikos.

        Make the apple windows port build with the new fixedLayoutSize feature

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::transitionToCommittedForNewPage):

2008-12-20  Dan Bernstein  <mitz@apple.com>

        Reviewed by Ada Chan.

        - expose the new allItems() method via a new IWebHistoryPrivate
          interface

        * Interfaces/IWebHistoryPrivate.idl: Added.
        * Interfaces/WebKit.idl: Added IWebHistoryPrivate.idl.
        * WebHistory.cpp:
        (WebHistory::QueryInterface): Added IWebHistoryPrivate.
        (WebHistory::allItems):
        * WebHistory.h:

2008-12-19  Geoffrey Garen  <ggaren@apple.com>

        Build fix.

        * WebHistory.cpp:
        (WebHistory::allItems):

2008-12-19  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler, Adele Peterson, Brady Eidson.
        
        Added SPI for getting an unsorted vector of all items in history.
        
        * WebHistory.cpp:
        (WebHistory::orderedItemsLastVisitedOnDay):
        (WebHistory::allItems):
        * WebHistory.h:

2008-12-18  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        - implement FrameLoaderClient::shouldUseCredentialStorage() by calling
          a new resource load delegae method.

        * Interfaces/IWebResourceLoadDelegatePrivate.idl: Added
        a ne interface, IWebResourceLoadDelegatePrivate2, including a new
        method, shouldUseCredentialStorage().
        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::shouldUseCredentialStorage): Added. Calls the
        delegate method. If the method is unimplemented, returns true for
        backwards compatibility.
        * WebCoreSupport/WebFrameLoaderClient.h:

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

        Reviewed by John Sullivan.

        Implement FrameLoaderClient::dispatchDidFirstVisuallyNonEmptyLayout() by calling
        a new private frame load delegate method.

        * Interfaces/IWebFrameLoadDelegatePrivate.idl:
        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::dispatchDidFirstVisuallyNonEmptyLayout):
        * WebCoreSupport/WebFrameLoaderClient.h:

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

        Windows build fix.
        
        Reviewed by Stephanie Lewis.

        * COMPropertyBag.h:
        (::createInstance):
        (::adopt):
        (::QueryInterface):
        (::AddRef):
        (::Release):
        (::Read):
        (::Write):
        (::CountProperties):
        (::GetPropertyInfo):
        (::LoadObject):
        * WebURLResponse.cpp:
        (WebURLResponse::allHeaderFields):

2008-12-16  Stephanie Lewis  <slewis@apple.com>

        Another Windows Build Fix.

        * WebURLResponse.cpp:
        (WebURLResponse::allHeaderFields):

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

        Reviewed by Darin Adler.

        - Windows equivalent of <rdar://problem/3258561>
          WebHistoryAllItemsRemovedNotification should add items to userInfo

        * WebHistory.cpp:
        (WebHistory::removeAllItems): Changed to create an array of all items
        and send it in the notification.

2008-12-12  Brent Fulgham  <bfulgham@gmail.com>

        Reviewed by Oliver Hunt.

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

        Provides implementation of image drag for Windows Cairo back-end.
        Switch to generic PlatformGraphicsContext data type, rather than
        specific use of CoreGraphics types.

        * WebCoreSupport/WebDragClient.cpp:
        (WebDragClient::createDragImageForLink): Revise calls to use more
        generic PlatformGraphicsContext data types and calls for better
        portability.

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

        Update Windows cache sizes to match recent Mac change.
        
        Reviewed by Stephanie Lewis, Sam Weinig.

        * WebView.cpp:
        (WebView::setCacheModel):

2008-12-12  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Rubber-stamped by Oliver Hunt.

        Remove mutables from EmbeddedWidget

        We can do this now that frameRectsChanged() is no longer const

        * WebCoreSupport/EmbeddedWidget.h:

2008-12-11  Cameron Zwarich  <zwarich@apple.com>

        Rubber-stamped by Mark Rowe.

        Roll out r39212 due to assertion failures during layout tests, multiple
        layout test failures, memory leaks, and obvious incorrectness.

        * Interfaces/IWebPreferencesPrivate.idl:
        * WebPreferenceKeysPrivate.h:
        * WebPreferences.cpp:
        * WebPreferences.h:

2008-12-10  Glenn Wilson  <gwilson@google.com>

        Reviewed by Adam Roben.

        Added support for overriding default preferences per-test.
        https://bugs.webkit.org/show_bug.cgi?id=20534
        Two new methods were added: resetToDefaults and overridePreference.

        * Interfaces/IWebPreferencesPrivate.idl: new method signatures
        * WebPreferenceKeysPrivate.h: added new key for internal state
        * WebPreferences.cpp: added new methods
        (WebPreferences::overridePreference): new method
        (WebPreferences::resetToDefaults): new method
        * WebPreferences.h: new method signatures

2008-12-08  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Darin Adler and Holger Freyther.

        Make Widget::frameRectsChanged() and overrides non-const

        This will hopefully allow us to get rid of some of the mutables in
        the classes that react to the callback by changing their own state.

        * WebCoreSupport/EmbeddedWidget.cpp:
        (EmbeddedWidget::frameRectsChanged):
        * WebCoreSupport/EmbeddedWidget.h:

2008-12-09  Brett Wilson  <brettw@chromium.org>

        Reviewed by Dave Hyatt.

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

        Add a callback on ChromeClient that the state of form elements on
        the page has changed. This is to allow clients implementing session
        saving to know when the current state is dirty.

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

ks2008-12-08  Dan Bernstein  <mitz@apple.com>

        Reviewed by Adam Roben.

        - Fix nightly builds

        * Interfaces/IWebViewPrivate.idl: Moved globalHistoryItem() to the end,
        so that it comes after all methods used by Safari 3.2.1.

2008-12-08  Dan Bernstein  <mitz@apple.com>

        Reviewed by John Sullivan.

        - WebKit/win part of tracking the global history item for a WebView

        * Interfaces/IWebViewPrivate.idl: Declared globalHistoryItem()
        * WebView.cpp:
        (WebView::globalHistoryItem): Added. Gets the page's global history
        item.
        * WebView.h:

2008-12-06  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

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

        Renderer::caretRect() is now localCaretRect(), which needs
        converting to absolute coordinates (taking transforms into account).

        * WebView.cpp:
        (WebView::handleContextMenuEvent):

2008-12-05  Darin Adler  <darin@apple.com>

        Reviewed by Alexey Proskuryakov.

        - fix https://bugs.webkit.org/show_bug.cgi?id=22674
          Webkit r39005 does not start, an entry point not found

        * WebView.cpp:
        (findCFNetworkModule): Added.
        (findCopySharedURLCacheFunction): Added.
        (WebView::setCacheModel): Call CFURLCacheCopySharedURLCache via dynamic loading
        instead of compiling based on which version of CFNetwork headers are present.

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

        Implement IPropertyBag2::Read.
        Fill in dwType for IPropertyBag2::GetPropertyInfo (we always use PROPBAG2_TYPE_DATA).
        https://bugs.webkit.org/show_bug.cgi?id=22659
        
        This fixes <rdar://problem/6419127> REGRESSION: Forms autocomplete is broken for "other forms"
        
        Reviewed by Ada Chan, Alice Liu.

        * COMPropertyBag.h:
        (::Read): Implemented.
        (::GetPropertyInfo): Set dwType to PROPBAG2_TYPE_DATA.

2008-12-02  Adam Roben  <aroben@apple.com>

        Export new-ish JSCore convenience constructor functions

        Reviewed by Jon Honeycutt.

        * WebKit.vcproj/WebKit.def:
        * WebKit.vcproj/WebKit_debug.def:
        Export JSObjectMakeArray, JSObjectMakeDate, and JSObjectMakeRegExp.
        Remove duplicate export of JSObjectMakeFunction.

2008-12-02  Michael Moss  <mmoss@chromium.org>

        Reviewed by Eric Seidel.

        - Fix http/tests/navigation/reload-subframe-*frame.html on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=20926

        Change 31264 fixed this on Mac (since moved to WebCore/loader/FrameLoader.cpp), but was never ported to Windows.

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::loadURLIntoChild):

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

        Implement renderedImage for Windows.
        https://bugs.webkit.org/show_bug.cgi?25648
        
        Reviewed by Adam Roben.

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

2008-12-01  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Roben.

        NULL-check documentFrameView() and topDocumentFrameView() it's possible
        for either of these methods to return NULL, and this was seen to cause
        crashes in Chromium.
        https://bugs.webkit.org/show_bug.cgi?id=22572

        * AccessibleBase.cpp:
        (AccessibleBase::get_accParent):
        (AccessibleBase::accLocation):
        (AccessibleBase::accHitTest):

2008-11-30  Antti Koivisto  <antti@apple.com>

        Another Windows build fix.

        * WebCoreStatistics.cpp:
        (WebCoreStatistics::javaScriptObjectsCount):

2008-11-30  Antti Koivisto  <antti@apple.com>

        Windows build fix.

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

2008-11-29  Brent Fulgham  <bfulgham@gmail.com>

        Reviewed by Alexey Proskuryakov.

        Remove Visual Studio project dependencies on non-redistributable
        components in the Debug_Cairo and Release_Cairo build targets.
        See https://bugs.webkit.org/show_bug.cgi?id=22527

        * WebKit.vcproj/WebKit.vcproj:
        * WebKit.vcproj/WebKit.sln: Instruct Cairo builds to not bother
          building the unused QuickTime support library.

2008-11-24  Glenn Wilson  <gwilson@chromium.org>

        Reviewed by Alexey Proskuryakov.

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

        Added API support for the "trailing whitespace" work-around.  This includes an APIs
        to get and set the state of this configuration variable.

        * Interfaces/IWebView.idl:
        * WebCoreSupport/WebEditorClient.cpp:
        (WebEditorClient::selectTrailingWhitespaceEnabled):
        * WebCoreSupport/WebEditorClient.h:
        * WebView.cpp:
        (WebView::WebView):
        (WebView::setSelectTrailingWhitespaceEnabled):
        (WebView::selectTrailingWhitespaceEnabled):
        * WebView.h:

2008-11-24  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        - https://bugs.webkit.org/show_bug.cgi?id=22470
          remove unneeded URL argument from FrameLoaderClient::updateGlobalHistory

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::updateGlobalHistory): Get the URL from the
        DocumentLoader, just as we do the title and the failure flag.
        * WebCoreSupport/WebFrameLoaderClient.h: Remove argument.

2008-11-24  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        - finish https://bugs.webkit.org/show_bug.cgi?id=22295
          track which history items are from page load failures

        Last time around I did this only for the back/forward list and missed the
        global history list.

        * Interfaces/IWebHistoryItemPrivate.idl: Added setLastVisitWasFailure.

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::updateGlobalHistory): Added code to check for failure
        and pass the argument in to WebHistory.

        * WebHistory.cpp: (WebHistory::addItem): Added wasFailure argument.
        Set the flag on the newly created history item.
        * WebHistory.h: Ditto.

        * WebHistoryItem.cpp:
        (WebHistoryItem::setLastVisitWasFailure): Added.
        * WebHistoryItem.h: Ditto.

2008-11-24  Simon Fraser  <simon.fraser@apple.com>

        Fix call to Frame::selectionBounds in Windows build.

        * WebView.cpp:
        (WebView::selectionRect):

2008-11-21  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Debug WebKit crashes on launch because of threading not being initialized early enough.

        * WebKitClassFactory.cpp: (WebKitClassFactory::WebKitClassFactory):
        Call JSC::InitializeThreading().

2008-11-19  Darin Fisher  <darin@chromium.org>

        Reviewed by Geoff Garen.

        https://bugs.webkit.org/show_bug.cgi?id=22345
        Define ScriptValue as a thin container for a JSC::Value*.

        * WebView.cpp:
        (WebView::stringByEvaluatingJavaScriptFromString):

2008-11-19  Adele Peterson  <adele@apple.com>

        Reviewed by Darin Adler.

        For transparent views, clear the dirty rect instead of painting it white.
        
        * WebView.cpp: (WebView::paintIntoBackingStore):

2008-11-18  Adele Peterson  <adele@apple.com>

        Reverting last change.  I just realized it causes the view to never get cleared out.

        * WebView.cpp: (WebView::paintIntoBackingStore):

2008-11-18  Adele Peterson  <adele@apple.com>

        Reviewed by John Sullivan.

        Don't fill the view with white if its transparent.
        
        * WebView.cpp: (WebView::paintIntoBackingStore):

2008-11-18  Holger Hans Peter Freyther  <zecke@selfish.org>

        Try to fix the Windows build. It is view and not webView.

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::transitionToCommittedForNewPage):

2008-11-18  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann.

        Attempt to share transitionToCommittedForNewPage of FrameLoaderClient with the different ports

        After Hyatt's work on Widget and ScrollView there is little difference
        between the implementation of Qt, Gtk+ and Win. In fact any kind of
        difference is mostly a bug. Alp has fixed two of such errors for the Gtk+
        port and the Qt port has at least one of them left.

        The only difference between the implementations is in getting the the
        IntSize for the new FrameView, the background color to be applied and
        eventually some post processing.

        Unify the implementations by providing a static helper function that
        takes a Frame, IntSize, color and transparency bit and calling it from
        the Gtk+, the Qt and the Windows port.

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::transitionToCommittedForNewPage):

2008-11-18  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann.

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

        Move setting the background color and transparency from WebKit/win
        to WebCore. This allows WebKit/win, WebKit/Qt and WebKit/Gtk+
        to share this code.

        * WebFrame.cpp:
        (WebFrame::updateBackground):

2008-11-16  Geoffrey Garen  <ggaren@apple.com>

        Not reviewed.
        
        Try to fix Windows build.

        * WebCoreSupport/WebFrameLoaderClient.cpp:

2008-11-16  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        - https://bugs.webkit.org/show_bug.cgi?id=22295
          track which history items are from page load failures

        * Interfaces/IWebHistoryItemPrivate.idl: Added lastVisitWasFailure function.

        * WebHistoryItem.cpp:
        (WebHistoryItem::initFromDictionaryRepresentation): Set the lastVisitWasFailure
        flag in the history item if the dictionary had an entry for lastVisitWasFailureKey.
        (WebHistoryItem::dictionaryRepresentation): Set the lastVisitWasFailureKey key
        in the dictionary if the history item had the lastVisitWasFailure flag.
        (WebHistoryItem::lastVisitWasFailure): Added.

        * WebHistoryItem.h: Added lastVisitWasFailure function.

2008-11-15  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.
        
        Updated for JavaScriptCore renames.

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

2008-11-14  Dan Bernstein  <mitz@apple.com>

        - try to fix the Windows build

        * WebCoreLocalizedStrings.cpp:
        (WebCore::contextMenuItemTagTextDirectionMenu): Added.

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

        Fix Bug 22244: Webkit nightly builds crash with Safari 3.2

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

        r36652 added IWebViewPrivate::clearMainFrameName into the middle of
        the IWebViewPrivate interface, which modifies the part of the
        IWebViewPrivate vtable that Safari 3.2 relies on.

        Reviewed by Dan Bernstein.

        * Interfaces/IWebViewPrivate.idl: Move clearMainFrameName to the end
        of the interface.

2008-11-11  Dan Bernstein  <mitz@apple.com>

        Reviewed by Adam Roben.

        WebKit/win part of adding a master volume control for media elements in a WebView
        * Interfaces/IWebViewPrivate.idl: Added setMediaVolume() and
        mediaVolume().
        * WebView.cpp:
        (WebView::setMediaVolume): Added.
        (WebView::mediaVolume): Added.
        * WebView.h:

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

        Fix Bug 22158: Would like to turn on WebCore logging channels via an
        environment variable

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

        Reviewed by Anders Carlsson.

        * WebView.cpp:
        (WebView::initWithFrame): Call WebCore's
        InitializeLoggingChannelsIfNecessary.

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

        Reviewed by Darin Adler.

        - WebKit/win part of adding WebPreferences for controlling databases and local storage

        * Interfaces/IWebPreferencesPrivate.idl: Declared setDatabasesEnabled,
        databasesEnabled, setLocalStorageEnabled and localStorageEnabled.
        * WebPreferenceKeysPrivate.h: Added WebKitDatabasesEnabledPreferenceKey
        and WebKitLocalStorageEnabledPreferenceKey.
        * WebPreferences.cpp:
        (WebPreferences::initializeDefaultSettings): Made databases and local
        storage enabled by default.
        (WebPreferences::setDatabasesEnabled): Added.
        (WebPreferences::databasesEnabled): Added.
        (WebPreferences::setLocalStorageEnabled): Added.
        (WebPreferences::localStorageEnabled): Added.
        * WebPreferences.h:
        * WebView.cpp:
        (WebView::notifyPreferencesChanged): Transfer the databases and local
        storage preferences to WebCore settings.

2008-11-06  John Sullivan  <sullivan@apple.com>
    
        Eliminated one of the two booleans tracking whether zoom was text-only, to avoid future problems.
    
        Reviewed by Adam Roben

        * WebView.h:
        removed m_zoomMultiplierIsTextOnly
        
        * WebView.cpp:
        (WebView::WebView):
        removed initialization of m_zoomMultiplierIsTextOnly
        (WebView::setZoomMultiplier):
        use m_page->settings()->setZoomsTextOnly() instead of setting m_zoomMultiplierIsTextOnly
        (WebView::zoomMultiplier):
        use m_page->settings()->zoomsTextOnly() instead of reading m_zoomMultiplierIsTextOnly

2008-11-06  Adele Peterson  <adele@apple.com>

        Reviewed by Adam Roben.

        Add support for a WebKitZoomsTextOnly preference.

        * Interfaces/IWebPreferences.idl:
        * WebPreferenceKeysPrivate.h:
        * WebPreferences.cpp:
        (WebPreferences::setZoomsTextOnly):
        (WebPreferences::zoomsTextOnly):
        * WebPreferences.h:

        * WebView.cpp:
        (WebView::canMakeTextLarger): Consider the zoomsTextOnly setting when computing this.
        (WebView::makeTextLarger): ditto.
        (WebView::canMakeTextSmaller): ditto.
        (WebView::makeTextSmaller): ditto.
        (WebView::canMakeTextStandardSize): 
        Don't consider the setting in this case since we need to reset both text zoom and page zoom regardless of the setting.
        (WebView::makeTextStandardSize):
        (WebView::notifyPreferencesChanged): Set the WebCore settings to match the WebPreference for WebKitZoomsTextOnly.

2008-11-05  Dan Bernstein  <mitz@apple.com>

        Reviewed by John Sullivan.

        - make the {protocol,proxyType} argument of
          WebURLProtectionSpace::initWith{Proxy}Host actually work and fix
          assertion failures.

        * WebURLProtectionSpace.cpp:
        (WebURLProtectionSpace::initWithHost): The BString comparisons were
        applying the BString==BSTR operator to a right hand side that was
        actually a WCHAR string. Fixed by using BStrings on both sides.
        (WebURLProtectionSpace::initWithProxyHost): Ditto.

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

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=22030
        Make EventNames usable from multiple threads

        * WebView.cpp: (WebView::interpretKeyEvent): Access event names via eventNames() function.

2008-11-03  Cameron Zwarich  <zwarich@apple.com>

        Rubber-stamped by Maciej Stachowiak.

        Move more files into the runtime subdirectory of JavaScriptCore.

        * WebJavaScriptCollector.cpp:

2008-11-03  Dan Bernstein  <mitz@apple.com>

        Reviewed by Steve Falkenburg.

        - implement WebMutableURLRequest::setHTTPShouldHandleCookies()
        - add and implement WebMutableURLRequest::mutableCopy()

        * Interfaces/IWebURLRequest.idl:
        * WebMutableURLRequest.cpp:
        (WebMutableURLRequest::setHTTPShouldHandleCookies):
        (WebMutableURLRequest::mutableCopy):
        * WebMutableURLRequest.h:

2008-10-31  Dan Bernstein  <mitz@apple.com>

        Reviewed by John Sullivan.

        - WebKit/win part of <rdar://problem/6334641> Add WebView SPI for disabling document.cookie

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

2008-10-31  Adele Peterson  <adele@apple.com>

        Reviewed by Darin Adler.

        WebKit Windows part of fix for <rdar://problem/5839256> FILE CONTROL: multi-file upload.
        https://bugs.webkit.org/show_bug.cgi?id=22008
        
        * WebCoreSupport/WebChromeClient.cpp: (WebChromeClient::runOpenPanel): 
        Add support for mulitple file selection.

2008-10-31  Darin Adler  <darin@apple.com>

        - try to fix build

        * WebView.cpp:
        (WebView::setCacheModel): Roll out the part of my last change
        that involved no longer using wkCopyFoundationCacheDirectory.

2008-10-30  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        - https://bugs.webkit.org/show_bug.cgi?id=21986
          <rdar://problem/6294285> adopt CFURLCopySharedURLCache

        * WebView.cpp:
        (WebView::setCacheModel): Use CFURLCopySharedURLCache if present.

2008-10-30  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        - export WTFReportAssertionFailureWithMessage()

        * WebKit.vcproj/WebKit_debug.def:

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

        <rdar://problem/6326563> Crash on launch
        
        For Windows, export explicit functions rather than exporting data for atomicallyInitializedStaticMutex.
        
        Exporting data from a DLL on Windows requires specifying __declspec(dllimport) in the header used by
        callers, but __declspec(dllexport) when defined in the DLL implementation. By instead exporting
        the explicit lock/unlock functions, we can avoid this.
        
        Fixes a crash on launch, since we were previously erroneously exporting atomicallyInitializedStaticMutex as a function.
        
        Reviewed by Darin Adler.

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

2008-10-29  Jon Honeycutt  <jhoneycutt@apple.com>

        Export atomicallyInitializedStaticMutex.

        Rubber-stamped by Steve Falkenburg.

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

2008-10-28  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Mark Rowe.

        Move ForwardingHeaders to their correct location after the creation of
        the runtime directory in JavaScriptCore.

        * WebScriptCallFrame.h:

2008-10-28  Adele Peterson  <adele@apple.com>

        Reviewed by John Sullivan.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=21880
        "files" string for multifile uploads needs to be localized

        * WebCoreLocalizedStrings.cpp: (multipleFileUploadText):

2008-10-28  Adele Peterson  <adele@apple.com>

        Reviewed by Sam Weinig. 

        * English.lproj: Removed.
        * English.lproj/Localizable.strings: Removed.
        * WebKit.vcproj/WebKit.vcproj: Updated to use Localizable.strings in the top directory, to share with the Mac.

2008-10-28  Timothy Hatcher  <timothy@apple.com>

        Add IWebInspector methods to enable the profiler.

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

        <rdar://problem/6211578> Make the JavaScript profiler opt-in, so it does
        not slow down JavaScript all the time

        Reviewed by Darin Adler and Kevin McCullough.

        * WebInspector.cpp:
        (WebInspector::isJavaScriptProfilingEnabled): Added. Calls InspectorController::profilerEnabled.
        (WebInspector::setJavaScriptProfilingEnabled): Added. Call InspectorController's disableProfiler
        or enableProfiler methods.
        * WebInspector.h:

2008-10-27  Timothy Hatcher  <timothy@apple.com>

        Rename a few methods related to attaching and detaching the debugger.

        * Rename attachDebugger to enableDebugger.
        * Rename detachDebugger to disableDebugger.
        * Rename the debuggerAttached getter to debuggerEnabled.

        Reviewed by Darin Adler.

        * WebInspector.cpp:
        (WebInspector::isDebuggingJavaScript):
        (WebInspector::toggleDebuggingJavaScript):

2008-10-24  Sam Weinig  <sam@webkit.org>

        Yet another windows build fix.

        * WebCoreSupport/WebChromeClient.cpp:

2008-10-24  Sam Weinig  <sam@webkit.org>

        Another windows build fix.

        * WebCoreSupport/WebChromeClient.cpp:

2008-10-24  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Fix https://bugs.webkit.org/show_bug.cgi?id=21759
        Layering violation: FileChooser should not depend on Document/Frame/Page

        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::runOpenPanel):
        * WebCoreSupport/WebChromeClient.h:

2008-10-24  Timothy Hatcher  <timothy@apple.com>

        Implement new InspectorClient methods to work with Settings.

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

        Reviewed by Adam Roben.

        * WebKit.vcproj/WebKit.vcproj: Add the new InspectorClientCF.cpp file.
        * WebCoreSupport/WebInspectorClient.h: Add the new methods.

2008-10-24  Darin Adler  <darin@apple.com>

        - finish rolling out https://bugs.webkit.org/show_bug.cgi?id=21732

        * WebScriptCallFrame.cpp:
        (WebScriptCallFrame::jsValueToString):
        (WebScriptCallFrame::stringByEvaluatingJavaScriptFromString):
        (WebScriptCallFrame::valueForVariable):
        (WebScriptCallFrame::valueByEvaluatingJavaScriptFromString):
        * WebScriptCallFrame.h:
        * WebView.cpp:
        (WebView::stringByEvaluatingJavaScriptFromString):
        Use JSValue* instead of JSValuePtr.

2008-10-22  Brent Fulgham  <bfulgham@gmail.com>

        Correct build regressions in Cairo port for Windows.
        http://bugs.webkit.org/show_bug.cgi?id=21724

        Reviewed by Adam Roben.

        * WebView.cpp:
        (WebView::notifyPreferencesChanged): Don't try to call
        setShouldPaintNativeControls when SafariTheme support is disabled, as
        that function doesn't exist in that case.

2008-10-22  Brady Eidson  <beidson@apple.com>

        Reviewed by Adam Roben
        
        Move elementDoesAutoComplete() to IWebFramePrivate so it is exposed for DRT to use

        * Interfaces/IWebFramePrivate.idl:
        
        * WebFrame.cpp:
        (WebFrame::elementDoesAutoComplete):
        * WebFrame.h:
        
        * WebHTMLRepresentation.cpp:
        (WebHTMLRepresentation::elementDoesAutoComplete):

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

        Reviewed by Anders Carlsson.

        Remove FrameLoaderClient::detachedFromParent4.  It is no longer used by any port.

        * WebFrame.cpp:
        * WebFrame.h:

2008-10-19  Darin Adler  <darin@apple.com>

        Reviewed by Oliver Hunt.

        - next step of https://bugs.webkit.org/show_bug.cgi?id=21732
          improve performance by eliminating JSValue as a base class for JSCell

        Remove most uses of JSValue, which will be removed in a future patch.

        * WebScriptCallFrame.cpp:
        (WebScriptCallFrame::jsValueToString): Use JSValuePtr.
        (WebScriptCallFrame::stringByEvaluatingJavaScriptFromString): Ditto.
        (WebScriptCallFrame::valueForVariable): Put more code inside and ifdef.
        (WebScriptCallFrame::valueByEvaluatingJavaScriptFromString): Ditto.
        * WebScriptCallFrame.h: Use JSValuePtr.

        * WebView.cpp:
        (WebView::stringByEvaluatingJavaScriptFromString): Use JSValuePtr.

2008-10-18  Dan Bernstein  <mitz@apple.com>

        - build fix

        * WebScriptCallFrame.cpp:
        (WebScriptCallFrame::jsValueToString):

2008-10-18  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        - WebKit/win part of https://bugs.webkit.org/show_bug.cgi?id=21736
          Long-dead decoded image data make up for most of the object cache's memory use over time

        * WebView.cpp:
        (WebView::setCacheModel): In the primary web browser model,
        set the cache's dead decoded data deletion interval to 60 seconds.

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

        Reviewed by Steve Falkenburg.

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

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

2008-10-17  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        - export WTF::initializeOnMainThread()

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

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

        Reviewed by Cameron Zwarich.

        Fixed https://bugs.webkit.org/show_bug.cgi?id=21345
        Start the debugger without reloading the inspected page

        * WebInspector.cpp:
        (WebInspector::toggleDebuggingJavaScript): Updated for rename.

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

        Export WTF::Mutex::tryLock

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

2008-10-14  Jon Honeycutt  <jhoneycutt@apple.com>

        Export currentThread.

        Rubber-stamped by Dan Bernstein.

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

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

        Reorder methods to preserve compatibility.
        
        Rubber stamped by Oliver Hunt.

        * Interfaces/IWebViewPrivate.idl:

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

        Reviewed by Sam Weinig.

        - add SPI for forcing the complex text code path to be used for all text

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

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

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

        Reviewed by Adam Roben.

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

2008-10-06  David Hyatt  <hyatt@apple.com>

        Enable viewless Mac WebKit to paint some basic pages.
        
        Reviewed by Sam Weinig

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::createFrame):
        * WebCoreSupport/WebFrameLoaderClient.h:

2008-10-03  David Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=21340
        
        Remove "containingWindow()/setContainingWindow()" from Widget.  HostWindow covers this now.
        
        Reviewed by Dan Bernstein & Darin Adler

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::transitionToCommittedForNewPage):
        * WebScrollBar.cpp:
        (WebScrollBar::WebScrollBar):
        (WebScrollBar::init):
        (WebScrollBar::invalidateScrollbarRect):
        * WebScrollBar.h:

2008-10-03  David Hyatt  <hyatt@apple.com>

         Remove addToDirtyRegion.
        
         Reviewed by Oliver Hunt

        * WebCoreSupport/WebChromeClient.cpp:

2008-10-02  David Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=21328
        
        Make widget invalidation more cross-platform.
        
        (1) Make invalidateRect a pure virtual function on Widget.  All leaf widgets must now implement this function.
        
        (2) Scrollbars now send invalidations through the ScrollbarClient.  windowClipRect on ScrollbarClient has been removed and replaced with this invalidation call.
        This allows all scrollbar invalidations to go through the render tree so that transforms and reflections will be respected.
        
        (3) Plugins now have the native window invalidation code for windowed plugins.  Windowless plugins do a repaintRectangle on the plugin's renderer.
        
        (4) FrameViews now do a repaintRectangle on their owner element's renderer.

        Reviewed by Sam Weinig

        * WebCoreSupport/EmbeddedWidget.cpp:
        (EmbeddedWidget::invalidateRect):
        * WebCoreSupport/EmbeddedWidget.h:
        * WebScrollBar.cpp:
        (WebScrollBar::invalidateScrollbarRect):
        * WebScrollBar.h:

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

        - https://bugs.webkit.org/show_bug.cgi?id=21321
          Bug 21321: speed up JavaScriptCore by inlining Heap in JSGlobalData

        * WebCoreStatistics.cpp:
        (WebCoreStatistics::javaScriptObjectsCount): Use heap. instead of heap-> to
        work with the heap.
        (WebCoreStatistics::javaScriptGlobalObjectsCount): Ditto.
        (WebCoreStatistics::javaScriptProtectedObjectsCount): Ditto.
        (WebCoreStatistics::javaScriptProtectedGlobalObjectsCount): Ditto.
        (WebCoreStatistics::javaScriptProtectedObjectTypeCounts): Ditto.
        * WebJavaScriptCollector.cpp:
        (WebJavaScriptCollector::objectCount): Ditto.

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

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

        Reviewed by Adele
       
        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::transitionToCommittedForNewPage):

2008-10-02  David Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=21314
        
        Make scrollBackingStore cross-platform.

        Reviewed by Sam Weinig

        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::repaint):
        (WebChromeClient::scroll):
        * WebCoreSupport/WebChromeClient.h:
        * WebView.cpp:
        (WebView::repaint):
        * WebView.h:

2008-10-01  David Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=21298
        
        Make updateScrollbars cross-platform.  For now a stubbed out scrollContents function is invoked to do the scrolling of the backing store.  Next patch
        will make that cross-platform.  
        
        The ScrollView now implements ScrollbarClient, which means that there was a clash of windowClipRect methods from the
        multiple inheritance.  For now I solved this by adding a Scrollbar* to the ScrollbarClient version of the method, but longer term
        windowClipRect is going to be removed from ScrollbarClient (when Widget invalidation gets rewritten).

        Reviewed by Sam Weinig

        * WebScrollBar.cpp:
        (WebScrollBar::windowClipRect):
        * WebScrollBar.h:

2008-10-01  David Hyatt  <hyatt@apple.com>
        
        https://bugs.webkit.org/show_bug.cgi?id=21282
        
        Make contentsToScreen/screenToContents cross-platform.  Only implemented by Mac/Win right now.
        
        Reviewed by Adam Roben

        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::windowToScreen):
        (WebChromeClient::screenToWindow):
        * WebCoreSupport/WebChromeClient.h:

2008-09-30   Dave Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=21269
  
        This patch makes the ScrollView::paint method cross-platform.  The paint method calls the base class
        Widget paint on platforms with native widgets (Mac and wx).  Otherwise it calls a virtual function,
        paintContents, to paint the ScrollView's contents, and then it paints each of the two scrollbars and
        the scrollbar corner.
        
        The scrollbar themes are now responsible for painting scrollbar corners.  At the moment ScrollbarThemeWin still
        paints white (which is incorrect), so a future patch will actually implement proper native scroll corner painting
        for Windows.
        
        paintContents is implemented by FrameView, and replaces Frame::paint.  All of the FramePrivate member
        variables used by Frame::paint have moved to FrameViewPrivate instead.  All callers of Frame::paint have
        been patched to use FrameView::paintContents instead.
        
        Reviewed by Darin Adler

        * WebFrame.cpp:
        (WebFrame::paintDocumentRectToContext):
        (WebFrame::spoolPages):

2008-09-30  Dave Hyatt  <hyatt@apple.com>

        http://bugs.webkit.org/show_bug.cgi?id=21250
        
        Rename updateContents to repaintContentRectangle and make it cross-platform by always sending
        repaints up through the ChromeClient.

        Reviewed by Darin Adler

        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::repaint):
        * WebCoreSupport/WebChromeClient.h:
        * WebView.cpp:
        (WebView::repaint):
        * WebView.h:

2008-09-29  Dan Bernstein  <mitz@apple.com>

        Reviewed by Adam Roben.

        - WebKit/win part of fixing <rdar://problem/6247906> REGRESSION (r19500): Crash on quit beneath CloseThemeData

        * WebKitDLL.cpp:
        (DllMain): Call RenderThemeWin::setWebKitIsBeingUnloaded() when WebKit
        is being unloaded.

2008-09-27  David Hyatt  <hyatt@apple.com>

        Land the frameGeometry->frameRect changes that I forgot to land in WebKit.

        * Interfaces/IWebScrollBarPrivate.idl:
        * WebCoreSupport/EmbeddedWidget.cpp:
        (EmbeddedWidget::setFrameRect):
        (EmbeddedWidget::frameRectsChanged):
        * WebCoreSupport/EmbeddedWidget.h:
        * WebScrollBar.cpp:
        (WebScrollBar::setRect):
        (WebScrollBar::frameRect):
        * WebScrollBar.h:

2008-09-27  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * WebCoreSupport/EmbeddedWidget.cpp:
        (EmbeddedWidget::setFrameRect):
        (EmbeddedWidget::frameRectsChanged):
        * WebCoreSupport/EmbeddedWidget.h:
        * WebScrollBar.cpp:
        (WebScrollBar::setRect):
        (WebScrollBar::frameGeometry):

2008-09-26  David Kilzer  <ddkilzer@apple.com>

        Speculative Windows build fix with XSLT disabled

        Reviewed by Alexey.

        * WebCache.cpp:
        (WebCache::statistics): Populate xslStyleSheet statistics with
        zeros if XSLT is disabled.

2008-09-24  Matt Lilek  <webkit@mattlilek.com>

        Reviewed by Darin Adler.

        Bug 20999: Inspector hover to select does not work properly on Windows
        https://bugs.webkit.org/show_bug.cgi?id=20999
        <rdar://problem/6236524>

        * WebNodeHighlight.cpp:
        (WebNodeHighlight::show):

2008-09-24  Darin Adler  <darin@apple.com>

        * English.lproj/Localizable.strings: Updated for recent changes.

2008-09-22  Alice Liu  <alice.liu@apple.com>

        Added record-memory-win.vcproj tool to the solution

        Reviewed by Steve Falkenburg.

        * WebKit.vcproj/WebKit.sln:

2008-09-20  Darin Adler  <darin@apple.com>

        - fix build

        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::paintCustomScrollbar): Tweaked constant names to make this
        compile, but it may not be working correctly. Hyatt should do the real fix.

2008-09-19  Alice Liu  <alice.liu@apple.com>

        Fix crash when submitting form at bugreport.apple.com rdar://6234126

        Reviewed by Mark Rowe.

        * COMPropertyBag.h:
        (::GetPropertyInfo):
        correct mis-use of comma operator

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

        Reviewed by Dan Bernstein.

        Add SPI to WebView to allow DRT to clear the main frame's name between tests.

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

2008-09-16  Alp Toker  <alp@nuanti.com>

        Suggested by Dave Hyatt.

        Build fix and cleanup. Rename ScrollBar to Scrollbar.

        * WebScrollBar.cpp:
        * WebScrollBar.h:

2008-09-16  David Hyatt  <hyatt@apple.com>

        Eliminate PlatformScrollbar.

        Reviewed by Sam Weinig

        * WebScrollBar.cpp:
        (WebScrollBar::init):
        * WebScrollBar.h:

2008-09-15  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler, Beth Dakin

        Support strings for AXLists

        * WebCoreLocalizedStrings.cpp:
        (WebCore::AXDefinitionListTermText):
        (WebCore::AXDefinitionListDefinitionText):

2008-09-13  Dave Hyatt  <hyatt@apple.com>

        Add ScrollbarTheme to the build.
        
        Reviewed by Sam Weinig

        * WebScrollBar.cpp:
        (WebScrollBar::requestedWidth):
        (WebScrollBar::requestedHeight):

2008-09-13  Dave Hyatt  <hyatt@apple.com>

        More scrollbar refactoring.
        
        Reviewed by Sam Weinig

        * WebScrollBar.h:

2008-09-08  Adam Roben  <aroben@apple.com>

        Respect the font smoothing preference when drawing via WebKitGraphics

        Reviewed by Dave Hyatt.

        * WebKitGraphics.cpp:
        (makeFont): Check the font smoothing preference and update the
        FontDescription's rendering mode based on it.

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

        Another Windows nightly build fix.
        
        Remove non-production versions of CLSIDs since we'll use registry free COM with
        an embedded manifest now in all cases to find COM classes.
        
        Reviewed by Sam Weinig.

        * ForEachCoClass.cpp:
        (setUseOpenSourceWebKit): Remove COM registration code.
        * Interfaces/WebKit.idl: Remove non-production COM classes

2008-09-07  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Maciej Stachowiak.

        Bug 20704: Replace the KJS namespace
        <https://bugs.webkit.org/show_bug.cgi?id=20704>

        Rename the KJS namespace to JSC.

        * WebCoreStatistics.cpp:
        * WebJavaScriptCollector.cpp:
        * WebScriptCallFrame.cpp:
        (WebScriptCallFrame::jsValueToString):
        * WebScriptCallFrame.h:
        (WebScriptCallFrame::state):
        * WebView.cpp:
        (WebView::WebView):
        (WebView::stringByEvaluatingJavaScriptFromString):

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

        Add support for runtime switchability of the Aqua look and the native look on Windows.
        Make RenderThemeWin compile by default even when USE(SAFARI_THEME) is set.

        Reviewed by Adam Roben

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

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

        Make JavaScriptCoreGenerated build first instead of WTF

        JavaScriptCoreGenerated does some setup work that we want to happen
        before WTF builds.

        * WebKit.vcproj/WebKit.sln: Reversed the dependencies of WTF and
        JavaScriptCoreGenerated.

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

        Reviewed by Dan Bernstein.

        Add WebView SPI to defer loading callbacks.

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

2008-08-28  Adele Peterson  <adele@apple.com>

        Build fix.

        * WebIconDatabase.cpp: (WebIconDatabase::getOrCreateDefaultIconBitmap):

2008-08-28  Holger Hans Peter Freyther  <zecke@selfish.org>

        Rubber-stamped by Darin Adler.

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

        Remove the urlIcon.png from the project and the resource file. Remove
        the usage of this icon from WebKitDLL.cpp and change WebIconDatabase
        to get the icon from the IconDatabase code which is using a version of
        the icon that is compiled into the code.

        * WebIconDatabase.cpp:
        (WebIconDatabase::getOrCreateDefaultIconBitmap): Use the icon from the
        IconDatabase.cpp
        * WebKit.vcproj/WebKit.rc: Remove urlIcon.cpp
        * WebKit.vcproj/urlIcon.png: Removed.
        * WebKitDLL.cpp:
        (loadResourceIntoBuffer): Remove "urlIcon"

2008-08-27  Alice Liu  <alice.liu@apple.com>

        Add interface for obtaining JS object counts broken down by type

        Reviewed by Steve Falkenburg.

        * Interfaces/IWebCoreStatistics.idl:
        * WebCoreStatistics.cpp:
        (WebCoreStatistics::javaScriptProtectedObjectTypeCounts):
        * WebCoreStatistics.h:

2008-08-27  Ada Chan  <adachan@apple.com>

        Fixed build.

        * WebFrame.cpp:
        (WebFrame::pluginWillHandleLoadError):

2008-08-27  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders

        <rdar://problem/6134133> - Crash when loading large movie as a standalone document

        * WebFrame.cpp:
        (WebFrame::pluginWillHandleLoadError):
        * WebFrame.h:

2008-08-26  Alice Liu  <alice.liu@apple.com>

        Implement COMPropertyBag::GetPropertyInfo
        and a variant setter for type int

        Reviewed by Anders Carlsson.

        * COMPropertyBag.h:
        (::GetPropertyInfo):
        * COMVariantSetter.h:

2008-08-25  Adam Roben  <aroben@apple.com>

        Fix an assertion when showing the Web Inspector

        Reviewed by Kevin McCullough.

        * WebCoreSupport/WebInspectorClient.cpp:
        (WebInspectorClient::attachWindow):
        (WebInspectorClient::detachWindow):
        Recent code changes have caused these functions to get called even
        when the window is already attached/detached, respectively. Handle
        this case gracefully instead of asserting something that is no longer
        true.

2008-08-24  Beth Dakin  <bdakin@apple.com>

        Reviewed by John Sullivan.

        Provide the excludeFromTextSearch SPI on Windows as well.

        * Interfaces/IWebFrame.idl:
        * WebFrame.cpp:
        (WebFrame::setExcludeFromTextSearch):
        * WebFrame.h:

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

        Cannot get the focused accessible object from the root object.

        AccessibleBase::get_AccFocus() checks whether the focused object is a
        child of the current object, but 
        http://msdn.microsoft.com/en-us/library/ms696150(VS.85).aspx states that
        the result is the object itself, if it has focus, or a child object of
        the active window, not a child of the object.

        Reviewed by Sam Weinig.

        * AccessibleBase.cpp:
        (AccessibleBase::get_accFocus): Don't check whether the focused object
        is our child.

2008-08-18  Jon Honeycutt  <jhoneycutt@apple.com>

        Add SPI to make a Windows WebView transparent.

        Reviewed by Dan Bernstein.

        * Interfaces/IWebViewPrivate.idl:
        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::transitionToCommittedForNewPage): Call
        updateBackground() when a new frame is attached, matching the Mac.
        * WebFrame.cpp:
        (WebFrame::updateBackground): Propagate WebView transparency to ourself
        and our child frames.
        * WebFrame.h:
        * WebView.cpp:
        (WebView::WebView):
        (WebView::paintIntoBackingStore): Pass m_transparent when creating a
        GraphicsContext, so the context will be created with an alpha channel.
        (WebView::setTransparent):
        (WebView::transparent):
        * WebView.h:

2008-08-12  Jon Honeycutt  <jhoneycutt@apple.com>

        Add SPI to get a handle to the WebView's backing store bitmap.

        Reviewed by Dan Bernstein.

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

2008-08-21 Jonas Klink <klinktech@gmail.com>

        Reviewed by Jon Honeycutt.

        Fix https://bugs.webkit.org/show_bug.cgi?id=20231
        Bug 20231: accNavigate: no screen element found in the specified direction should return S_FALSE

        Per <http://msdn.microsoft.com/en-us/library/ms696145(VS.85).aspx>, we should return S_FALSE
        from accNavigate if no screen element is found in the specified direction.

        * AccessibleBase.cpp:
        (AccessibleBase::accNavigate):

2008-08-21 Jonas Klink <klinktech@gmail.com>

        Reviewed by Jon Honeycutt.

        Fix http://bugs.webkit.org/show_bug.cgi?id=20230
        Bug 20230: get_accState should be testing state on childObj

        Also initializes output parameter action to 0 in get_accDefaultAction.

        * AccessibleBase.cpp:
        (AccessibleBase::get_accState):
        (AccessibleBase::get_accDefaultAction):

2008-08-20  Maxime Britto  <britto@apple.com>

        Reviewed by Ada Chan.

        rdar://5259746
        Mouse events are sent to page while resizing window (affects Gmail)
        In the WebView, if the MouseEvent is located in the resize corner, we send it back to the UIDelegate and early return.

        * Interfaces/IWebUIDelegatePrivate.idl: Add a new method to the UIDelegate to send the resize message
        * WebView.cpp:
        (WebView::handleMouseEvent): If the mouse event is in the resize corner and our UIDelegate supports the message it sends the new message and early returns

2008-08-19  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Geoff Garen.

        Bring back shared JSGlobalData and implicit locking, because too many clients rely on it.

        * WebCoreStatistics.cpp:
        (WebCoreStatistics::javaScriptObjectsCount):
        (WebCoreStatistics::javaScriptGlobalObjectsCount):
        (WebCoreStatistics::javaScriptProtectedObjectsCount):
        (WebCoreStatistics::javaScriptProtectedGlobalObjectsCount):
        * WebJavaScriptCollector.cpp:
        (WebJavaScriptCollector::objectCount):
        * WebScriptCallFrame.cpp:
        (WebScriptCallFrame::stringByEvaluatingJavaScriptFromString):
        * WebView.cpp:
        (WebView::stringByEvaluatingJavaScriptFromString):

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

        Fix build.

        * WebScriptCallFrame.cpp:
        (WebScriptCallFrame::jsValueToString):

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

        Update cache capacities to match values used on Mac.
        
        Reviewed by Dan Bernstein.

        * WebView.cpp:
        (WebView::setCacheModel):

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

        Reviewed by Jon Honeycutt.

        Add WebView SPI to set HTMLTokenizer yielding parameters.

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

2008-08-13  Eric Seidel  <eric@webkit.org>

        Attempt to fix the windows build, not review.

        * WebIconDatabase.cpp:
        (WebIconDatabase::getOrCreateDefaultIconBitmap):

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

        Implemented DOMHTMLElement::idName() and WebFrame::frameElement().
        Added IWebFrame::paintDocumentRectToContext() so we can paint a frame's
        content into a device context.  Changed WebView::paintDocumentRectToContext()
        to call that WebFrame method.

        Reviewed by Adam Roben.

        * DOMHTMLClasses.cpp:
        (DOMHTMLElement::idName):
        * Interfaces/IWebFramePrivate.idl:
        * WebFrame.cpp:
        (WebFrame::paintDocumentRectToContext):
        (WebFrame::frameElement):
        * WebFrame.h:
        * WebView.cpp:
        (WebView::paintDocumentRectToContext):

2008-08-12  Timothy Hatcher  <timothy@apple.com>

        Add a stub for InspectorClient::setAttachedWindowHeight.

        * WebCoreSupport/WebInspectorClient.cpp:
        (WebInspectorClient::setAttachedWindowHeight): Add a FIXME to implement this.
        * WebCoreSupport/WebInspectorClient.h:

2008-08-12  Adam Roben  <aroben@apple.com>

        Export WTFLog in Debug builds

        Reviewed by John Sullivan.

        * WebKit.vcproj/WebKit_debug.def:

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

        Delete backing stores before 5 second WM_TIMER fires if more than 2 are already queued.
        
        WM_TIMER-based timers can be starved if enough other events are keeping
        our message loop busy. This change prevents many backing store deletes from stacking
        up in this case.
        
        Reviewed by Geoff Garen.

        * WebView.cpp:
        (WebView::deleteBackingStore):
        (WebView::deleteBackingStoreSoon):
        (WebView::cancelDeleteBackingStoreSoon):

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

        Add a getter for CFURLRequestRef in WebMutableURLRequest.

        Reviewed by Anders Carlsson.

        * Interfaces/IWebMutableURLRequestPrivate.idl:
        * WebMutableURLRequest.cpp:
        (WebMutableURLRequest::cfRequest):
        * WebMutableURLRequest.h:

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

        Don't invalidate a WebView in the process of being closed when prefs change.
        
        Reviewed by Ada Chan.

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

2008-08-04  Alice Liu  <alice.liu@apple.com>

        Reviewed by Steve Falkenburg.

        Fix CFDictionary leak

        * CFDictionaryPropertyBag.cpp:
        (CFDictionaryPropertyBag::Write):
        m_dictionary is a RetainPtr and should adopt the CF type created

2008-08-02  Maxime Britto  <britto@apple.com>

        Reviewed by Eric Seidel.
      
        These icons are copies from the resizers in WebCore/Ressources

        * ChangeLog:
        * WebKit.vcproj/WebKit.rc:
        * WebKit.vcproj/panEastCursor.png: Added.
        * WebKit.vcproj/panNorthCursor.png: Added.
        * WebKit.vcproj/panNorthEastCursor.png: Added.
        * WebKit.vcproj/panNorthWestCursor.png: Added.
        * WebKit.vcproj/panSouthCursor.png: Added.
        * WebKit.vcproj/panSouthEastCursor.png: Added.
        * WebKit.vcproj/panSouthWestCursor.png: Added.
        * WebKit.vcproj/panWestCursor.png: Added.
        * WebKit.vcproj/resource.h:
        * WebKitDLL.cpp:
        (loadResourceIntoBuffer):

2008-08-01  Beth Dakin  <bdakin@apple.com>

        Reviewed by Adam Roben.

        Fix for <rdar://problem/6119382> Need to hook up WebFrame's 
        disconnected frame API on Windows.

        * Interfaces/IWebFrame.idl:
        * WebFrame.cpp:
        (WebFrame::setIsDisconnected):
        * WebFrame.h:

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

        Fix <rdar://6118733> REGRESSION (r35502): Crash when submitting any
        form

        Reviewed by Darin Adler.

        * COMPropertyBag.h:
        (COMPropertyBag::QueryInterface): Cast to an appropriate type before
        assigning into ppvObject.

2008-07-31  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        Get rid of FormValuesPropertyBag and use COMPropertyBag instead.
        
        * COMPropertyBag.h:
        Implement parts of IPropertyBag2. 
        Currently just one method (CountProperties) is implemented.
        
        * WebCoreSupport/FormValuesPropertyBag.cpp: Removed.
        * WebCoreSupport/FormValuesPropertyBag.h: Removed.
      
        * WebFrame.cpp:
        (WebFrame::dispatchWillSubmitForm):
        Create a COMPropertyBag instead.
        
        * WebKit.vcproj/WebKit.vcproj:

2008-07-31  Anders Carlsson  <andersca@apple.com>

        Reviewed by Jon.
        
        Tweak the names.

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::createPlugin):

2008-07-31  Anders Carlsson  <andersca@apple.com>

        Reviewed by Jon.

        <rdar://problem/5826110>
        
        Add a way for WebKit clients to embed custom content in web pages.
        
        * Interfaces/IWebEmbeddedView.idl: Added.
        New interface which an embedded view must implement.
        
        * Interfaces/IWebUIDelegatePrivate.idl:
        Add new UI delegate method for creating an embedded view.
        
        * Interfaces/WebKit.idl:
        Include IWebEmbeddedView.idl.
        
        * WebCoreSupport/EmbeddedWidget.cpp: Added.
        * WebCoreSupport/EmbeddedWidget.h: Added.
        Add EmbeddedWidget, a widget subclass which can hold an IWebEmbeddedView.
        
        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::createPlugin):
        Check if the UI delegate wants to create an embedded view.
        
        * WebKit.vcproj/WebKit.vcproj:
        Add EmbeddedWidget.{cpp|h}

2008-07-31  Alexey Proskuryakov  <ap@webkit.org>

        Rubber-stamped by Maciej.

        Eliminate JSLock (it was already disabled, removing the stub implementaion and all
        call sites now).

        * WebCoreStatistics.cpp:
        (WebCoreStatistics::javaScriptObjectsCount):
        (WebCoreStatistics::javaScriptGlobalObjectsCount):
        (WebCoreStatistics::javaScriptProtectedObjectsCount):
        (WebCoreStatistics::javaScriptProtectedGlobalObjectsCount):
        * WebJavaScriptCollector.cpp:
        (WebJavaScriptCollector::objectCount):
        * WebScriptCallFrame.cpp:
        (WebScriptCallFrame::stringByEvaluatingJavaScriptFromString):
        * WebView.cpp:
        (WebView::stringByEvaluatingJavaScriptFromString):

2008-07-31  Jon Honeycutt  <jhoneycutt@apple.com>

        Windows build fix.

        * WebURLResponse.cpp:

2008-07-30  Mark Rowe  <mrowe@apple.com>

        Windows build fix.

        * WebURLResponse.cpp:  Don't include a header file that we just deleted.

2008-07-30  Anders Carlsson  <andersca@apple.com>

        Reviewed by Mitz.

        Use a COMPropertyBag instead of the HTTPHeaderPropertyBag.
        
        * HTTPHeaderPropertyBag.cpp: Removed.
        * HTTPHeaderPropertyBag.h: Removed.
        * WebURLResponse.cpp:
        (WebURLResponse::allHeaderFields):

2008-07-30  Anders Carlsson  <andersca@apple.com>

        Fix copyright years.
        
        * COMPropertyBag.h:
        * COMVariantSetter.h:

2008-07-30  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam.

        More property bag work.
        
        * COMPropertyBag.h:
        (COMPropertyBag::COMPropertyBag):        
        (::adopt):
        (::Read):
        * COMVariantSetter.h:
        (COMIUnknownVariantSetter::setVariant):

2008-07-30  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam.

        Add COMPropertyBag, a simple template class that implements the IPropertyBag interface. All
        property bag values must be of the same type.
        
        The COMVariantSetter helpers are now in COMVariantSetter.h
        
        * COMEnumVariant.h:
        * COMPropertyBag.h: Added.
        * COMVariantSetter.h: Added.
        * WebKit.vcproj/WebKit.vcproj:
        
2008-07-30  Alice Liu  <alice.liu@apple.com>

        Reviewed by Adam Roben.

        Adding logging of COM class names and counts to facilitate
        investigating memory issues.

        * Interfaces/IWebKitStatistics.idl:
        * WebKitDLL.cpp:
        * WebKitDLL.h:
        * WebKitStatistics.cpp:
        (WebKitStatistics::comClassNameCounts):
        * WebKitStatistics.h:

2008-07-29  Alice Liu  <alice.liu@apple.com>

        Reviewed by Geoff Garen.

        Fix WebDocumentLoader leak on Windows.

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::createDocumentLoader):
        * WebDocumentLoader.cpp:
        (WebDocumentLoader::create):
        * WebDocumentLoader.h:

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

        Export detachThread

        Reviewed by Geoff Garen.

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

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

        Export the new version of createThread

        Reviewed by Anders Carlsson.

        * WebKit.vcproj/WebKit.def:
        * WebKit.vcproj/WebKit_debug.def:
        Also moved the old version of createThread into the deprecated
        section.

2008-07-26  Matt Lilek  <webkit@mattlilek.com>

        Reviewed by Geoff Garen.

        Changes to accommodate newly named/signatured loading methods in WebCore.

        * WebCoreSupport/WebContextMenuClient.cpp:
        (WebContextMenuClient::searchWithGoogle):
        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::loadURLIntoChild):

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

        Try to fix the Windows build bot

        * WebKit.vcproj/WebKit.sln: Linearize the project dependencies. Each
        project now depends only on the project that should immediately
        precede it in the build. For the frameworks, this order makes sense.
        For the applications built on top of the frameworks, the order is
        arbitrary (but roughly follows the applications' complexity).

2008-07-17  Adele Peterson  <adele@apple.com>

        Reviewed by Adam.

        WebKit part of fix for <rdar://problem/5698672>  Add drawing callback for a WebKit app to draw its own scrollbars
        
        Added a setting so an application can tell WebKit its going to draw custom scrollbars.  Also added delegate methods for the actual painting.
        
        * Interfaces/IWebPreferences.idl:  Added setShouldPaintCustomScrollbars and shouldPaintCustomScrollbars.
        * Interfaces/IWebScrollBarPrivate.idl: Moved types to WebScrollbarTypes.idl
        * Interfaces/IWebUIDelegate.idl: Added WebUIDelegate4 with new delegate methods, paintCustomScrollbar and paintCustomScrollCorner
        * Interfaces/WebKit.idl: Include new WebScrollbarTypes.idl
        * Interfaces/WebScrollbarTypes.idl: Added. Has types that the new delegate methods use.
        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::paintCustomScrollbar): Added. Calls new delegate method and converts between WebCore types and types exported in WebScrollbarTypes.idl
        (WebChromeClient::paintCustomScrollCorner): Added. Calls new delegate method.
        (WebChromeClient::uiDelegate4): Added.
        * WebCoreSupport/WebChromeClient.h:
        * WebPreferenceKeysPrivate.h: Added WebKitPaintCustomScrollbarsPreferenceKey
        * WebPreferences.cpp:
        (WebPreferences::): Added.
        (WebPreferences::shouldPaintCustomScrollbars): Added.
        * WebPreferences.h:
        * WebView.cpp: (WebView::notifyPreferencesChanged):

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

        Add WebKit[Set]ShouldUseFontSmoothing functions

        <rdar://6059127>

        Reviewed by John Sullivan.

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

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

        Don't include autoversion.h in WebKitDLL.cpp.
        autoversion.h changes for every build, so we don't want to include it unless necessary.        

        Rubber stamped by Ada Chan.

        * WebKitDLL.cpp:

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

        Windows build fix

        * WebJavaScriptCollector.cpp:
        (WebJavaScriptCollector::objectCount): Updated to match
        -[WebCoreStatistics javaScriptsObjectCount].

2008-07-14  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Geoff Garen.

        Eliminate per-thread JavaScript global data instance support and make arbitrary
        global data/global object combinations possible.

        * WebCoreStatistics.cpp:
        (WebCoreStatistics::javaScriptObjectsCount):
        (WebCoreStatistics::javaScriptGlobalObjectsCount):
        (WebCoreStatistics::javaScriptProtectedObjectsCount):
        (WebCoreStatistics::javaScriptProtectedGlobalObjectsCount):
        Ask WebCore for its instance of JSGlobalData, now that it is not in per-thread storage.

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

        Build fix.

        * WebKit.vcproj/WebKit.vcproj:

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

        Build fix.

        * WebKit.vcproj/Interfaces.vcproj:

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

        Windows build fix

        * WebKit.vcproj/resource.h: Revert some changes that VS made to this
        file in r35083.

2008-07-09  Maxime Britto  <britto@apple.com>

        Reviewed by Adele.
       
        Added the panning icon in the ressources.
        Its name is compass.png to make a difference with moveCursor.png (from the WebCore ressources)

        * ChangeLog:
        * WebKit.vcproj/WebKit.rc:
        * WebKit.vcproj/panIcon.png: Added.
        * WebKit.vcproj/resource.h:
        * WebKitDLL.cpp: Declared the new ressource with the name "panIcon"
        (loadResourceIntoBuffer):

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

        - try to fix the Windows build

        * WebScriptCallFrame.cpp:

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

        Reviewed by Darin Adler.

        Disable JSLock for per-thread contexts.

        * WebCoreStatistics.cpp:
        (WebCoreStatistics::javaScriptObjectsCount):
        (WebCoreStatistics::javaScriptGlobalObjectsCount):
        (WebCoreStatistics::javaScriptProtectedObjectsCount):
        (WebCoreStatistics::javaScriptProtectedGlobalObjectsCount):
        * WebScriptCallFrame.cpp:
        (WebScriptCallFrame::stringByEvaluatingJavaScriptFromString):
        * WebView.cpp:
        (WebView::stringByEvaluatingJavaScriptFromString):
        Pass a parameter (false) to JSLock to indicate that WebKit doesn't need locking.
        Include JSLock.h, as it is no longer brought in implicitly.

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

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

        Reviewed by Darin Adler.

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

2008-06-19  Alexey Proskuryakov  <ap@webkit.org>

        Windows build fix.

        * WebJavaScriptCollector.cpp: Added a missing include.

2008-06-17  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        Prepare JavaScript heap for being per-thread.

        * WebCoreStatistics.cpp:
        (WebCoreStatistics::javaScriptObjectsCount):
        (WebCoreStatistics::javaScriptGlobalObjectsCount):
        (WebCoreStatistics::javaScriptProtectedObjectsCount):
        (WebCoreStatistics::javaScriptProtectedGlobalObjectsCount):
        * WebJavaScriptCollector.cpp:
        (WebJavaScriptCollector::objectCount):
        Use JSGlobalData::threadInstance()->heap instead of static Collector calls.

        * WebScriptCallFrame.cpp:
        (WebScriptCallFrame::valueByEvaluatingJavaScriptFromString): Pass ExecState* where
        now required.

2008-06-16  Alexey Proskuryakov  <ap@webkit.org>

        Trying to fix Windows build.

        * WebScriptCallFrame.cpp:
        (WebScriptCallFrame::variableNames):
        (WebScriptCallFrame::valueForVariable):
        Give ExecState to functions that now take it.

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

        Windows build fix

        * WebScriptCallFrame.cpp: Fixed a header name.

2008-06-15  Darin Adler  <darin@apple.com>

        - give Frame object functions shorter names: scriptProxy() -> script(),
          selectionController() -> selection(), animationController() -> animation()

        * WebFrame.cpp:
        (WebFrame::globalContext):
        (WebFrame::windowObjectCleared):
        * WebView.cpp:
        (WebView::handleContextMenuEvent):
        (WebViewWndProc):
        (WebView::updateFocusedAndActiveState):
        (WebView::hasSelectedRange):
        (WebView::replaceSelectionWithText):
        (WebView::clearSelection):
        (WebView::prepareCandidateWindow):
        (WebView::onIMERequestCharPosition):
        (WebView::onIMERequestReconvertString):

2008-06-15  Darin Adler  <darin@apple.com>

        - rename KJS::List to KJS::ArgList

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

2008-06-15  Darin Adler  <darin@apple.com>

        - new names for a few key JavaScriptCore files

        * WebView.cpp:

2008-06-15  Darin Adler  <darin@apple.com>

        Rubber stamped by Sam.

        - use JS prefix and simpler names for basic JavaScriptCore types,
          to complement JSValue and JSObject

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

2008-06-15  Maciej Stachowiak  <mjs@apple.com>

        Rubber stamped by Oliver.
        
        - fix WebKit solution for testkjs --> jsc rename

        * WebKit.vcproj/WebKit.sln:

2008-06-14  Darin Adler  <darin@apple.com>

        Rubber stamped by Sam.

        - new names for kjs_binding.h and kjs_proxy.h

        * WebFrame.cpp:

2008-06-14  Darin Adler  <darin@apple.com>

        Rubber stamped by Sam.

        - renamed HTMLGenericFormElement to HTMLFormControlElement

        * WebFrame.cpp:
        (WebFrame::elementWithName):
        (WebFrame::controlsInForm):

2008-06-14  Darin Adler  <darin@apple.com>

        - try to fix Windows build, again

        * WebFrame.cpp:
        (WebFrame::dispatchDecidePolicyForNewWindowAction): Fix arguments. Pass form.
        (WebFrame::dispatchDecidePolicyForNavigationAction): Ditto.
        * WebFrame.h: Fix arguments.

2008-06-14  Darin Adler  <darin@apple.com>

        - try to fix Windows build

        * WebActionPropertyBag.cpp:
        (WebActionPropertyBag::Read): Use IDOMNode, not IHTMLFormElement.
        * WebFrame.h: Added missing FormState arguments.
        * WebScrollBar.cpp:
        (WebScrollBar::init): Use create instead of new.

2008-06-14  Darin Adler  <darin@apple.com>

        Reviewed by Sam.

        - more of https://bugs.webkit.org/show_bug.cgi?id=17257
          start ref counts at 1 instead of 0 for speed

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::createFrame): Remove now-obsolete adoptRef that was balanced by
        a ref call inside the Frame constructor. The lifetime rules for Frame are now the
        conventional ones without a special case.

        * WebFrame.cpp:
        (WebFrame::init): Renamed function from initWithWebFrameView and removed the unused
        IWebFrameView argument (every caller was passing 0). Also changed this to return the
        WebCore Frame object, which is needed to straighten out the lifetime and ownership
        issues.
        * WebFrame.h: Ditto.

        * WebView.cpp:
        (WebView::initWithFrame): Changed to call new init function and use the return value.

2008-06-13  Darin Adler  <darin@apple.com>

        Reviewed by John Sullivan.

        - updated for addition of FormState argument to action policy functions
        - added WebActionFormKey

        * Interfaces/IWebPolicyDelegate.idl:
        * WebActionPropertyBag.cpp:
        (WebActionPropertyBag::WebActionPropertyBag):
        (WebActionPropertyBag::createInstance):
        (WebActionPropertyBag::AddRef):
        (WebActionPropertyBag::Release):
        (WebActionPropertyBag::Read):
        * WebActionPropertyBag.h:
        * WebFrame.cpp:
        (WebFrame::dispatchDecidePolicyForNewWindowAction):
        (WebFrame::dispatchDecidePolicyForNavigationAction):

2008-06-07  Darin Adler  <darin@apple.com>

        Reviewed by Mitz.

        - work on https://bugs.webkit.org/show_bug.cgi?id=17257
          start ref counts at 1 instead of 0 for speed

        * WebHistoryItem.cpp:
        (WebHistoryItem::createInstance):
        (WebHistoryItem::initFromDictionaryRepresentation):
        (WebHistoryItem::initWithURLString):

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

        Registry-free COM.        
        
        WebKit no longer requires COM registration.
        Registry-free COM information is read from the application manifest.

        Only 1 set of CLSIDs are now used, since we don't need to worry about registry collisions.
        The second set remains, but only temporarily so nightlies continue to work.

        This is supported for XPSP2 and later.  Earlier systems require an installer
        to write the required registry keys.  Nightlies and developer builds require
        XPSP2, Server 2003, or later.

        Reviewed by Adam.

        * ForEachCoClass.cpp: Moved COM registration code here from WebKitDLL.cpp. This is ONLY used in the nightly case.
        (substituteGUID): Moved here from WebKitDLL.cpp.
        (registerWebKit): Moved here from WebKitDLL.cpp.
        (setUseOpenSourceWebKit): Call registerWebKit instead of swapping progids. There is only 1 set of progids now - for the nightly.
        * ForEachCoClass.h: Removed production progids. 
        * Interfaces/WebKit.idl: Added prototype for shutDownWebKit.
        * WebKit.vcproj/Interfaces.vcproj: Changed path to type library to move it out of project directory.
        * WebKit.vcproj/WebKit.vcproj: Changed path to type library to move it out of project directory.
        * WebKitDLL.cpp:
        (DllUnregisterServer): Does nothing. Entry point is still present for backward compatibility.
        (DllRegisterServer): Does nothing. Entry point is still present for backward compatibility.
        (RunAsLocalServer): Does nothing. Entry point is still present for backward compatibility.
        (shutDownWebKit): Moved from ForEachCoClass.
        * WebKitDLL.h:

2008-05-29  Anders Carlsson  <andersca@apple.com>

        Reviewed by Brady.

        <rdar://problem/5970312> 
        icon file specified for stand alone web app causes crash if the icon can't be found
        
        Handle the case where iconData is null.

        * WebIconFetcher.cpp:
        (WebIconFetcherClient::finishedFetchingIcon):

2008-05-22  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        Add IWebIconFetcher interface and implementation.
        
        * Interfaces/IWebFramePrivate.idl:
        * Interfaces/IWebIconFetcher.idl: Added.
        * Interfaces/WebKit.idl:
        * WebFrame.cpp:
        * WebFrame.h:
        * WebIconFetcher.cpp: Added.
        * WebIconFetcher.h: Added.
        * WebKit.vcproj/WebKit.vcproj:

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

        Add functions to IWebInspector to start/stop profiling/debugging

        <rdar://5956403>

        Reviewed by Jon Honeycutt.

        * Interfaces/IWebInspector.idl:
        * WebInspector.cpp:
        (WebInspector::isDebuggingJavaScript):
        (WebInspector::toggleDebuggingJavaScript):
        (WebInspector::isProfilingJavaScript):
        (WebInspector::toggleProfilingJavaScript):
        * WebInspector.h:

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

        Build fix.

        * Interfaces/IWebInspector.idl:
        * Interfaces/WebKit.idl:
        * WebInspector.cpp:
        (WebInspector::unused1):
        * WebInspector.h:

2008-05-22  Timothy Hatcher  <timothy@apple.com>

        Changes to keep Windows building.

        <rdar://problem/5956403> Update the Develop menu to match the new Inspector items

        Reviewed by Adam Roben.

        * English.lproj/Localizable.strings: Added new strings.
        * WebInspector.cpp:
        (WebInspector::showConsole): Call showPanel.
        * WebInspector.h:

2008-05-21  Adele Peterson  <adele@apple.com>

        Reviewed by Adam.

        WebKit part of for <rdar://problem/5787733> fast/dom/HTMLDocument/hasFocus.html fails on Windows
        
        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::focus): Call updateActiveState directly.
         Normally this would happen on a timer, but JS might need to know this earlier, so we'll update here.        
        (WebChromeClient::unfocus): ditto.
        * WebView.cpp: (WebView::updateActiveStateSoon): Added comment about why we use a timer for this.

=== End merge of squirrelfish ===

2008-05-13  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.
        
        Updated for new JS debugging APIs.

        * WebScriptDebugServer.cpp:
        (WebScriptDebugServer::didParseSource):
        (WebScriptDebugServer::failedToParseSource):
        * WebScriptDebugServer.h:

2008-05-09  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoff.

        Build fixes for SquirrelFish on windows.

        * WebScriptCallFrame.cpp:
        (callingFunctionOrGlobalExecState):
        (WebScriptCallFrame::caller):
        (WebScriptCallFrame::functionName):
        (WebScriptCallFrame::variableNames):
        (WebScriptCallFrame::valueForVariable):
        (WebScriptCallFrame::valueByEvaluatingJavaScriptFromString):
        * WebScriptDebugServer.cpp:
        (WebScriptDebugServer::willLeaveCallFrame):

2008-05-19  Adam Roben  <aroben@apple.com>

        Make WebKit.idl rebuild whenever any of its included interfaces are
        changed

        Reviewed by Tim Hatcher.

        * WebKit.vcproj/DerivedSources.make: Touch WebKit.idl whenever any
        other IDL file is changed. This will force VS to rebuild WebKit.idl.

2008-05-19  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        <rdar://problem/5946454>
        Support navigator.onLine from HTML5.
        
        Link with iphlpapi.lib, and make iphlpapi.dll a delay loaded library.
        
        * WebKit.vcproj/WebKit.vcproj:

=== Start merge of squirrelfish ===

2008-05-19  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin, Alexey, Jess and Brady.

        Set the application cache path.
        
        * WebView.cpp:
        (WebKitSetApplicationCachePathIfNecessary):
        New function that sets the cache path.
        
        (WebView::initWithFrame):
        Set the application cache path.
        
2008-05-19  Ada Chan  <adachan@apple.com>

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

        Reviewed by Steve Falkenburg.

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

2008-05-16  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Steve.

        Get pending unload event count from WebCore.

        * Interfaces/IWebFramePrivate.idl:
        * WebFrame.cpp:
        (WebFrame::pendingFrameUnloadEventCount):
        * WebFrame.h:

2008-05-16  Matt Lilek  <webkit@mattlilek.com>

        Rubber stamped by Oliver.

        Remove the Drosera sub-project.

        * WebKit.vcproj/WebKit.sln:

2008-05-16  Brady Eidson  <beidson@apple.com>

        Reviewed by Steve Falkenburg
        
        <rdar://problem/5942624> - Get LocalStorage persistence working on Windows
        
        * WebPreferenceKeysPrivate.h: Add the LocalStorageDirectory defaults key
        
        * WebPreferences.cpp:
        (WebPreferences::initializeDefaultSettings):
        (WebPreferences::localStorageDatabasePath):
        (WebPreferences::setLocalStorageDatabasePath):
        * WebPreferences.h:
        * Interfaces/IWebPreferencesPrivate.idl:

        * WebView.cpp:
        (WebView::initWithFrame): Set the path in the WebCore::Settings after new Page creation

2008-05-06  Brady Eidson  <beidson@apple.com>

        Reviewed by Tim Hatcher

        Until the settings/preferences equation can be reworked, we'll need to manually set the local storage path
        before setting the page group of the new page.

        Since I still need to add the local storage path to WebPreferences on Windows, mark this with a FIXME for now.

        * WebView.cpp:
        (WebView::initWithFrame): Mark an important FIXME for setting the LocalStorage path as
          appropriate.  Until this FIXME is handled, Windows will have no persistent LocalStorage

2008-05-14  Adam Roben  <aroben@apple.com>

        Fix Bug 18767: Inspector is currently pretty much useless on Windows

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

        Reviewed by Tim Hatcher.

        * WebCoreSupport/WebInspectorClient.cpp:
        (WebInspectorClient::highlight): Only move the highlight behind the
        Inspector window when first creating the highlight, not every time we
        update it.

2008-05-13  Adam Roben  <aroben@apple.com>

        Neuter WebScriptDebugServer

        Some upcoming changes to JavaScriptDebugServer and
        JavaScriptDebugListener will break WebScriptDebugServer. Since Drosera
        is being replaced by the Inspector's debugger, and Drosera is the only
        client of WebScriptDebugServer, it makes more sense to get rid of
        WebScriptDebugServer than to update it to keep it working.

        We can't actually remove WebScriptDebugServer entirely yet, so I've
        just made it non-functional. This will completely break Drosera, but
        as stated above, Drosera's days are numbered anyway.

        Reviewed by Tim Hatcher and Kevin McCullough.

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::dispatchDidLoadMainResource): Removed all code
        in this function.
        * WebKitDLL.cpp:
        (LocalServerDidDie): Ditto.
        * WebScriptDebugServer.cpp: Made all IWebScriptDebugServer functions
        return E_NOTIMPL.
        * WebScriptDebugServer.h: Removed everything but the
        IWebScriptDebugServer functions.

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

        - build fix

        * Interfaces/WebKit.idl: Touched.

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

        Reviewed by Ada Chan.

        - WebKit/win changes for https://bugs.webkit.org/show_bug.cgi?id=17097
          <rdar://problem/5715471> CGFontRefs (and HFONTs on Windows) leak because FontCache grows without bound

        Added font cache statistics and a function to purge inactive font data.

        * Interfaces/IWebCoreStatistics.idl:
        * WebCoreStatistics.cpp:
        (WebCoreStatistics::cachedFontDataCount):
        (WebCoreStatistics::cachedFontDataInactiveCount):
        (WebCoreStatistics::purgeInactiveFontData):
        (WebCoreStatistics::glyphPageCount):
        * WebCoreStatistics.h:

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

        Build fix

        * WebKitPrefix.cpp: Touch this so that it will rebuild after
        ENABLE_CROSS_DOCUMENT_MESSAGING was removed.

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

        Roll out recent  threading changes (r32807, r32810, r32819, r32822) to simplify
        SquirrelFish merging.

        * WebCoreStatistics.cpp:
        (WebCoreStatistics::javaScriptObjectsCount):
        (WebCoreStatistics::javaScriptGlobalObjectsCount):
        (WebCoreStatistics::javaScriptProtectedObjectsCount):
        (WebCoreStatistics::javaScriptProtectedGlobalObjectsCount):
        * WebJavaScriptCollector.cpp:
        (WebJavaScriptCollector::objectCount):
        * WebScriptCallFrame.cpp:
        (WebScriptCallFrame::valueByEvaluatingJavaScriptFromString):

2008-05-09  Brady Eidson  <beidson@apple.com>

        Reviewed by Adam Roben

        Fix a hang-on-quit bug where in the DLL_PROCESS_DETACH DllMain callback, we assummed that
        we could cleanly shutdown WebKit but we couldn't because any background threads have already
        been uncleanly aborted at that point.
        
        * ForEachCoClass.cpp:
        (shutDownWebKit): Moved from WebKitDLL to here, to be exposed via WebKit.def
        * ForEachCoClass.h:
        
        * WebKit.vcproj/WebKit.def:
        * WebKit.vcproj/WebKit_debug.def:
        
        * WebKitDLL.cpp:
        (DllMain): Don't call shutDownWebKit here

2008-05-09  Sam Weinig  <sam@webkit.org>

        Rubber-stamped by Mark Rowe.

        Remove the ENABLE_CROSS_DOCUMENT_MESSAGING #ifdefs.

        * WebKit.vcproj/WebKit.vcproj:

2008-05-09  Adam Roben  <aroben@apple.com>

        Build fix

        * Interfaces/WebKit.idl: Touched.

2008-05-06  Alice Liu  <alice.liu@apple.com>

        Reviewed by Adele Peterson and John Sullivan.

        changes needed to build on Windows after r32911 and r32927

        * AccessibleBase.cpp:
        (AccessibleBase::get_accParent):
        * AccessibleDocument.cpp:
        (AccessibleDocument::document):

2008-05-06  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler

        Preparation for upcoming work making LocalStorage persistent.

        When the application terminates, all LocalStorage areas must be sync'ed out to disk first.

        * WebKitDLL.cpp:
        (shutDownWebKit): Close all LocalStorage areas before quitting.

2008-05-05  Anders Carlsson  <andersca@apple.com>

        Reviewed by John.

        Add preference for enabling the offline web application cache.
        
        * Interfaces/IWebPreferencesPrivate.idl:
        * WebPreferenceKeysPrivate.h:
        * WebPreferences.cpp:
        (WebPreferences::initializeDefaultSettings):
        (WebPreferences::setOfflineWebApplicationCacheEnabled):
        (WebPreferences::offlineWebApplicationCacheEnabled):
        * WebPreferences.h:
        * WebView.cpp:
        (WebView::notifyPreferencesChanged):

2008-05-05  Sam Weinig  <sam@webkit.org>

        Reviewed by Tim Hatcher.

        Make the Inspector's localizable strings file match the format used by Dashboard widgets.

        * WebCoreSupport/WebInspectorClient.cpp:
        (WebInspectorClient::localizedStringsURL):

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

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

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

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

        Reviewed by Geoffrey Garen.

        https://bugs.webkit.org/show_bug.cgi?id=18826
        Make JavaScript heap per-thread

        * WebCoreStatistics.cpp:
        (WebCoreStatistics::javaScriptObjectsCount):
        (WebCoreStatistics::javaScriptGlobalObjectsCount):
        (WebCoreStatistics::javaScriptProtectedObjectsCount):
        (WebCoreStatistics::javaScriptProtectedGlobalObjectsCount):
        * WebJavaScriptCollector.cpp:
        (WebJavaScriptCollector::objectCount):
        * WebScriptCallFrame.cpp:
        (WebScriptCallFrame::valueByEvaluatingJavaScriptFromString):
        Replaced static Collector calls with calls to a current thread's instance. Pass ExecState to jsString().

2008-04-29  Ada Chan  <adachan@apple.com>

        Support text shadow in WebDrawText().
        Remove DrawTextAtPoint() since it is only called by WebDrawText().

        Reviewed by Adam.

        * WebKit.vcproj/WebKit.def:
        * WebKit.vcproj/WebKit_debug.def:
        * WebKitGraphics.cpp:
        (WebDrawText):
        * WebKitGraphics.h:

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

        Restore the beloved COMPtr::operator&

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

        Windows build fix

        Replaced uses of COMPtr::operator& with COMPtr::adoptionPointer.

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

        Fix a Windows build error

        * WebScriptCallFrame.cpp:
        (WebScriptCallFrame::variableNames): Don't use ::adopt now that
        PropertyNameArray has no swap function.

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

        Fix some Windows build errors in WebKit

        * Interfaces/WebKit.idl: Touched to force Interfaces to rebuild.
        * WebKitPrefix.cpp: Touched to force WebKit to rebuild.

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

        Reviewed by Darin Adler.

        Fix run-webkit-tests --threading
        and provisionally fix <https://bugs.webkit.org/show_bug.cgi?id=18661>
        Proxy server issue in Sunday's Nightly

        * WebView.cpp: (WebView::WebView): Initialize threading. Previously, this was only done from
        icon database code, which is not robust enough.

2008-04-26  Adam Barth <hk9565@gmail.com>

        Reviewed by Adam Roben and Sam Weinig.

        Renamed "domain" method to "host" to match SecurityOrigin.

        * Interfaces/IWebSecurityOrigin.idl:
        * WebSecurityOrigin.cpp:
        (WebSecurityOrigin::host):
        * WebSecurityOrigin.h:

2008-04-25  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        Fix internal debug build.
        
        * WebKit.vcproj/WebKit.vcproj:

2008-04-24  Dan Bernstein  <mitz@apple.com>

        - build fix

        * WebView.cpp:
        (WebView::handleContextMenuEvent):

2008-04-24  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin

        Revert my previous change to WebKit/Win until I can make it act more like the new Mac code

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

2008-04-24  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam.

        Change some String arguments to be const references instead.

        * WebCoreSupport/WebEditorClient.cpp:
        (WebEditorClient::shouldInsertText):
        * WebCoreSupport/WebEditorClient.h:

2008-04-23  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig

        In some current work I noticed that when a new Page is created, it is possible that it requires info from its Settings
        object before the Settings object is initialized.  It seems quite prudent to post the preferences changed notification,
        thereby populating the Settings object, immediately after the Page is created.

        * WebView.cpp:
        (WebView::initWithFrame): Post the notification right after the Page is created

2008-04-23  Jon Honeycutt  <jhoneycutt@apple.com>

        Reviewed by Brady.

        Implement accDoDefaultAction().

        * AccessibleBase.cpp:
        (AccessibleBase::accDoDefaultAction): Call the object's
        performDefaultAction() method. Return S_FALSE if the call returns false,
        indicating that the object has no default action associated with it.

2008-04-23  Jon Honeycutt  <jhoneycutt@apple.com>

        Reviewed by Adam.

        Implement accHitTest().

        * AccessibleBase.cpp:
        (AccessibleBase::accHitTest): Perform a hit test for a child object. If
        none is found, report whether the point was within our own bounding box.

2008-04-23  Jon Honeycutt  <jhoneycutt@apple.com>

        Reviewed by Adam and Darin.

        Implement accNavigate().

        * AccessibleBase.cpp:
        (AccessibleBase::accNavigate): This method navigates between elements,
        given a start point and a direction. The directions UP, DOWN, LEFT,
        RIGHT are not are not implemented, matching Mozilla and IE. The
        directions FIRSTCHILD and LASTCHILD are only allowed from self. NEXT and
        PREVIOUS are allowed from self or any of our children.

2008-04-23  Jon Honeycutt  <jhoneycutt@apple.com>

        Reviewed by Adam.

        Implement accLocation().

        * AccessibleBase.cpp:
        (AccessibleBase::accLocation): Report the screen coordinates for the
        object's bounding box.

2008-04-23  Jon Honeycutt  <jhoneycutt@apple.com>

        Reviewed by Adam, Darin, Oliver.

        Implement get_accDefaultAction().

        * AccessibleBase.cpp:
        (AccessibleBase::get_accDefaultAction): Report the result of calling the
        object's actionVerb method.
        * English.lproj/Localizable.strings: Updated with new strings.
        * WebCoreLocalizedStrings.cpp: 
        (WebCore::AXButtonActionVerb): Return a localized string representing
        the object's default action.
        (WebCore::AXRadioButtonActionVerb): Same.
        (WebCore::AXTextFieldActionVerb): Same.
        (WebCore::AXCheckedCheckBoxActionVerb): Same
        (WebCore::AXUncheckedCheckBoxActionVerb): Same.
        (WebCore::AXLinkActionVerb): Same.

2008-04-23  Daniel Zucker  <zucker@wake3.com>

        Reviewed by Adam Roben.

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

        * WebError.h:  include RetainPtr.h to fix build errors in Cairo build

2008-04-23  Daniel Zucker  <zucker@wake3.com>

        Reviewed by Adam Roben.

        Move the location of #if USE(CFNETWORK) to fix a cairo/curl build error.
        <https://bugs.webkit.org/show_bug.cgi?id=18470>

        * WebError.cpp:
        (WebError::sslPeerCertificate):

2008-04-22  Jon Honeycutt  <jhoneycutt@apple.com>

        Reviewed by Adam.

        Implement get_accFocus().

        * AccessibleBase.cpp:
        (AccessibleBase::get_accRole): Remove redundant initialization;
        VariantInit does this.
        (AccessibleBase::get_accState): Same.
        (AccessibleBase::get_accSelection): Relocated next to accSelect().
        (AccessibleBase::get_accFocus): If the focused object is this object or
        a child of this object, report it. Otherwise, report VT_EMPTY.

2008-04-22  Jon Honeycutt  <jhoneycutt@apple.com>

        Reviewed by Sam.

        Implement get_accKeyboardShortcut().

        * AccessibleBase.cpp:
        (AccessibleBase::get_accKeyboardShortcut): Report the key combination
        that will perform the object's access key action, represented as a
        string.

2008-04-19  Jon Honeycutt  <jhoneycutt@apple.com>

        Reviewed by Darin Adler.

        Implement get_accHelp().

        * AccessibleBase.cpp:
        (AccessibleBase::get_accHelp): Report the result of calling the object's
        helpText() method.

2008-04-19  Jon Honeycutt  <jhoneycutt@apple.com>

        Reviewed by Darin Adler.

        Implement get_accState().

        * AccessibleBase.cpp:
        (AccessibleBase::get_accState):

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

        Reviewed by Darin Adler.

        Move collector main thread initialization from WebKit/win to KJS::initializeThreading.

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

2008-04-18  Jon Honeycutt  <jhoneycutt@apple.com>

        Reviewed by Darin Adler.

        Implement get_accRole().

        * AccessibleBase.cpp:
        (AccessibleBase::get_accRole): Report the result of role().
        (MSAARole): Added; returns the MSAA role for a WebCore role.
        (AccessibleBase::role): Return the MSAA role for the object's roleValue.
        * AccessibleBase.h: Add declaration for role().

2008-04-18  Jon Honeycutt  <jhoneycutt@apple.com>

        Reviewed by Darin Adler.

        Implement get_accName(), get_accValue(), get_accDescription(). Added
        virtual methods that accessible objects can override to customize the
        result.

        * AccessibleBase.cpp:
        (AccessibleBase::get_accName): Report result of name().
        (AccessibleBase::get_accValue): Report result of value().
        (AccessibleBase::get_accDescription): Report result of description().
        (AccessibleBase::name): Added; returns AccessibilityObject::title().
        (AccessibleBase::value): Added; returns
        AccessibilityObject::stringValue().
        (AccessibleBase::description): Added; returns
        AccessibilityObject::accessibilityDescription().
        * AccessibleBase.h: Added declarations for name(), value(), and
        description().
        * ChangeLog: Fix my misuse of "definition."

2008-04-18  Jon Honeycutt  <jhoneycutt@apple.com>

        Fix build after r32231.

        * WebFrame.cpp:
        (WebFrame::renderTreeAsExternalRepresentation): renderer() ->
        contentRenderer()

2008-04-18  Jon Honeycutt  <jhoneycutt@apple.com>

        Fix build after r32231.

        * WebView.cpp:
        (WebView::paintIntoBackingStore): renderer() -> contentRenderer()
        (WebView::elementAtPoint): Same.

2008-04-18  Jon Honeycutt  <jhoneycutt@apple.com>

        * AccessibleBase.cpp: Build fix for copy/paste error.

2008-04-18  Jon Honeycutt  <jhoneycutt@apple.com>

        Reviewed by Darin Adler.

        Implement IAccessible::get_accChild().

        * AccessibleBase.cpp:
        (AccessibleBase::get_accChild): Call getAccessibilityObjectForChild
        to find the AccessibilityObject for the VARIANT vChild. Get the
        AccessibilityObjectWrapper for the child, add a ref, and pass it back.
        (AccessibleBase::getAccessibilityObjectForChild): Added; finds the
        AccessibilityObject referred to by a VARIANT, or returns a COM error on
        failure.
        (AccessibleBase::wrapper): Added; returns the wrapper for the
        AccessibilityObject. Creates one if necessary.
        * AccessibleBase.h: Added declarations for wrapper() and
        getAccessibilityObjectForChild().

2008-04-18  Jon Honeycutt  <jhoneycutt@apple.com>

        Reviewed by Darin, Ollie. 

        * AccessibleBase.cpp:
        (AccessibleBase::get_accChildCount): Implement get_accChildCount.

2008-04-17  Jon Honeycutt  <jhoneycutt@apple.com>

        Reviewed by Darin Adler.

        Implement IAccessible::get_accParent(). 

        * AccessibleBase.cpp:
        (AccessibleBase::get_accParent): Call AccessibleObjectFromWindow with
        OBJID_WINDOW. This will be handled by Windows to return the default
        accessible object for the WebView, because we only handle OBJID_CLIENT.
        * WebView.cpp:
        (WebView::AccessibleObjectFromWindow): Added; calls through to the
        AccessibleObjectFromWindow in the MSAA DLL.
        * WebView.h: Added declaration for AccessibleObjectFromWindow.

2008-04-17  Jon Honeycutt  <jhoneycutt@apple.com>

        Reviewed by Darin Adler.

        Return an AccessibleDocument when our root accessible object is queried
        for.

        * AccessibleDocument.cpp: Added; represents an AccessibilityObject that
        itself represents a Document.
        (AccessibleDocument::AccessibleDocument): Initialize AccessibleBase with
        the AccessibilityObject for this Document.
        * AccessibleDocument.h: Added.
        * WebFrame.cpp:
        (WebFrame::accessible): If m_accessible is 0, or if Document in this
        frame does not match the Document in the cached m_accessible object,
        create a new AccessibleDocument for this frame's Document.
        * WebFrame.h: Swap AccessibleBase.h for AccessibleDocument.h
        * WebKit.vcproj/WebKit.vcproj: Add AccessibleDocument.{h,cpp}

2008-04-17  Jon Honeycutt  <jhoneycutt@apple.com>

        Reviewed by Darin Adler.

        Respond to WM_GETOBJECT messages. Currently returns NULL.

        * WebFrame.cpp:
        (WebFrame::accessible): Added; will return the root accessible object
        for this frame.
        * WebFrame.h: Added declaration for accessible().
        * WebView.cpp:
        (WebViewWndProc): Handle WM_GETOBJECT messages by calling onGetObject().
        (WebView::onGetObject): Added; enables the AXObjectCache in WebCore,
        queries the top-level frame for its root accessible object, and loads
        the MSAA DLL and locates its LresultFromObject function. If calling
        LresultFromObject succeeds, it returns a reference to the accessible
        object to pass back to Windows. If not, we return false and let Windows
        handle the request through DefWindowProc.
        * WebView.h: Added declaration for onGetObject().

2008-04-18  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig

        Don't clear the PageGroup on _close, as the WebCore::Page destructor already does this.
        No reason to do the work twice...

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

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

        Update WebScriptDebugServer for JavaScriptDebugListener changes

        Reviewed by Tim Hatcher.

        * WebScriptDebugServer.cpp: Changed to use KJS::UString instead of
        WebCore::String.
        * WebScriptDebugServer.h: Ditto.

2008-04-16  Jon Honeycutt  <jhoneycutt@apple.com>

        Reviewed by Darin Adler.

        Add a base AccessibilityObject wrapper class. Currently just stubs all
        of the IAccessible methods.

        * AccessibleBase.cpp: Added. Implements IAccessible, and inherits from
        WebCore::AccessibilityObjectWrapper.
        (AccessibleBase::AccessibleBase): Set the object's wrapper to this
        instance. 
        (AccessibleBase::~AccessibleBase):
        (AccessibleBase::createInstance): Create an instance of a wrapper for
        this AccessibilityObject.
        (AccessibleBase::QueryInterface):
        (AccessibleBase::Release):
        (AccessibleBase::get_accParent):
        (AccessibleBase::get_accChildCount):
        (AccessibleBase::get_accChild):
        (AccessibleBase::get_accName):
        (AccessibleBase::get_accValue):
        (AccessibleBase::get_accDescription):
        (AccessibleBase::get_accRole):
        (AccessibleBase::get_accState):
        (AccessibleBase::get_accHelp):
        (AccessibleBase::get_accKeyboardShortcut):
        (AccessibleBase::accSelect):
        (AccessibleBase::get_accFocus):
        (AccessibleBase::get_accSelection):
        (AccessibleBase::get_accDefaultAction):
        (AccessibleBase::accLocation):
        (AccessibleBase::accNavigate):
        (AccessibleBase::accHitTest):
        * AccessibleBase.h: Added.
        (AccessibleBase::AddRef):
        (AccessibleBase::put_accName):
        (AccessibleBase::put_accValue):
        (AccessibleBase::get_accHelpTopic):
        (AccessibleBase::GetTypeInfoCount):
        (AccessibleBase::GetTypeInfo):
        (AccessibleBase::GetIDsOfNames):
        (AccessibleBase::Invoke):
        (AccessibleBase::detach): Detach this wrapper from its object.
        * WebKit.vcproj/WebKit.vcproj:

2008-04-15  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        Add ENABLE_OFFLINE_WEB_APPLICATIONS to FEATURE_DEFINES.

        * WebKit.vcproj/WebKit.vcproj:

2008-04-12  Matt Lilek  <webkit@mattlilek.com>

        Not reviewed, build fix.

        * WebView.cpp:
        (WebView::paintDocumentRectToContext):

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

        Fix caching typo.
        
        Made this code match the Mac.
        
        Reviewed by Mark Rowe.

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

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

        * ForEachCoClass.h: Added a deprecation notice.

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

        Fix Bug 18376: r31733 and 27 don't work w/Safari 3.1
        
        <https://bugs.webkit.org/show_bug.cgi?id=18376>

        Rubberstamped by Steve.

        * ForEachCoClass.h: Move post-3.1 classes to the end of the
        FOR_EACH_COCLASS macro so that pre-3.1 classes will be in the place
        Safari expects them to be. We will soon be deprecating
        setUseOpenSourceWebKit/progIDForClass because it is clearly very
        fragile.

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

        Added WebCoreStatistics that provides stats on Javascript objects
        and IconDatabase.
        
        Changed WebCache::statistics() to additionally return xsl stylesheets data
        and data on live sizes and decoded sizes.

        Reviewed by Steve.

        * ForEachCoClass.h:
        * Interfaces/IWebCoreStatistics.idl: Added.
        * Interfaces/WebKit.idl:
        * WebCache.cpp:
        (WebCache::statistics):
        * WebCoreStatistics.cpp: Added.
        (WebCoreStatistics::WebCoreStatistics):
        (WebCoreStatistics::~WebCoreStatistics):
        (WebCoreStatistics::createInstance):
        (WebCoreStatistics::QueryInterface):
        (WebCoreStatistics::AddRef):
        (WebCoreStatistics::Release):
        (WebCoreStatistics::javaScriptObjectsCount):
        (WebCoreStatistics::javaScriptGlobalObjectsCount):
        (WebCoreStatistics::javaScriptProtectedObjectsCount):
        (WebCoreStatistics::javaScriptProtectedGlobalObjectsCount):
        (WebCoreStatistics::iconPageURLMappingCount):
        (WebCoreStatistics::iconRetainedPageURLCount):
        (WebCoreStatistics::iconRecordCount):
        (WebCoreStatistics::iconsWithDataCount):
        * WebCoreStatistics.h: Added.
        * WebKit.vcproj/WebKit.vcproj:
        * WebKitClassFactory.cpp:

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

        Delete backing store (after a delay) when a WebView's top-level parent becomes inactive.

        Reviewed by Brady Eidson.

        * WebView.cpp:
        (WebView::windowReceivedMessage):

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

        Export callOnMainThread from WebKit.dll

        Rubberstamped by Anders.

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

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

        Move callOnMainThread to WTF

        Reviewed by Alexey Proskuryakov.

        * WebIconDatabase.cpp: Updated #include

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

        Add missing increment/decrement COM class counts to detect leaks.
        
        Reviewed by Adam Roben.

        * CFDictionaryPropertyBag.cpp:
        (CFDictionaryPropertyBag::CFDictionaryPropertyBag):
        (CFDictionaryPropertyBag::~CFDictionaryPropertyBag):
        * CFDictionaryPropertyBag.h:
        * HTTPHeaderPropertyBag.cpp:
        (HTTPHeaderPropertyBag::HTTPHeaderPropertyBag):
        (HTTPHeaderPropertyBag::~HTTPHeaderPropertyBag):
        * HTTPHeaderPropertyBag.h:
        * WebActionPropertyBag.cpp:
        (WebActionPropertyBag::WebActionPropertyBag):
        (WebActionPropertyBag::~WebActionPropertyBag):
        * WebDocumentLoader.cpp:
        (WebDocumentLoader::WebDocumentLoader):
        (WebDocumentLoader::~WebDocumentLoader):
        * WebDropSource.cpp:
        (WebDropSource::WebDropSource):
        (WebDropSource::~WebDropSource):
        * WebDropSource.h:
        * WebElementPropertyBag.cpp:
        (WebElementPropertyBag::WebElementPropertyBag):
        (WebElementPropertyBag::~WebElementPropertyBag):
        * WebTextRenderer.cpp:
        (WebTextRenderer::WebTextRenderer):
        (WebTextRenderer::~WebTextRenderer):

2008-04-07  Brady Eidson  <beidson@apple.com>

        Reviewed by John Honeycutt

        ENABLE_DOM_STORAGE for Windows

        * WebKit.vcproj/WebKit.vcproj:

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

        Export some more WTF functions from WebKit.dll

        Reviewed by Alexey Proskuryakov.

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

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

        Only delete the backing store of background windows.

        Reviewed by Ada Chan.

        * WebView.cpp:
        (WebView::WebView):
        (WebView::deleteBackingStore):
        (WebView::paint): Added active check.
        (WebView::deleteBackingStoreSoon):
        (WebView::cancelDeleteBackingStoreSoon): Added.
        (WebView::active): Added.
        (WebView::updateActiveState): Moved active check code from here to active().
        * WebView.h:

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

        Fix tooltip window leak.
        
        Explicitly call DestroyWindow on the tooltip.
        Destroying its parent won't destroy the tooltip, since it not a WS_CHILD style window.

        Reviewed by Ada Chan.

        * WebView.cpp:
        (WebView::~WebView):

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

        Delete backing store after we go 5 seconds without a paint.
                
        Timer will be reset if a paint occurs, so this won't negatively impact performance.
        
        Reviewed by Ada Chan.

        * WebView.cpp:
        (WebView::paint): Call deleteBackingStoreSoon after paint.
        (WebViewWndProc): Add DeleteBackingStoreTimer.
        (WebView::deleteBackingStoreSoon): Added.
        * WebView.h: Add deleteBackingStoreSoon.

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

        <rdar://problem/5830598> Image file opened in the browser window shows "Localized String Not Found' in window's title bar instead file name
        Save WebCoreLocalizedStrings.cpp with UTF8 encoding.
        Changed the format string to take in integers.

        Reviewed by Dan.

        * English.lproj/Localizable.strings: Updated.
        * WebCoreLocalizedStrings.cpp:
        (WebCore::imageTitle):

2008-04-03  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - WebKit part of fixing http://bugs.webkit.org/show_bug.cgi?id=6484
          font-weight does not properly support graded weights

        * DOMCoreClasses.cpp:
        (DOMElement::font): Updated for the change to FontDescription.
        * WebCoreSupport/WebDragClient.cpp:
        (dragLabelFont): Ditto.
        * WebKitGraphics.cpp:
        (makeFont): Ditto.
        * WebKitGraphics.h: Added a FIXME.

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

        <rdar://problem/5835382> Calling window.open immediately after window.close can sometimes result in no window being created
        
        Group name tracking needs to happen using code in WebCore::Page, since it is more involved than
        just setting a string.
        
        Reviewed by Adam Roben.

        * WebView.cpp:
        (WebView::close): Add null check (found via code inspection).
        (WebView::initWithFrame): Store the group name directly in Page.
        (WebView::setGroupName): Store the group name directly in Page.
        (WebView::groupName): Retrieve the group name directly from Page.
        * WebView.h: Removed m_groupName

2008-04-03  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Mark Rowe.

        Roll out r31599 and r31605 again after discussion with Mark Rowe.

        * WebIconDatabase.cpp:
        (WebIconDatabase::iconForURL):

2008-04-03  Simon Hausmann  <hausmann@webkit.org>

        Attempted build fix

        * WebIconDatabase.cpp:
        (WebIconDatabase::iconForURL): Adjust to changed iconForPageURL
        signature

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

        Allow WebArchive to be created via COM.
        Replaced IID_DOMNode with __uuidof(DOMNode).

        Reviewed by Adam and Steve.

        * DOMCoreClasses.cpp:
        (DOMNode::QueryInterface):
        (DOMNode::isSameNode):
        * DOMCoreClasses.h:
        * ForEachCoClass.h:
        * Interfaces/WebKit.idl:
        * WebArchive.cpp:
        (WebArchive::createInstance):
        * WebArchive.h:
        * WebKitClassFactory.cpp:

2008-04-01  Brady Eidson  <beidson@apple.com>

        Reviewed by Jon Honeycutt and Cake

        Hookup WebArchive API enough to be able to save the archive of a DOMNode
        
        * DOMCoreClasses.h: Add a GUID for DOMNode

        * Interfaces/IWebArchive.idl: Add initWithNode()

        * WebArchive.cpp:
        (WebArchive::initWithNode):
        (WebArchive::data): Actually return LegacyWebArchive-style data
        * WebArchive.h:

2008-04-01  Brady Eidson  <beidson@apple.com>

        Reviewed by Adam Roben

        Add empty implementations of WebArchive for future work
        
        * WebArchive.cpp: Added.
        (WebArchive::createInstance):
        (WebArchive::WebArchive):
        (WebArchive::~WebArchive):
        (WebArchive::QueryInterface):
        (WebArchive::AddRef):
        (WebArchive::Release):
        (WebArchive::initWithMainResource):
        (WebArchive::initWithData):
        (WebArchive::mainResource):
        (WebArchive::subResources):
        (WebArchive::subframeArchives):
        (WebArchive::data):
        * WebArchive.h: Added.
        
        * WebKit.vcproj/WebKit.vcproj:

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

        Rename IWebViewPrivate::addAdditionalPluginPath to
        addAdditionalPluginDirectory

        Reviewed by Mitz Pettel.

        * Interfaces/IWebViewPrivate.idl:
        * Interfaces/WebKit.idl: Touched to make sure the Interfaces project
        rebuilds.
        * WebView.cpp:
        (WebView::addAdditionalPluginDirectory):
        * WebView.h:

2008-03-26  Brent Fulgham  <bfulgham@gmail.com>

        Reviewed by Adam Roben.

        Add necessary files and build commands to vcproj files to
        build a Curl-based Windows WebKit.  For details, see
        http://bugs.webkit.org/show_bug.cgi?id=17985

        * WebKit.vcproj/WebKit.vcproj:

2008-03-25  Adam Roben  <aroben@apple.com>

        Attempted build fix

        * WebKit.vcproj/WebKit.sln: Make testapi build after most other
        projects.

2008-03-25  Adam Roben  <aroben@apple.com>

        Fix Bug 18077: Integrate testapi.c into the Windows build

        <http://bugs.webkit.org/show_bug.cgi?id=18077>

        Reviewed by Steve Falkenburg.

        * WebKit.vcproj/WebKit.sln: Added testapi.vcproj to the solution.

2008-03-25  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin

        Remove newly obsolete FrameLoaderClient methods

        * WebFrame.cpp:
        * WebFrame.h:

2008-03-25  Darin Adler  <darin@apple.com>

        Suggested by Adam.

        * Interfaces/WebKit.idl: Touch this file to make the Interface project rebuild.

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

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

        Reviewed by Steve.

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

2008-03-20  Dan Bernstein  <mitz@apple.com>

        Reviewed by Adam Roben.

        - make makeTextLarger() and zoomPageIn() do what they are supposed to do

        * WebView.cpp:
        (WebView::makeTextLarger): Changed call to canZoomIn() to zoomIn().
        (WebView::zoomPageIn): Ditto.

2008-03-20  Dave Hyatt  <hyatt@apple.com>

        Add full page zoom API for Windows WebKit.

        Reviewed by aroben

        * Interfaces/IWebView.idl:
        * WebView.cpp:
        (WebView::WebView):
        (WebView::setTextSizeMultiplier):
        (WebView::setPageSizeMultiplier):
        (WebView::setZoomMultiplier):
        (WebView::textSizeMultiplier):
        (WebView::pageSizeMultiplier):
        (WebView::zoomMultiplier):
        (WebView::canMakeTextLarger):
        (WebView::canZoomPageIn):
        (WebView::canZoomIn):
        (WebView::makeTextLarger):
        (WebView::zoomPageIn):
        (WebView::zoomIn):
        (WebView::canMakeTextSmaller):
        (WebView::canZoomPageOut):
        (WebView::canZoomOut):
        (WebView::makeTextSmaller):
        (WebView::zoomPageOut):
        (WebView::zoomOut):
        (WebView::canMakeTextStandardSize):
        (WebView::canResetPageZoom):
        (WebView::canResetZoom):
        (WebView::makeTextStandardSize):
        (WebView::resetPageZoom):
        (WebView::resetZoom):
        * WebView.h:

2008-03-20  John Sullivan  <sullivan@apple.com>

        * English.lproj/Localizable.strings:
        Brought this file up to date

2008-03-19  Dan Bernstein  <mitz@apple.com>

        - build fix

        * Interfaces/WebKit.idl: Touched.

2008-03-19  Adam Roben  <aroben@apple.com>

        Fix a couple of bugs where the node highlight would appear when it shouldn't

        There were at least two ways you could get the highlight to appear
        when it shouldn't:
          1) Selecting a node in the Inspector while the inspected WebView was
             in a background tab.
          2) Selecting a node in the Inspector, switching to another tab,
             closing the Inspector, then switching back to the inspected
             WebView's tab.

        This patch fixes the above two issues, and possibly others.

        show() and hide() are now private methods of WebNodeHighlight. They
        are replaced by a single public method,
        setShowsWhileWebViewIsVisible(bool). WebInspectorClient uses this to
        tell the highlight whether it should be showing when the inspected
        WebView is visible.

        Reviewed by John Sullivan.

        * WebCoreSupport/WebInspectorClient.cpp:
        (WebInspectorClient::highlight): If the highlight is already showing,
        it just needs to update since the highlighted node has changed. If the
        highlight is not showing, call setShowsWhileWebViewIsVisible(true) so
        that the highlight will show when the WebView is shown.
        (WebInspectorClient::hideHighlight): Changed to call
        setShowsWhileWebViewIsVisible(false) instead of hide().
        * WebNodeHighlight.cpp:
        (WebNodeHighlight::WebNodeHighlight): Initialize new member, and
        initialize m_inspectedWebViewWindow to its final value here instead of
        in show().
        (WebNodeHighlight::setShowsWhileWebViewIsVisible): Added. If we're not
        supposed to show ourselves when the WebView is visible, we hide
        ourselves and return. Otherwise, we make our visibility match the
        WebView's.
        (WebNodeHighlight::isWebViewVisible): Added.
        (WebNodeHighlight::show): Removed initialization of
        m_inspectedWebViewWindow (this is now done by our constructor). Added
        an assertion that we're supposed to show ourselves when the WebView is
        visible.
        (WebNodeHighlight::onWebViewShowWindow): If we shouldn't show
        ourselves when the WebView is visible, then we don't need to do
        anything at all when the WebView's visibility changes.
        * WebNodeHighlight.h:

2008-03-19  Adam Roben  <aroben@apple.com>

        Small WebNodeHighlight cleanup

        Renamed the following methods:
          visible() -> isShowing()
          updateWindow() -> update()

        Removed the window() method.

        Added a new method, placeBehindWindow(HWND), that moves the highlight
        overlay in the window z-order to be just behind the passed-in window.
        WebInspectorClient calls this instead of doing the move directly using
        the old window() method.

        Reviewed by John Sullivan.

        * WebCoreSupport/WebInspectorClient.cpp:
        (WebInspectorClient::attachWindow):
        (WebInspectorClient::detachWindow):
        (WebInspectorClient::highlight): Call placeBehindWindow instead of
        calling SetWindowPos directly.
        * WebNodeHighlight.cpp:
        (WebNodeHighlight::show):
        (WebNodeHighlight::isShowing):
        (WebNodeHighlight::placeBehindWindow): Added. Code came from
        WebInspectorClient::highlight.
        (WebNodeHighlight::onWebViewWindowPosChanged):
        (WebNodeHighlight::onRootWindowPosChanged):
        * WebNodeHighlight.h:

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

        Added a method to paint WebView content specified by 
        the document rect into a device context.

        Reviewed by Darin Adler.

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

2008-03-18  Brent Fulgham  <bfulgham@gmail.com>

        Reviewed by Adam Roben.

        Provide some stub implementations for things that WebKit
        uses for performing authentication/challenge activities.  This
        is in support of http://bugs.webkit.org/show_bug.cgi?id=17837

        * WebDataSource.cpp:
        * WebError.cpp:  Conditionalize CFNetwork-specific logic
        * WebURLAuthenticationChallenge.cpp:  Conditionalize constructor
          for authentication/challenge member.
        (WebURLAuthenticationChallenge::initWithAuthenticationChallenge):
        * WebURLResponse.cpp:  Remove CFNetwork-specific logic.
        * WebURLResponse.h: Conditionalize CFNetwork-specific member.
        * WebView.cpp:  Conditionalize CFNetwork-specific network protocol test.
        (WebView::canHandleRequest):

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

        Focus the Inspector's WebView whenever the Inspector window is focused

        Reviewed by Mitz.

        * WebCoreSupport/WebInspectorClient.cpp:
        (WebInspectorClient::onSetFocus): Send focus to the WebView.
        (WebInspectorWndProc): Added a handler for WM_SETFOCUS.
        * WebCoreSupport/WebInspectorClient.h:

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

        Fix Bug 14276: Element highlight also covers Web inspector

        <http://bugs.webkit.org/show_bug.cgi?id=14276>
        <rdar://5712796>

        Also fixes <rdar://5622837> Browser window comes to front when node
        highlight appears, potentially blocking Inspector

        Reviewed by Mitz.

        * WebCoreSupport/WebInspectorClient.cpp:
        (WebInspectorClient::highlight): After showing the highlight,
        reposition it just behind the Inspector's window.
        * WebNodeHighlight.cpp:
        (WebNodeHighlight::show):
          - Changed flags passed to CreateWindowEx to not specify WS_VISIBLE.
            This is not needed because we'll show the window later in this
            function.
          - Removed call to SetWindowPos that tried to position the overlay
            just in front of the WebView. This is now handled by
            WebInspectorClient.
          - Changed call to ShowWindow to use SetWindowPos so that we can pass
            SWP_NOACTIVATE. This prevents the highlight from jumping in front
            of the Inspector every time it's shown.
        * WebNodeHighlight.h: Added a method to get the highlight's HWND.

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

        PGO build fixes.

        * WebKit.vcproj/WebKit.vcproj:

2008-03-13  Adam Roben  <aroben@apple.com>

        Another Windows build fix after r31034

        * WebKitDLL.cpp:
        (loadResourceIntoBuffer): Use SharedBuffer::create.

2008-03-13  Adam Roben  <aroben@apple.com>

        Windows build fix after r31034

        * WebFrame.cpp:
        (WebFrame::loadData): Use SharedBuffer::create.
        (WebFrame::loadHTMLString): Ditto.

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

        More PGO build fixes.

        * WebKit.vcproj/WebKit.pgd: Removed.
        * WebKit.vcproj/WebKit.vcproj:
        * WebKitPrefix.cpp:

2008-03-13  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        Call originalRequest instead of initialRequest.
        
        * WebDataSource.cpp:
        (WebDataSource::initialRequest):

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

        PGO build fixes.
        
        Disable PGO for normal release builds.
        Added work-in-progress Release_PGOInstrument/Release_PGOOptimize targets.

        * WebKit.vcproj/WebKit.vcproj:

2008-03-12  Steve Falkenburg  <sfalken@apple.com>

        Fix build.

        * WebKit.vcproj/WebKit.vcproj:

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

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

        Reviewed by Brady.

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

2008-03-12  David Hyatt  <hyatt@apple.com>

        Make the zoom factor a float and not a percent.

        Reviewed by antti

        * WebFrame.cpp:
        (WebFrame::setTextSizeMultiplier):

2008-03-12  Steve Falkenburg  <sfalken@apple.com>

        Build fix.

        * WebKit.vcproj/WebKit.pgd:
        * WebKit.vcproj/WebKit.vcproj:

2008-03-12  Steve Falkenburg  <sfalken@apple.com>

        Re-enabled PGO.
        
        Rubber stamped by Mark Rowe.

        * WebKit.vcproj/WebKit.pgd:
        * WebKit.vcproj/WebKit.vcproj:
        * WebKitPrefix.cpp: touched this file to force a re-build.

2008-03-12  Steve Falkenburg  <sfalken@apple.com>

        Fix build.

        * WebKit.vcproj/WebKit.vcproj:

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

        Use PGO to build WebKit.dll.
        
        Reviewed by Oliver.

        * WebKit.vcproj/WebKit.pgd: Added.
        * WebKit.vcproj/WebKit.vcproj:

2008-03-11  Brent Fulgham  <bfulgham@gmail.com>

        Reviewed by Adam Roben.

        Enabled WinLauncher as part of normal Windows build.
        http://bugs.webkit.org/show_bug.cgi?id=17715.

        * WebKit.vcproj/WebKit.sln:  Add WinLauncher to the set of things
          build during a Windows build.

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

        Roll out r30961 since it broke the default site icon on Windows

        * WebKit.vcproj/WebKit.rc:
        * WebKit.vcproj/urlIcon.png: Renamed from WebCore/Resources/urlIcon.png.
        * WebKitDLL.cpp:
        (loadResourceIntoBuffer):

2008-03-11  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Darin Adler.

        r25512 inlined the urlIcon to improve the startup time of Safari on Mac. Inlining is
        not suitable for platforms where this icon is themable. E.g. the Qt platform is allowing
        to theme this icon and the Gtk+ platform will probably end up with themable icons
        as well.
        
        Remove dead code from the windows port and move the urlIcon from the windows
        directory to the Resource directory to be used by Qt and other ports.
        
        Ifdef the usage of the built-in icon in IconDatabase.cpp and for Qt do not use
        it. Gtk+ currently has no proper implementation of Image::loadPlatformResource but
        once it does it wants to use this for getting the urlIcon as well.

        * WebKit.vcproj/WebKit.rc:
        * WebKitDLL.cpp:
        (loadResourceIntoBuffer):

2008-03-10  Eric Seidel  <eric@webkit.org>

        No review, build fix only.
        
        Speculative fix for Windows build, use ::UChar instead of KJS::UChar

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

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

        Fix build break caused by r30920.
        
        Serialize remaining dependent builds by adding dependencies.
        Visual Studio per-vcproj parallelization doesn't add a lot of value
        since so many of our builds are dependent - this just enforces that.
        We do our parallelization via pdevenv, which works much better.

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

2008-03-09  Steve Falkenburg  <sfalken@apple.com>

        Stop Windows build if an error occurs in a prior project.

        Rubber stamped by Darin Adler.

        * WebKit.vcproj/Interfaces.vcproj:
        * WebKit.vcproj/InterfacesGenerated.vcproj:
        * WebKit.vcproj/WebKit.vcproj:
        * WebKit.vcproj/WebKitGUID.vcproj:

2008-03-09  Adam Roben  <aroben@apple.com>

        Make WebInspectorClient use WindowMessageBroadcaster instead of manual subclassing

        Reviewed by Darin Adler.

        * WebCoreSupport/WebInspectorClient.cpp:
        (WebInspectorClient::WebInspectorClient): Removed
        m_orignalWebViewWndProc member.
        (WebInspectorClient::attachWindow): Register as a listener with
        WindowMessageBroadcaster instead of subclassing.
        (WebInspectorClient::detachWindow): Deregister as a listener with
        WindowMessageBroadcaster instead of unsubclassing.
        (WebInspectorClient::windowReceivedMessage): Renamed from
        SubclassedWebViewWndProc. Also added a missing break statement after
        the call to onWebViewWindowPosChanging.
        * WebCoreSupport/WebInspectorClient.h:

2008-03-09  Adam Roben  <aroben@apple.com>

        Make the node highlight not obscure the tab bar when it first appears

        Reviewed by Darin Adler.

        * WebNodeHighlight.cpp:
        (WebNodeHighlight::onWebViewWindowPosChanged): Added. Listens for
        changes to the WebView's size and resizes the highlight window to
        match.
        (WebNodeHighlight::onRootWindowPosChanged): Added. Listens for changes
        to the WebView's root window's position and moves the highlight window
        to match.
        (WebNodeHighlight::windowReceivedMessage): Call
        onWebViewWindowPosChanged/onRootWindowPosChanged as appropriate.
        * WebNodeHighlight.h:

2008-03-09  Adam Roben  <aroben@apple.com>

        Fix Bug 14254: Inspector node highlight applied to all tabs

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

        WebNodeHighlight now listens for the WM_SHOWWINDOW message being sent
        to the inspected WebView so that it can hide/show itself as the
        WebView is hidden/shown.

        Reviewed by Anders.

        * WebNodeHighlight.cpp:
        (WebNodeHighlight::~WebNodeHighlight): Remove ourselves as a listener
        for our inspected WebView's window's messages.
        (WebNodeHighlight::show): Add ourselves as a listener for our
        inspected WebView's window's messages.
        (WebNodeHighlight::onWebViewShowWindow): Added. Hide ourselves when
        the WebView hides, show ourselves when the WebView is shown.
        (WebNodeHighlight::windowReceivedMessage): Added a separate switch
        statement to handle the inspected WebView's window's messages.
        * WebNodeHighlight.h:

2008-03-07  Brent Fulgham  <bfulgham@gmail.com>

        Reviewed by Mark Rowe.

        Correct build intermediary output
        (http://bugs.webkit.org/show_bug.cgi?id=17713)

        * WebKit/win/WebKit.vcproj/WebKit.vcproj:  Correct output and intermediary paths

2008-03-07  Brent Fulgham  <bfulgham@gmail.com>

        Reviewed by Adam Roben.

        Do not link (or attempt to initialize) the SafariTheme.dll
        when not building with USE(SAFARI_THEME) enabled.
        (http://bugs.webkit.org/show_bug.cgi?id=17707)

        * WebKit/win/WebKitClassFactory.cpp:  Conditionalize use of SafariTheme.dll

2008-03-07  Brent Fulgham  <bfulgham@gmail.com>

        Reviewed by Steve Falkenburg.

        Update solution to understand Cairo build target.  Add
        library dependencies for Cairo build target.
        (http://bugs.webkit.org/show_bug.cgi?id=17300)

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

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

        Change WebScriptDebugServer to use WebCore::JavaScriptDebugServer

        WebScriptDebugServer is now a JavaScriptDebugListener.

        Reviewed by Darin Adler.

        * WebScriptDebugServer.cpp:
        (WebScriptDebugServer::WebScriptDebugServer): Removed initialization
        of m_callingListeners member.
        (WebScriptDebugServer::addListener): Register as a listener with
        JavaScriptDebugServer if we've just added our first listener.
        (WebScriptDebugServer::removeListener): Deregister as a listener with
        JavaScriptDebugServer if we've just removed our last listener.
        (WebScriptDebugServer::didParseSource): Added. Code came from the old
        sourceParsed method. Removed m_callingListeners code because
        JavaScriptDebugServer guards against re-entry for us.
        (WebScriptDebugServer::failedToParseSource): Ditto.
        (WebScriptDebugServer::didEnterCallFrame): Ditto for callEvent.
        (WebScriptDebugServer::willExecuteStatement): Ditto for atStatement.
        (WebScriptDebugServer::willLeaveCallFrame): Ditto for
        willLeaveCallFrame.
        (WebScriptDebugServer::exceptionWasRaised): Ditto for exception.
        * WebScriptDebugServer.h: Changed to inherit from
        WebCore::JavaScriptDebugListener.
        * WebView.cpp:
        (WebView::initWithFrame): Removed call to
        WebScriptDebugServer::pageCreated. This is now handled by WebCore.

2008-03-06  Darin Adler  <darin@apple.com>

        Reviewed by Mitz.

        - fix regression test failures and crashes from the visited-link change

        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::populateVisitedLinks): Check for null before calling
        addVisitedLinksToPageGroup.
        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::updateGlobalHistory): Ditto.
        * WebHistory.cpp:
        (WebHistory::setOptionalSharedHistory): Call PageGroup::setShouldTrackVisitedLinks
        to turn off visited links if there is no history object. Also call
        removeAllVisitedLinks so we can start over from scratch with the new history.

2008-03-06  Matt Lilek  <webkit@mattlilek.com>

        Reviewed by Adam Roben.

        Bug 17691: REGRESSION: FindSafari doesn't work
        http://bugs.webkit.org/show_bug.cgi?id=17691

        Swap my change from r30394 to use the Release libraries instead of Debug
        since some machines don't have the Debug version.

        * WebKit.vcproj/WebKit.sln:

2008-03-06  Darin Adler  <darin@apple.com>

        Reviewed by Mitz.

        - fix http://bugs.webkit.org/show_bug.cgi?id=17526
          REGRESSION: iframes are added to Safari's History menu
          by separating the visited link machinery from global history

        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::populateVisitedLinks): Added a call to the new
        WebHistory::addVisitedLinksToPageGroup function.
        * WebCoreSupport/WebChromeClient.h: Added populateVisitedLinks.
        Also fixed the webView function to be non-virtual.

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::updateGlobalHistory): Changed to use the
        new WebHistory::addItem function.
        (WebFrameLoaderClient::webHistory): Changed to return a WebHistory*,
        there's no reason to AddRef the result from this function.
        * WebCoreSupport/WebFrameLoaderClient.h: Ditto.

        * WebHistory.cpp: Removed IWebHistoryPrivate and _WebCoreHistoryProvider.
        (WebHistory::QueryInterface): Removed IWebHistoryPrivate.
        (sharedHistoryStorage): Added.
        (WebHistory::sharedHistory): Added.
        (WebHistory::optionalSharedHistory): Changed to use sharedHistory().
        (WebHistory::setOptionalSharedHistory): Changed to require a WebHistory
        object, not just an IWebHistory.
        (WebHistory::removeAllItems): Call PageGroup::removeAllVisitedLinks.
        (WebHistory::addItem): Changed parameter types since this is called with
        arguments from WebCore -- at some point this could allow better efficiency.
        (WebHistory::removeItemForURLString):  Call PageGroup::removeAllVisitedLinks
        if the last URL is being removed.
        (addVisitedLinkToPageGroup): Added. Helper. Adds a single link to a group's
        visited link set.
        (WebHistory::addVisitedLinksToPageGroup): Added. Adds all links to a group's
        visited link.
        * WebHistory.h: Removed IWebHistoryPrivate. Removed optionalSharedHistoryInternal
        and added sharedHistory. Replaced addItemForURL and containsItemForURLString with
        non-virtual addItem and addVisitedLinksToPageGroup functions.

2008-03-05  Anders Carlsson  <andersca@apple.com>

        Build fix.

        * WebKit.vcproj/WebKit.vcproj:

2008-03-04  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        - Remove all unnecessary includes of JSDOMWindowBase.h, we prefer including
          JSDOMWindow.h

        * WebFrame.cpp:

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

        WebScriptDebugServer cleanup

        Reviewed by Anders.

        * WebScriptDebugServer.cpp: Renamed m_callingServer to
        m_callingListeners.
        (WebScriptDebugServer::WebScriptDebugServer):
        (WebScriptDebugServer::sharedWebScriptDebugServer): Changed to keep
        the shared instance as a function-level static.
        (WebScriptDebugServer::didLoadMainResourceForDataSource): Made return
        void.
        (WebScriptDebugServer::sourceParsed):
        (WebScriptDebugServer::callEvent):
        (WebScriptDebugServer::atStatement):
        (WebScriptDebugServer::returnEvent):
        (WebScriptDebugServer::exception):
        (WebScriptDebugServer::serverDidDie): Made return void.
        * WebScriptDebugServer.h:
          - Removed unnecessary #includes
          - Made inheritance from KJS::Debugger private
          - Made some methods private

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

        Remove WebScriptDebugger

        Reviewed by Anders.

        * WebKit.vcproj/WebKit.vcproj: Removed files from project.
        * WebScriptDebugServer.cpp:
        (frame): Moved here from WebScriptDebugger.cpp.
        (webFrame): Ditto.
        (webView): Ditto.
        (WebScriptDebugServer::WebScriptDebugServer): Initialize new member.
        * WebScriptDebugServer.h: Changed to inherit directly from
        KJS::Debugger instead of from WebScriptDebugger, and added
        m_callingServer member that WebScriptDebugger used to own.
        * WebScriptDebugger.cpp: Removed.
        * WebScriptDebugger.h: Removed.

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

        Move sourceParsed to WebScriptDebugServer

        Reviewed by Anders.

        * WebScriptDebugServer.cpp:
        (WebScriptDebugServer::sourceParsed): Moved here from
        WebScriptDebugger and merged with didParseSource/failedToParseSource.
        * WebScriptDebugServer.h: Removed didParseSource/failedToParseSource.
        * WebScriptDebugger.cpp: Removed sourceParsed.
        * WebScriptDebugger.h: Ditto.

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

        Move callEvent, returnEvent, and exception to WebScriptDebugServer

        Reviewed by Anders.

        * WebScriptDebugServer.cpp:
        (WebScriptDebugServer::callEvent): Moved here from WebScriptDebugger
        and merged with didEnterCallFrame.
        (WebScriptDebugServer::returnEvent): Ditto for willLeaveCallFrame.
        (WebScriptDebugServer::exception): Ditto for exceptionWasRaised.
        * WebScriptDebugServer.h: Removed didEnterCallFrame,
        willLeaveCallFrame, and exceptionWasRaised.
        * WebScriptDebugger.cpp: Removed callEvent, returnEvent, and
        exception.
        * WebScriptDebugger.h: Ditto.

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

        Move atStatement to WebScriptDebugServer

        Reviewed by Anders.

        * WebScriptDebugServer.cpp:
        (WebScriptDebugServer::atStatement): Moved here and merged with the
        old willExecuteStatement method.
        * WebScriptDebugServer.h: Removed inheritance from
        IWebScriptDebugListener, which no one was relying on.
        * WebScriptDebugger.cpp:
        (webFrame): Made non-static.
        (webView): Ditto.
        * WebScriptDebugger.h: Added declarations of webFrame and webView
        methods for WebScriptDebugServer's benefit. Removed unused m_webView
        and m_frame members.

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

        Start to merge WebScriptDebugger and WebScriptDebugServer

        WebScriptDebugServer now inherits from WebScriptDebugger.

        Reviewed by Anders.

        * WebScriptDebugServer.cpp:
        (WebScriptDebugServer::pageCreated): Use sharedWebScriptDebugServer
        instead of WebScriptDebugger::shared.
        (WebScriptDebugServer::addListener): Ditto.
        (WebScriptDebugServer::removeListener): Ditto.
        * WebScriptDebugServer.h: Changed to inherit from WebScriptDebugger.
        * WebScriptDebugger.cpp: Removed shared method.
        * WebScriptDebugger.h: Made constructor/destructor protected, and
        removed shared method.

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

        Use WebCore's new debugger-attaching code

        Reviewed by Kevin M.

        * WebCoreSupport/WebFrameLoaderClient.cpp: Moved a kit() function to
        WebView.{cpp,h} so that other files can call it.
        * WebFrame.cpp:
        (WebFrame::WebFrame): Removed m_scriptDebugger member.
        (WebFrame::windowObjectCleared): Removed attach/detach calls. This is
        no longer needed because WebScriptDebugger no longer stores any
        per-WebFrame state.
        * WebFrame.h:
        * WebScriptDebugServer.cpp:
        (WebScriptDebugServer::pageCreated): Added. Attaches our shared
        debugger to the Page if we have any listeners.
        (WebScriptDebugServer::addListener): Sets our shared debugger for all
        Pages when we get our first listener.
        (WebScriptDebugServer::removeListener): Removes our shared debugger
        from all Pages when we lose our last listener.
        * WebScriptDebugServer.h:
        * WebScriptDebugger.cpp:
        (WebScriptDebugger::shared): Added.
        (WebScriptDebugger::WebScriptDebugger): Removed m_frame member.
        (WebScriptDebugger::~WebScriptDebugger): Added.
        (frame): Gets a Frame from an ExecState.
        (webFrame): Gets a WebFrame from an ExecState.
        (webView): Gets a WebView from an ExecState.
        (WebScriptDebugger::sourceParsed): Changed to call webFrame() and
        webView() instead of using m_frame and m_webView members.
        (WebScriptDebugger::callEvent): Ditto.
        (WebScriptDebugger::atStatement): Ditto.
        (WebScriptDebugger::returnEvent): Ditto.
        (WebScriptDebugger::exception): Ditto.
        * WebScriptDebugger.h:
        * WebView.cpp:
        (kit): Moved here from WebFrameLoaderClient.cpp.
        (WebView::initWithFrame): Tell the WebScriptDebugServer about the new
        Page so it can attach a debugger if needed.
        * WebView.h:

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

        Change WebView's string-finding methods to call through to Page

        These methods were added to Page back in r28878 (and the
        implementation was copied from WebView!) but we never switched over to
        using them.

        Reviewed by Sam.

        * WebView.cpp:
        (WebView::searchFor): Call through to Page::findString.
        (WebView::markAllMatchesForText): Call through to Page.
        (WebView::unmarkAllTextMatches): Ditto.

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

        Actually pause the process while Drosera is at a breakpoint

        WebScriptDebugServer::suspendProcessIfPaused is supposed to pause the
        process while Drosera is at a breakpoint. Previously we were just
        starting a message pump that would deliver messages to all windows in
        the process, allowing mouse events, JS timers, etc. to execute.

        Now we only deliver messages to COM's message window, which is all we
        need to allow RPC to function.

        Reviewed by Anders.

        * WebScriptDebugServer.cpp:
        (comMessageWindow): Added. Finds COM's message window.
        (WebScriptDebugServer::suspendProcessIfPaused): Only deliver messages
        to COM's message window so that mouse events, JS timers, etc., won't
        execute.

2008-03-03  Adam Roben  <aroben@apple.com>

        Generate WebScriptCallFrame instances dynamically

        WebScriptDebugger no longer holds a reference to the topmost call
        frame, and WebScriptCallFrame no longer holds a reference to its
        caller. We now generate WebScriptCallFrame instances as needed by
        walking the callingExecState chain.

        By making WebKit no longer responsible for keeping track of the call
        stack, we get one step closer to moving most JS debugging code out of
        WebKit entirely.

        This incidentally fixes a bug in Drosera where we'd never show the
        global scope in the call stack.

        Reviewed by Sam and Kevin M.

        * WebScriptCallFrame.cpp:
        (callingFunctionOrGlobalExecState): Finds the nearest calling
        ExecState that is a FunctionExecState or GlobalExecState, if any, and
        returns it.
        (WebScriptCallFrame::WebScriptCallFrame):
          - No longer takes a caller parameter.
          - Sets m_state to the callingFunctionOrGlobalExecState of the
            ExecState passed in.
        (WebScriptCallFrame::createInstance): Removed the caller parameter.
        (WebScriptCallFrame::caller): Generate a new WebScriptCallFrame on the
        fly from our ExecState.
        * WebScriptCallFrame.h: No longer holds a reference to the caller.
        * WebScriptDebugger.cpp:
        (WebScriptDebugger::WebScriptDebugger): Removed the call to callEvent
        that was supposed to set up the global scope call frame, but never
        worked because m_callingServer was set to true, which would cause
        callEvent to return early without doing anything. Also removed the
        m_callingServer guards since we're not calling callEvent anymore.
        (WebScriptDebugger::callEvent): Create a WebScriptCallFrame on the
        fly from the passed-in ExecState.
        (WebScriptDebugger::atStatement): Ditto.
        (WebScriptDebugger::returnEvent): Ditto, but use the callingExecState.
        This is equivalent to what calling leaveFrame() did before.
        (WebScriptDebugger::exception): Ditto, using the passed-in ExecState.
        * WebScriptDebugger.h: Removed m_topStackFrame member and
        enterFrame/leaveFrame methods.

2008-03-03  Sam Weinig  <sam@webkit.org>

        Windows build fix.

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

2008-03-03  David Hyatt  <hyatt@apple.com>

        Full page zoom work.  Make setting of a zoom factor take a boolean saying whether it is a text only
        or full page zoom.

        Reviewed by Tim H.

        * WebFrame.cpp:
        (WebFrame::setTextSizeMultiplier):

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

        Delete an unused file

        Rubberstamped by Brady.

        * Interfaces/IWebScriptScope.idl: Removed.

2008-02-28  Adam Roben  <aroben@apple.com>

        Change WebPreferences to be backed by CFPreferences

        Reviewed by Ada, Geoff, Steve, and Darin.

        * WebPreferenceKeysPrivate.h:
        * WebPreferences.cpp:
        (WebPreferences::sharedStandardPreferences): Changed to call
        setAutoSaves(TRUE) before calling load(). This ensures that the
        preferences being migrated to CFPreferences are saved to disk.
        (WebPreferences::valueForKey): Changed to return a RetainPtr to ensure
        that the refcount is managed properly. Now attempts to retrieve a
        value from CFPreferences before falling back to the default settings.
        (WebPreferences::setValueForKey): Now saves the value in
        CFPreferences if m_autoSaves is true.
        (WebPreferences::stringValueForKey): Updated for valueForKey changes.
        (WebPreferences::integerValueForKey): DItto.
        (WebPreferences::boolValueForKey): Ditto.
        (WebPreferences::floatValueForKey): Ditto.
        (WebPreferences::save): Now simply calls CFPreferencesAppSynchronize.
        (WebPreferences::load): Always initializes m_privatePrefs to an empty
        CFMutableDictionary.
        (WebPreferences::migrateWebKitPreferencesToCFPreferences): Migrates
        preferences from our old custom plist to CFPreferences and then
        deletes our custom plist, if the migration has never occurred before.
        (WebPreferences::copyWebKitPreferencesToCFPreferences): Copies
        preferences to CFPreferences. If we've never migrated the default
        settings from Safari 3 Beta before, we omit them from this copying
        procedure.
        * WebPreferences.h:

2008-02-28  Adam Roben  <aroben@apple.com>

        Refactor value <-> CFNumber conversions into some helper functions

        Reviewed by Jon.

        * WebPreferences.cpp:
        (preferencesPath): Changed to return a const String&.
        (numberValueForPreferencesValue): Converts a value from preferences to
        a native numeric type.
        (cfNumber): Converts a native numeric value to a CFNumberRef.
        (booleanValueForPreferencesValue): Converts a value from preferences
        to a native boolean.
        (WebPreferences::integerValueForKey): Changed to call
        numberValueForPreferencesValue.
        (WebPreferences::floatValueForKey): Ditto.
        (WebPreferences::boolValueForKey): Changed to call
        booleanValueForPreferencesValue.
        (WebPreferences::setIntegerValue): Changed to call cfNumber.
        (WebPreferences::setLongLongValue): Ditto.

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

        Add WebPreferences::setValueForKey

        This is just a small refactoring of some duplicated logic into a
        shared method.

        Reviewed by Sam.

        * WebPreferences.cpp:
        (WebPreferences::setValueForKey): Added.
        (WebPreferences::setStringValue): Call setValueForKey.
        (WebPreferences::setIntegerValue): Ditto.
        (WebPreferences::setBoolValue): Ditto.
        (WebPreferences::setLongLongValue): Ditto.
        * WebPreferences.h:

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

        Remove WebPreferences' static members

        s_defaultSettings is now a file-level static, and
        s_standardPreferences has been removed completely (it wasn't being
        used).

        Reviewed by Sam.

        * WebPreferences.cpp:
        (WebPreferences::initializeDefaultSettings):
        (WebPreferences::valueForKey):
        (WebPreferences::migrateDefaultSettingsFromSafari3Beta):
        (WebPreferences::removeValuesMatchingDefaultSettings):
        * WebPreferences.h:

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

        Don't free the VARIANT passed into Write, since it is an input parameter owned by the caller.
        Found via code inspection.
        
        Reviewed by Adam.

        * WebActionPropertyBag.cpp:
        (WebActionPropertyBag::Write):
        * WebElementPropertyBag.cpp:
        (WebElementPropertyBag::Write):

2008-02-27  Matt Lilek  <webkit@mattlilek.com>

        Reviewed by Adam Roben.

        Bug 14348: Messing up the inspector by dragging an URL into it
        http://bugs.webkit.org/show_bug.cgi?id=14348
        <rdar://problem/5283620> and <rdar://problem/5712808>

        Add a new class to handle the Inspector's delegate calls.

        * WebCoreSupport/WebInspectorClient.cpp:
        (WebInspectorClient::createPage):
        * WebCoreSupport/WebInspectorDelegate.cpp: Added.
        (:m_refCount):
        (WebInspectorDelegate::createInstance):
        (WebInspectorDelegate::AddRef):
        (WebInspectorDelegate::Release):
        (WebInspectorDelegate::dragDestinationActionMaskForDraggingInfo):
        * WebCoreSupport/WebInspectorDelegate.h: Added.
        (WebInspectorDelegate::QueryInterface):
        (WebInspectorDelegate::createWebViewWithRequest):
        (WebInspectorDelegate::webViewShow):
        (WebInspectorDelegate::webViewClose):
        (WebInspectorDelegate::webViewFocus):
        (WebInspectorDelegate::webViewUnfocus):
        (WebInspectorDelegate::webViewFirstResponder):
        (WebInspectorDelegate::makeFirstResponder):
        (WebInspectorDelegate::setStatusText):
        (WebInspectorDelegate::webViewStatusText):
        (WebInspectorDelegate::webViewAreToolbarsVisible):
        (WebInspectorDelegate::setToolbarsVisible):
        (WebInspectorDelegate::webViewIsStatusBarVisible):
        (WebInspectorDelegate::setStatusBarVisible):
        (WebInspectorDelegate::webViewIsResizable):
        (WebInspectorDelegate::setResizable):
        (WebInspectorDelegate::setFrame):
        (WebInspectorDelegate::webViewFrame):
        (WebInspectorDelegate::setContentRect):
        (WebInspectorDelegate::webViewContentRect):
        (WebInspectorDelegate::runJavaScriptAlertPanelWithMessage):
        (WebInspectorDelegate::runJavaScriptConfirmPanelWithMessage):
        (WebInspectorDelegate::runJavaScriptTextInputPanelWithPrompt):
        (WebInspectorDelegate::runBeforeUnloadConfirmPanelWithMessage):
        (WebInspectorDelegate::runOpenPanelForFileButtonWithResultListener):
        (WebInspectorDelegate::mouseDidMoveOverElement):
        (WebInspectorDelegate::contextMenuItemsForElement):
        (WebInspectorDelegate::validateUserInterfaceItem):
        (WebInspectorDelegate::shouldPerformAction):
        (WebInspectorDelegate::willPerformDragDestinationAction):
        (WebInspectorDelegate::dragSourceActionMaskForPoint):
        (WebInspectorDelegate::willPerformDragSourceAction):
        (WebInspectorDelegate::contextMenuItemSelected):
        (WebInspectorDelegate::hasCustomMenuImplementation):
        (WebInspectorDelegate::trackCustomPopupMenu):
        (WebInspectorDelegate::measureCustomMenuItem):
        (WebInspectorDelegate::drawCustomMenuItem):
        (WebInspectorDelegate::addCustomMenuDrawingData):
        (WebInspectorDelegate::cleanUpCustomMenuDrawingData):
        (WebInspectorDelegate::canTakeFocus):
        (WebInspectorDelegate::takeFocus):
        (WebInspectorDelegate::registerUndoWithTarget):
        (WebInspectorDelegate::removeAllActionsWithTarget):
        (WebInspectorDelegate::setActionTitle):
        (WebInspectorDelegate::undo):
        (WebInspectorDelegate::redo):
        (WebInspectorDelegate::canUndo):
        (WebInspectorDelegate::canRedo):
        * WebKit.vcproj/WebKit.vcproj:

2008-02-26  Adam Roben  <aroben@apple.com>

        Move ResourceLoadDelegate methods to WebFrameLoaderClient

        Changed all methods to use early returns where possible and COMPtr's
        AdoptCOM/Query constructors.

        Reviewed by Anders.

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::assignIdentifierToInitialRequest):
        (WebFrameLoaderClient::dispatchDidReceiveAuthenticationChallenge):
        (WebFrameLoaderClient::dispatchDidCancelAuthenticationChallenge):
        (WebFrameLoaderClient::dispatchWillSendRequest):
        (WebFrameLoaderClient::dispatchDidReceiveResponse):
        (WebFrameLoaderClient::dispatchDidReceiveContentLength):
        (WebFrameLoaderClient::dispatchDidFinishLoading):
        (WebFrameLoaderClient::dispatchDidFailLoading):
        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebFrame.cpp:
        * WebFrame.h:

2008-02-26  Adam Roben  <aroben@apple.com>

        Move two more methods to WebFrameLoaderClient

        Reviewed by Anders.

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (kit):
        (WebFrameLoaderClient::dispatchCreatePage): Changed nested ifs to
        early returns, and changed to use the COMPtr Query constructor.
        (WebFrameLoaderClient::dispatchDidLoadMainResource): Added an early
        return, and changed to use getWebDataSource.
        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebFrame.cpp:
        * WebFrame.h:

2008-02-26  Adam Roben  <aroben@apple.com>

        Get rid of IID_WebFrame

        Reviewed by Anders.

        * WebFrame.cpp: Removed IID_WebFrame definition.
        (WebFrame::QueryInterface): Use __uuidof(WebFrame) instead of
        IID_WebFrame.
        (WebFrame::isDescendantOfFrame): Use COMPtr's Query constructor
        instead of a manual QueryInterface.
        * WebFrame.h: Removed IID_WebFrame declaration, gave WebFrame a
        DECLSPEC_UUID.

2008-02-26  Adam Roben  <aroben@apple.com>

        Move WebHistory-related methods to WebFrameLoaderClient

        Reviewed by Anders.

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::updateGlobalHistory):
        (WebFrameLoaderClient::shouldGoToHistoryItem):
        (WebFrameLoaderClient::setTitle): Changed some nested ifs into early
        returns.
        (WebFrameLoaderClient::webHistory): Changed to return a COMPtr to
        make the reference management foolproof.
        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebFrame.cpp:
        * WebFrame.h:

2008-02-26  Adam Roben  <aroben@apple.com>

        Move cache-related methods to WebFrameLoaderClient

        Reviewed by Anders.

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (getWebDataSource): Moved to the top of the file.
        (WebFrameLoaderClient::savePlatformDataToCachedPage):
        (WebFrameLoaderClient::transitionToCommittedForNewPage):
        (WebFrameLoaderClient::canCachePage):
        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebFrame.cpp:
        * WebFrame.h:

2008-02-25  Adam Roben  <aroben@apple.com>

        Move plugin-related methods to WebFrameLoaderClient

        Reviewed by Anders.

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::WebFrameLoaderClient):
        (WebFrameLoaderClient::setMainDocumentError):
        (WebFrameLoaderClient::committedLoad): Added some early returns.
        (WebFrameLoaderClient::receivedData):
        (WebFrameLoaderClient::finishedLoading): Ditto.
        (getWebDataSource):
        (WebFrameLoaderClient::createPlugin):
        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebFrame.cpp:
        (WebFrame::WebFramePrivate::WebFramePrivate):
        * WebFrame.h:

2008-02-25  Adam Roben  <aroben@apple.com>

        Move createFrame to WebFrameLoaderClient

        Reviewed by Anders.

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::createFrame):
        (WebFrameLoaderClient::loadURLIntoChild):
        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebFrame.cpp:
        * WebFrame.h:

2008-02-25  Adam Roben  <aroben@apple.com>

        Move progress-related methods to WebFrameLoaderClient

        Reviewed by Anders.

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::postProgressStartedNotification):
        (WebFrameLoaderClient::postProgressEstimateChangedNotification):
        (WebFrameLoaderClient::postProgressFinishedNotification):
        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebFrame.cpp:
        * WebFrame.h:

2008-02-25  Adam Roben  <aroben@apple.com>

        Remove WebFrame::detachedFromParent1

        This method was removed from FrameLoaderClient in r19042, but was
        never removed from WebFrame.

        Reviewed by Anders.

        * WebFrame.cpp:
        * WebFrame.h:

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

        Move many dispatch methods to WebFrameLoaderClient

        Reviewed by Sam.

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::dispatchDidHandleOnloadEvents):
        (WebFrameLoaderClient::dispatchDidReceiveServerRedirectForProvisionalLoad):
        (WebFrameLoaderClient::dispatchDidCancelClientRedirect):
        (WebFrameLoaderClient::dispatchWillPerformClientRedirect):
        (WebFrameLoaderClient::dispatchDidChangeLocationWithinPage):
        (WebFrameLoaderClient::dispatchWillClose):
        (WebFrameLoaderClient::dispatchDidReceiveIcon):
        (WebFrameLoaderClient::dispatchDidStartProvisionalLoad):
        (WebFrameLoaderClient::dispatchDidReceiveTitle):
        (WebFrameLoaderClient::dispatchDidCommitLoad):
        (WebFrameLoaderClient::dispatchDidFinishDocumentLoad):
        (WebFrameLoaderClient::dispatchDidFinishLoad):
        (WebFrameLoaderClient::dispatchDidFirstLayout):
        (WebFrameLoaderClient::dispatchShow):
        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebFrame.cpp:
        * WebFrame.h:

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

        Move two more methods to WebFrameLoaderClient

        Reviewed by Sam.

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::hasFrameView):
        (WebFrame::forceLayout):
        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebFrame.cpp:
        * WebFrame.h:

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

        Reviewed by Sam.

        - remove separate client calls for "standard" and "reload' history

        * WebFrame.cpp:
        (WebFrame::updateGlobalHistory):
        * WebFrame.h:

2008-02-23  Brent Fulgham  <bfulgham@gmail.com>

        Not reviewed, build fix.

        * WebIconDatabase.cpp:
        * WebIconDatabase.h:

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

        Move hasWebView to WebFrameLoaderClient

        I added an m_webFrame member to WebFrameLoaderClient. This is slightly
        strange because WebFrame inherits from WebFrameLoaderClient, but this
        member will be needed once we remove the inheritance, so we might as
        well prepare for that now.

        Reviewed by Anders.

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::WebFrameLoaderClient): Changed to take a
        WebFrame* parameter.
        (WebFrameLoaderClient::hasWebView): Moved here from WebFrame.cpp.
        * WebCoreSupport/WebFrameLoaderClient.h: Added an m_webFrame
        parameter.
        * WebFrame.cpp: Removed hasWebView.
        (WebFrame::WebFrame): Updated for WebFrameLoaderClient constructor
        change.
        * WebFrame.h:

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

        Start to move FrameLoaderClient methods off WebFrame onto a separate class

        WebFrame now inherits from a new WebFrameLoaderClient class, which
        will gradually assume all FrameLoaderClient responsibilities. Once
        that process is complete, WebFrame will no longer inherit from
        WebFrameLoaderClient.

        In this first patch, I've only moved createDocumentLoader up to the
        WebFrameLoaderClient class.

        Reviewed by Anders.

        * WebCoreSupport/WebFrameLoaderClient.cpp: Added.
        (WebFrameLoaderClient::WebFrameLoaderClient):
        (WebFrameLoaderClient::~WebFrameLoaderClient):
        (WebFrameLoaderClient::createDocumentLoader): Moved here from
        WebFrame.cpp.
        * WebCoreSupport/WebFrameLoaderClient.h: Added.
        * WebFrame.cpp: Removed createDocumentLoader implementation.
        * WebFrame.h: Changed to inherit from WebFrameLoaderClient.
        * WebKit.vcproj/WebKit.vcproj: Added new files to the project.

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

        Move FormValuesPropertyBag into its own files

        Reviewed by Sam.

        * WebCoreSupport/FormValuesPropertyBag.cpp: Added.
        (FormValuesPropertyBag::QueryInterface):
        (FormValuesPropertyBag::AddRef):
        (FormValuesPropertyBag::Release):
        (FormValuesPropertyBag::Read):
        (FormValuesPropertyBag::Write):
        (FormValuesPropertyBag::CountProperties):
        (FormValuesPropertyBag::GetPropertyInfo):
        (FormValuesPropertyBag::LoadObject):
        * WebCoreSupport/FormValuesPropertyBag.h: Added.
        (FormValuesPropertyBag::FormValuesPropertyBag):
        * WebFrame.cpp: Deleted FormValuesPropertyBag code.
        * WebKit.vcproj/WebKit.vcproj: Added new files to the project.

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

        Remove some unused WebFrame methods

        FrameWinClient was deleted back in r22965, but these methods were
        never deleted.

        Reviewed by Sam.

        * WebFrame.cpp:
        * WebFrame.h: Made one createFrame overload protected, since it's only
        called internally by WebFrame.

2008-02-21  Adam Roben  <aroben@apple.com>

        Move Client implementations into a WebCoreSupport directory

        Reviewed by Anders.

        * WebKit.vcproj/WebKit.vcproj: Updated file paths, and added
        WebCoreSupport directory to the include path.
        * WebCoreSupport/WebChromeClient.cpp: Renamed from WebKit/win/WebChromeClient.cpp.
        * WebCoreSupport/WebChromeClient.h: Renamed from WebKit/win/WebChromeClient.h.
        * WebCoreSupport/WebContextMenuClient.cpp: Renamed from WebKit/win/WebContextMenuClient.cpp.
        * WebCoreSupport/WebContextMenuClient.h: Renamed from WebKit/win/WebContextMenuClient.h.
        * WebCoreSupport/WebDragClient.cpp: Renamed from WebKit/win/WebDragClient.cpp.
        * WebCoreSupport/WebDragClient.h: Renamed from WebKit/win/WebDragClient.h.
        * WebCoreSupport/WebEditorClient.cpp: Renamed from WebKit/win/WebEditorClient.cpp.
        * WebCoreSupport/WebEditorClient.h: Renamed from WebKit/win/WebEditorClient.h.
        * WebCoreSupport/WebInspectorClient.cpp: Renamed from WebKit/win/WebInspectorClient.cpp.
        * WebCoreSupport/WebInspectorClient.h: Renamed from WebKit/win/WebInspectorClient.h.

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

        Reviewed by Darin and Geoff.

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

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

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

        Reviewed by Sam.

        * WebFrame.cpp:
        (WebFrame::renderTreeAsExternalRepresentation): Changed to use String instead
        of DeprecatedString.

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

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

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

2008-02-18  Matt Lilek  <webkit@mattlilek.com>

        Reviewed by Adam.

        Remove FindSafari's Release configuration.

        * WebKit.vcproj/WebKit.sln:

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

        Reviewed by Darin Adler.

        http://bugs.webkit.org/show_bug.cgi?id=17397
        <rdar://problem/5748245> REGRESSION (r30236-30336): Cannot backspace/enter in forms on Windows

        * WebKit.vcproj/WebKit.vcproj: Add ENABLE_CROSS_DOCUMENT_MESSAGING definitions.

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

        Reviewed by Adam.

        - quick fix for a problem causing an assertion on launch

        * WebFrame.cpp:
        (WebFrame::loadData): Make an empty KURL even if the BSTR is null.
        Later we might want to rethink this.

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

        - updated for WebCore KURL changes

        * MarshallingHelpers.cpp:
        (MarshallingHelpers::BSTRToKURL): Removed deprecatedString call.
        (MarshallingHelpers::KURLToBSTR): Tweaked for efficiency.
        * WebContextMenuClient.cpp:
        (WebContextMenuClient::searchWithGoogle): Updated for KURL changes.
        * WebDataSource.cpp:
        (WebDataSource::unreachableURL): Ditto.
        * WebDownload.cpp:
        (WebDownload::init): Ditto.
        (WebDownload::initWithRequest): Ditto.
        * WebFrame.cpp:
        (WebFrame::loadData): Ditto.
        (WebFrame::loadURLIntoChild): Ditto.
        (WebFrame::objectContentType): Ditto.
        * WebResource.cpp:
        (WebResource::initWithData): Ditto.
        * WebURLResponse.cpp:
        (WebURLResponse::createInstance): Ditto.
        (WebURLResponse::initWithURL): Ditto.
        * WebView.cpp:
        (WebView::userAgentForURL): Ditto.
        (WebView::copyURL): Ditto.
        (WebView::notifyPreferencesChanged): Ditto.

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

        * WebChromeClient.cpp: (WebChromeClient::exceededDatabaseQuota): Forgot to re-apply review comments to
        the previous check-in, fixing.

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

        Reviewed by Adam Roben.

        http://bugs.webkit.org/show_bug.cgi?id=17207
        Database example doesn't work (requires not-yet-released Safari)

        * WebChromeClient.cpp:
        (WebChromeClient::exceededDatabaseQuota): Check Safari version, and allow 5 megabytes of storage
        if it's too old.

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

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

        Reviewed by Darin Adler.

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

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

        Fix Bug 17220: Illogical dependency between PluginView and
        PluginDatabase
        
        <http://bugs.webkit.org/show_bug.cgi?id=17220>

        Reviewed by Adam and Darin.

        Update for the rename of PluginDatabase::createPluginView
        to PluginView::create

        * WebFrame.cpp:

2008-02-13  Adam Roben  <aroben@apple.com>

        Windows build fix

        * Interfaces/WebKit.idl: Create the typelib version symbol ourselves.

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

        Use a precompiled header to build WebKit.
        
        Reviewed by Adam.

        * WebKit.vcproj/WebKit.vcproj:
        * WebKitPrefix.cpp: Added.
        * WebKitPrefix.h: Added.

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

        Changes to support merged MIDL output.

        All COM interfaces are now generated to WebKit.h.

        Reviewed by Sam, Ada.

        * DOMCSSClasses.h:
        * DOMCoreClasses.h:
        * DOMEventsClasses.h:
        * DOMHTMLClasses.h:
        * DefaultDownloadDelegate.h:
        * DefaultPolicyDelegate.cpp:
        * DefaultPolicyDelegate.h:
        * GEN_DOMObject.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/IGEN_DOMObject.idl:
        * Interfaces/IWebArchive.idl:
        * Interfaces/IWebBackForwardList.idl:
        * Interfaces/IWebBackForwardListPrivate.idl:
        * Interfaces/IWebCache.idl:
        * Interfaces/IWebDataSource.idl:
        * Interfaces/IWebDatabaseManager.idl:
        * Interfaces/IWebDocument.idl:
        * Interfaces/IWebDownload.idl:
        * Interfaces/IWebEditingDelegate.idl:
        * Interfaces/IWebError.idl:
        * Interfaces/IWebErrorPrivate.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/IWebInspector.idl:
        * Interfaces/IWebJavaScriptCollector.idl:
        * Interfaces/IWebKitStatistics.idl:
        * Interfaces/IWebMutableURLRequest.idl:
        * Interfaces/IWebMutableURLRequestPrivate.idl:
        * Interfaces/IWebNotification.idl:
        * Interfaces/IWebNotificationCenter.idl:
        * Interfaces/IWebNotificationObserver.idl:
        * Interfaces/IWebPolicyDelegate.idl:
        * Interfaces/IWebPreferences.idl:
        * Interfaces/IWebPreferencesPrivate.idl:
        * Interfaces/IWebResource.idl:
        * Interfaces/IWebResourceLoadDelegate.idl:
        * Interfaces/IWebResourceLoadDelegatePrivate.idl:
        * Interfaces/IWebScriptCallFrame.idl:
        * Interfaces/IWebScriptDebugListener.idl:
        * Interfaces/IWebScriptDebugServer.idl:
        * Interfaces/IWebScriptObject.idl:
        * Interfaces/IWebScriptScope.idl:
        * Interfaces/IWebScrollBarDelegatePrivate.idl:
        * Interfaces/IWebScrollBarPrivate.idl:
        * Interfaces/IWebSecurityOrigin.idl:
        * Interfaces/IWebTextRenderer.idl:
        * Interfaces/IWebUIDelegate.idl:
        * Interfaces/IWebUIDelegatePrivate.idl:
        * Interfaces/IWebURLAuthenticationChallenge.idl:
        * Interfaces/IWebURLRequest.idl:
        * Interfaces/IWebURLResponse.idl:
        * Interfaces/IWebURLResponsePrivate.idl:
        * Interfaces/IWebUndoManager.idl:
        * Interfaces/IWebUndoTarget.idl:
        * Interfaces/IWebView.idl:
        * Interfaces/IWebViewPrivate.idl:
        * Interfaces/WebKit.idl:
        * WebActionPropertyBag.cpp:
        * WebBackForwardList.h:
        * WebCache.h:
        * WebDataSource.cpp:
        * WebDataSource.h:
        * WebDatabaseManager.h:
        * WebDownload.h:
        * WebEditorClient.cpp:
        * WebEditorClient.h:
        * WebError.h:
        * WebFrame.cpp:
        * WebFrame.h:
        * WebFramePolicyListener.h:
        * WebHTMLRepresentation.cpp:
        * WebHTMLRepresentation.h:
        * WebHistory.cpp:
        * WebHistory.h:
        * WebHistoryItem.h:
        * WebIconDatabase.h:
        * WebInspector.h:
        * WebJavaScriptCollector.h:
        * WebKit.vcproj/Interfaces.vcproj:
        * WebKit.vcproj/WebKitGUID.vcproj:
        * WebKitDLL.cpp:
        * WebKitStatistics.h:
        * WebMutableURLRequest.cpp:
        * WebMutableURLRequest.h:
        * WebNotification.h:
        * WebNotificationCenter.h:
        * WebPreferences.h:
        * WebResource.h:
        * WebScriptCallFrame.h:
        * WebScriptDebugServer.cpp:
        * WebScriptDebugServer.h:
        * WebScriptDebugger.cpp:
        * WebScriptDebugger.h:
        * WebScriptObject.h:
        * WebScrollBar.h:
        * WebSecurityOrigin.h:
        * WebTextRenderer.h:
        * WebURLAuthenticationChallenge.h:
        * WebURLAuthenticationChallengeSender.h:
        * WebURLCredential.h:
        * WebURLProtectionSpace.h:
        * WebURLResponse.h:
        * WebView.cpp:
        * WebView.h:

2008-02-12  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam.

        Implement imageTitle.
        
        * WebCoreLocalizedStrings.cpp:
        (WebCore::imageTitle):

2008-02-12  Anders Carlsson  <andersca@apple.com>

        Reviewed by Mitz.

        * WebCoreLocalizedStrings.cpp:
        (WebCore::imageTitle):
        Add stub.
        

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

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

        Reviewed by Adam.

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

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

        Reviewed by Anders Carlsson.

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

        Track WebCore renames.

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

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

        Reviewed by Darin Adler.

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

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

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

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

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

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

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

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

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

        Reviewed by Darin and Adele.

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

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

        Let WebCore take care of the highlight drawing entirely

        Reviewed by Darin Adler.

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

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

        Move node highlight drawing code to WebCore

        Reviewed by Darin Adler.

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

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

        Fix a crash when opening the Inspector

        Reviewed by Anders.

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

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

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

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

        Reviewed by Anders and Darin.

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

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

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

        Reviewed by Steve.

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

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

        Reviewed by Darin Adler.

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

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

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

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

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

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

        Build fix

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

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

        Build fix

        * WebView.cpp: Added a comma.

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

        Reviewed by Adam Roben.

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

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

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

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

        * WebKit.vcproj/WebKit.rc:

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

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

        Reviewed by Hyatt.

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

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

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

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

        Reviewed by Dan.

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

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

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

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

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

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

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

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

        Reviewed by Hyatt.

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

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

        Reviewed by John Sullivan.

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

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

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

        * WebDatabaseManager.h: Updated for name changes.

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

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

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

        * Interfaces/IGEN_DOMObject.idl:

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

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

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

        Reviewed by Adele.

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

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

        Reviewed by Adam Roben.

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

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

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

        Build fix.

        * WebKit.vcproj/WebKit.make:

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

        Trigger activation changes at the right time by listening for WM_NCACTIVATE

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

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

        Reviewed by Darin Adler.

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

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

        Updated for ScrollBarClient changes

        Reviewed by Darin Adler.

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

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

        Updated for changes to WebCore methods

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

        Reviewed by Darin Adler.

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

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

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

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

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

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

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

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

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

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

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

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

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

        Reviewed by Adam Roben.

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

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

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

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

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

        Reviewed by Hyatt.

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

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

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

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

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

        Reviewed by John Sullivan.

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

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

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

        Not reviewed, build fix.
        
        - more build fixing

        * WebDatabaseManager.cpp:
        * WebSecurityOrigin.h:

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

        Not reviewed, build fix.
        
        - try to fix build

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

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

        Reviewed by Sam.

        - remove SecurityOriginData and fold its functionality into SecurityOrigin

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

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

        dftables should be rewritten as a script

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

        Reviewed by Darin Adler.

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

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

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

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

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

        Reviewed by Hyatt.

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

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

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

        Reviewed by Darin Adler.

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

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

        Fix build.

        * DOMCoreClasses.cpp:

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

        Try to fix the Windows build.

        * WebKit.vcproj/WebKit.sln:

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

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

        * WebKit.vcproj/WebKit.vcproj:

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

        Build fix.

        * WebKit.vcproj/InterfacesGenerated.vcproj:

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

        Reviewed by Dave Hyatt.

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

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

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

        Reviewed by Alp Toker.

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

        * WebContextMenuClient.cpp:

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

        Reviewed by Adam Roben.

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

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

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

        Reviewed by Darin Adler.

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

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

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

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

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

        Reviewed by Oliver.

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

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

        Reviewed by Darin Adler.

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

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

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

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

        Rubber-stamped by Jon.

        * WebView.cpp:

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

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

        Reviewed by Adam.

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

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

        Reviewed by Maciej.

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

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

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

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

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

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

        Reviewed by Darin Adler.

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

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

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

        Reviewed by Steve.
        
        Build media support on Windows.

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

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

        Implemented DOMDocument::getElementById().

        Reviewed by Darin Adler.

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

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

        Reviewed by Steve and Darin.

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

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

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

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

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

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

        * ForEachCoClass.h:

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

        Reviewed by Steve.

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

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

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

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

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

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

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

        Reviewed by Sam.

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

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

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

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

        Reviewed by Darin Adler.

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

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

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

        Reviewed by Maciej.

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

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

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

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

        - yet another build fix

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

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

        - build fix

        * WebIconDatabase.h:

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

        Reviewed by Adele.

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

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

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

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

        Reviewed by Alexey.

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

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

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

        Reviewed by Adam.

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

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

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

        Reviewed by Anders.

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

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

        Fix project dependencies based on JavaScriptCore change.

        * WebKit.vcproj/WebKit.sln:

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

        Reviewed by Adele.

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

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

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

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

        Reviewed by Sam Weinig

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

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

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

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

        * WebKit.vcproj/WebKit.vcproj:

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

        Build fix.

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

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

        Reviewed by Darin Adler.

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

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

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

        Reviewed by Maciej.

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

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

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

        Reviewed by Alexey Proskuryakov.

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

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

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

        Reviewed by Darin Adler.

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

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

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

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

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

        Updated the database SPI to take in IWebFrame.

        Reviewed by Adam.

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

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

        Windows build fix.

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

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

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

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

        Reviewed by Darin Adler.

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

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

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

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

        (WebViewWndProc): Handle WM_CHAR and WM_SYSCHAR.

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

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

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

        Reviewed by Sam Weinig.

        Updated for rename in JavaScriptCore.

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

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

        Fix version parsing.

        Rubber-stamped by Oliver.

        * WebKit.vcproj/auto-version.sh:

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

        Fix build.

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

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

        Fix build.

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

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

        Tried to fix build by suppressing warning.

        * WebScriptCallFrame.cpp:

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

        Reviewed by Mitz.

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

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

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

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

        Reviewed by Sam Weinig.

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

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

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

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

        Reviewed by Steve.

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

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

        Make WebLocalizableStrings work a little more like the Mac version

        Reviewed by Steve.

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

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

        Use SoftLinking.h in WebKitClassFactory.

        Reviewed by Oliver.

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

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

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

        Reviewed by Darin Adler.

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

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

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

        Reviewed by Darin Adler.

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

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

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

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

        A test case is coming in a future commit.

        Reviewed by Anders.

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

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

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

        Reviewed by Hyatt.

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

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

        Build fix.

        Reviewed by Geoff.

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

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

        Reviewed by Darin Adler.

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

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

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

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

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

        Expose WebView::setProhibitsMainFrameScrolling through IWebViewPrivate

        Reviewed by Steve.

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

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

        Reviewed by Darin Adler.

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

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

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

        Provide API for setting the default storage quota per database origin

        Reviewed by Jon.

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

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

        Reviewed by Adam and Darin.

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

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

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

        Hook up the authorAndUserStylesEnabled preference

        This is the Windows counterpart of r28071.

        Reviewed by Maciej.

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

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

        Reviewed by Ollie.

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

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

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

        Reviewed by Kevin Decker.

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

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

        Windows build fix

        * WebScriptCallFrame.cpp:

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

        Reviewed by Dave Hyatt.

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

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

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

        Reviewed by Adam.

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

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

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

        Speculative Windows build fix.

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

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

        Another speculative Windows build fix

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

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

        Speculative Windows build fix

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

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

        Rename IWebViewPrivate::selectionImageRect to IWebViewPrivate::selectionRect.

        Rubber stamped by Adam Roben.

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

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

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

        Reviewed by Steve.

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

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

        Reviewed by Sam.

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

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

        Reviewed by Sam.

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

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

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

        Build fix that works...?

        * WebChromeClient.h:

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

        Build fix

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

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

        Keep it building with new client method

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

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

        Reviewed by Beth Dakin and Darin Adler.

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

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

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

        Reviewed by Tim.

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

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

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

        Reviewed by Adam.

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

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

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

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

        Reviewed by Maciej and Adam.

        - Added Drosera to the WebKit project.

        * WebKit.vcproj/WebKit.sln:

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

        Reviewed by Adam.

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

        * WebView.cpp:
        (registerWebViewWindowClass):

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

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

        Reviewed by Adam.

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

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

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

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

        Reviewed by Adam.

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

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

        Reviewed by Adam.

        Implement the rest of the WebDatabaseManager API.

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

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

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

        Reviewed by Anders.

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

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

        Reviewed by Adam.

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

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

        Reviewed by Adam.

        Use the correct include paths.
        
        * COMEnumVariant.h:

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

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

        Take advantage of the new Color constructor that takes a CGColorRef

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

        Reviewed by Darin Adler.

        * WebKitGraphics.cpp:
        (DrawTextAtPoint):

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

        Build fix.

        * WebKit.vcproj/WebKit.make:

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

        Build fix.

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

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

        Build fix.

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

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

        Reviewed by Adam.

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

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

        Reviewed by Maciej.

        - Implemented displaying variables for Drosera on Win.

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

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

        Reviewed by Brady.

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

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

        Reviewed by Jon Honeycutt.

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

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

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

        Fix a leak pointed out by Alexey

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

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

        Fix Bug 16138: Reduce code duplication in WebView.cpp

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

        Reviewed by Sam.

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

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

        Add ImageDiff.vcproj to WebKit.sln

        Reviewed by Sam.

        * WebKit.vcproj/WebKit.sln:

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

        Reviewed by Mark Rowe.

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

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

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

        Windows build fix.

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

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

        Change Interfaces to be a "Static Library" project

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

        * WebKit.vcproj/Interfaces.vcproj:

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

        Shut up FixMIDLHeaders.pl

        * WebKit.vcproj/FixMIDLHeaders.pl:

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

        Change Interfaces to use a Utility configuration

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

        Rubberstamped by Steve.

        * WebKit.vcproj/Interfaces.vcproj:

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

        Reviewed by Adam.

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

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

        Another build fix for systems without Cygwin in their PATH

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

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

        Reviewed by Adam.

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

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

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

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

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

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

        Reviewed by Ada.

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

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

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

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

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

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

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

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

        Windows build fix

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

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

        Reviewed by Sam.

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

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

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

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

        Rubber stamped by Oliver.

        Make WebCore a dependency of Interfaces.

        * WebKit.vcproj/WebKit.sln:

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

        Reviewed by Adam Roben.

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

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

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

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

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

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

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

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

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

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

        Reviewed by Adam.

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

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

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

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

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

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

        Reviewed by Sam.

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

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


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

        Reviewed by Steve.

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

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

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

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

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

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

        Reviewed by Sam.

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

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

        Change WebLocalizableStrings to take UTF-8 C strings

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

        Reviewed by Ada.

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

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

        Reviewed by Adam and Steve.

        - added hooks needed to implement showModalDialog on Windows

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

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

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

        Rubber-stamped by Adam Roben.

        Windows build fix.

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

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

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

        Reviewed by Oliver.

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

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

        Build fix.

        Reviewed by Tristan.

        * WebChromeClient.h:

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

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

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

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

        Add IWebCache::disabled

        This matches the Mac WebCache class.

        Reviewed by Sam.

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

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

        Add IWebInspector and a way to get one from a WebView

        This API matches the Mac one added in r27266.

        Reviewed by Sam.

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

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

        Cache strings that come directly from WebLocalizedString

        Reviewed by Steve.

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

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

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

        Reviewed by Sam.

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

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

        Reviewed by Alexey.

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

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

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

        - Fixed a build failure

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

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

        Fix the parameter type of WebLocalizedString to match the UI_STRING macro

        Reviewed by Sam.

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

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

        Rubber-stamped by Adam Roben.

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

        * WebKit.vcproj/WebKit.vcproj:

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

        Switch the Debug configuration to using the non-debug CRT

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

        Reviewed by Steve.

        * WebKit.vcproj/WebKit.vcproj:

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

        Reviewed by Adam and Geoff.

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

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

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

        Reviewed by Darin Adler.

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

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

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

        Reviewed by Adam and Maciej.

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

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

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

        - try to fix Windows build

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

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

        Reviewed by Adam.

        - Stubbed out IWebScriptCallFrame for Drosera.

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

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

        Reviewed by Sam and Steve.

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

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

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

        Reviewed by Adam Roben.

        Make debug builds run again.

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

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

        Reviewed by Adam Roben.

        Remove JSStringRefCFHack.

        * WebKit.vcproj/WebKit.vcproj:

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

        Reviewed by Steve Falkenburg.

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

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

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

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

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

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

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

        Update WebKit.sln for the removal of Release dftables

        * WebKit.vcproj/WebKit.sln:

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

        Rubber stamped by Geoff.

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

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

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

        Reviewed by Darin Adler.

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

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

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

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

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

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

        Reviewed by Ada.

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

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

        Add [I]WebTextRenderer

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

        Reviewed by Ada.

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

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

        Use FOR_EACH_COCLASS in WebKitClassFactory

        Reviewed by Ada.

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

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

        Put FOR_EACH_COCLASS macro into its own file and export it

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

        Reviewed by Ada.

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

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

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

        Reviewed by Adam.

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

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

        Reviewed by Anders

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

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

        Reviewed by Sam, Steve and Darin.

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

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

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

        Move safe file creation code to WebCore

        Reviewed by Brady.

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

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

        Reduce code duplication by using WebCore's FileSystem functions

        Reviewed by Brady.

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

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

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

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

        Reviewed by Adam Roben.

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

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

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

        Reviewed by Darin and Adam.

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

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

        Reviewed by Anders

        Keep windows building with new Chrome additions

        * WebChromeClient.cpp:
        * WebChromeClient.h:

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

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

        Reviewed by Adele.

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

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

        Fix for clean builds needed after r26683

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

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

        Update for locking primitive changes.

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

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

        Remove WebKitInitializer

        Reviewed by Sam.

        * WebKit.vcproj/WebKit.sln:

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

        Add FindSafari

        Reviewed by Darin Adler.

        * WebKit.vcproj/WebKit.sln:

2007-10-16  Adam Roben  <aroben@apple.com>

        Rename WebKit_debug.dll to WebKit.dll for the Debug configuration

        This is needed so that we can stop having Safari delay-load WebKit,
        which in turn is needed so that Maciej can land a JavaScript speedup
        which breaks delay-loading.

        Reviewed by Kevin McCullough.

        * WebKit.vcproj/WebKit.vcproj: Use WebKitDLLConfigSuffix for the name
        of our DLL and module definition file.
        * WebKit.vcproj/debug.vsprops: Added WebKitDLLConfigSuffix.
        * WebKit.vcproj/debug_internal.vsprops: Ditto.
        * WebKit.vcproj/release.vsprops: Ditto.

2007-10-15  Jon Honeycutt  <jhoneycutt@apple.com>

        Reviewed by Ollie.

        <rdar://5530789>: REGRESSION(303-310A19): Crash opening .wma files with
        MediaPlayer for the first time

        Failure to setup the stream in PluginView::didReceiveResponse will lead,
        in a full-page plugin, to the main document load being cancelled. This
        is the case with at least two versions of Windows Media Player, which
        cancels the stream and brings up its own "Welcome to Windows Media
        Player" dialog.
        
        As part of the main document load cancellation, m_pluginView is set to
        null, and the crash came from dereferencing this pointer. This patch
        adds a null check.

        * WebFrame.cpp:
        (WebFrame::finishedLoading): Fix some typos
        (WebFrame::committedLoad): Added a null check

2007-10-15  Alice Liu  <alice.liu@apple.com>

        Reviewed by Sam Weinig.

        Fixed <rdar://5382546> layoutTestController.setCustomPolicyDelegate is unimplemented causing tests to fail

        * DefaultPolicyDelegate.cpp: Added.
        Implementation is a direct port of WebKit/DefaultDelegates/WebDefaultPolicyDelegate.m
        (DefaultPolicyDelegate::DefaultPolicyDelegate):
        (DefaultPolicyDelegate::~DefaultPolicyDelegate):
        (DefaultPolicyDelegate::sharedInstance):
        (DefaultPolicyDelegate::createInstance):
        (DefaultPolicyDelegate::QueryInterface):
        (DefaultPolicyDelegate::AddRef):
        (DefaultPolicyDelegate::Release):
        (DefaultPolicyDelegate::decidePolicyForNavigationAction):
        (DefaultPolicyDelegate::decidePolicyForNewWindowAction):
        (DefaultPolicyDelegate::decidePolicyForMIMEType):
        (DefaultPolicyDelegate::unableToImplementPolicyWithError):
        * DefaultPolicyDelegate.h: Added.
        * WebFrame.cpp:
        (WebFrame::dispatchDecidePolicyForNavigationAction):
        Implemented default action
        * WebKit.vcproj/WebKit.vcproj:
        Adding files to project

2007-10-12  Steve Falkenburg  <sfalken@apple.com>

        Move pthreads up in the linker order and don't mark it for delay load.
        Fixes crash during regsvr32 of WebKit (currently repro if you do a spade ti).
        
        Reviewed by Darin, Ada.

        * WebKit.vcproj/WebKit.vcproj:

2007-10-11  Steve Falkenburg  <sfalken@apple.com>

        Delay load additional libraries to improve startup time.
        
        Reviewed by Darin, Ada.

        * WebKit.vcproj/WebKit.vcproj:

2007-10-11  Ada Chan  <adachan@apple.com>

        <rdar://problem/5534421>
        Switched to using wkGetDefaultHTTPCookieStorage() to avoid recreating CFHTTPCookieStorageRef.
        Removed usage of ResourceHandle::cookieStorage().

        Reviewed by Oliver.

        * WebView.cpp:
        (WebView::updateWebCoreSettingsFromPreferences):
        (WebView::initWithFrame):

2007-10-10  Alice Liu  <alice.liu@apple.com>

        Reviewed by Geoff Garen.

        Fixed <rdar://5464402> Crash when running fast/frames/onload-remove-iframe-crash.html in DRT

        * WebFrame.cpp:
        (WebFrame::createFrame):
        The crash was caused by the early destruction of the subframe.  To resolve this issue, 
        the manual deref of the child frame that occurs in between being appended to the 
        frametree and being used in loadURLIntoChild wasn't exactly incorrect, but just needed 
        to be moved until after loadURLIntoChild. This hasn't been a problem for other uses of 
        child frames because this test case involves removing a child frame immediately after 
        loading it, all in an onload handler.  Even better than just moving the deref would be 
        to change the signature of createFrame to use a RefPtr<Frame> so that a manual deref isn't 
        necessary. This is what was done in this patch. 
        * WebFrame.h:
        createFrame() now returns a RefPtr instead of a raw Frame pointer. 
        Making this change improves the way we handle frames on Windows WebKit. 


2007-10-05  Ada Chan  <adachan@apple.com>

        <rdar://problem/5436617>
        Implement WebIconDatabase::delayDatabaseCleanup() and WebIconDatabase::allowDatabaseCleanup().

        Reviewed by Brady.

        * WebIconDatabase.cpp:
        (WebIconDatabase::delayDatabaseCleanup):
        (WebIconDatabase::allowDatabaseCleanup):

2007-10-04  Adele Peterson  <adele@apple.com>

        * Interfaces/IWebViewPrivate.idl: Moving setInitialFocus down to the end to avoid breaking the OpenSource build.

2007-10-04  Adele Peterson  <adele@apple.com>

        Reviewed by Darin Adler.

        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 Adler.

        - <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 Adler.

        * 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 Adler.

        * 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 Adler.

        * 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 Adler.

        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 Adler.

        * 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  <pkasting@google.com>

        Reviewed by Darin Adler.
        
        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 Adler.

        * 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 Adler.
        
        <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 Adler.

        * 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 Adler.

        * 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 Adler.

        * WebHistory.cpp:
        (createHistoryListFromStream):

2007-06-27  Steve Falkenburg  <sfalken@apple.com>

        Prefast: Fix misplaced parenthesis.
        
        Reviewed by Darin Adler.

        * WebView.cpp:
        (core):

2007-06-27  Steve Falkenburg  <sfalken@apple.com>

        Prefast: Add null check prior to writing into allocated BSTR.
        
        Reviewed by Darin Adler.

        * 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 Adler.
        
        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 Adler.
        
        <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 Adler.

        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 Adler.

        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 Adler.
        
        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 Adler.
        
        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 Adler.

        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 Adler.

        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 Adler.

        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 Adler.

        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 Adler. 

        * 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 Adler.

        <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 Adler.
   
        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 Adler.

        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>

        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 Adler.

        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 Adler.

        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 Adler.

        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 Adler.

        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 Adler.

        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 Adler.
        
        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 Adler.

        - 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 Adler.
        
        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 Adler.

        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 Adler.

        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 Adler.

        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.

