2009-12-10  Jon Honeycutt  <jhoneycutt@apple.com>

        Pass more information about a plug-in to the PluginHalterDelegate

        Reviewed by Adam Roben.

        * Interfaces/IWebPluginHalterDelegate.idl:
        Add new parameters.

        * WebCoreSupport/WebPluginHalterClient.cpp:
        (WebPluginHalterClient::shouldHaltPlugin):
        Update for new parameters. Pass them when making the delegate call.

        * WebCoreSupport/WebPluginHalterClient.h:
        Update for new parameters.

2009-12-09  Brent Fulgham  <bfulgham@webkit.org>

        Revert incorrect commit-box update r51911.
        It mistakenly set the selectAll implementation in the
        deslectAll method. 

        * WebFrame.cpp:
        (WebFrame::deselectAll):

2009-12-09  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Darin Adler.

        Provide an implementation for 'selectAll'
        https://bugs.webkit.org/show_bug.cgi?id=32296

        * WebFrame.cpp:
        (WebFrame::selectAll): Implement "SelectAll" command.

2009-12-09  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Darin Adler.

        Provide an implementation for 'selectAll'
        https://bugs.webkit.org/show_bug.cgi?id=32296

        * WebFrame.cpp:
        (WebFrame::selectAll): Implement "SelectAll" command.

2009-12-08  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Adam Roben.

        Delay load DLLs for accelerated compositing
        https://bugs.webkit.org/show_bug.cgi?id=31856
        
        If the DLLs (d3d9 and QuartzCore). are not present it
        turns off accelerated compositing and avoids calling 
        any of the functions in the DLLs.

        * WebView.cpp:
        * WebView.h:

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

        Windows build fix

        * Interfaces/WebKit.idl: Touched this to force Interfaces.vcproj to rebuild.

2009-12-08  John Sullivan  <sullivan@apple.com>

        Reviewed by Dan Bernstein

        Split two-clause assertions into two separate assertions.

        * DOMHTMLClasses.cpp:
        (DOMHTMLInputElement::isTextField):
        Split a two-clause assertion into two separate assertions.
        (DOMHTMLInputElement::rectOnScreen):
        Added the two assertions here that all other functions in this group shared.
        (DOMHTMLInputElement::selectedRange):
        Split a two-clause assertion into two separate assertions.
        (DOMHTMLInputElement::setAutofilled):
        Split a two-clause assertion into two separate assertions.
        (DOMHTMLInputElement::isAutofilled):
        Split a two-clause assertion into two separate assertions.

2009-12-08  Nikolas Zimmermann  <nzimmermann@rim.com>

        Rubber-stamped by Maciej Stachowiak.

        Turn on (SVG) Filters for Win.
        https://bugs.webkit.org/show_bug.cgi?id=32224

        * WebKit.vcproj/WebKit.vcproj:

2009-12-08  John Sullivan  <sullivan@apple.com>

        Add isAutofilled getter to match existing setter.

        Reviewed by Ada Chan.

        * DOMHTMLClasses.cpp:
        (DOMHTMLInputElement::isAutofilled):
        Implemented new cover function.
        
        * DOMHTMLClasses.h:
        Declared new cover function.
        
        * Interfaces/DOMPrivate.idl:
        Declared new interface.

2009-12-07  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by NOBODY (Windows build fix part III).

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

2009-12-07  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by NOBODY (Windows build fix part II).

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

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

        Reviewed by Sam Weinig.

        <rdar://problem/7214236> and http://webkit.org/b/32052 - Implement HTML5 state object history API

        * Interfaces/IWebFrameLoadDelegatePrivate2.idl:
        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::dispatchDidPushStateWithinPage):
        (WebFrameLoaderClient::dispatchDidReplaceStateWithinPage):
        (WebFrameLoaderClient::dispatchDidPopStateWithinPage):
        * WebCoreSupport/WebFrameLoaderClient.h:

2009-12-03  Pavel Feldman  <pfeldman@dhcp-172-28-174-220.spb.corp.google.com>

        Reviewed by Timothy Hatcher.

        Web Inspector: Simplify the settings support in inspector controller.

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

        * WebCoreSupport/WebInspectorClient.cpp:
        (WebInspectorClient::attachWindow):
        (WebInspectorClient::detachWindow):
        (WebInspectorClient::showWindowWithoutNotifications):
        * WebCoreSupport/WebInspectorClient.h:

2009-12-03  Ben Murdoch  <benm@google.com>

        Reviewed by Brady Eidson.

        [Android] The FrameLoaderClient is unaware of BackForwardList changes.
        https://bugs.webkit.org/show_bug.cgi?id=31914

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::dispatchDidAddBackForwardItem): Add an empty implementation. Method added to FrameLoaderClient by Android (see bug).
        (WebFrameLoaderClient::dispatchDidRemoveBackForwardItem): ditto.
        (WebFrameLoaderClient::dispatchDidChangeBackForwardIndex): ditto.
        * WebCoreSupport/WebFrameLoaderClient.h:

2009-12-02  Timothy Hatcher  <timothy@apple.com>

        Move setValueForUser to the end of the DOMHTMLInputElement interface
        so it is fine for binary compatibility.

        Directed by Steve Falkenburg.

        * Interfaces/DOMHTML.idl:

2009-12-02  Timothy Hatcher  <timothy@apple.com>

        Expose setValueForUser for the COM DOMHTMLInputElement.

        <rdar://problem/6760590> Would like a way to detect a login form AutoFill from JavaScript

        Reviewed by Dan Bernstein.

        * DOMHTMLClasses.cpp:
        (DOMHTMLInputElement::setValueForUser):
        * Interfaces/DOMHTML.idl:

2009-12-01  Nikolas Zimmermann  <nzimmermann@rim.com>

        Not reviewed. Try to fix windows build.

        * WebFrame.cpp:

2009-12-01  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Simon Fraser.

        Add SVG animation test framework with 'snapshot' functionality
        https://bugs.webkit.org/show_bug.cgi?id=31897

        Add API used by the new 'sampleSVGAnimationForElementAtTime' DRT method,
        forwarding the call to SVGDocumentExtensions, if SVG is enabled.

        Implemented just like the existing pauseAnimation* methods for CSS animations.

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

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

        Fix double-free of BSTRs passed to WebNavigationData::createInstance

        WebFrameLoaderClient::updateGlobalHistory was converting
        WebCore::Strings to WebCore::BStrings, then passing them to
        WebNavigationData::createInstance. But the latter function takes BSTR
        parameters and adopts them into WebCore::BStrings. So the end result
        was that two WebCore::BStrings would end up freeing each underlying
        BSTR.

        The fix is to only convert to WebCore::BString inside
        WebNavigationData.

        Fixes <http://webkit.org/b/31998> <rdar://problem/7383452> REGRESSION
        (r49564): Crash in updateGlobalHistory when running Javascript iBench
        test

        I couldn't find a way to reproduce this in DumpRenderTree.

        Reviewed by Steve Falkenburg.

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::updateGlobalHistory): Pass WebCore::Strings to
        WebNavigationData::createInstance.

        * WebNavigationData.cpp:
        (WebNavigationData::WebNavigationData):
        (WebNavigationData::createInstance):
        * WebNavigationData.h:
        Changed to take const WebCore::String&s instead of BSTRs and to
        convert the Strings to BStrings at this level.

2009-11-30  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        WebKit clients that don't implement didClearWindowObjectForFrameInScriptWorld should fall back to didClearWindowObject
        https://bugs.webkit.org/show_bug.cgi?id=31986

        * WebFrame.cpp:
        (WebFrame::dispatchDidClearWindowObjectInWorld): Fall back if E_NOTIMPL returned.

2009-11-24  Chris Marrin  <cmarrin@apple.com>

        Another Windows build fix
        
        Got rid of d3d.lib and d3dx9.lib dependency. Not needed until
        we turn on ACCELERATED_COMPOSITING

        * WebKit.vcproj/WebKit.vcproj:

2009-11-24  Chris Marrin  <cmarrin@apple.com>

        Fixed Windows build
        
        Got rid of QuartzCore.lib dependency. Not needed until
        we turn on ACCELERATED_COMPOSITING

        * WebKit.vcproj/WebKit.vcproj:

2009-11-24  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Implement accelerated compositing
        https://bugs.webkit.org/show_bug.cgi?id=27314
        
        This is the WebKit side of the implementation. It plumbs the root layer
        from WebCore. It also makes changes to WebView which places the 
        backing store of the page into the root compositing layer so it is 
        properly composited with all the other layers. This deals with resizing, 
        scrolling, and incremental repaint of the page.

        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::attachRootGraphicsLayer):
        (WebChromeClient::scheduleCompositingLayerSync):
        * WebCoreSupport/WebChromeClient.h:
        (WebChromeClient::setNeedsOneShotDrawingSynchronization):
        * WebKit.vcproj/WebKit.vcproj:
        * WebView.cpp:
        (WebView::WebView):
        (WebView::close):
        (WebView::repaint):
        (WebView::scrollBackingStore):
        (WebView::paint):
        (WebViewWndProc):
        (WebView::setRootChildLayer):
        (WebView::setAcceleratedCompositing):
        (WebView::setRootLayerContents):
        * WebView.h:
        (WebView::isAcceleratedCompositing):
        (WebView::resizeLayerWindow):
        (WebView::layerWindowBecameVisible):
        (WebView::setRootLayerNeedsDisplay):

2009-11-23  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Include "config.h" to meet Coding Style Guidelines
        https://bugs.webkit.org/show_bug.cgi?id=31792

        * GEN_DOMObject.cpp:
        * WebScriptObject.cpp:

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

        Windows build fix. Unreviewed.

        * Interfaces/IWebSerializedJSValue.idl:

2009-11-20  Jon Honeycutt  <jhoneycutt@apple.com>

        DOMElement::tagName() is unimplemented

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

        Reviewed by Darin Adler.

        * DOMCoreClasses.cpp:
        (DOMElement::tagName):
        Create a BString from the element's tag name, and release its BSTR
        into result.

2009-11-20  Jon Honeycutt  <jhoneycutt@apple.com>

        DOMNode::childNodes() is unimplemented

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

        Reviewed by Darin Adler.

        * DOMCoreClasses.cpp:
        (DOMNode::childNodes):
        Create a DOMNodeList from the node's child nodes.

2009-11-20  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Jon Honeycutt.

        Change WebSerializedJSValue on Windows to have a zero-argument createInstance call.  Move the
        serialization into a separate serialize() function that can be called after the object has been
        created.

        Fix a typo in serialize() caused when fixing build bustage (put a ! back in).

        * Interfaces/IWebSerializedJSValue.idl:
        * WebSerializedJSValue.cpp:
        (WebSerializedJSValue::WebSerializedJSValue):
        (WebSerializedJSValue::createInstance):
        (WebSerializedJSValue::serialize):
        (WebSerializedJSValue::deserialize):
        * WebSerializedJSValue.h:

2009-11-20  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Dave Hyatt.

        Another go at the Windows Build Fix - this is a couple steps of it,
        so a little more involved than most build fixes.

        * Interfaces/IWebSerializedJSValue.idl:
        * Interfaces/JavaScriptCoreAPITypes.idl:
        * WebKit.vcproj/Interfaces.vcproj:
        * WebSerializedJSValue.cpp:
        (WebSerializedJSValue::deserialize):
        * WebSerializedJSValue.h:

2009-11-20  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Dave Hyatt.

        Build fix for Windows - only declare JSContextRef once, instead
        of in two different idl files. Create a new file to hold the
        definition of JSContextRef.

        * Interfaces/IWebFrameLoadDelegate.idl:
        * Interfaces/IWebSerializedJSValue.idl:
        * Interfaces/JavaScriptCoreAPITypes.idl: Added.
        * Interfaces/WebKit.idl:
        * WebKit.vcproj/Interfaces.vcproj:

2009-11-20  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Oliver Hunt and Jon Honeycutt.

        Add support for WebSerializedJSValue to WebKit.  This object wraps the SerializedScriptValue functionality in WebCore
        and exposes the ability to do JS value serialization/deserialization to WebKit clients.

        * Interfaces/IWebSerializedJSValue.idl: Added.
        * Interfaces/WebKit.idl:
        * WebKit.vcproj/WebKit.vcproj:
        * WebSerializedJSValue.cpp: Added.
        (WebSerializedJSValue::WebSerializedJSValue):
        (WebSerializedJSValue::~WebSerializedJSValue):
        (WebSerializedJSValue::createInstance):
        (WebSerializedJSValue::AddRef):
        (WebSerializedJSValue::Release):
        (WebSerializedJSValue::QueryInterface):
        (WebSerializedJSValue::deserialize):
        * WebSerializedJSValue.h: Added.

2009-11-19  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=31690
        Make SocketStreamHandleCFNet work on Windows

        * WebDownloadCFNet.cpp:
        (WebDownload::init):
        (WebDownload::initWithRequest):
        (WebDownload::initToResumeWithBundle):
        Update for loaderRunLoop() now being in its own header.

2009-11-19  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/7035231>
        Support closed caption in <video> element

        * WebCoreLocalizedStrings.cpp:
        (WebCore::localizedMediaControlElementString):
        (WebCore::localizedMediaControlElementHelpText):
            Add accessibility help strings for media controller closed caption button.

2009-11-18  Michelangelo De Simone  <micdesim@gmail.com>

        Reviewed by Darin Adler.

        Fix for <https://bugs.webkit.org/show_bug.cgi?id=27959>.
        Support for validationMessage attribute, as per HTML5 specs.

        * WebCoreLocalizedStrings.cpp:
        (WebCore::validationMessageValueMissingText):
        (WebCore::validationMessageTypeMismatchText):
        (WebCore::validationMessagePatternMismatchText):
        (WebCore::validationMessageTooLongText):
        (WebCore::validationMessageRangeUnderflowText):
        (WebCore::validationMessageRangeOverflowText):
        (WebCore::validationMessageStepMismatchText):

2009-11-18  Daniel Bates  <dbates@webkit.org>

        Reviewed by Darin Adler.

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

        Changes associated with renaming RenderTextControl::isUserEdited.

        * DOMHTMLClasses.cpp:
        (DOMHTMLInputElement::isUserEdited): Formerly named isUserEdited.
        (DOMHTMLTextAreaElement::isUserEdited): Ditto.

2009-11-12  Jon Honeycutt  <jhoneycutt@apple.com>

        Implement DOMHTMLInputElement::replaceCharactersInRange().

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

        Reviewed by Dan Bernstein.

        * DOMHTMLClasses.cpp:
        (DOMHTMLInputElement::replaceCharactersInRange):
        Get the text of the input field. Replace the given range with the
        replacement text, and set this new string as the input element's value.
        Select from index to the end of the field. This matches the
        implementation in the Obj-C bindings.

2009-11-12  Jon Honeycutt  <jhoneycutt@apple.com>

        DOMHTMLOptionElement is missing some functionality.

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

        Reviewed by Dan Bernstein.

        * DOMHTMLClasses.cpp:
        (DOMHTMLOptionElement::text):
        Cast m_element to an HTMLOptionElement, and call its text() function.
        (DOMHTMLOptionElement::label):
        Ditto, for label().

2009-11-12  Jon Honeycutt  <jhoneycutt@apple.com>

        DOMHTMLSelectElement is missing some implementation.

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

        Reviewed by Dan Bernstein.

        * DOMHTMLClasses.cpp:
        (DOMHTMLSelectElement::options):
        Cast m_element to an HTMLSelectElement. If it has no options, return
        E_FAIL. Otherwise, create a DOMHTMLOptionsCollection to wrap the
        options, and return it.
        (DOMHTMLSelectElement::activateItemAtIndex):
        If the index is out of bounds, return E_FAIL. Otherwise, select the
        item.

2009-11-12  Jon Honeycutt  <jhoneycutt@apple.com>

        DOMHTMLOptionsCollection is missing some implementation.

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

        Reviewed by Dan Bernstein.

        * DOMHTMLClasses.cpp:
        (DOMHTMLOptionsCollection::DOMHTMLOptionsCollection):
        Initialize m_collection.
        (DOMHTMLOptionsCollection::createInstance):
        Create a DOMHTMLOptionsCollection. If we fail to query for
        IDOMHTMLOptionsCollection, delete it, and return 0. Otherwise, return
        the result.
        (DOMHTMLOptionsCollection::length):
        (DOMHTMLOptionsCollection::item):
        Create a DOMNode for the WebCore Node. If this is 0, return E_FAIL.
        (DOMHTMLOptionsCollection::namedItem):
        Correct the signature of this function.

        * DOMHTMLClasses.h:
        Declare DOMHTMLOptionsCollection::createInstance(). Correct the
        signature of namedItem() to match IDOMHTMLOptionsCollection. Add a
        member to DOMHTMLOptionsCollection to hold the WebCore object.

2009-11-12  Jon Honeycutt  <jhoneycutt@apple.com>

        DOMHTMLInputElement::rectOnScreen() returns the wrong rect

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

        Reviewed by Darin Adler.

        * DOMHTMLClasses.cpp:
        (DOMHTMLInputElement::rectOnScreen):
        Return the rect on screen, not the rect in the window.

2009-11-17  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by NOBODY - Build Fix.

        Correct build error in Debug_Cairo target after @49705.

        * WebKit.vcproj/WebKit.vcproj: Revise JavaScriptCore.lib
          dependency to have proper "_debug" suffix needed by
          the Debug_Cairo target.

2009-11-17  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by NOBODY - Build Fix.

        Touch files to try to fix the build.

        * Interfaces/IWebInspector.idl:
        * Interfaces/WebKit.idl:
        * WebKit.vcproj/Interfaces.vcproj:

2009-11-17  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Make DRT show web inspector for tests in inspector/ folder.
        - Updated DRT to show/close inspector for all tests under /inspector
        - Introduced LayoutTestController::setTimelineProfilingEnabled and
          WebInspector::setTimelineProfilingEnabled beside setJavaScriptProfilingEnabled
        - Removed reload on each inspector test
        - Renamed fast/inspector to fast/inspector-support in order not to trigger
        inspector for those.
        - Reimplemented timeline tests in order to get rid of reload there.
        - Moved tests that don't require harness into the fast group.

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

        * Interfaces/IWebInspector.idl:
        * WebInspector.cpp:
        (WebInspector::isTimelineProfilingEnabled):
        (WebInspector::setTimelineProfilingEnabled):
        * WebInspector.h:

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

        Build fix

        * Interfaces/WebKit.idl: Touch this to force interfaces to rebuild.

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

        Tell the WebFrameLoadDelegate when window objects in isolated worlds
        are cleared

        Fixes <http://webkit.org/b/31124>.

        Reviewed by Dave Hyatt.

        * Interfaces/IWebFrameLoadDelegatePrivate2.idl: Added
        didClearWindowObjectForFrameInScriptWorld.

        * WebFrame.cpp:
        (WebFrame::dispatchDidClearWindowObjectInWorld):
        * WebFrame.h:
        Replaced windowObjectCleared with this function. If the delegate
        implements IWebFrameLoadDelegatePrivate2, call
        didClearWindowObjectForFrameInScriptWorld. Otherwise, if the passed-in
        world is the mainThreadNormalWorld(), call
        didClearWindowObjectForFrame.

        * WebScriptWorld.cpp:
        (allWorlds): Added. Returns a HashMap of all the WebScriptWorlds in
        existence.
        (WebScriptWorld::WebScriptWorld): Add ourselves to allWorlds().
        (WebScriptWorld::~WebScriptWorld): Remove ourselves from allWorlds().
        (WebScriptWorld::standardWorld): Added this non-COM getter for the
        standard world, which the COM getter now calls through to.
        (WebScriptWorld::findOrCreateWorld): Added. Returns the existing
        WebScriptWorld for this DOMWrapperWorld, or a new one if one doesn't
        already exist.

        * WebScriptWorld.h: Added new standardWorld overload, made one
        overload of createInstance private, and added findOrCreateWorld.

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

        Build fix

        * Interfaces/WebKit.idl: Un-sort the #includes again. Apparently they
        are order-dependent!

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

        Touch WebKit.idl to fix the Windows build

        * Interfaces/WebKit.idl: Sorted #includes.

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

        Finish replacing worldIDs with world objects

        The only remaining use of worldIDs was in a method only used by DRT
        for the isolated worlds tests.

        Fixes <http://webkit.org/b/31414> Replace worldIDs with world objects

        Reviewed by Mark Rowe.

        * Interfaces/IWebFramePrivate.idl:
        * WebFrame.cpp:
        (WebFrame::stringByEvaluatingJavaScriptInScriptWorld):
        * WebFrame.h:
        Renamed from stringByEvaluatingJavaScriptInIsolatedWorld. Now takes an
        IWebScriptWorld instead of a worldID, so we don't need to maintain a
        map of worldID -> world anymore.

2009-11-12  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Darin Adler.

        externalRepresentation should take Frame as the argument
        https://bugs.webkit.org/show_bug.cgi?id=31393

        No new tests as this is just a refactoring.

        * WebFrame.cpp:
        (WebFrame::renderTreeAsExternalRepresentation):

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

        Replace worldIDs with world objects

        WebScriptWorld is the new object that represents a world.  The only
        place worldID is still used is in
        IWebFramePrivate::stringByEvaluatingJavaScriptInIsolatedWorld, but
        that will change soon.

        Part of <http://webkit.org/b/31414> Implement new SPI for dealing with
        user scripts/stylesheets and isolated worlds

        Reviewed by Sam Weinig.

        * ForEachCoClass.h: Added WebScriptWorld.

        * Interfaces/IWebFramePrivate.idl: Replaced contextForWorldID with
        contextForWorld.

        * Interfaces/IWebScriptWorld.idl: Added.

        * Interfaces/IWebViewPrivate.idl: Changed the user script/stylesheet
        functions to take an IWebScriptWorld instead of a worldID.

        * Interfaces/WebKit.idl: Added WebScriptWorld.

        * WebFrame.cpp:
        (WebFrame::contextForWorld): Renamed from contextForWorldID. Now takes
        an IWebScriptWorld.
        (WebFrame::stringByEvaluatingJavaScriptInIsolatedWorld): Moved the
        bizarre world caching/creation logic that DRT depends on here from the
        findWorld function in ScriptController.cpp. Updated to use
        ScriptController::executeScriptInWorld instead of
        ScriptController::executeScriptInIsolatedWorld.

        * WebFrame.h: Replaced contextForWorldID with contextForWorld.

        * WebScriptWorld.cpp: Added.
        (WebScriptWorld::WebScriptWorld):
        (WebScriptWorld::~WebScriptWorld):
        (WebScriptWorld::createInstance):
        (WebScriptWorld::AddRef):
        (WebScriptWorld::Release):
        (WebScriptWorld::QueryInterface):
        Standard COM class implementations.

        (WebScriptWorld::standardWorld): Returns a shared instance that represents
        WebCore's mainThreadNormalWorld().

        * WebScriptWorld.h: Added.
        (WebScriptWorld::world): Simple getter.

        * WebKit.vcproj/Interfaces.vcproj: Added IWebScriptWorld.idl.

        * WebKit.vcproj/WebKit.vcproj: Added WebScriptWorld.

        * WebKitClassFactory.cpp: Added WebScriptWorld.

        * WebView.cpp:
        (WebView::addUserScriptToGroup):
        (WebView::addUserStyleSheetToGroup):
        (WebView::removeUserScriptFromGroup):
        (WebView::removeUserStyleSheetFromGroup):
        (WebView::removeUserScriptsFromGroup):
        (WebView::removeUserStyleSheetsFromGroup):
        * WebView.h:
        Changed these functions to take an IWebScriptWorld instead of a worldID.

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

        Small clean-up in WebView's user content functions

        Preparation for <http://webkit.org/b/31414> Implement new SPI for
        dealing with user scripts/stylesheets and isolated worlds

        Reviewed by Dave Hyatt.

        * WebView.cpp:
        (toString):
        (toKURL):
        Added these helper functions to convert BSTRs to WebCore types.

        (toStringVector):
        (WebView::addUserScriptToGroup):
        (WebView::addUserStyleSheetToGroup):
        (WebView::removeUserScriptFromGroup):
        (WebView::removeUserStyleSheetFromGroup):
        (WebView::removeUserScriptsFromGroup):
        (WebView::removeUserStyleSheetsFromGroup):
        (WebView::removeAllUserContentFromGroup):
        Use the new helper functions.

2009-11-11  Beth Dakin  <bdakin@apple.com>

        Build fix. No review needed.

        * WebKitGraphics.cpp:
        (WebDrawText):

2009-11-10  Daniel Bates  <dbates@webkit.org>

        Reviewed by Oliver Hunt.

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

        Modified WebDropSource::QueryContinueDrag so as to not call EventHandler::dragSourceMovedTo.

        * WebDropSource.cpp:
        (WebDropSource::QueryContinueDrag): Removed call to EventHandler::dragSourceMovedTo.

2009-11-10  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=31312
        Decouple authentication panel callbacks from ResourceHandle

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::dispatchDidReceiveAuthenticationChallenge):
        * WebURLAuthenticationChallenge.cpp:
        (WebURLAuthenticationChallenge::initWithAuthenticationChallenge):
        (WebURLAuthenticationChallenge::sender):
        * WebURLAuthenticationChallengeSender.cpp:
        (WebURLAuthenticationChallengeSender::WebURLAuthenticationChallengeSender):
        (WebURLAuthenticationChallengeSender::createInstance):
        (WebURLAuthenticationChallengeSender::authenticationClient):
        * WebURLAuthenticationChallengeSender.h:
        * WebURLAuthenticationChallengeSenderCFNet.cpp:
        (WebURLAuthenticationChallengeSender::cancelAuthenticationChallenge):
        (WebURLAuthenticationChallengeSender::continueWithoutCredentialForAuthenticationChallenge):
        (WebURLAuthenticationChallengeSender::useCredential):
        Adjusted for WebCore changes.

2009-11-10  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by NOBODY - Build Fix.

        Updated fillRoundedRect to take a ColorSpace argument.

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

2009-11-08  Janne Koskinen  <janne.p.koskinen@digia.com>

        Reviewed by Holger Freyther.

        ResourceRequest to be class instead of struct
        https://bugs.webkit.org/show_bug.cgi?id=30670

        Started as a compilation fix for Symbian where the compiler makes a distinction between
        class and struct in function argument signatures.
        Changed forward declaration of ResourceRequest to have class in the forward
        declaration instead of struct.

        * WebDownload.h:

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

        Make CFDictionaryPropertyBag::createInstance return a COMPtr

        I also cleaned up CFDictionaryPropertyBag's class declaration a little
        while I was at it.

        Part of <http://webkit.org/b/25294> <rdar://problem/6803127> All
        WebKit/win classes should return COMPtrs from their static constructor
        members

        Reviewed by Steve Falkenburg.

        * CFDictionaryPropertyBag.cpp:
        (CFDictionaryPropertyBag::CFDictionaryPropertyBag): Changed to
        initialize m_refCount to 0. m_refCount gets increased to 1 by
        createInstance.
        (CFDictionaryPropertyBag::createInstance): Changed to return a COMPtr.

        * CFDictionaryPropertyBag.h:
          - Updated copyright years
          - Fixed header guard to match current style
          - Replaced #include of CoreFoundation.h with forward-declaration of
            CFMutableDictionaryRef
          - Added #include of COMPtr.h
          - Fixed opening brace placement in class declaration
          - Made createInstance return a COMPtr
          - Made constructor/destructor private
          - Made QueryInterface and IPropertyBag functions private
          - Removed unnecessary parameter names and MIDL comments

        * WebCache.cpp:
        (WebCache::statistics): Updated for change to
        CFDictionaryPropertyBag::createInstance. Now uses releaseRef to place
        the IPropertyBag pointers into the s array.

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::dispatchDidFailToStartPlugin):
        * WebDatabaseManager.cpp:
        (WebDatabaseManager::dispatchDidModifyDatabase):
        * WebFrame.cpp:
        (WebFrame::createJavaAppletWidget):
        Updated for change to CFDictionaryPropertyBag::createInstance.

        * WebHistory.cpp: Removed releaseUserInfo, which is no longer needed.
        That function was also doing an unnecessary call to setDictionary(0).
        (createUserInfoFromArray):
        (createUserInfoFromHistoryItem):
        Changed to return COMPtr.

        (WebHistory::loadFromURL): Updated for change to
        CFDictionaryPropertyBag::createInstance.

        (WebHistory::removeAllItems): Updated for change to
        CFDictionaryPropertyBag::createInstance, which fixed a leak! We had
        forgotten to call releaseUserInfo here.

        (WebHistory::removeItem):
        (WebHistory::addItem):
        (WebHistory::visitedURL):
        * WebIconDatabase.cpp:
        (postDidAddIconNotification):
        Updated for change to CFDictionaryPropertyBag::createInstance.

        * WebKitClassFactory.cpp:
        (releaseRefFromCreateInstance): Added this overloaded function
        template to abstract away the difference between createInstance
        functions that return a ref'd pointer and createInstance functions
        that return a COMPtr.
        (WebKitClassFactory::CreateInstance): Changed to use
        releaseRefFromCreateInstance.

2009-11-03  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Steve Falkenburg.

        WebActionModifierFlagsKey should return an unsigned, because
        flags imply a bitmask, and that is what other classes expect from
        it.

        * WebActionPropertyBag.cpp:
        (WebActionPropertyBag::Read):

2009-11-02  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by John Sullivan and Mark Rowe.

        <rdar://problem/7356733> Voiceover does not read correct media controller time values

        * WebCoreLocalizedStrings.cpp:
        (WebCore::localizedMediaTimeDescription):

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

        MSAA: Accessibility of headings is not correct

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

        Reviewed by Alice Liu.

        * AccessibleBase.cpp:
        (AccessibleBase::get_accDescription):
        Call the object's descriptionForMSAA(). Moved the comment to the
        WebCore file.
        (AccessibleBase::get_accRole):
        If the object has a string role, return that. Otherwise, return the
        integer role.

        * AccessibleBase.h:
        Removed description(), as this was moved to WebCore.

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

        MSAA: Accessibility of links is wrong

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

        Reviewed by Darin Adler.

        * AccessibleBase.cpp:
        (AccessibleBase::get_accState):
        Check whether the element is linked, instead of whether the node is an
        anchor, so the child "linkable" elements of anchor elements will also
        be "linked".
        (AccessibleBase::name):
        Return the name for MSAA.
        (AccessibleBase::value):
        Return the string value for MSAA.

2009-10-30  Evan Stade  <estade@chromium.org>

        Reviewed by David Levin.

        Notify the chrome when the focused node has changed.
        https://bugs.webkit.org/show_bug.cgi?id=30832

        Added stub implementation for new ChromeClient function.

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

2009-10-30  Roland Steiner  <rolandsteiner@chromium.org>

        Reviewed by Eric Seidel.

        Remove ENABLE_RUBY guards as discussed with Dave Hyatt and Maciej Stachowiak.

        Bug 28420 -  Implement HTML5 <ruby> rendering
        (https://bugs.webkit.org/show_bug.cgi?id=28420)

        No new tests (no functional change).

        * WebKit.vcproj/WebKit.vcproj:

2009-10-29  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Dan Bernstein.

        <http://webkit.org/b/30938> REGRESSION(r50233): Windows nightlies crash on launch due to changes
        to IWebFramePrivate vtable ordering

        * Interfaces/IWebFramePrivate.idl: Move the newly-added method to the end of the interface so that
        it doesn't affect the ordering of the vtable.

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

        Reviewed by Sam "Horatio" Weinig.

        Should not generate/build COM DOM bindings
        https://bugs.webkit.org/show_bug.cgi?id=30880

        * Interfaces/WebKit.idl: Remove generated interfaces.
        * WebKit.vcproj/InterfacesGenerated.vcproj: Removed.
        * WebKit.vcproj/WebKit.sln: Remove InterfacesGenerated.vcproj.
        * WebKit.vcproj/WebKit.submit.sln: Remove InterfacesGenerated.vcproj.
        * WebKit.vcproj/WebKit.vcproj: Remove generated interfaces.

2009-10-27  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Darin Adler.

        Provide a way to get counter values with layoutTestContoller
        https://bugs.webkit.org/show_bug.cgi?id=30555

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

2009-10-28  Joe Mason  <jmason@rim.com>

        Reviewed by Adam Treat.

        Call the shared FrameLoader::defaultObjectContentType instead of
        copying code into FrameLoaderClient::objectContentType.  This causes no
        behavioural change.

        * WebFrame.cpp:
        (WebFrame::objectContentType):

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

        Speculative build-fix for WebElementPropertyBag.cpp

        * WebElementPropertyBag.cpp: Include RenderObject.h

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

        Reviewed by Simon Fraser.

        Change HitTestResult methods to use (3d) transformation aware methods
        https://bugs.webkit.org/show_bug.cgi?id=27347

        The HitTestResult::boundingBox method was removed. The
        RenderObject must be used directly. In contrast to the
        old HitTestResult::boundingBox method this code must use
        a (3d) transformation aware method to not run into an
        assert in SVGRenderBase::mapLocalToContainer.

        * WebElementPropertyBag.cpp:
        (WebElementPropertyBag::Read): Replace HitTestResult::boundingBox()

2009-10-26  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Darin Adler.

        Make .rc files compile on Windows without depending on MFC headers
        https://bugs.webkit.org/show_bug.cgi?id=30750

        * WebKit.vcproj/WebKit.rc: Use winresrc.h because it exists even 
        when MFC is not installed, and is all that's needed here.

2009-10-26  Sam Weinig  <sam@webkit.org>

        Rubber-stamped by Darin Adler.

        Rollout r50041-50043.  The HTML5 spec changed to make HTMLOptionsCollection
        inherit from HTMLCollection.

        * DOMCreateInstance.cpp:

2009-10-25  Dan Bernstein  <mitz@apple.com>

        Reviewed by John Sullivan.

        Add contextForWorldID to the IWebFramePrivate interface.

        * Interfaces/IWebFramePrivate.idl:
        * WebFrame.h:

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

        Another try at fixing windows.

        * DOMCreateInstance.cpp:

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

        Touch WebKit.idl in an effort to try and regenerate the COM bindings.

        * Interfaces/WebKit.idl:

2009-10-23  Mark Rowe  <mrowe@apple.com>

        Build fix.  Include config.h before including other files.

        * AccessibleImage.cpp:

2009-10-23  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Geoff Garen.

        https://bugs.webkit.org/show_bug.cgi?id=30729
        Provide private API to request the global context for a specific world.
        Used to initialize parameters on the global object.

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

2009-10-23  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by John Sullivan.

        Pan-scrolling pointer shows up in other tabs or windows, can't "fix" it.
        <http://webkit.org/b/30732> and <rdar://7332018>.
        
        Turns off pan-scrolling on a WebView when it is about to lose focus.

        * WebView.cpp:
        (WebViewWndProc):

2009-10-23  Jon Honeycutt  <jhoneycutt@apple.com>

        MSAA: Name for image elements should use alt attribute text

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

        Reviewed by Alice Liu.

        * AccessibleBase.cpp:
        (AccessibleBase::createInstance):
        If the AccessibilityObject is an image, return an AccessibleImage.

        * AccessibleImage.cpp: Added.
        (AccessibleImage::AccessibleImage):
        Call the base constructor.
        (AccessibleImage::name):
        If the object is not an AccessibilityRenderObject, return the base's
        name(). Look first for an ARIA "labeled-by" attribute, then look for an
        alternate text attribute. Fall back to the base's name().

        * AccessibleImage.h: Added.
        (AccessibleImage::~AccessibleImage):

        * WebKit.vcproj/WebKit.vcproj:
        Add AccessibleImage to the project.

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

        Try and fix the windows build.

        * Interfaces/WebKit.idl:

2009-10-22  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig & Geoff Garen.

        https://bugs.webkit.org/show_bug.cgi?id=30696
        Update to incorporate support for IsolatedWorlds in JSC bindings.

        * Interfaces/IWebFramePrivate.idl:
        * WebFrame.cpp:
        (WebFrame::globalContext):
        (WebFrame::windowObjectCleared):
        (WebFrame::stringByEvaluatingJavaScriptInIsolatedWorld):
        * WebFrame.h:

2009-10-20  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by David Levin.

        Removed WebSocket runtime settings.
        https://bugs.webkit.org/show_bug.cgi?id=29896

        WebSocket runtime configuration is supported by chromium/v8 only.

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

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

        Fix crashes/assertions when calling WebLocalizedString from multiple
        threads concurrently

        Fixes <http://webkit.org/b/30534> WebLocalizedString asserts if called
        from multiple threads concurrently

        Reviewed by John Sullivan.

        * WebLocalizableStrings.cpp:
        (mainBundleLocStringsMutex):
        (frameworkLocStringsMutex):
        Added these new getters.

        (findCachedString):
        (cacheString):
        Lock the relevant mutex before accessing each string map. Otherwise
        bad things could happen if two threads end up here at the same time.

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

        Get rid of a few static initializers/exit-time destructors in
        WebLocalizableStrings

        Reviewed by Dan Bernstein.

        * WebLocalizableStrings.cpp:
        (mainBundleLocStrings):
        (frameworkLocStrings):
        Added these functions instead of file-scope variables.

        (findCachedString):
        (cacheString):
        Updated to use the new functions.

2009-10-19  Nate Chapin  <japhet@chromium.org>

        Unreviewed, build fix.

        Update call to FrameLoader::urlSelected().

        * WebCoreSupport/WebContextMenuClient.cpp:
        (WebContextMenuClient::searchWithGoogle):

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

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=30456
        Fixes for new Debug_All Windows build configuration.

        * WebKitClassFactory.cpp: Use new DEBUG_ALL preprocessor define for library naming.

2009-10-16  Jon Honeycutt  <jhoneycutt@apple.com>

        Add SPI to determine whether a plug-in has ever been halted.

        Part of <rdar://problem/7312158>.

        Reviewed by Dan Bernstein.

        * Interfaces/IWebViewPrivate.idl:
        Add hasPluginForNodeBeenHalted().

        * WebView.cpp:
        (pluginViewForNode):
        Code factored out of isNodeHaltedPlugin().
        (WebView::isNodeHaltedPlugin):
        Remove STDMETHODCALLTYPE, as it has no use at the definition. Use
        pluginViewForNode().
        (WebView::restartHaltedPluginForNode):
        Ditto.
        (WebView::hasPluginForNodeBeenHalted):
        Get the PluginView for the given node. Return the result of
        PluginView::hasBeenHalted().

        * WebView.h:
        Declare hasPluginForNodeBeenHalted().

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

        Reviewed by Adam Roben.

        Add a Debug_All configuration to build entire stack as debug.
        Change Debug_Internal to:
        - stop using _debug suffix for all WebKit/Safari binaries
        - not use _debug as a DLL naming suffix
        - use non-debug C runtime lib.

        * WebKit.vcproj/InterfacesGenerated.vcproj: Renamed single configuration from "Release" to "all".
        * WebKit.vcproj/WebKit.make: Debug build in makefile should build Debug_All.
        * WebKit.vcproj/WebKit.sln: Add Debug_All configuration.
        * WebKit.vcproj/WebKit.submit.sln: Add Debug_All configuration.
        * WebKit.vcproj/WebKit.vcproj:
        Remove extraneous OutputDirectory/IntermediateDirectory in Debug_Cairo.
        Add Debug_All configuration.
        * WebKit.vcproj/WebKitGUID.vcproj: Add Debug_All configuration.

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

        Add SPI to restart a halted plug-in.

        Part of <rdar://problem/7273354> Halted plug-ins should restart on
        mouseover

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

        Reviewed by Kevin Decker.

        * Interfaces/IWebViewPrivate.idl:
        Add restartHaltedPluginForNode().

        * WebView.cpp:
        (WebView::restartHaltedPluginForNode):
        From the IDOMNode, query for the DOMNode. From the DOMNode, get the
        WebCore::Node. Get the node's renderer, and check whether it is a
        RenderWidget. If so, get its Widget, and check whether it's a
        PluginView. If so, call PluginView::restart().

        * WebView.h:
        Declare restartHaltedPluginForNode().

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

        Add SPI to determine whether a node is a halted plug-in.

        Part of <rdar://problem/7273354> Halted plug-ins should restart on
        mouseover

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

        Reviewed by Darin Adler.

        * Interfaces/IWebViewPrivate.idl:
        Add isNodehaltedPlugin().

        * WebView.cpp:
        (WebView::isNodeHaltedPlugin):
        From the IDOMNode, query for the DOMNode. From the DOMNode, get the
        WebCore::Node. Get the node's renderer, and check whether it is a
        RenderWidget. If so, get its Widget, and check whether it's a
        PluginView. If so, return the result of PluginView::isHalted().

        * WebView.h:
        Declare isNodeHaltedPlugin().

2009-10-15  Daniel Bates  <dbates@webkit.org>

        Reviewed by Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=24731
        And
        rdar://problem/5015961
        
        Implements support for DHTML drag-and-drop operations (i.e. ondragstart, ondragend)
        in the Windows build so that it conforms to the Mac OS X build. Hence, dropEffect is
        correctly set.
        
        The WebView and WebDropSource drag-and-drop functions, as called by function
        DoDragDrop in its event loop, neither used the drop effect as specified by
        event.dataTransfer.dropEffect nor respected event.dataTransfer.effectsAllowed.
        Instead, these functions defaulted to some hardcoded drop effect and set of
        allowed drop effects, respectively.

        Tests: fast/events/drag-and-drop.html

        * WebCoreSupport/WebDragClient.cpp:
        (WebDragClient::startDrag):
        * WebDropSource.cpp:
        (WebDropSource::QueryContinueDrag): Moved call to EventHandler::dragSourceEndedAt
        into method WebDragClient::startDrag.
        * WebDropSource.h:
        * WebView.cpp:
        (WebView::keyStateToDragOperation): Fixes <rdar://problem/5015961>. Determines
        appropriate drop effect from state of keyboard and allowed effects
        m_page->dragController()->sourceDragOperation().
        (WebView::DragEnter):
        (WebView::DragOver):
        (WebView::Drop):
        * WebView.h:

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

        Windows build fix

        * WebKit.vcproj/Interfaces.vcproj: Exclude IWebHistoryDelegate and
        IWebNavigationData from the build (they get #imported via WebKit.idl).

2009-10-14  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        WebKit Win API should provide a delegate interface for global history.
        https://bugs.webkit.org/show_bug.cgi?id=29905

        -Add IWebHistoryDelegate for clients to implement.
        -Add (I)WebNavigationData for the history delegate's use.
        -When it exists, call the history delegate instead of using WebHistory.
        
        * Interfaces/IWebHistoryDelegate.idl: Added.
        * Interfaces/IWebHistoryPrivate.idl:
        * Interfaces/IWebNavigationData.idl: Added.
        * Interfaces/IWebViewPrivate.idl:
        * Interfaces/WebKit.idl:
        
        * WebKit.vcproj/Interfaces.vcproj:
        * WebKit.vcproj/WebKit.vcproj:

        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::populateVisitedLinks):
        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::updateGlobalHistory):
        (WebFrameLoaderClient::updateGlobalHistoryRedirectLinks):
        (WebFrameLoaderClient::setTitle):
 
         * WebView.cpp:
        (WebView::close):
        (WebView::mainFrameURL):
        (WebView::setHistoryDelegate):
        (WebView::historyDelegate):
        (WebView::addVisitedLinks):
        * WebView.h:
        
        * WebHistory.cpp:
        (WebHistory::setVisitedLinkTrackingEnabled):
        (WebHistory::removeAllVisitedLinks):
        * WebHistory.h:

        * WebNavigationData.cpp: Added.
        (WebNavigationData::QueryInterface):
        (WebNavigationData::AddRef):
        (WebNavigationData::Release):
        (WebNavigationData::WebNavigationData):
        (WebNavigationData::~WebNavigationData):
        (WebNavigationData::createInstance):
        (WebNavigationData::url):
        (WebNavigationData::title):
        (WebNavigationData::originalRequest):
        (WebNavigationData::response):
        (WebNavigationData::hasSubstituteData):
        (WebNavigationData::clientRedirectSource):
        * WebNavigationData.h: Added.

2009-10-13  Dave Hyatt  <hyatt@apple.com>

        Fix more WebView bustage.

        * WebView.cpp:
        (WebView::addUserScriptToGroup):
        (WebView::addUserStyleSheetToGroup):
        (WebView::removeUserScriptsFromGroup):
        (WebView::removeUserStyleSheetsFromGroup):

2009-10-13  Dave Hyatt  <hyatt@apple.com>

        Fix build bustage on Windows.

        * WebView.cpp:
        (WebView::addUserScriptToGroup):
        (WebView::addUserStyleSheetToGroup):
        (WebView::removeUserScriptsFromGroup):
        (WebView::removeUserStyleSheetsFromGroup):

2009-10-13  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Adam Roben..

        Split removal functions for user scripts and stylehseets based on type.

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

2009-10-09  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        Factor HistoryController out of FrameLoader
        https://bugs.webkit.org/show_bug.cgi?id=30246

        Update API call.

        * WebView.cpp:
        (WebView::loadBackForwardListFromOtherView):

2009-10-08  Jon Honeycutt  <jhoneycutt@apple.com>

        Remove the WebKitPluginHalterEnabledPreferenceKey in favor of checking
        for the existence of a PluginHalterDelegate.

        Reviewed by Dan Bernstein.

        * Interfaces/IWebPreferencesPrivate.idl:
        Remove the getter and setter.

        * WebCoreSupport/WebPluginHalterClient.cpp:
        (WebPluginHalterClient::enabled):
        Return true if the delegate exists.

        * WebCoreSupport/WebPluginHalterClient.h:
        Declare implementation of enabled().

        * WebPreferenceKeysPrivate.h:
        Removed the pref key.

        * WebPreferences.cpp:
        (WebPreferences::initializeDefaultSettings):
        Removed initialization of the pref.

        * WebPreferences.h:
        Removed declaration of the getter/setter.

        * WebView.cpp:
        (WebView::notifyPreferencesChanged):
        Don't propagate the pref.

2009-10-08  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Move executeScript from FrameLoader to ScriptController
        https://bugs.webkit.org/show_bug.cgi?id=30200

        Update API call.

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

2009-10-08  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Remove the shouldLoadMediaElementURL implementation.

        * Interfaces/IWebPolicyDelegatePrivate.idl:
        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::shouldUsePluginDocument):
        * WebCoreSupport/WebFrameLoaderClient.h:

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

        Make IWebInspectorPrivate be accessed in a more standard way

        IWebViewPrivate::inspectorPrivate has been removed. Callers should
        instead use IWebViewPrivate::inspector and then use QueryInterface to
        get the IWebInspectorPrivate interface. This matches how our other COM
        classes work.

        Fixes <http://webkit.org/b/30215> Make IWebInspectorPrivate be
        accessed in a more standard way

        Reviewed by John Sullivan and Tim Hatcher.

        * Interfaces/IWebViewPrivate.idl: Removed inspectorPrivate.

        * WebInspector.cpp:
        (WebInspector::QueryInterface): Support querying to
        IWebInspectorPrivate.

        * WebView.cpp:
        * WebView.h:
        Removed inspectorPrivate.

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

        Move the new IWebViewPrivate::inspectorPrivate function after all
        functions that existed when Safari 4.0.3 was released

        Fixes <http://webkit.org/b/30085> REGRESSION (r49091): run-safari
        crashes in Safari.dll

        Reviewed by John Sullivan.

        * Interfaces/IWebViewPrivate.idl: Moved inspectorPrivate to the end of
        the interface, so it won't modify the vtable that Safari 4.0.3 sees.

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

        Expose origin whitelisting in the WebKit API on Windows

        Fixes <http://webkit.org/b/30185>.

        Reviewed by Eric Seidel.

        * Interfaces/IWebViewPrivate.idl: Added whiteListAccessFromOrigin and
        resetOriginAccessWhiteLists, to match the Mac SPI.

        * WebView.cpp:
        (WebView::whiteListAccessFromOrigin):
        (WebView::resetOriginAccessWhiteLists):
        * WebView.h:
        Added. These just call through to SecurityOrigin.

2009-10-07  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        Factor PolicyChecker out of FrameLoader
        https://bugs.webkit.org/show_bug.cgi?id=30155

        Move the policy callback to the policy object.

        * WebFrame.cpp:
        (WebFrame::dispatchWillSubmitForm):
        (WebFrame::receivedPolicyDecision):
        (WebFrame::dispatchDecidePolicyForMIMEType):
        (WebFrame::dispatchDecidePolicyForNewWindowAction):
        (WebFrame::dispatchDecidePolicyForNavigationAction):

2009-10-07  Daniel Bates  <dbates@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=30102
        And
        <rdar://problem/5015957>
        
        Fixes an issue (in the Windows build) where the cursor does not change to the
        not-allowed cursor when the drag-and-drop operation is not allowed.
        
        The allowed effects in WebDragClient::startDrag are hard-coded to be 
        DROPEFFECT_COPY | DROPEFFECT_LINK | DROPEFFECT_MOVE. Instead, the list of 
        allowed drop effects should be determined by the allowed operations of the
        drag source.
        
        We cannot test this using DRT because DRT looks at the programmatic drop 
        cursor and until bug #24731 is fixed this value is hard-coded to DragOperationCopy.
        That is, there is a discrepancy in the Windows build between the Windows API-based 
        drop effect and the WebKit drop effect. Because DRT cannot read the screen buffer 
        to determine the cursor, a manual test is needed.

        * WebCoreSupport/WebDragClient.cpp:
        (draggingSourceOperationMaskToDragCursors): Added method.
        (WebDragClient::startDrag):

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

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=30176
        <rdar://problem/7281553> Extra information in UA causes problems with gmail
        
        * WebKit.vcproj/WebKit.rc: Restore PRODUCTVERSION to build number only. Remove extra space.

2009-10-06  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: default to an attached inspector window on Windows (as on Mac).

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

        * WebCoreSupport/WebInspectorClient.cpp:
        (WebInspectorClient::showWindowWithoutNotifications):

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

        Reviewed by Eric Seidel.

        Move FrameLoader::canLoad to SecurityOrigin
        https://bugs.webkit.org/show_bug.cgi?id=30111

        * WebFrame.cpp:
        (WebFrame::allowsFollowingLink):

2009-10-06  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: close inspector client view on
        InspectorController::close API call.

        In order to run batch web inspector layout tests (and not affect 
        subsequent tests) we should close inspector client's view upon
        InspectorController::close API call.

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

        * WebCoreSupport/WebInspectorClient.cpp:
        (WebInspectorClient::createPage):

2009-10-06  David Levin  <levin@chromium.org>

        Reviewed by NOBODY (windows build fix).

        Speculative build fix for windows (due to r49160).

        * WebDownloadCFNet.cpp:
        (WebDownload::initToResumeWithBundle):
        * WebIconDatabase.cpp:
        (WebIconDatabase::dispatchDidAddIconForPageURL):

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

        Reviewed by Timothy Hatcher.

        Web Inspector: add testing harness for Web Inspector.

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

        * Interfaces/IWebInspectorPrivate.idl: Added.
        * Interfaces/IWebViewPrivate.idl:
        * Interfaces/WebKit.idl:
        * WebInspector.cpp:
        (WebInspector::evaluateInFrontend):
        * WebInspector.h:
        * WebView.cpp:
        (WebView::inspectorPrivate):
        * WebView.h:

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

        Reviewed by Adam Roben.

        Add support for blacklist patterns to user stylesheets and scripts in addition to whitelist patterns.

        * Interfaces/IWebViewPrivate.idl:
        * WebView.cpp:
        (toStringVector):
        (WebView::addUserScriptToGroup):
        (WebView::addUserStyleSheetToGroup):
        * WebView.h:

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

        Reviewed by Mark Rowe.

        <https://bugs.webkit.org/show_bug.cgi?id=29989>
        Safari version number shouldn't be exposed in WebKit code
        
        For a WebKit version of 532.3.4:
        Product version is: 5.32.3.4 (was 4.0.3.0)
        File version is: 5.32.3.4 (was 4.532.3.4)

        * WebKit.vcproj/WebKit.rc:

2009-09-30  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Fix for <rdar://problem/7259706>
        Need WebKit API or SPI on Mac and Windows to test whether it's safe to load a page in a new tab/window

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

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

        Reviewed by Adam Roben.

        Add the ability to remove user stylesheets and scripts by URL.

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

2009-09-29  Kenneth Russell  <kbr@google.com>

        Reviewed by Dimitri Glazkov.

        Add support for run-time flag for 3D canvas
        https://bugs.webkit.org/show_bug.cgi?id=29826

        * WebView.cpp:
        (WebView::notifyPreferencesChanged): Enable experimental WebGL
        flag when 3D_CANVAS is enabled in the build.

2009-09-28  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler and Sam Weinig.

        Onclick not fired for an element copied with cloneContents() or cloneNode()
        https://bugs.webkit.org/show_bug.cgi?id=25130

        * DOMCreateInstance.cpp: GEN_DOMEventListener is a pure interface now.

        * WebKit.vcproj/WebKit.vcproj: Removed GEN_DOMEventListener.cpp.

2009-09-28  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Eric Seidel.

        Add experimentalWebSocketsEnabled in WebPreferences.
        https://bugs.webkit.org/show_bug.cgi?id=28941

        * Interfaces/IWebPreferencesPrivate.idl:
        * WebPreferenceKeysPrivate.h:
        * WebPreferences.cpp:
        (WebPreferences::initializeDefaultSettings):
        (WebPreferences::setExperimentalWebSocketsEnabled):
        (WebPreferences::experimentalWebSocketsEnabled):
        * WebPreferences.h:
        * WebView.cpp:
        (WebView::notifyPreferencesChanged):
        (core):

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

        Reviewed by Steve Falkenburg.

        Speed up access to history items by caching date computation.

        * History/WebHistory.mm:
        (getDayBoundaries): Refactored from timeIntervalForBeginningOfDay.
        Returns the beginning of the day that the passed time is within and
        the beginning of the next day.
        (beginningOfDay): Added. Uses getDayBoundaries so it can be fast for
        multiple dates within the same day, which is the common case.
        (dateKey): Added. Calls beginningOfDay and converts to an integer.
        (WebHistory::findKey): Changed to call dateKey instead of
        timeIntervalForBeginningOfDay.

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

        Add SPI to invalidate a WebView's backing store

        This is useful in conjunction with
        IWebUIDelegatePrivate2::drawBackground. This provides a way for the UI
        delegate to force WebView to get its background redrawn.

        Fixes <http://webkit.org/b/29737> Need SPI to invalidate a WebView's
        backing store

        Reviewed by Anders Carlsson.

        * Interfaces/IWebViewPrivate.idl: Added invalidateBackingStore.
        * WebView.cpp:
        (WebView::invalidateBackingStore): If rect is 0, invalidate our whole
        client rect. Otherwise invalidate the intersection of rect with our
        client rect.
        * WebView.h:

2009-09-24  Jon Honeycutt  <jhoneycutt@apple.com>

        Add a mechanism for automatically halting plug-ins.

        Reviewed by Oliver Hunt.

        * Interfaces/IWebPluginHalterDelegate.idl: Added. Defines an interface
        for a delegate that determines whether plug-ins should be halted.

        * Interfaces/IWebPreferencesPrivate.idl:
        Declare functions to get and set the enabled state of the plug-in
        halter and the plug-in allowed run time.

        * Interfaces/IWebViewPrivate.idl:
        Declare functions to get and set the IWebPluginHalterDelegate.

        * Interfaces/WebKit.idl:

        * WebCoreSupport/WebPluginHalterClient.cpp: Added.
        (WebPluginHalterClient::WebPluginHalterClient):
        (WebPluginHalterClient::shouldHaltPlugin):
        Get the IWebPluginHalterDelegate for the WebView. Create a WebKit
        DOMNode for the WebCore Node. Call the delegate's shouldHaltPlugin().
        If the call fails, return false. Otherwise, return the result of the
        call.

        * WebCoreSupport/WebPluginHalterClient.h: Added.

        * WebKit.vcproj/Interfaces.vcproj:
        Add IWebPluginHalterDelegate.idl.

        * WebKit.vcproj/WebKit.vcproj:
        Add WebPluginHalterClient.{h,cpp}.

        * WebPreferenceKeysPrivate.h:
        Define WebKitPluginHalterEnabledPreferenceKey and
        WebKitPluginAllowedRunTimePreferenceKey.

        * WebPreferences.cpp:
        (WebPreferences::initializeDefaultSettings):
        Leave plug-in halting disabled by default. Set the default value for
        the plug-in allowed run time to the max value of an unsigned int.
        (WebPreferences::setPluginHalterEnabled):
        (WebPreferences::pluginHalterEnabled):
        (WebPreferences::setPluginAllowedRunTime):
        (WebPreferences::pluginAllowedRunTime):

        * WebPreferences.h:

        * WebView.cpp:
        (WebView::close):
        Clear the IWebPluginHalterDelegate.
        (WebView::initWithFrame):
        Pass a WebPluginHalterClient when creating the Page.
        (WebView::notifyPreferencesChanged):
        Set the new settings when the preferences changed notification is
        received.
        (WebView::setPluginHalterDelegate):
        (WebView::pluginHalterDelegate):

        * WebView.h:
        Declare overrides of setPluginHalterDelegate() and
        pluginHalterDelegate(). Added a member to track the
        IWebPluginHalterDelegate.

2009-09-14  John Gregg  <johnnyg@google.com>

        Reviewed by Eric Seidel.

        Enable switch for notifications (experimental) in Page Settings
        https://bugs.webkit.org/show_bug.cgi?id=28930

        Adds support for the experimentalNotificationsEnabled flag in Settings through
        WebPreferencesPrivate interface.  Also cleans up some issues accessing the
        notification delegate through DumpRenderTree.

        * Interfaces/IWebPreferencesPrivate.idl:
        * WebCoreSupport/WebDesktopNotificationsDelegate.cpp:
        (WebDesktopNotificationsDelegate::hasNotificationDelegate):
        (WebDesktopNotificationsDelegate::notificationDelegate):
        * WebPreferenceKeysPrivate.h:
        * WebPreferences.cpp:
        (WebPreferences::initializeDefaultSettings):
        (WebPreferences::setExperimentalNotificationsEnabled):
        (WebPreferences::experimentalNotificationsEnabled):
        * WebPreferences.h:
        * WebView.cpp:
        (WebView::notifyPreferencesChanged):

2009-09-23  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        <rdar://problem/7243354> 
        REGRESSION(48580-48636): Crash clicking embedded QT preview button on apple.com/trailers
        
        Check for a null IWebPolicyDelegatePrivate.
        
        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::shouldLoadMediaElementURL):

2009-09-22  Sam Weinig  <sam@webkit.org>

        Rubber-stamped by Adam Roben.

        Remove accidentally left in declaration of reloadFromOrigin in IWebFramePrivate.idl

        * Interfaces/IWebFramePrivate.idl:

2009-09-22  Sam Weinig  <sam@webkit.org>

        Reviewed by Steve Falkenburg.

        Fix for <rdar://problem/6451745>
        Windows WebKit needs to implement reloadFromOrigin()

        * Interfaces/IWebFrame.idl:
        * Interfaces/IWebFramePrivate.idl:
        * Interfaces/IWebView.idl:
        * WebFrame.cpp:
        (WebFrame::reloadFromOrigin):
        * WebFrame.h:
        * WebView.cpp:
        (WebView::reloadFromOrigin):
        * WebView.h:

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

        Manage refcounts correctly in DefaultDownloadDelegate::willSendRequest

        Fixes <http://webkit.org/b/29650> Crash in
        WebDownload::willSendRequest when using DefaultDownloadDelegate

        Reviewed by Brady Eidson.

        * DefaultDownloadDelegate.cpp:
        (DefaultDownloadDelegate::willSendRequest): Call AddRef() on the
        object we're returning via the finalRequest out-parameter.

2009-09-21  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        <rdar://problem/7135588> HTMLMediaElement should ask WebPolicyLoadDelegate before loading resource

        Implement WebFrameLoaderClient::shouldLoadMediaElementURL and have it call the new private policy
        delegate method.
        
        * Interfaces/IWebPolicyDelegatePrivate.idl: Added.
        * Interfaces/WebKit.idl:
        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::shouldLoadMediaElementURL):
        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebKit.vcproj/Interfaces.vcproj:

2009-09-17  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Hausmann.

        Make PlatformWindow return something else than PlatformWidget
        https://bugs.webkit.org/show_bug.cgi?id=29085

        Reflect the rename of platformWindow and it's return type.

        * AccessibleBase.cpp:
        (AccessibleBase::get_accParent):
        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::platformPageClient):
        * WebCoreSupport/WebChromeClient.h:

2009-09-17  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        Remove assertions that were being hit by calls to
        m_verticalScrollbar->invalidate(). These assertions were valid,
        but they were causing tests to fail, so replacing with a FIXME 
        until we can find out the real cause/solution that is being tracked 
        by http://webkit.org/b/29350.

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

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

        Post WebViewDidChangeSelectionNotification when the text selection changes.

        Fixes <http://webkit.org/b/29321>

        Reviewed by Adam Roben.

        * Interfaces/IWebView.idl:
        * WebCoreSupport/WebEditorClient.cpp:
        (WebEditorClient::respondToChangedSelection):

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

        Fix a crash when a WebView's HWND is destroyed before IWebView::close
        is called

        WebView's HWND was being sent a WM_TIMER message after the WebView was
        destroyed. This normally isn't possible (we call DestroyWindow inside
        WebView's destructor to ensure the HWND doesn't outlive the WebView),
        but r48060 changed WebView to call SetParent(m_viewWindow,
        HWND_MESSAGE) while handling WM_DESTROY, and apparently this puts the
        HWND into some weird half-destroyed state where it can still receive
        WM_TIMER messages.

        Fixes <http://webkit.org/b/29337> <rdar://problem/7209897> REGRESSION
        (r48060): unrepro but frequent crash in WebViewWndProc

        Reviewed by Steve Falkenburg.

        * WebView.cpp:
        (WebViewWndProc): When handling WM_DESTROY, call setIsBeingDestroyed()
        before calling close(). This allows setHostWindow to detect that we're
        handling WM_DESTROY. No other code in close() cared whether
        isBeingDestroyed() was true or not.
        (WebView::setHostWindow): If our host window is being set to 0 and
        we're being destroyed, don't become a message-only window. Doing this
        while handling WM_DESTROY seems to lead to crashes.

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

        Add a UI delegate callback to let the delegate draw a WebView's
        background

        Fixes <http://webkit.org/b/29315>.

        Reviewed by Dave Hyatt.

        * Interfaces/IWebUIDelegatePrivate.idl: Added
        IWebUIDelegatePrivate2::drawBackground.

        * WebView.cpp:
        (WebView::paintIntoBackingStore): After clearing or filling with
        white, let the delegate draw whatever background it wants. Also added
        an assertion that the dirty rect is within our bounds.

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

        Prevent WebView from painting over sibling windows

        Fixes <http://webkit.org/b/29300> <rdar://problem/7227960> WebView can
        paint over sibling windows

        Reviewed by Darin Adler.

        * WebView.cpp:
        (WebView::initWithFrame): Create the WebView's HWND with the
        WS_CLIPSIBLINGS style.

2009-09-14  Brady Eidson  <beidson@apple.com>

        Reviewed by Alexey Proskuryakov.

        Safari 4 cannot be used to update firmware on Linksys routers.
        <rdar://problem/7174050> and https://bugs.webkit.org/show_bug.cgi?id=29160

        Adopt the new WebCore::CredentialStorage in WebKit/Win.

        * WebDownloadCFNet.cpp:
        (WebDownload::didReceiveAuthenticationChallenge):

2009-09-11  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Dan Bernstein.

        Properly propagate preference from WebPreferences to WebCore::Settings.
        https://bugs.webkit.org/show_bug.cgi?id=29192

        * WebView.cpp:
        (WebView::initWithFrame): Apply setting when creating a new WebView.
        (WebView::notifyPreferencesChanged): Apply setting when preferences change.

2009-09-11  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Darin Adler.

        Allow WebKit clients to opt out of high resolution timers on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=29192

        * Interfaces/IWebPreferencesPrivate.idl: Added getter/setter.
        Put this just after last 4.0.3 method for future merging.
        * Interfaces/WebKit.idl: Touched to force a rebuild.
        * WebPreferenceKeysPrivate.h: Added prefs key for high res timers.
        * WebPreferences.cpp:
        (WebPreferences::initializeDefaultSettings): Initialize high res timers to enabled.
        (WebPreferences::setShouldUseHighResolutionTimers): Added.
        (WebPreferences::shouldUseHighResolutionTimers): Added.
        * WebPreferences.h: Added getter/setter.

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

        Get user script/stylesheet tests running on Windows

        Fixes <http://webkit.org/b/29181> User script/stylesheet tests are
        skipped on Windows

        Reviewed by John Sullivan.

        * Interfaces/IWebViewPrivate.idl: Added addUserScriptToGroup,
        addUserStyleSheetToGroup, removeUserContentFromGroup,
        removeAllUserContentFromGropu to match the Mac SPI.

        * WebView.cpp:
        (WebView::addUserScriptToGroup):
        (WebView::addUserStyleSheetToGroup):
        (WebView::removeUserContentFromGroup):
        (WebView::removeAllUserContentFromGroup):
        * WebView.h:
        Added. Implementation was based on similar methods in WebView.mm.

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

        Fix crash on launch on Windows.

        Rubber-stamped by Mark Rowe.

        * WebKit.vcproj/WebKit.vcproj:
        Define ENABLE_WEB_SOCKETS for all configurations.

2009-09-07  Drew Wilson  <atwilson@google.com>

        Reviewed by David Levin.

        Enable SHARED_WORKERS by default.
        https://bugs.webkit.org/show_bug.cgi?id=28959

        * WebKit.vcproj/WebKit.vcproj:

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

        Make WebView function without a parent window

        When WebView has no parent window, it becomes a message-only window,
        which hides it from the screen and prevents it from appearing on the
        taskbar.

        Fixes <http://webkit.org/b/28971> <rdar://problem/4976998>
        WebView::initWithFrame fails if there's no host window

        Reviewed by Dave Hyatt.

        * WebView.cpp:
        (WebView::initWithFrame): m_hostWindow is null, use HWND_MESSAGE as
        our parent window, which will make us a message-only window.
        (WebView::setHostWindow): If he new host window is null, use
        HWND_MESSAGE as our parent window, which will make us a message-only
        window.

2009-09-04  Adam Barth  <abarth@webkit.org>

        Unreviewed attempt at a build fix.

        Added missing include.

        * WebCoreSupport/WebFrameLoaderClient.cpp:

2009-09-04  Adam Barth  <abarth@webkit.org>

        Unreviewed attempt at a build fix.

        Fix typo of IWebFrameLoadDelegatePrivate2 and make
        IWebFrameLoadDelegatePrivate inherit from IWebFrameLoadDelegatePrivate
        as requestd by Adam Roben.

        * Interfaces/IWebFrameLoadDelegatePrivate2.idl:
        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::didDisplayInsecureContent):
        (WebFrameLoaderClient::didRunInsecureContent):

2009-09-04  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

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

        Plumb mixed content notifications to IWebFrameLoadDelegatePrivate.

        * Interfaces/IWebFrameLoadDelegatePrivate2.idl: Added.
        * Interfaces/WebKit.idl:
        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::didDisplayInsecureContent):
        (WebFrameLoaderClient::didRunInsecureContent):
        * WebKit.vcproj/Interfaces.vcproj:

2009-09-03  Adam Barth  <abarth@webkit.org>

        Reviewed by eric@webkit.org.

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

        Stub implementations of mixed content methods of FrameLoaderClient. 

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::didDisplayInsecureContent):
        (WebFrameLoaderClient::didRunInsecureContent):
        * WebCoreSupport/WebFrameLoaderClient.h:

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

        Post a notification when a WebView is closing

        This is useful for situations where some code wants to react to the
        WebView closing but isn't in charge of the WebView and can't otherwise
        be notified. This notification could replace
        IWebUIDelegatePrivate::webViewClosing if we decide that the
        notification system isn't too burdensome.

        <http://webkit.org/b/28875>

        Reviewed by John Sullivan.

        * Interfaces/IWebViewPrivate.idl: Added the
        WebViewWillCloseNotification string constant.
        * WebKit.vcproj/WebKit.vcproj: Link against comsuppw.lib in all
        configurations so that we can use _bstr_t.
        * WebView.cpp:
        (WebView::close): Post the WebViewWillCloseNotification.

2009-08-31  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=28852
        Rename KURL single argument constructor to avoid confusion

        * WebURLResponse.cpp: (WebURLResponse::createInstance): Adapt to the change.

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

        Give WebKit clients access to the window features specified in
        window.open

        Reviewed by Steve Falkenburg.

        * COMVariantSetter.h: Added COMVariantSetters for bool and float.

        * Interfaces/IWebUIDelegatePrivate.idl: Added IWebUIDelegatePrivate2,
        which contains a new version of createWebViewWithRequest that also
        passes the window features as an IPropertyBag. This is analagous to
        the -createWebViewWithRequest:windowFeatures: method added to
        WebUIDelegate on Mac in r27452. Also added key strings for use with
        the window features property bag.

        * WebCoreSupport/WebChromeClient.cpp:
        (createWindowFeaturesPropertyBag): Added this helper function to turn
        a WebCore::WindowFeatures into an IPropertyBag for passing to WebKit
        clients.
        (WebChromeClient::createWindow): If the UI delegate implements
        IWebUIDelegatePrivate2, call the new createWebViewWithRequest function
        that takes a window features property bag. If the delegate doesn't
        implement the new function, fall back to the old functions.

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

        A little clean-up in WebChromeClient::createWindow

        Reviewed by Steve Falkenburg.

        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::createWindow): Refactored to share more code between
        the dialog and non-dialog cases.

2009-08-28  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Holger Freyther.

        https://bugs.webkit.org/show_bug.cgi?id=25889
        [GTK] scrollbar policy for main frame is not implementable

        Add empty implementation for new ChromeClient method.

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

2009-08-27  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Adam Roben.

        Modify Release_Cairo target to build testapi using the
        Release_CFLite target so that the correct CoreFoundation
        (in this case, CFLite.dll) is linked.

        * WebKit.vcproj/WebKit.sln:

2009-08-26  Adam Barth  <abarth@webkit.org>

        Reviewed by Oliver Hunt.

        Don't let local files access web URLs
        https://bugs.webkit.org/show_bug.cgi?id=28480

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

2009-08-26  David Levin  <levin@chromium.org>

        Reviewed by Darin Fisher.

        ResourceRequestBase::*[Aa]llowHTTPCookies shouldn't mention http.
        https://bugs.webkit.org/show_bug.cgi?id=28735

        * WebMutableURLRequest.cpp:
        (WebMutableURLRequest::setHTTPShouldHandleCookies):

2009-08-25  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Oliver Hunt.

        <video> and <audio> controller should be accessible
        https://bugs.webkit.org/show_bug.cgi?id=28081

        * WebCoreLocalizedStrings.cpp:
        (WebCore::localizedMediaControlElementString):
        (WebCore::localizedMediaControlElementHelpText):
        (WebCore::localizedMediaTimeDescription):
            New.

2009-08-25  Brent Fulgham  <bfulgham@webkit.org>

        Build fix for Windows.

        Revise Debug_Cairo build target to build testapi, jsc, WinLauncher,
        DumpRenderTree, and TestNetscapeAPI using WinCairo debug build
        settings so they link against the proper libraries.

        * WebKit.vcproj/WebKit.sln:

2009-08-25  David Levin  <levin@chromium.org>

        Reviewed by Adam Roben.

        PLATFORM(CFNETWORK) should be USE(CFNETWORK).
        https://bugs.webkit.org/show_bug.cgi?id=28713

        Also, moved the #if header section after the other #includes.

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

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

        Reviewed by Steve Falkenburg.

        Revise CFLite Debug build to emit DLL's with _debug label.
        https://bugs.webkit.org/show_bug.cgi?id=28695.

        * WebKit.vcproj/WebKit.vcproj: Modify Debug_Cairo target to
          inherit from new debug_wincairo property sheet, instead of
          the current debug sheet. 

2009-08-22  Adam Barth  <abarth@webkit.org>

        Revert 47684.  We're going to do this later once clients have had a
        chance to opt into the setting they like.

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

2009-08-22  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Don't let local files access web URLs
        https://bugs.webkit.org/show_bug.cgi?id=28480

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

2009-08-20  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        Fix of <http://webkit.org/b/27850>. Panning by emulating Mouse Wheel Events breaks Google Maps.
        
        Switched to using RenderLayer::scrollByRecursively instead of emulating a mouse wheel,
        and switched to handling the hit testing in WebView from doing it as part of the mouse wheel event.
        One downside of this fix is that panning will not jump out of frames anymore (same behavior as pan-scrolling), but
        this is tracked in <http://webkit.org/b/28237>.

        * WebView.cpp:
        (WebView::gestureNotify): Added hit testing here to figure out the node the user started the gesture on.
        (WebView::gesture): Switched from emulating mouse wheel events for panning to calling RenderLayer::scrollByRecursively.
        * WebView.h:

2009-08-18  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Oliver Hunt.

        Fix of <https://bugs.webkit.org/show_bug.cgi?id=28326> DRT on Windows doesn't support 
        LayoutTestController::setQuota or print a callback on UIDelegate::exceededDatabaseQuota.
        
        Added a setQuota interface method to IWebDatabaseManager and implemented it.

        * Interfaces/IWebDatabaseManager.idl:
        * WebDatabaseManager.cpp:
        (WebDatabaseManager::setQuota):
        * WebDatabaseManager.h:

2009-08-18  Drew Wilson  <atwilson@google.com>

        Unreviewed (build break).

        Added missing include for WebWorkersPrivate.h.

        * WebKitClassFactory.cpp:

2009-08-18  Peter Kasting  <pkasting@google.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=28415
        Set svn:eol-style CRLF on all .sln and .vcproj files that don't already
        have it.

        * WebKit.vcproj/InterfacesGenerated.vcproj:

2009-08-18  Drew Wilson  <atwilson@google.com>

        Reviewed by Eric Seidel.

        Need to extend DumpRenderTree to expose number of worker threads
        https://bugs.webkit.org/show_bug.cgi?id=28292

        Defined/implemented COM interfaces to expose WorkerThread::workerThreadCount() for DumpRenderTree.

        * ForEachCoClass.h:
        Added WebWorkersPrivate.
        * Interfaces/IWebWorkersPrivate.idl: Added.
        * Interfaces/WebKit.idl:
        Added WebWorkersPrivate.
        * WebKit.vcproj/Interfaces.vcproj:
        * WebKit.vcproj/WebKit.vcproj:
        * WebWorkersPrivate.cpp: Added.
        Implementation of the IWebWorkersPrivate COM interface, to expose workerThreadCount() for DumpRenderTree.
        (WebWorkersPrivate::QueryInterface):
        (WebWorkersPrivate::AddRef):
        (WebWorkersPrivate::Release):
        (WebWorkersPrivate::workerThreadCount):
        (WebWorkersPrivate::createInstance):
        (WebWorkersPrivate::WebWorkersPrivate):
        (WebWorkersPrivate::~WebWorkersPrivate):
        * WebWorkersPrivate.h: Added.

2009-08-17  Peter Kasting  <pkasting@google.com>

        Reviewed by Steve Falkenburg.

        https://bugs.webkit.org/show_bug.cgi?id=27323
        Only add Cygwin to the path when it isn't already there.  This avoids
        causing problems for people who purposefully have non-Cygwin versions of
        executables like svn in front of the Cygwin ones in their paths.

        * WebKit.vcproj/Interfaces.vcproj:
        * WebKit.vcproj/InterfacesGenerated.vcproj:
        * WebKit.vcproj/WebKit.vcproj:
        * WebKit.vcproj/WebKitGUID.vcproj:

2009-08-17  Simon Fraser  <simon.fraser@apple.com>

        Speculative fix for Windows build bustage.

        * DOMHTMLClasses.cpp:
        (DOMHTMLElement::idName):

2009-08-13  Jon Honeycutt  <jhoneycutt@apple.com>

        Part of <rdar://problem/6218721> No MSAA focus events fired for Webkit
        nightly (20866)

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

        Reviewed by Oliver Hunt.

        * AccessibleBase.cpp:
        (AccessibleBase::getAccessibilityObjectForChild):
        If the child ID is negative, negate it and treat it as an AXID.

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

        Reviewed by Adam Roben.

        Fix of <rdar://6728361> Mouse wheel scrolling on a page with expanded drop down 
        list detaches drop down.
        
        Added a check in mouseWheel to see if our focus is currently in a popup, if so, close
        the popup (matches other browser behavior).

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

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

        Make WebPreferenceKeysPrivate.h available for client use

        Reviewed by Dave Hyatt.

        Fixes <http://webkit.org/b/28227>.

        * WebKit.vcproj/WebKit.vcproj: Copy WebPreferenceKeysPrivate.h to
        $WebKitOutputDir, just like we do for a few other headers. Also let VS
        reorder some XML attributes.

        * WebPreferenceKeysPrivate.h: Touched this file to force a build.

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

        Remove support for a window resizer within the WebView

        Starting with Safari 4, there is never a window resizer inside the
        WebView, so we no longer need to support that functionality.

        Fixes <http://webkit.org/b/28190> Remove support for a window resizer
        within the WebView

        Reviewed by Dave Hyatt.

        * Interfaces/IWebUIDelegatePrivate.idl: Replaced the delegate
        functions related to the window resizer with unused*() functions. We
        can't remove them entirely because we need to keep the vtable
        unchanged so new versions of WebKit will work with old versions of
        Safari (e.g., for nightlies and WebKit development).

        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::windowResizerRect): Now always returns an empty
        rect.

        * WebView.cpp:
        (WebView::paint):
        (WebView::handleMouseEvent):
        * WebView.h:
        Removed window-resizer-related code.

2009-08-11  John Gregg  <johnnyg@google.com>

        Reviewed by Maciej Stachowiak.

        Move the accessor for notifications presenter from WebUIDelegate
        to WebUIDelegate2 which extends it.  When making this call from
        WebCoreSupport, check using QueryInterface before calling.

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

        * Interfaces/IWebUIDelegate.idl:
        * Interfaces/IWebUIDelegate2.idl: Added.
        * Interfaces/WebKit.idl:
        * WebCoreSupport/WebDesktopNotificationsDelegate.cpp:
        (WebDesktopNotificationsDelegate::show):
        (WebDesktopNotificationsDelegate::cancel):
        (WebDesktopNotificationsDelegate::notificationObjectDestroyed):
        (WebDesktopNotificationsDelegate::requestPermission):
        (WebDesktopNotificationsDelegate::checkPermission):
        (WebDesktopNotificationsDelegate::hasNotificationDelegate):
        (WebDesktopNotificationsDelegate::notificationDelegate):
        * WebCoreSupport/WebDesktopNotificationsDelegate.h:

2009-08-11  Drew Wilson  <atwilson@google.com>

        Reviewed by NOBODY (build break).

        Speculative Windows build fix - undo previous unnecessary change.

        * WebCoreSupport/WebDesktopNotificationsDelegate.h:

2009-08-11  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Steve Falkenburg.

        Refactored MIMETypeforExtension to be a member of IWebViewPrivate
        instead of IWebView.

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

2009-08-11  Drew Wilson <atwilson@google.com>

        Reviewed by NOBODY (build break)

        Speculative fix for windows build break.

        * WebKitSupport/WebDesktopNotificationsDelegate.h:
        WebCore/Notification*.h => WebCore/notifications/Notification*.h

2009-08-11  John Gregg  <johnnyg@google.com>

        Reviewed by Maciej Stachowiak.

        Desktop Notifications API
        https://bugs.webkit.org/show_bug.cgi?id=25643

        Adds test hooks for notification features to WebCoreSupport for
        use in DumpRenderTree.

        * Interfaces/IWebDesktopNotificationsDelegate.idl: Added.
        * Interfaces/IWebUIDelegate.idl:
        * Interfaces/WebKit.idl:
        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::WebChromeClient):
        * WebCoreSupport/WebChromeClient.h:
        (WebChromeClient::notificationPresenter):
        * WebCoreSupport/WebDesktopNotificationsDelegate.cpp: Added.
        (NotificationCOMWrapper::create):
        (NotificationCOMWrapper::NotificationCOMWrapper):
        (NotificationCOMWrapper::QueryInterface):
        (NotificationCOMWrapper::AddRef):
        (NotificationCOMWrapper::Release):
        (NotificationCOMWrapper::isHTML):
        (NotificationCOMWrapper::contentsURL):
        (NotificationCOMWrapper::iconURL):
        (NotificationCOMWrapper::title):
        (NotificationCOMWrapper::text):
        (NotificationCOMWrapper::notifyDisplay):
        (NotificationCOMWrapper::notifyError):
        (NotificationCOMWrapper::notifyClose):
        (WebDesktopNotificationsDelegate::WebDesktopNotificationsDelegate):
        (WebDesktopNotificationsDelegate::show):
        (WebDesktopNotificationsDelegate::cancel):
        (WebDesktopNotificationsDelegate::notificationObjectDestroyed):
        (WebDesktopNotificationsDelegate::requestPermission):
        (WebDesktopNotificationsDelegate::checkPermission):
        (WebDesktopNotificationsDelegate::notificationDelegate):
        * WebCoreSupport/WebDesktopNotificationsDelegate.h: Added.
        * WebCoreSupport/WebInspectorDelegate.h:
        (WebInspectorDelegate::desktopNotificationsDelegate):
        * WebKit.vcproj/Interfaces.vcproj:
        * WebKit.vcproj/WebKit.vcproj:

2009-08-11  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        Fix of <rdar://5016504> SVG file cannot be dragged to webview,
        but can be opened via Open File.
        
        Added a new function to IWebView that gets the MIME type for a given 
        extension from the MIMETypeRegistry.

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

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

        Reviewed by Adam Roben.

        Originally implemented by Glenn Wilson  <gwilson@chromium.org>.

        Added support for overriding default preferences per-test.
        See https://bugs.webkit.org/show_bug.cgi?id=20534

        * Interfaces/IWebPreferencesPrivate.idl: added new method setPreferenceForTest
        * WebPreferences.cpp: same.
        * WebPreferences.h: same.

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

        Reviewed by Darin Adler.

        Link drag images specify Lucida Grande on Windows and end up using Times
        New Roman
        <rdar://problem/7117835>

        * WebCoreSupport/WebDragClient.cpp:
        (dragLabelFont): Added a RenderingMode parameter and changed to use the
            same typeface as the Windows small caption font.
        (WebDragClient::createDragImageForLink): Changed to respect the
            page’s rendering mode.

2009-08-10  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=28048.
        Move various WinCairo build settings into *.vsprops file.

        * WebKit.vcproj/WebKit.vcproj: Add new cURL.vsprops property sheet
          (which contains link settings for cURL and its dependencies), and
          remove the corresponding entries from the vcproj file.  Remove
          png, jpeg, cairo library linking flags from vcproj, now that they
          are in the WinCairo.vsprops file.

2009-08-09  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by George Staikos.

        [WML] Deck access control is completly broken
        https://bugs.webkit.org/show_bug.cgi?id=27721

        Synchronize WebFrameLoadType with FrameLoadType enum. Append 'WebFrameLoadTypeBackWMLDeckNotAccessible'.

        * Interfaces/IWebFramePrivate.idl:

2009-08-09  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by Maciej Stachowiak.

        FrameLoadType / WebFrameLoadType enums are out of sync
        https://bugs.webkit.org/show_bug.cgi?id=28132

        Synchronize FrameLoadType <-> WebFrameLoadType enums (append missing 'WebFrameLoadTypeReloadFromOrigin' value)

        * Interfaces/IWebFramePrivate.idl:

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

        Unreviewed revert.

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

        Revert 46877 because it broke GTK.

        * COMPropertyBag.h:

2009-08-06  Zoltan Horvath  <hzoltan@inf.u-szeged.hu>

        Reviewed by Adam Barth.

        Change Noncopyable inheriting to public
        http://bugs.webkit.org/show_bug.cgi?id=27879

        Since Noncopyable is inherited from FastAllocBase,
        Noncopyable's inheriting has been changed to public.

        * COMPropertyBag.h:

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

        "Shift + Enter" should behave like "Enter" in editable fields.
        Affects backward search in find-in-page in Safari for Windows

        Reviewed by Jon Honeycutt.

        * WebView.cpp:
        Register shift+enter as InsertNewline command, similar to other 
        modifier+Enter combinations.

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

        Part of <rdar://problem/5698113> Safari shouldn't auto-activate
        plug-ins in background tabs (make Win consistent with Mac)

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

        Reviewed by Adam Roben and Anders Carlsson.

        * Interfaces/IWebViewPrivate.idl:
        Add setCanStartPlugins().

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::dispatchDidFailToStartPlugin):
        Added; code moved from createPlugin(). Modified to obtain the plug-in's
        page URL, the plug-ins "plug-ins page" parameter value, and the
        plug-in's MIME type by calling getter functions on the passed
        PluginView.
        (WebFrameLoaderClient::createPlugin):
        If the plug-in status is not "success," call
        dispatchDidFailToStartPlugin().

        * WebCoreSupport/WebFrameLoaderClient.h:
        Declare an override of dispatchDidFailToStartPlugin().

        * WebView.cpp:
        (WebViewWndProc):
        Add a missing ) to a comment.
        (WebView::setCanStartPlugins):
        Call the Page's setCanStartPlugins() function.

        * WebView.h:

2009-07-30  Darin Adler  <darin@apple.com>

        Reviewed by David Levin.

        Use checked casts for render tree
        https://bugs.webkit.org/show_bug.cgi?id=23522

        * DOMHTMLClasses.cpp:
        (DOMHTMLInputElement::isUserEdited):
        (DOMHTMLTextAreaElement::isUserEdited):
        Use checked casts.

2009-07-31  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        -Fix <rdar://problem/7104097>

        Make EmbeddedWidget::create return a PassRefPtr so it will have the correct ref count.
        
        * WebCoreSupport/EmbeddedWidget.cpp:
        (EmbeddedWidget::create):
        * WebCoreSupport/EmbeddedWidget.h:

2009-07-29  Brian Weinstein  <bweinstein@apple.com>

        Was doing the build fix wrong, NotImplemented.h is in WebCore.

        * WebCoreSupport/WebInspectorClient.cpp:

2009-07-29  Brian Weinstein  <bweinstein@apple.com>

        Windows build fix.

        * WebCoreSupport/WebInspectorClient.cpp:

2009-07-29  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Darin Adler.

        Added foundation work to allow a testing infrastructure for the Web
        Inspector.

        * WebCoreSupport/WebInspectorClient.cpp:
        (WebInspectorClient::inspectorWindowObjectCleared): Empty definition
        to let Windows compile but we should implement this at some point so
        that the tests can be run on Windows too.
        * WebCoreSupport/WebInspectorClient.h:

2009-07-28  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Steve Falkenburg.

        Add output directory for VS pre-build steps to enable out-of-tree builds

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

        The tmp.obj file is now placed in the intermediate build directory.

        * WebKit.vcproj/WebKit.vcproj:

2009-07-27  Brian Weinstein  <bweinstein@apple.com>

        Build fix for Windows.

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

2009-07-27  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=27735
        Give a helpful name to JSLock constructor argument

        * WebCoreStatistics.cpp:
        (WebCoreStatistics::javaScriptObjectsCount):
        (WebCoreStatistics::javaScriptGlobalObjectsCount):
        (WebCoreStatistics::javaScriptProtectedObjectsCount):
        (WebCoreStatistics::javaScriptProtectedGlobalObjectsCount):
        (WebCoreStatistics::javaScriptProtectedObjectTypeCounts):
        * WebJavaScriptCollector.cpp:
        (WebJavaScriptCollector::objectCount):
        * WebView.cpp:
        (WebView::stringByEvaluatingJavaScriptFromString):

2009-07-25  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Darin Adler.

        Windows build break due to warning C4819
        https://bugs.webkit.org/show_bug.cgi?id=27416

        Disable C4819 warning to fix build.

        * WebKit.vcproj/WebKit.vcproj:

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

        Reviewed by Dave Hyatt.

        Clean up dependencies on Apple support libraries for non-Apple build.
        http://bugs.webkit.org/show_bug.cgi?id=27532.

        * DefaultDownloadDelegate.h: Conditionalize include of CFNetwork.h
        * WebDownload.h: Conditionalize include of CFNetwork.h
        * WebMutableURLRequest.cpp: Conditionalize include of CFNetwork.h

2009-07-24  Andrei Popescu  <andreip@google.com>

        Reviewed by Anders Carlsson.

        ApplicationCache should have size limit
        https://bugs.webkit.org/show_bug.cgi?id=22700

        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::reachedMaxAppCacheSize):
        Adds empty implementation of the reachedMaxAppCacheSize callback.
        * WebCoreSupport/WebChromeClient.h:

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

        Reviewed by Geoff Garen.

        WebFrameLoaderClient on Windows doesn't gracefully handle a null request returned from willSendRequest.
        https://bugs.webkit.org/show_bug.cgi?id=27595

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

2009-07-22  Takeshi Yoshino  <tyoshino@google.com>

        Reviewed by Darin Adler.

        VC++ 2005 Express failed to build WebKit due to raw UTF-8 string in WebKit/win/WebCoreLocalizedStrings.cpp
        https://bugs.webkit.org/show_bug.cgi?id=26375

        Replace a multiplication sign (U+00D7) encoded in UTF-8 (0xC3 0x97) in WebCoreLocalizedStrings.cpp
        with hex escape sequences.

        VC2005 failed to build due to this raw UTF-8 data in source code. Here's the warning message (
        treated as an error and stopped build).

        WebCoreLocalizedStrings.cpp : warning C4819: The file contains a character that cannot be
        represented in the current code page (932). Save the file in Unicode format to prevent data loss

        A change on WebKitTools/Scripts/extract-localizable-strings is attached to this change not to break
        localized string generation process.

        * WebCoreLocalizedStrings.cpp:
        (WebCore::imageTitle):

2009-07-21  Roland Steiner  <rolandsteiner@google.com>

        Reviewed by David Levin.

        Add ENABLE_RUBY to list of build options
        https://bugs.webkit.org/show_bug.cgi?id=27324

        * WebKit.vcproj/WebKit.vcproj: Added flag ENABLE_RUBY.

2009-07-20  Peter Kasting  <pkasting@google.com>

        Reviewed by Mark Rowe.

        https://bugs.webkit.org/show_bug.cgi?id=27468
        Back out r46060, which caused problems for some Apple developers.

        * WebKit.vcproj/Interfaces.vcproj:
        * WebKit.vcproj/InterfacesGenerated.vcproj:
        * WebKit.vcproj/WebKit.vcproj:
        * WebKit.vcproj/WebKitGUID.vcproj:

2009-07-17  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        Fix of <rdar://problem/5712795> Win: Cannot change the height of the docked Web Inspector (14272)
        https://bugs.webkit.org/show_bug.cgi?id=14272
        
        Implemented resizing of inspector window when it is in attached mode. Implemented setAttachedWindowHeight
        to set window sizes and redraw the inspector and the inspected web view, and used stored preferences
        in InspectorController.cpp to remember user's preferred height.

        * WebCoreSupport/WebInspectorClient.cpp:

2009-07-17  Peter Kasting  <pkasting@google.com>

        Reviewed by Steve Falkenburg.

        https://bugs.webkit.org/show_bug.cgi?id=27323
        Only add Cygwin to the path when it isn't already there.  This avoids
        causing problems for people who purposefully have non-Cygwin versions of
        executables like svn in front of the Cygwin ones in their paths.

        * WebKit.vcproj/Interfaces.vcproj:
        * WebKit.vcproj/InterfacesGenerated.vcproj:
        * WebKit.vcproj/WebKit.vcproj:
        * WebKit.vcproj/WebKitGUID.vcproj:

2009-07-16  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by David Levin.

        Add --web-sockets flag and ENABLE_WEB_SOCKETS define.
        https://bugs.webkit.org/show_bug.cgi?id=27206
        
        Add ENABLE_WEB_SOCKETS

        * WebKit.vcproj/WebKit.vcproj: add ENABLE_WEB_SOCKETS

2009-07-16  Xiaomei Ji  <xji@chromium.org>

        Reviewed by Darin Adler.

        Fix tooltip does not get its directionality from its element's directionality.
        https://bugs.webkit.org/show_bug.cgi?id=24187

        Per mitz's suggestion in comment #6, while getting the plain-text 
        title, we also get the directionality of the title. How to handle 
        the directionality is up to clients. Clients could ignore it, 
        or use attribute or unicode control characters to display the title
        as what they want.

        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::setToolTip): Add directionality as 2nd parameter to setToopTip() (without handling it yet).
        * WebCoreSupport/WebChromeClient.h: Add directionality as 2nd parameter to setToolTip().
        * WebElementPropertyBag.cpp:
        (WebElementPropertyBag::Read): Change call of spellingToolTip() and title() due to signature change.

2009-07-15  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Renamed parseURL to deprecatedParseURL.

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::createPlugin): Renamed.

2009-07-14  Steve Falkenburg  <sfalken@apple.com>

        Reorganize JavaScriptCore headers into:
        API: include/JavaScriptCore/
        Private: include/private/JavaScriptCore/

        Reviewed by Darin Adler.

        * WebKit.vcproj/WebKit.vcproj:

2009-07-14  Zoltan Horvath  <hzoltan@inf.u-szeged.hu>

        Reviewed by Darin Adler.

        Change all Noncopyable inheriting visibility to public.
        https://bugs.webkit.org/show_bug.cgi?id=27225

        Change all Noncopyable inheriting visibility to public because
        it is needed to the custom allocation framework (bug #20422).

        * COMEnumVariant.h:
        * WebDatabaseManager.cpp:
        * WebInspector.h:
        * WebLocalizableStrings.cpp:

2009-07-13  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Adam Roben.

        Refactor WebFrame::spoolPages for easier sharing with Windows Cairo.
        https://bugs.webkit.org/show_bug.cgi?id=27240.

        * WebFrame.cpp:
        (WebFrame::printHeader): New shared method to print the header.
        (WebFrame::printFooter): New shared method to print the footer.
        (WebFrame::spoolPage): New conditionally-compiled method to print
         a page.
        (WebFrame::spoolPages): Revised to call the platform-specific spoolPage
         for each page.
        * WebFrame.h: Add new method prototypes.

2009-07-13  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Adam Roben.

        Add new configuration flag for redistributable Windows build.
        https://bugs.webkit.org/show_bug.cgi=27087

        * WebKit.vcproj/WebKit.vcproj: Add new WinCairo.vsprops to
          Debug_Cairo and Release_Cairo targets.

2009-07-12  Brent Fulgham  <bfulgham@gmail.com>

        Speculative Windows build fix after http://trac.webkit.org/changeset/45786.

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

2009-07-10  Adam Barth  <abarth@webkit.org>

        Reviewed by Sam Weinig with the power of Grayskull.

        Enable XSSAuditor by default.

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

2009-07-09  Drew Wilson  <atwilson@google.com>

        Reviewed by Alexey Proskuryakov.

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

        Turned on CHANNEL_MESSAGING by default because the MessageChannel API
        can now be implemented for Web Workers and is reasonably stable.

       * WebKit.vcproj/WebKit.vcproj:

2009-07-09  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Alice Liu.

        Fix of <rdar://5712929> Add preferences key to remember if the Inspector was docked (14271)
        https://bugs.webkit.org/show_bug.cgi?id=27140

        Added a preference key to remember whether the user prefers the inspector detached or attached.

        * WebCoreSupport/WebInspectorClient.cpp:
        (WebInspectorClient::showWindow): Pass both parameters into setWindowVisible
        (WebInspectorClient::closeWindow): Ditto
        (WebInspectorClient::attachWindow): Set preference to attached windows here
        (WebInspectorClient::detachWindow): Set preference to detached windows here
        (WebInspectorClient::showWindowWithoutNotifications): Read preference for attached vs. detached
        (WebInspectorClient::onClose): Pass both parameters into setWindowVisible

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

        Reviewed by Oliver Hunt.

        <rdar://problem/6921671> Visit count shouldn't be incremented by redirects.

        * WebCoreSupport/WebFrameLoaderClient.cpp: (WebFrameLoaderClient::updateGlobalHistory):
        Do not increase visit count if there is a redirect source. As a result, only pages that were
        explicitly visited by the user (by typing a URL, choosing one from bookmarks, or clicking
        a link) will be counted.

        * Interfaces/IWebHistoryItemPrivate.idl:
        * WebHistory.cpp:
        (WebHistory::visitedURL):
        * WebHistory.h:
        * WebHistoryItem.cpp:
        (WebHistoryItem::visitedWithTitle):
        * WebHistoryItem.h:
        Marshal this new argument all the way down to WebCore.

2009-07-09  Beth Dakin and Jon Honeycutt <bdakin@apple.com>

        Reviewed by Dave Hyatt.

        Make Widget RefCounted to fix:

        <rdar://problem/7038831> REGRESSION (TOT): In Mail, a crash occurs 
        at WebCore::Widget::afterMouseDown() after clicking To Do's close 
        box
        <rdar://problem/6978804> WER #16: Repro Access Violation in 
        WebCore::PluginView::bindingInstance (1310178023)
        -and-
        <rdar://problem/6991251> WER #13: Crash in WebKit!
        WebCore::PluginView::performRequest+203 (1311461169) 

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::createPlugin):
        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebFrame.cpp:
        (WebFrame::createJavaAppletWidget):
        * WebFrame.h:

2009-07-09  Sam Weinig  <sam@webkit.org>

        Reviewed by Steve Falkenburg.

        Roll out r43848. The quirk is no longer necessary.

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

2009-07-07  Ada Chan  <adachan@apple.com>

        Reviewed by Dave Hyatt.

        Missed a call to FocusController::setFocused(true) when handling WM_SETFOCUS in WebView.
        https://bugs.webkit.org/show_bug.cgi?id=27057

        * WebView.cpp:
        (WebViewWndProc):

2009-07-02  Erik Arvidsson  <arv@chromium.org>

        Reviewed by Adam Roben.

        [Win] HTML5 Drag and drop, dragend is not fired when pressing Esc
        https://bugs.webkit.org/show_bug.cgi?id=26699

        * WebDropSource.cpp:
        (WebDropSource::QueryContinueDrag):

2009-07-02  Oliver Hunt  <oliver@apple.com>

        Reviewed by Anders Carlsson.

        <rdar://problem/6939593> REGRESSION (r37793): Hitting back button on Google often gives non-interactive Google page (26670)
        <https://bugs.webkit.org/show_bug.cgi?id=26670>

        Make windows loader client match mac behaviour more closely.

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

2009-06-30  Brent Fulgham  <bfulgham@gmail.com>

        Reviewed by Adam Roben.

        Build DumpRenderTree under Cairo.
        https://bugs.webkit.org/show_bug.cgi?id=26457

        * WebKit.vcproj/WebKit.sln: Add Cairo targets to the
          DumpRenderTree build, and use the in the Debug_Cairo
          and Release_Cairo targets.

2009-07-02  Eric Carlson  <eric.carlson@apple.com>

        Fix Windows build by including missing localized string methods.

        * WebCoreLocalizedStrings.cpp:
        (WebCore::mediaElementLoadingStateText):
        (WebCore::mediaElementLiveBroadcastStateText):

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

        Reviewed by Tim Hatcher.

        <rdar://problem/6998524> REGRESSION (r44474): Form text field has focus ring, looks focused,
        even though the field is not actually focused for keyboard input
        
        Add the concept of whether or not the Page is focused by adding a boolean to the focusController.  This allows the
        focused frame and focused node to both be cached and changed programmatically without causing errors when the Page doesn't
        have focus.

        * WebView.cpp:
        (WebViewWndProc):

2009-06-29  David Hyatt  <hyatt@apple.com>

        Fix Windows bustage.  Missed two configurations for enabling DATAGRID.

        * WebKit.vcproj/WebKit.vcproj:

2009-06-29  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Adam Roben.
        
        Fix the windows build.

        * WebCoreSupport/WebContextMenuClient.cpp:
        (WebContextMenuClient::isSpeaking):
        * WebCoreSupport/WebContextMenuClient.h:

2009-06-29  David Hyatt  <hyatt@apple.com>

        Reviewed by Adam Roben.

        Make sure to patch all configurations to have datagrid enabled.

        * WebKit.vcproj/WebKit.vcproj:

2009-06-29  David Hyatt  <hyatt@apple.com>

        Reviewed by Adam Roben.

        Put <datagrid> behind an ifdef.

        * WebKit.vcproj/WebKit.vcproj:

2009-06-26  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Simon Fraser.

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

        Added hit testing on scrollbars, so if you start a gesture over a scrollbar,
        it isn't counted, and lets the user drag the scrollbar itself instead of a
        panning gesture. Also cleaned up code in gesture.

        * WebView.cpp:
        (WebView::gestureNotify):
        (WebView::gesture):

2009-06-26  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Adam Barth.

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

        Fix a build break due to LocalStorage.h being included in WebKitDLL.cpp
        despite it being deleted from the repo by the following patch/commit:
        https://bugs.webkit.org/show_bug.cgi?id=26732
        http://trac.webkit.org/changeset/45290

        * WebKitDLL.cpp:

2009-06-26  Yongjun Zhang  <yongjun.zhang@nokia.com>

        Reviewed by Eric Seidel.

        Bug 20303: [Qt] Key events are not working in frames.

        Move the scroll handling code to EventHandler so that other
        ports can share the functionality.

        * WebView.cpp:
        (WebView::keyDown):
        (EnumTextMatches::QueryInterface):

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

        Reviewed by Darin Adler.

        WebKit side of <rdar://problem/6946094>.

        * Interfaces/IWebUIDelegate.idl:
        Add a newPasteboard out parameter to willPerformDragSourceAction.
        
        * WebCoreSupport/WebDragClient.cpp:
        (WebDragClient::willPerformDragSourceAction):
        Implement this. If the client returns a new pasteboard, use it for the drag.
        
        * WebCoreSupport/WebInspectorDelegate.h:
        (WebInspectorDelegate::willPerformDragSourceAction):
        Add the new parameter.

2009-06-20  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/6964221> Need more processing of pluginspage.

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::createPlugin): Check protocolInHTTPFamily.

2009-06-19  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Reviewed by Steve Falkenburg.

        https://bugs.webkit.org/show_bug.cgi?id=26494
        Bug 26494: RenderTheme::themeForPage reads from Settings before it has
        been initialized by WebKit

        Get the shouldPaintNativeControls preference and update the settings
        before initializing the page, as the page depends on it after the
        themeForPage change.

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

2009-06-19  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Steve Falkenburg.
        
        https://bugs.webkit.org/show_bug.cgi?id=26488
        No Support for Single Finger or Two Finger Panning in Windows 7
        
        Added the code necessary for single finger and two-finger panning with
        window bounce. We now register for WM_GESTURENOTIFY and WM_GESTURE messages,
        and interpret the panning command. Also, added WindowsTouch.h which contains 
        structs and #defines from the Windows 7 SDK.

        * WebKit.vcproj/WebKit.vcproj:
        * WebView.cpp:
        (WebView::gestureNotify): Checks if we are in a pannable region - IE: Not in the scrollbar
        (WebView::gesture): Handles the Panning gesture, creating the WheelEvent
        (WebViewWndProc): Added cases for WM_GESTURE and WM_GESTURENOTIFY
        * WebView.h:
        * WindowsTouch.h: Added.
        
2009-06-18  Adam Barth  <abarth@webkit.org>

        Reviewed by Sam Weinig.

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

        Added preference to enable the XSSAuditor.

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

2009-06-18  Brent Fulgham  <bfulgham@gmail.com>

        Reviewed by Dave Levin.

        Remove some boilerplate using the BitmapInfo struct.
        https://bugs.webkit.org/show_bug.cgi?id=26425

        * WebFrame.cpp:
        (WebFrame::spoolPages):
        * WebIconDatabase.cpp:
        (createDIB):
        * WebKit.vcproj/WebKit.sln:
        * WebNodeHighlight.cpp:
        (WebNodeHighlight::update):
        * WebView.cpp:
        (WebView::ensureBackingStore):

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

        Consolidate WebKit COM interfaces.
        Moved IID from the highest numbered COM interface to the first interface and combined all methods.

        Numbered interfaces can be combined since the latest shipping Safari 4 supports the latest interfaces.
        
        Reviewed by Adam Roben.

        * Interfaces/IWebFrameLoadDelegate.idl:
        * Interfaces/IWebFrameLoadDelegatePrivate.idl:
        * Interfaces/IWebResourceLoadDelegatePrivate.idl:
        * Interfaces/IWebUIDelegate.idl:
        * Interfaces/IWebUIDelegatePrivate.idl:
        * Interfaces/WebKit.idl:
        * WebCoreSupport/WebChromeClient.cpp:
        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebContextMenuClient.cpp:
        * WebCoreSupport/WebFrameLoaderClient.cpp:
        * WebCoreSupport/WebInspectorDelegate.h:
        * WebFrame.cpp:
        * WebView.cpp:

2009-06-16  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Reviewed by Adam Roben.

        Create a different RenderTheme per page, so that RenderTheme has
        access to page specific theming. This is needed for the Qt port, as Qt
        supports setting the theme (style) per widget.

        This change was suggested and discussed with Dave Hyatt.

        More detailed:

        1) Create a theme per page or one global one, depending on the needs
           of the platform.
        2) Add an accesser to the theme from RenderObject.
        3) Change all uses of the theming to access the theme through
           RenderObject, using the global default theme as fallback, when the
           document of RenderObject has no page.
           When we don't have access to a RenderObject, use the default theme.
        4) Modify all RenderTheme platform implementations to work with the
           above changes, still creating only one global theme.

        * WebView.cpp:
        (WebViewWndProc): Get the theme from the associated page.

2009-06-16  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.
        
        Switch Control+Mousewheel Zooming definitions to match other browsers on Windows.
        Control+Mousewheel-Down now zooms out, Control+Mousewheel-Up now zooms in.
        https://bugs.webkit.org/show_bug.cgi?id=25875.
        <rdar://problem/6903976>

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

2009-06-16  Brent Fulgham  <bfulgham@gmail.com>

        Reviewed by Darin Adler.

        Use consistent Windows GUID Comparison Functions.
        https://bugs.webkit.org/show_bug.cgi?id=26427.

        * WebView.cpp:
        (EnumTextMatches::QueryInterface):

== Rolled over to ChangeLog-2009-06-16 ==
