2010-09-24  Romain Pokrzywka  <romain@kdab.com>

        Reviewed by Simon Hausmann.

        [Qt] Fix the Wince build.

        * WebCore.pro: Apply msvc flags to wince, too.

2010-09-24  Anders Bakken  <agbakken@gmail.com>

        Reviewed by Simon Hausmann.

        [Qt] Enable building Qt/Webkit with debug symbols

        With this patch one can configure with -webkit-debug to build Webkit
        with debug symbols without having to manually edit WebCore.pro.

        * WebCore.pro:

2010-09-16  Thomas Zander <t.zander@nokia.com>

        Reviewed by Andreas Kling.

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

        [Qt] Fixed incorrect Symbian scoping.

        The missing install functionality is only true for mmp based systems.

        * WebCore.pro: limit functionality to mmp systems.

2010-09-09  Kristian Amlie  <kristian.amlie@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Fixed incorrect Symbian scoping.

        The missing install functionality is only true for mmp based systems.

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

        * WebCore.pro:

2010-09-12  Oswald Buddenhagen  <oswald.buddenhagen@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] fix qt_webkit_version.pri install for in-Qt builds

        Always add the target, even if building inside Qt - as opposed to the
        headers and libraries, there are no rules for that coming from
        qbase.pri.

        Task-number: QTBUG-13306

        * WebCore.pro:

2010-09-12  Oswald Buddenhagen  <oswald.buddenhagen@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Let QtWebKit inject itself into the qt configuration

        i.e., don't explicitly deal with qt_webkit_version.pri outside of the
        webkit source directory.

        Task-number: QTBUG-12379

        * WebCore.pro:

2010-08-20  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Ariya Hidayat.

        [Qt] When using the raster graphics system on Maemo5, allow
        Flash to render directly into the raster window surface.
        wmode=transparent is now supported as a result of this change.
        
        https://bugs.webkit.org/show_bug.cgi?id=44043
        
        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::paintUsingImageSurfaceExtension):

2010-08-18  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Implement Maemo5 local rendering NPAPI extension. See 
        https://wiki.mozilla.org/Plugins:NokiaMaemoImageSurface for details.

        With the local rendering extension, Flash will paint into a 16-bit surface.
        For wmode=transparent, Flash expects the surface to contain the contents
        beneath it. As it is tricky to implement the content propagation across all
        graphics systems, transparent Flash is not supported. We just fill the surface 
        with white and wmode=transparent behaves the same as wmode=opaque with a white 
        background.

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

        * WebCore.pro:
        * plugins/PluginView.cpp:
        (WebCore::PluginView::setValue):
        (WebCore::PluginView::PluginView):
        * plugins/PluginView.h:
        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::updatePluginWidget):
        (WebCore::PluginView::paintUsingImageSurfaceExtension):
        (WebCore::PluginView::paint):
        (WebCore::PluginView::platformGetValueStatic):

2010-08-17  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Antonio Gomes.

        [Qt] On Maemo5, there is no libgdk-x11-2.0.so symlink. Look for 
        libgdk-x11-2.0.so.0 instead on X11 and Maemo5.

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

        * plugins/qt/PluginViewQt.cpp:
        (WebCore::getPluginDisplay):

2010-08-17  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Kenneth Rohde Christiansen.
        Set PluginQuirkRequiresDefaultScreenDepth for all Flash versions and not
        just Flash 10.

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

        * plugins/PluginPackage.cpp:
        (WebCore::PluginPackage::determineQuirks):

2010-08-10  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        Make sure NPAPI plugins get an initial setNPWindow on Mac

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

        * plugins/mac/PluginViewMac.mm:

2010-06-14  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Stack overflow when converting navigator object to QVariant
        https://bugs.webkit.org/show_bug.cgi?id=40572

        Protect against infinite recursion in JSValue->QVariant conversion.
        This fixes a crash when trying to convert MimeType objects (they
        recurse infinitely and on-the-fly via the enabledPlugin property.)

        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::convertValueToQVariant):

2010-03-30  Kent Tamura  <tkent@chromium.org>

        Reviewed by Brady Eidson.

        REGRESSION (r56439) - Crash when a renderer for a file upload control
        with a selected file is recreated
        https://bugs.webkit.org/show_bug.cgi?id=36723

        RenderFileUploadControl::chooseIconForFiles was called before
        m_fileChooser was initialized.

        * platform/FileChooser.cpp:
        (WebCore::FileChooser::FileChooser): Introduce m_isInitializing flag to
          avoid FileChooserClient::repaint() call.
        (WebCore::FileChooser::loadIcon):
        (WebCore::FileChooser::iconLoaded):
        * platform/FileChooser.h: Add a FielChooser parameter to
          FileChooserClient::chooseIconForFiles().
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::chooseIconForFiles):
        (WebCore::RenderFileUploadControl::paintObject): Add an assertion.
        * rendering/RenderFileUploadControl.h:

2010-07-06  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        <use> on <font-face> causes crashes, if SVGUseElement gets detached
        https://bugs.webkit.org/show_bug.cgi?id=41621

        Do not call removeFromMappedElementSheet() from the SVGFontFaceElement destructor,
        as that can potentially cause the element to be reattached while destructing.

        In order to fix the crash in the testcase, the order of calling the base-class detach
        method in SVGUseElement and the instance/shadow tree destruction has to be reversed,
        matching the order in removedFromDocument().

        Test: svg/custom/use-font-face-crash.svg

        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::~SVGFontFaceElement): Remove removeFromMappedElementSheet() call.
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::detach): Reverse order of calling base-class detach method and instance/shadow tree destruction.

2010-07-06  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Darin Adler.

        <use> on <font-face> causes crashes, if SVGUseElement gets detached
        https://bugs.webkit.org/show_bug.cgi?id=41621

        Do not call removeFromMappedElementSheet() from the destructor, as the call to document()->updateStyleSelector() that can potentially
        cause the element to be reattached while destructing. It's not needed at all, because removedFromDocument() is called before destruction,
        which already calls removeFromMappedElementSheet() - at this point it's still safe to update the style selector.

        The crash is reproducable when using <use> on <font-face>.

        Test: svg/custom/use-font-face-crash.svg

        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::~SVGFontFaceElement):

2010-07-05  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Darin Adler.

        Memory corruption with SVG <use> element
        https://bugs.webkit.org/show_bug.cgi?id=40994

        Fix race condition in svgAttributeChanged. Never call svgAttributeChanged() from attributeChanged()
        when we're synchronizing SVG attributes. It leads to either unnecessary extra work being done or
        crashes. Especially together with <polyline>/<polygon> which always synchronize the SVGAnimatedPoints
        datastructure with the points attribute, no matter if there are changes are not. This should be
        furhter optimized, but this fix is sane and fixes the root of the evil races.

        Test: svg/custom/use-property-synchronization-crash.svg

        * svg/SVGElement.cpp:
        (WebCore::SVGElement::attributeChanged):

2010-06-11  Abhishek Arya  <inferno@chromium.org>

        Reviewed by David Hyatt.

        Don't process floats if parent node is not a RenderBlock.
        https://bugs.webkit.org/show_bug.cgi?id=40033

        Test: svg/text/clear-floats-crash.svg

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::clearFloats):

2010-06-23  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Eric Seidel.

        Reproducible crash in com.apple.WebCore 0x01ed3784 WebCore::RenderLineBoxList::appendLineBox(WebCore::InlineFlowBox*) + 36
        https://bugs.webkit.org/show_bug.cgi?id=40953

        REGRESSION (r58209-58231): Memory corruption with invalid SVG
        https://bugs.webkit.org/show_bug.cgi?id=40173

        Fix several crashes, all related to <foreignObject> and/or invalid SVG documents.
        - Only allow <svg> nodes, as direct children of a <foreignObject>, not any other "partial" SVG content.
        - Assure to create RenderSVGRoot objects for <svg> nodes in <foreignObject>, treat them as "outermost SVG elements".
        - Never allow any partial SVG content to appear in any document. Only <svg> elements are allowed.

        Tests: svg/custom/bug45331.svg
               svg/foreignObject/disallowed-svg-nodes-as-direct-children.svg
               svg/foreignObject/no-crash-with-svg-content-in-html-document.svg
               svg/foreignObject/svg-document-as-direct-child.svg
               svg/foreignObject/svg-document-in-html-document.svg
               svg/foreignObject/text-tref-02-b.svg

        * dom/Element.cpp: Added childShouldCreateRenderer, with ENABLE(SVG) guards.
        (WebCore::Element::childShouldCreateRenderer): Only create a renderer for a SVG child, if we're a SVG element, or if the child is a <svg> element.
        * dom/Element.h: Added childShouldCreateRenderer, with ENABLE(SVG) guards.
        * svg/SVGForeignObjectElement.cpp:
        (WebCore::SVGForeignObjectElement::childShouldCreateRenderer): Disallow arbitary SVG content, only <svg> elements are allowed as direct children of a <foreignObject>
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::isOutermostSVG): Be sure to create RenderSVGRoot objects for <svg> elements inside <foreignObject>

2010-06-10  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Dave Hyatt.

        Do not render CSS Styles :first-letter and :first-line in a SVG text element context. 
        https://bugs.webkit.org/show_bug.cgi?id=40031

        Test: svg/text/text-style-invalid.svg

        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::firstLineBlock):
        (WebCore::RenderSVGText::updateFirstLetter):
        * rendering/RenderSVGText.h:

2010-07-01  Justin Schuh  <jschuh@chromium.org>

        Reviewed by Dan Bernstein.

        Prevent crash on counter destruction
        https://bugs.webkit.org/show_bug.cgi?id=40032

        Added counter destruction to RenderWidget::destroy()

        Test: fast/css/counters/destroy-counter-crash.html

        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::destroy):

2010-06-29  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/7975842> Certain text is repeated after using splitText()

        Tests: fast/text/setData-dirty-lines.html
               fast/text/splitText-dirty-lines.html

        * dom/CharacterData.cpp:
        (WebCore::CharacterData::setData): Call RenderText::setTextWithOffset() rather than
        setText(), because only the former correctly dirties line boxes.
        * dom/Text.cpp:
        (WebCore::Text::splitText): Ditto.

2010-06-25  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/8000667> Certain text is repeated before and after a line break

        Test: fast/text/bidi-explicit-embedding-past-end.html

        * platform/text/BidiResolver.h:
        (WebCore::::createBidiRunsForLine): Committing explicit embedding past the end of the range
        creates BidiRuns up to the end of the range, so at that point, we can stop iterating.

2010-06-10  Tony Chang  <tony@chromium.org>

        Reviewed by Kent Tamura.

        crash when focus is changed while trying to focus next element
        https://bugs.webkit.org/show_bug.cgi?id=40407

        Test: fast/events/focus-change-crash.html

        * dom/Element.cpp:
        (WebCore::Element::focus):

2010-07-01  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Clamp color stops passed to QGradient to 1.0
        [https://bugs.webkit.org/show_bug.cgi?id=41484

        Fixes an issue where color stops would be silently dropped from radial gradients.

        * platform/graphics/qt/GradientQt.cpp:
        (WebCore::Gradient::platformGradient):

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

        Reviewed by Darin Adler.

        Prevent assertion/duplicate loads for non-deferred subtitute-data loads

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

        MainResourceLoader uses the member m_initialRequest to store requests for future
        deferred loads. When doing the actual load in handleDataLoadNow(), we therefore
        have to clear this request so that subsequent entries into the loader will not
        start yet another load.

        This can happen as a result of a PageGroupLoadDeferrer going out of scope when
        returning from Chrome::runJavaScriptAlert(), which calls setDeferredLoading(false),
        but only in the case of using both substitute-data and non-deferred main resource
        load together. That's why two new DRT functions were added:

         * queueLoadHTMLString()
         * setDeferMainResourceLoad()

        The change adds DRT hooks for Mac, Win and Qt for these two functions. For Mac
        and Win the hook uses new SPI in WebDataSource. For Qt a new static member was
        added to the FrameLoaderClientQt and accessed though DumpRenderTreeSupportQt.

        Test: fast/loader/non-deferred-substitute-load.html

        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::handleDataLoadNow):

2010-07-16  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Simon Fraser.

        Spatial navigation: do not consider outline for focusable element boundaries
        https://bugs.webkit.org/show_bug.cgi?id=42474

        Test: fast/events/spatial-navigation/snav-zero-margin-content.html

        Currently in WebCore::renderRectRelativeToRootDocument function, we are calling
        RenderObject::absoluteClippedOverflowRect to obtain the rect boundary of a given
        renderer/element. This method deals with outline, which is out of elements boundary.
        It makes spatial navigation to fail on common sites like google.gom: "Web, Images, Map, etc"
        are inaccessible.

        Patch replaces RenderObject::absoluteClippedOverflowRect by Node::getRect,
        which returns only the absolute bounding box rect of the Element.

        * page/SpatialNavigation.cpp:
        (WebCore::renderRectRelativeToRootDocument):
        (WebCore::checkNegativeCoordsForNode):

2010-07-21  Kristian Amlie <kristian.amlie@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Added automatic sqlite extraction for Symbian to QtWebKit.

        Also added sqlite detection in case sqlite is not present in the SDK.
        This is possible if WebKit is compiled standalone.

        The inclusion part is a consequence of commit c578c6c1d6d in the Qt
        repository. It will not work on Qt versions < 4.7.1, but that is ok,
        since the only build system it will affect is marked as experimental
        in the whole 4.7 series.

        * WebCore.pro:

2010-05-14  Abhishek Arya  <inferno@chromium.org>

        Reviewed by David Hyatt.

        Move the m_width(Length) and m_columns(RenderTable::ColumnStruct)
        vector out-of-bounds check out of the ASSERT into the main code.
        https://bugs.webkit.org/show_bug.cgi?id=38261

        Test: fast/table/fixed-table-layout-large-colspan-crash.html

        * rendering/FixedTableLayout.cpp:
        (WebCore::FixedTableLayout::calcWidthArray):

2010-05-21  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin Adler.

        Fix for <rdar://problem/8009118> Crash in WebCore::toAlphabetic() 
        while running MangleMe
        -and corresponding-
        https://bugs.webkit.org/show_bug.cgi?id=39508

        The math was slightly off here, and we wound up trying to access an 
        array at index -1 in some cases. We need to decrement numberShadow 
        rather than subtracting one from the result of the modulo 
        operation.

        * rendering/RenderListMarker.cpp:
        (WebCore::toAlphabeticOrNumeric):

2010-05-20  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        <rdar://problem/8007953> Textarea using custom font appears blank

        Test: fast/css/font-face-in-shadow-DOM.html

        When a remote font is loaded, CSSFontSelector forces a style recalc, which replaces all
        RenderSyles that have FontFallbackLists referencing the placeholder font with fresh
        RenderStyles. However, it does not descend into shadow DOM trees, so those may end up with
        styles that still reference the placeholder font.

        The fix is to add RenderObject::requiresForcedStyleRecalcPropagation() and have it return
        true from renderers that maintain shadow DOM trees or otherwise keep their own RenderStyles.

        * dom/Element.cpp:
        (WebCore::Element::recalcStyle): Check if forced style recalc needs to propagated.
        * rendering/RenderButton.h:
        (WebCore::RenderButton::requiresForcedStyleRecalcPropagation):
        * rendering/RenderDataGrid.h:
        (WebCore::RenderDataGrid::requiresForcedStyleRecalcPropagation):
        * rendering/RenderFileUploadControl.h:
        (WebCore::RenderFileUploadControl::requiresForcedStyleRecalcPropagation):
        * rendering/RenderListItem.h:
        (WebCore::RenderListItem::requiresForcedStyleRecalcPropagation):
        * rendering/RenderMedia.h:
        (WebCore::RenderMedia::requiresForcedStyleRecalcPropagation):
        * rendering/RenderMenuList.h:
        (WebCore::RenderMenuList::RenderMenuList::requiresForcedStyleRecalcPropagation):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::requiresForcedStyleRecalcPropagation):
        * rendering/RenderProgress.h:
        (WebCore::RenderProgress::requiresForcedStyleRecalcPropagation):
        * rendering/RenderSlider.h:
        (WebCore::RenderSlider::requiresForcedStyleRecalcPropagation):
        * rendering/RenderTextControl.h:
        (WebCore::RenderTextControl::requiresForcedStyleRecalcPropagation):

2010-04-02  Justin Schuh  <jschuh@chromium.org>

        Reviewed by Alexey Proskuryakov.

        XHR allows arbitrary XSRF across domains 
        https://bugs.webkit.org/show_bug.cgi?id=36843

        Added a one-line change to prevent bypassing the XDC check on
        synchronous preflighted requests. Added layout tests to cover
        variations of this problem.

        Tests: http/tests/xmlhttprequest/access-control-preflight-async-header-denied.html
               http/tests/xmlhttprequest/access-control-preflight-async-method-denied.html
               http/tests/xmlhttprequest/access-control-preflight-sync-header-denied.html
               http/tests/xmlhttprequest/access-control-preflight-sync-method-denied.html

        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::preflightFailure):

2010-04-28  Julien Chaffraix  <jchaffraix@webkit.org>

        Reviewed by Alexey Proskuryakov.

        [XHR] Cross-Origin synchronous request with credential raises NETWORK_ERR
        https://bugs.webkit.org/show_bug.cgi?id=37781
        <rdar://problem/7905150>

        Tests: http/tests/xmlhttprequest/access-control-preflight-credential-async.html
               http/tests/xmlhttprequest/access-control-preflight-credential-sync.html

        Rolling the patch in as I could not reproduce Qt results locally.

        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::DocumentThreadableLoader): Now we remove the
        credential from the request here to avoid forgetting to do so in the different code path.
        (WebCore::DocumentThreadableLoader::makeSimpleCrossOriginAccessRequest): Just add the
        "Origin" header.
        (WebCore::DocumentThreadableLoader::loadRequest): Check here the the credential have
        been removed so that we don't leak them. Also tweaked a comment to make it clear that
        the URL check has issue when credential is involved.

2010-04-21  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Adam Roben.

        Windows build fix.

        * platform/network/cf/ResourceHandleCFNet.cpp: Declare CFURLConnectionCreateWithProperties
        for now, as it's mistakenly missing from WebKitSupportLibrary headers.

2010-05-19  Abhishek Arya  <inferno@chromium.org>

        Reviewed by David Hyatt.

        Check that the node is a text node before doing a static cast
        to a Text class pointer.
        https://bugs.webkit.org/show_bug.cgi?id=38626    

        Test: fast/text/text-transform-nontext-node-crash.xhtml

        * rendering/RenderText.cpp:
        (WebCore::RenderText::originalText):
        * rendering/RenderTextFragment.cpp:
        (WebCore::RenderTextFragment::originalText):
        (WebCore::RenderTextFragment::previousCharacter):

2010-05-12  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Darin Adler.

        HTML Entity Escape the contents of a textarea node when accessed
        via the innerHTML and outerHTML node properties.
        https://bugs.webkit.org/show_bug.cgi?id=38922

        Test: fast/innerHTML/innerHTML-special-elements.html

        * editing/markup.cpp:
        (WebCore::appendStartMarkup):

2010-05-12  James Robinson  <jamesr@chromium.org>

        Patch by Dan Bernstein.

        Reviewed by David Hyatt.

        Fix marking the layout root's parent as needing layout
        https://bugs.webkit.org/show_bug.cgi?id=37760

        If an element gets marked as needing layout due to the recalcStyle()
        call in FrameView::layout(), the m_layoutSchedulingEnabled flag will
        be set to false.  It's possible at this point that a parent of the
        existing FrameView::m_layoutRoot will be marked as needing layout.

        This patch updates FrameView::scheduleRelayoutOfSubtree to account
        for this case.

        Manual test only due to subtle timing issues.

        * manual-tests/layoutroot_detach.xml: Added.
        * page/FrameView.cpp:
        (WebCore::FrameView::scheduleRelayoutOfSubtree):

2010-05-10  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=38583
        <rdar://problem/7948784> Crash in Element::normalizeAttributes.

        Test: fast/dom/Element/normalize-crash.html

        * dom/Element.cpp:
        (WebCore::Element::normalizeAttributes): Copy attributes to a vector
        before iterating.
        * dom/NamedAttrMap.cpp:
        (WebCore::NamedNodeMap::copyAttributesToVector): Added.
        * dom/NamedAttrMap.h:

2010-05-10  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        Based on a patch by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=28697
        <rdar://problem/7946578> WebKit crash on WebCore::Node::nodeIndex()

        It's not OK to call ContainerNode::willRemoveChild() in a loop, because Range code assumes
        that it can adjust start and end position to any node except for the one being removed -
        so these notifications cannot be batched.

        Test: fast/dom/Range/remove-all-children-crash.html

        * dom/ContainerNode.cpp:
        (WebCore::willRemoveChild): Removed unused ExceptionCode.
        (WebCore::willRemoveChildren): New function, used in removeChildren() case.
        (WebCore::ContainerNode::removeChild): ExceptionCode return was always 0, don't bother with it.
        (WebCore::ContainerNode::removeChildren): Call willRemoveChildrenFromNode.
        (WebCore::dispatchChildRemovalEvents): Moved some logic out into willRemoveChildrenFromNode
        and willRemoveChild.

        * dom/Document.cpp:
        (WebCore::Document::nodeChildrenWillBeRemoved): New function, used in removeChildren() case.

        * dom/Document.h: 
        (WebCore::Document::nodeChildrenWillBeRemoved): New function, used in removeChildren() case.

        * dom/Range.h:
        * dom/Range.cpp:
        (WebCore::boundaryNodeChildrenWillBeRemoved): New function, used in removeChildren() case.
        (WebCore::Range::nodeChildrenWillBeRemoved): Ditto.

2010-05-03  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=38497
        <rdar://problem/7759438> Make sure that http URLs always have a host in SecurityOrigin

        This is a hardening fix, and behavior really depends on what an underlying networking layer
        does. So, no test.

        * page/SecurityOrigin.cpp:
        (WebCore::schemeRequiresAuthority): List schemes that need an authority for successful loading.
        (WebCore::SecurityOrigin::SecurityOrigin): Never let e.g. http origins with empty authorities
        have the same security origin.

2010-05-03  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Adam Barth.

        Add support for controlling clipboard access from javascript.
        Clipboard access from javascript is disabled by default.
        https://bugs.webkit.org/show_bug.cgi?id=27751

        Test: editing/execCommand/clipboard-access.html

        * WebCore.base.exp:
        * editing/EditorCommand.cpp:
        (WebCore::supportedCopyCut):
        (WebCore::supportedPaste):
        (WebCore::createCommandMap):
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setJavaScriptCanAccessClipboard):
        * page/Settings.h:
        (WebCore::Settings::javaScriptCanAccessClipboard):

2010-04-30  Abhishek Arya  <inferno@chromium.org>

        Reviewed by David Kilzer.

        Convert m_documentUnderMouse, m_dragInitiator to RefPtr.
        Eliminated unused m_dragInitiator accessor to prevent dereferencing.
        https://bugs.webkit.org/show_bug.cgi?id=37618

        Test: editing/pasteboard/drag-drop-iframe-refresh-crash.html

        * page/DragController.cpp:
        (WebCore::DragController::tryDocumentDrag):
        (WebCore::DragController::concludeEditDrag):
        * page/DragController.h:
        (WebCore::DragController::draggingImageURL):
        (WebCore::DragController::documentUnderMouse):

2010-04-14  Justin Schuh  <jschuh@chromium.org>

        Reviewed by Adam Barth.

        Javascript URL can be set as iframe.src via multiple DOM aliases
        https://bugs.webkit.org/show_bug.cgi?id=37031

        Moved frame/iframe checks from Attr to Node on inherited members.
        Node child manipulation methods now return NOT_SUPPORTED_ERR if used
        on a frame/iframe src attribute.
        NamedNodeMap set methods now perform frame/iframe src checks.
        Moved allowSettingSrcToJavascriptURL static helper function from 
        JSElementCustom.cpp to exported function in JSDOMBinding.h.

        * bindings/js/JSAttrCustom.cpp:
        (WebCore::JSAttr::setValue):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::allowSettingSrcToJavascriptURL):
        * bindings/js/JSDOMBinding.h:
        * bindings/js/JSElementCustom.cpp:
        * bindings/js/JSNamedNodeMapCustom.cpp:
        (WebCore::JSNamedNodeMap::setNamedItem):
        (WebCore::JSNamedNodeMap::setNamedItemNS):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::isAttrFrameSrc):
        (WebCore::JSNode::setNodeValue):
        (WebCore::JSNode::setTextContent):
        (WebCore::JSNode::insertBefore):
        (WebCore::JSNode::replaceChild):
        (WebCore::JSNode::removeChild):
        (WebCore::JSNode::appendChild):
        * bindings/v8/custom/V8AttrCustom.cpp:
        * bindings/v8/custom/V8NamedNodeMapCustom.cpp:
        (WebCore::V8NamedNodeMap::setNamedItemNSCallback):
        (WebCore::V8NamedNodeMap::setNamedItemCallback):
        (WebCore::toV8):
        * bindings/v8/custom/V8NodeCustom.cpp:
        (WebCore::isFrameSrc):
        (WebCore::V8Node::textContentAccessorSetter):
        (WebCore::V8Node::nodeValueAccessorSetter):
        (WebCore::V8Node::insertBeforeCallback):
        (WebCore::V8Node::replaceChildCallback):
        (WebCore::V8Node::removeChildCallback):
        (WebCore::V8Node::appendChildCallback):
        * dom/Attr.idl:
        * dom/NamedNodeMap.idl:
        * dom/Node.idl:

2010-03-26  Justin Schuh  <jschuh@chromium.org>

        Reviewed by Adam Barth.

        Security: iFrame.src accepts JavaScript URL via nodeValue or textContent
        https://bugs.webkit.org/show_bug.cgi?id=36502

        Overrode inherited nodeValue and textContent in Attr.idl so they proxy 
        to value, which performs a security check.

        Test: http/tests/security/xss-DENIED-iframe-src-alias.html

        * bindings/js/JSAttrCustom.cpp:
        (WebCore::JSAttr::nodeValue):
        (WebCore::JSAttr::setNodeValue):
        (WebCore::JSAttr::textContent):
        (WebCore::JSAttr::setTextContent):
        * bindings/v8/custom/V8AttrCustom.cpp:
        (WebCore::V8Attr::nodeValueAccessorSetter):
        (WebCore::V8Attr::nodeValueAccessorGetter):
        (WebCore::V8Attr::textContentAccessorSetter):
        (WebCore::V8Attr::textContentAccessorGetter):
        * dom/Attr.idl:

2010-05-05  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=38260
        <rdar://problem/7917548> Fix whitespace removing in deprecatedParseURL().

        Broken all the way since r4 (yes, that's a revision number).

        Test: http/tests/security/xss-DENIED-javascript-with-spaces.html

        * css/CSSHelper.cpp: (WebCore::deprecatedParseURL): Fixed loop conditions for remaining length.

2010-04-23  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/7898436> :after content is duplicated

        Test: fast/css-generated-content/after-duplicated-after-split.html

        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::splitInlines): Pass the correct owner of the child list.

2010-03-30  Chris Evans  <cevans@chromium.org>

        Reviewed by Adam Barth.

        Taint the canvas if an SVG-derived pattern is rendered into it.

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

        Test: fast/canvas/svg-taint.html

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::createPattern):
          Take into account the image's hasSingleSecurityOrigin() property.

2010-04-07  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darinn Adler.

        https://bugs.webkit.org/show_bug.cgi?id=37230
        <rdar://problem/7813115> REGRESSION (4.0.5): Safari asks for credentials all the time when
        authenticating to Windows IIS Server

        * platform/network/ProtectionSpace.h: (WebCore::ProtectionSpaceAuthenticationScheme): Added
        a constant for ProtectionSpaceAuthenticationSchemeUnknown.

        * platform/network/cf/AuthenticationCF.cpp: (WebCore::core):
        * platform/network/cf/SocketStreamHandleCFNet.cpp: (WebCore::authenticationSchemeFromAuthenticationMethod):
        Return ProtectionSpaceAuthenticationSchemeUnknown for unknown scheme.

        * platform/network/mac/AuthenticationMac.mm:
        (WebCore::mac): Support NTLM on systems older than 10.6. We actually get this string from
        NSURLConnection, even though there was no public constant.
        (WebCore::core): Return ProtectionSpaceAuthenticationSchemeUnknown for unknown scheme.

2010-04-19  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        Make the fix for <rdar://problem/7873647> from r57759 more robust.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateHoverActiveState): Use RefPtrs for the Nodes.

2010-04-16  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/7873647> Crash when updating hover state

        Test: fast/dynamic/hover-style-recalc-crash.html

        Updating the hover state of an element caused the document to need style
        recalc, and then updating the hover state of a link caused style recalc,
        which changed the render tree while updateHoverActiveState() was iterating
        over it, leading to a crash.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateHoverActiveState): Collect the nodes to be
        updated into vectors, then update their active and hover states.

2010-03-31  Mark Rowe  <mrowe@apple.com>

        Reviewed by Darin Adler.

        <http://webkit.org/b/36878> REGRESSION: Trailing colon on hostnames (with no port specified) causes "Not allowed to use restricted network port"

        * platform/KURL.cpp:
        (WebCore::KURL::port): Explicitly handle the case of a colon being present in the URL after the host name but with
        no port number before the path.  This is handled in the same manner as the colon and port being omitted completely.

2010-03-24  Mark Rowe  <mrowe@apple.com>

        Revert the portion of r56489 that dealt with port zero as it introduced some test failures.

        * platform/KURL.cpp:
        (WebCore::KURL::port): Use the "ok" argument to charactersToUIntStrict to determine whether
        it was able to successfully parse the string as an unsigned integer, rather than relying on
        the fact it returned zero when it failed.

2010-03-24  Mark Rowe  <mrowe@apple.com>

        Reviewed by Darin Adler.

        WebKit should treat port numbers outside the valid range as being blacklisted
        <http://webkit.org/b/36571> / <rdar://problem/7790908>

        * platform/KURL.cpp:
        (WebCore::KURL::port): Map invalid port numbers to invalidPortNumber.
        (WebCore::portAllowed): Add invalidPortNumber to the blacklist.
        * platform/KURLGoogle.cpp:  invalid port numbers to invalidPortNumber.
        (WebCore::KURL::port): Add invalidPortNumber to the blacklist.
        Also bring this in to sync with KURL.  Having this identical code in two places is stupid.

2010-05-05  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Adele Peterson.

        https://bugs.webkit.org/show_bug.cgi?id=26824
        <rdar://problem/7018610> EventHandler can operate on a wrong frame if focus changes during
        keyboard event dispatch.

        EventHandler object is tied to a frame, so it's wrong for it to continue processing a keyboard
        event if focused frame changes between keydown and keypress.

        * manual-tests/focus-change-between-key-events.html: Added.

        * page/EventHandler.cpp: (WebCore::EventHandler::keyEvent): Bail out early if focused frame
        changes while dispatching keydown. Also made similar changes for Windows to maintain matching
        behavior, even though EventHandler was re-entered anyway due to WM_KEYDOWN and WM_CHAR being
        separate events.

2010-07-02  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Canvas arcTo() should draw straight line to p1 if p0, p1 and p2 are collinear

        The implementation of PathQt's addArcTo() was not float-safe and also had
        a case where it drew an 'infinite' line, which is not part of the spec.

        http://www.whatwg.org/specs/web-apps/current-work/#dom-context-2d-arcto

        We now use qFuzzyCompare() in both cases. The method isPointOnPathBorder()
        also had the same problem, and was refactored a bit in the process of fixing
        the bug.

        Initial patch by Andreas Kling.

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

        * platform/graphics/qt/PathQt.cpp:

2010-03-26  Shu Chang  <chang.shu@nokia.com>

        Reviewed by Eric Seidel.

        [Qt] Prevent referring d->m_job in the future because calling abort()
        deletes the instance itself.
        https://bugs.webkit.org/show_bug.cgi?id=36618

        Test: http/tests/appcache/fallback.html

        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::ResourceHandle::cancel):

2010-06-28  Sam Magnuson  <smagnuson@netflix.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] GraphicsLayerQt delay seems unnecessary.
        https://bugs.webkit.org/show_bug.cgi?id=40846

        Test: compositing/animation/busy-indicator.html

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::GraphicsLayerQtImpl::recache):
        (WebCore::GraphicsLayerQtImpl::flushChanges):
        (WebCore::GraphicsLayerQt::setContentsToImage):
        (WebCore::GraphicsLayerQt::addAnimation):

2010-06-25  Sam Magnuson  <smagnuson@netflix.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] When any geometry change happens to a node it will resize the
        backing cache
        https://bugs.webkit.org/show_bug.cgi?id=40378

        Continue to grow the cache, but never toss it. When the pixmap
        cache gets too big it will be lost and created at the right size
        next time.

        No new tests: this is an optimization.

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::GraphicsLayerQtImpl::recache):
        (WebCore::GraphicsLayerQtImpl::paint):
        (WebCore::GraphicsLayerQtImpl::flushChanges):

2010-06-30  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Simon Fraser.

        Spatial Navigation: make elements in inner frames nested more than 1 level deep focusable
        https://bugs.webkit.org/show_bug.cgi?id=41160

        Patch addresses the problem of spatial navigation not work properly with nested
        inner frames by adding the isNodeDeepDescendantOfDocument method. It recursively checks
        if a give node is descendant of a given document or any parent of it.

        Test: fast/events/spatial-navigation/snav-iframe-nested.html

        * page/FocusController.cpp:
        (WebCore::FocusController::deepFindFocusableNodeInDirection):
        * page/SpatialNavigation.cpp:
        (WebCore::isNodeDeepDescendantOfDocument):
        * page/SpatialNavigation.h:

2010-06-30  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Crash when uploading document to Google Docs
        https://bugs.webkit.org/show_bug.cgi?id=40795

        Fix bug where the local file wasn't opened (for POSTing)
        if it were the first element in the form.

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::FormDataIODevice::FormDataIODevice):
        (WebCore::FormDataIODevice::moveToNextElement):
        (WebCore::FormDataIODevice::openFileForCurrentElement):
        * platform/network/qt/QNetworkReplyHandler.h:

2010-06-29  Abhinav Mithal <abhinav.mithal@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] [Symbian] Fix doube-deallocation while destroying PluginContainerSymbian
        https://bugs.webkit.org/show_bug.cgi?id=37303

        * plugins/symbian/PluginViewSymbian.cpp:
        (WebCore::PluginView::platformDestroy):

2010-06-29  Kristian Amlie  <kristian.amlie@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt/Symbian] Fixed deployment paths for WebKit declarative plugin.

        * WebCore.pro:

2010-06-28  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Replace single treat-as-space characters with normal space
        https://bugs.webkit.org/show_bug.cgi?id=41278

        This keeps Qt from attempting glyph substitution and loading a bunch
        of extra fonts when encountering &nbsp; entities.

        * platform/graphics/qt/FontQt.cpp:
        (WebCore::Font::floatWidthForComplexText):

2010-06-24  Simon Hausmann  <simon.hausmann@nokia.com>

        Unreviewed Symbian build fix.

        The QML WebKit integration needs to be part of QtWebKit.sis

        * WebCore.pro: Deploy qmlwebkitplugin.dll.

2010-06-23  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Do not render the full frame when there is some elements with fixed positioning
        https://bugs.webkit.org/show_bug.cgi?id=33150

        Do not render the full frame when there is some elements with fixed positioning
        https://bugs.webkit.org/show_bug.cgi?id=33150

        The frame view take into acount the list of fixed object when scrolling
        the view. If the number of object is lower than a certain threshold, the pixel
        are blitted, and the invalidated area updated.

        * page/FrameView.cpp:
        (WebCore::FrameView::addFixedObject):
        (WebCore::FrameView::removeFixedObject):
        (WebCore::FrameView::scrollContentsFastPath):
        * page/FrameView.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::scrollContents):
        (WebCore::ScrollView::scrollContentsFastPath):
        * platform/ScrollView.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::repaintRectIncludingDescendants):
        * rendering/RenderLayer.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::styleWillChange):

2010-05-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Allocate the m_preloads list hash set dynamically and free it when done.
        https://bugs.webkit.org/show_bug.cgi?id=39309
        <rdar://problem/7998495>

        This saves about 6000 bytes on a fully loaded document.

        * loader/DocLoader.cpp:
        (WebCore::DocLoader::requestPreload):
        (WebCore::DocLoader::clearPreloads):
        * loader/DocLoader.h:

2010-05-18  Anders Carlsson  <andersca@apple.com>

        Revert unintended indentation and unnecessary nested name specifier.

        * rendering/RenderBlock.cpp:
        (WebCore::clipOutPositionedObjects):
        (WebCore::RenderBlock::insertPositionedObject):

2010-05-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add an inlineCapacity template parameter to ListHashSet and use it to shrink the positioned object list hash set.
        https://bugs.webkit.org/show_bug.cgi?id=39304
        <rdar://problem/7998366>

        Set the inlineCapacity for the positionedObjects ListHashSet to 4 instead of 256. Since a RenderBlock usually has 
        few positioned objects, this saves memory.

        * WebCore.base.exp:
        * rendering/RenderBlock.cpp:
        (WebCore::clipOutPositionedObjects):
        (WebCore::RenderBlock::insertPositionedObject):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::positionedObjects):

2010-06-22  Simon Hausmann  <simon.hausmann@nokia.com>

        Unreviewed Qt/Symbian build fix.

        Fix "make clean" to not try to execute clean commands for
        the extra targets we use to simulate "make install".

        * WebCore.pro: Use no_clean in CONFIG of extra compilers.

2010-06-21  Balazs Kelemen  <kb@inf.u-szeged.hu>

        Reviewed by Simon Hausmann.

        [Qt] Avoid unnecessary image conversion in RGBA32Buffer::zeroFill()
        https://bugs.webkit.org/show_bug.cgi?id=40910

        * platform/image-decoders/qt/RGBA32BufferQt.cpp:
        (WebCore::RGBA32Buffer::zeroFill):

2010-05-31  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Implement the simple text code path.
        https://bugs.webkit.org/show_bug.cgi?id=40077

        Remove the FONT_FAST_PATH macro and use the Qt's
        fast text implementation instead of the one of WebKit.

        The Qt::TextBypassShaping flag is used to tell Qt to
        only use the glyph advances.

        Qt 4.7 is needed to get this flag thus the complex path is always
        used if QtWebKit is compiled against an earlier version.

        Contrary to the WebKit's implementation, the complex code path
        is taken if the text is RightToLeft, justified or is formatted
        with non-zero letter or word spacing.

        * platform/graphics/Font.cpp:
        (WebCore::Font::drawText):
        (WebCore::Font::floatWidth):
        (WebCore::Font::selectionRectForText):
        (WebCore::Font::offsetForPosition):
        * platform/graphics/Font.h:
        (WebCore::Font::isRoundingHackCharacter):
        * platform/graphics/qt/FontQt.cpp:
        (WebCore::fromRawDataWithoutRef):
        (WebCore::needComplexCodePath):
        (WebCore::setupPlatformContext):
        (WebCore::Font::canReturnFallbackFontsForComplexText):
        (WebCore::Font::drawSimpleText):
        (WebCore::Font::drawComplexText):
        (WebCore::Font::floatWidthForSimpleText):
        (WebCore::Font::offsetForPositionForSimpleText):
        (WebCore::Font::selectionRectForSimpleText):

2010-06-03  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Simon Hausmann.

        Move the text code path detection code from FontFastPath.cpp to Font.cpp.
        https://bugs.webkit.org/show_bug.cgi?id=40077

        This is a patch preliminary to the implementation of the
        simple font code path for the Qt port.

        * platform/graphics/Font.cpp:
        (WebCore::Font::setCodePath):
        (WebCore::Font::codePath):
        * platform/graphics/Font.h:
        * platform/graphics/FontFastPath.cpp:

2010-04-30  Dan Bernstein  <mitz@apple.com>

        Reviewed by Adele Peterson.

        Part of <rdar://problem/6649734> Text repainting does not account for glyphs which draw outside the typographic bounds of the font
        https://bugs.webkit.org/show_bug.cgi?id=6274

        Account for glyph overflow of characters in the range U+1E00..U+2000, but without sending them
        through the complex text code path. Instead, introduce a variant of the fast path that tracks
        glyph overflow.

        * platform/graphics/Font.cpp:
        (WebCore::Font::drawText): Use codePath().
        (WebCore::Font::floatWidth): Use codePath(). Pass the GlyphOverflow pointer through to
        floatWidthForSimpleText() if the code path is SimpleWithGlyphOverflow.
        (WebCore::Font::selectionRectForText): Use codePath().
        (WebCore::Font::offsetForPosition): Ditto.
        * platform/graphics/Font.h: Replaced canUseGlyphCache() with codePath(). Added a GlyphOverflow
        parameter to floatWidthForSimpleText().
        * platform/graphics/FontFastPath.cpp:
        Removed ROMAN_AND_GREEK_DIACRITICS_CAN_USE_GLYPH_CACHE.
        (WebCore::Font::codePath): Renamed canUseGlyphCache() to this. Where it used to return false,
        it now returns Complex. Where it used to return true, it now returns Simple, except for
        the range U+1E00..U+2000, where it now returns SimpleWithGlyphOverflow.
        (WebCore::Font::floatWidthForSimpleText): Added a GlyphOverflow parameter. If not 0, have the
        width iterator account for glyph bounds, then update the GlyphOverflow accordingly.
        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::WidthIterator): Added boolean parameter telling the width iterator
        whether to account for glyph bounds. Initialize m_accountForGlyphBounds accordingly. Initialize
        m_maxGlyphBoundingBoxY, m_minGlyphBoundingBoxY, m_firstGlyphOverflow and m_lastGlyphOverflow.
        (WebCore::WidthIterator::advance): If accounting for glyph bounds, update the above member variables.
        * platform/graphics/WidthIterator.h:
        (WebCore::WidthIterator::maxGlyphBoundingBoxY): Added this accessor.
        (WebCore::WidthIterator::minGlyphBoundingBoxY): Ditto.
        (WebCore::WidthIterator::firstGlyphOverflow): Ditto.
        (WebCore::WidthIterator::lastGlyphOverflow): Ditto.

2010-04-21  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Adele Peterson.

        http://trac.webkit.org/changeset/57215 caused perf/memory regressions
        https://bugs.webkit.org/show_bug.cgi?id=37292

        #if out the canUseGlyphCache Changes from r57215 as they caused a 
        8% perf regression on Chromium's international page load tests so that
        the perf regression can be fixed properly without being left in the tree.

        * platform/graphics/FontFastPath.cpp:
        (WebCore::Font::canUseGlyphCache):

2010-04-07  Enrica Casucci  <enrica@apple.com>

        Reviewed by Dave Hyatt.

        Text repainting does not account for glyphs which draw outside the typographic bounds of the font (6274).
        <rdar://problem/6649734>
        <https://bugs.webkit.org/show_bug.cgi?id=6274>
        
        In order to be able to handle successfully this case, it is necessary to change the glyph width cache to store
        the bounding box for the glyph instead of the simply caching the glyph width.
        Retrieving the bounding box for the glyph is expensive, therefore we do it only
        when we are rendering text using the complex text path to minimize the performance impact.
        To support characters with stacked diacritics, the method canUseGlyphCache has been modified to
        return false for the range of characters with stacked diacritics.
        The glyph cache has been also updated to allow storing the glyph bounding box together with the
        horizontal width. The bounding box is populated only for complex text.
        
        The original version of this patch has been written by Dan Bernstein.

        Test: fast/repaint/stacked-diacritics.html

        * Android.mk: File name change.
        * GNUmakefile.am: File name change.
        * WebCore.base.exp: Added parameter in exported function.
        * WebCore.gypi: File name change.
        * WebCore.vcproj/WebCore.vcproj: File name change.
        * WebCore.xcodeproj/project.pbxproj: File name change.
        * platform/graphics/Font.cpp:
        (WebCore::Font::floatWidth): Added glyphOverflow parameter.
        * platform/graphics/Font.h:
        (WebCore::GlyphOverflow::GlyphOverflow): Added.
        (WebCore::Font::width): Added glyphOverflow parameter.
        * platform/graphics/FontFastPath.cpp:
        (WebCore::Font::canUseGlyphCache): Modified to render characters with stacked diacritics with complex text path.
        * platform/graphics/GlyphMetricsMap.cpp: Copied from WebCore/platform/graphics/GlyphWidthMap.cpp.
        (WebCore::GlyphMetricsMap::locatePageSlowCase): Class name changed to reflect new semantics.
        * platform/graphics/GlyphMetricsMap.h: Copied from WebCore/platform/graphics/GlyphWidthMap.h.
        (WebCore::GlyphMetricsMap::GlyphMetricsMap):
        (WebCore::GlyphMetricsMap::~GlyphMetricsMap):
        (WebCore::GlyphMetricsMap::metricsForGlyph):
        (WebCore::GlyphMetricsMap::widthForGlyph):
        (WebCore::GlyphMetricsMap::setMetricsForGlyph):
        (WebCore::GlyphMetricsMap::GlyphMetricsPage::metricsForGlyph):
        (WebCore::GlyphMetricsMap::GlyphMetricsPage::setMetricsForGlyph):
        (WebCore::GlyphMetricsMap::GlyphMetricsPage::setMetricsForIndex):
        (WebCore::GlyphMetricsMap::locatePage):
        * platform/graphics/GlyphWidthMap.cpp: Removed.
        * platform/graphics/GlyphWidthMap.h: Removed.
        * platform/graphics/SimpleFontData.cpp:
        (WebCore::SimpleFontData::platformGlyphInit):
        * platform/graphics/SimpleFontData.h:
        (WebCore::):
        (WebCore::SimpleFontData::widthForGlyph):
        (WebCore::SimpleFontData::metricsForGlyph):
        * platform/graphics/cairo/SimpleFontDataCairo.cpp:
        (WebCore::SimpleFontData::platformMetricsForGlyph): Name and signature change.
        * platform/graphics/chromium/FontChromiumWin.cpp:
        (WebCore::Font::floatWidthForComplexText): Added parameter.
        * platform/graphics/chromium/FontLinux.cpp:
        (WebCore::Font::floatWidthForComplexText): Added parameter.
        * platform/graphics/chromium/SimpleFontDataChromiumWin.cpp:
        (WebCore::SimpleFontData::platformMetricsForGlyph): Name and signature change.
        * platform/graphics/chromium/SimpleFontDataLinux.cpp:
        (WebCore::SimpleFontData::platformWidthForGlyph): Name and signature vachange
        * platform/graphics/efl/FontEfl.cpp:
        (WebCore::Font::floatWidthForComplexText): Name and signature change.
        * platform/graphics/gtk/SimpleFontDataPango.cpp:
        (WebCore::SimpleFontData::platformMetricsForGlyph): Name and signature change.
        * platform/graphics/haiku/FontHaiku.cpp:
        (WebCore::Font::floatWidthForComplexText): Added parameter.
        * platform/graphics/haiku/SimpleFontDataHaiku.cpp:
        (WebCore::SimpleFontData::platformMetricsForGlyph): Name and signature change.
        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::ComplexTextController::ComplexTextController):
        (WebCore::ComplexTextController::adjustGlyphsAndAdvances):
        * platform/graphics/mac/ComplexTextController.h:
        (WebCore::ComplexTextController::minGlyphBoundingBoxX):
        (WebCore::ComplexTextController::maxGlyphBoundingBoxX):
        (WebCore::ComplexTextController::minGlyphBoundingBoxY):
        (WebCore::ComplexTextController::maxGlyphBoundingBoxY):
        * platform/graphics/mac/FontComplexTextMac.cpp:
        (WebCore::Font::floatWidthForComplexText): Added paramter.
        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::platformMetricsForGlyph): Name and signature change.
        * platform/graphics/qt/FontQt.cpp:
        (WebCore::Font::floatWidthForComplexText): Added paramter.
        * platform/graphics/win/FontWin.cpp:
        (WebCore::Font::floatWidthForComplexText): Added parameter.
        * platform/graphics/win/SimpleFontDataCGWin.cpp:
        (WebCore::SimpleFontData::platformMetricsForGlyph): Name and signature change.
        * platform/graphics/win/SimpleFontDataWin.cpp:
        (WebCore::SimpleFontData::metricsForGDIGlyph):
        * platform/graphics/win/UniscribeController.cpp:
        (WebCore::UniscribeController::UniscribeController):
        (WebCore::UniscribeController::shapeAndPlaceItem):
        * platform/graphics/win/UniscribeController.h:
        (WebCore::UniscribeController::minGlyphBoundingBoxX):
        (WebCore::UniscribeController::maxGlyphBoundingBoxX):
        (WebCore::UniscribeController::minGlyphBoundingBoxY):
        (WebCore::UniscribeController::maxGlyphBoundingBoxY):
        * platform/graphics/wince/FontWince.cpp:
        (WebCore::Font::floatWidthForComplexText): Added parameter.
        * platform/graphics/wx/FontWx.cpp:
        (WebCore::Font::floatWidthForComplexText): Added parameter.
        * platform/graphics/wx/SimpleFontDataWx.cpp:
        (WebCore::SimpleFontData::platformMetricsForGlyph): Name and signature change.
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxesHorizontally):
        (WebCore::InlineFlowBox::computeLogicalBoxHeights):
        (WebCore::InlineFlowBox::computeVerticalOverflow):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::setFallbackFonts):
        (WebCore::InlineTextBox::fallbackFonts):
        (WebCore::InlineTextBox::setGlyphOverflow):
        (WebCore::InlineTextBox::glyphOverflow):
        * rendering/InlineTextBox.h:
        (WebCore::InlineTextBox::clearGlyphOverflowAndFallbackFontMap): Added.
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::computeHorizontalPositionsForLine):
        (WebCore::RenderBlock::layoutInlineChildren):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::RenderText):
        (WebCore::RenderText::styleDidChange):
        (WebCore::RenderText::widthFromCache):
        (WebCore::RenderText::trimmedPrefWidths):
        (WebCore::RenderText::calcPrefWidths):
        (WebCore::RenderText::setText):
        (WebCore::RenderText::width):
        * rendering/RenderText.h:

2010-03-23  Evan Martin  <evan@chromium.org>

        Reviewed by Dmitry Titov.

        [chromium] use integral glyph widths
        https://bugs.webkit.org/show_bug.cgi?id=36510

        Despite WebKit (and Skia, to an extent) supporting non-integral
        glyph widths, the font code path we hit in Skia only supports
        integral glyph positions.  This means that we would accumulate
        offsets when drawing a sequence up non-integer-width glyphs
        which would cause gaps when snapped to the pixel grid when drawing.

        * platform/graphics/chromium/SimpleFontDataLinux.cpp:
        (WebCore::SimpleFontData::platformWidthForGlyph):
        round glyph widths to integers.

2010-06-21  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Decode images directly to QPixmap
        https://bugs.webkit.org/show_bug.cgi?id=40797

        Decode images to QPixmap directly instead of QImage when possible.
        RGBA32Buffer transforms the pixmap back to image if
        necessary.

        This improve the performance with certain graphic system, and
        can reduce memory usage.

        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::setData):
        (WebCore::ImageDecoderQt::internalHandleCurrentImage):
        * platform/image-decoders/ImageDecoder.h:
        (WebCore::RGBA32Buffer::getAddr):
        * platform/image-decoders/qt/RGBA32BufferQt.cpp:
        (WebCore::RGBA32Buffer::clear):
        (WebCore::RGBA32Buffer::zeroFill):
        (WebCore::RGBA32Buffer::copyBitmapData):
        (WebCore::RGBA32Buffer::setSize):
        (WebCore::RGBA32Buffer::asNewNativeImage):
        (WebCore::RGBA32Buffer::setPixmap):

2010-06-17  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Get rid of the the unused imageSize of ImageDecoderQt::internalHandleCurrentImage()
        https://bugs.webkit.org/show_bug.cgi?id=40620

        Remove an unused variable.

        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::internalHandleCurrentImage):

2010-06-18  Ananth Jasty  <ext-ananth.jasty@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Text spacing miscalculation when using wordSpacing.
        https://bugs.webkit.org/show_bug.cgi?id=40483

        Removed wordSpacing compensation in FontQt whitespace width
        calculation. The QFontMetrics::width() overload that takes
        a character does not take QFont's word spacing into account.

        * platform/graphics/qt/FontQt.cpp:
        (WebCore::Font::floatWidthForComplexText):

2010-06-13  Robert Hogan  <robert@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        WebCore EventHandler needs to take account of onLoad events 
        fired before layout() complete

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

        WebCore 'cheats' by firing onLoad events before the frame's layout
        has been performed. This can result in event listeners performing
        operations that depend on the document's final layout, such as
        scrolling operations.

        When scrolling a frameview in eventhandler ensure the layout is complete.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::scrollRecursively):

2010-06-10  Raine Makelainen  <raine.makelainen@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Impossible to set input method hints based HTML5 input types
        https://bugs.webkit.org/show_bug.cgi?id=40107

        Helper methods for checking "tel", "number", "email",
        and "url" input element types.

        * html/HTMLInputElement.h:
        (WebCore::HTMLInputElement::isTelephoneField):
        (WebCore::HTMLInputElement::isNumberField):
        (WebCore::HTMLInputElement::isEmailField):
        (WebCore::HTMLInputElement::isUrlField):

2010-06-17  Mark Brand  <mabrand@mabrand.nl>

        Reviewed by Simon Hausmann.

        [Qt] use "win32-g++*" scope to match all MinGW makespecs

        The scope "win32-g++" comes from the name of the makespec. However, it
        is frequently used to check for MinGW. This works fine as long as
        win32-g++ is the only makespec for MinGW. Now we need the wildcard
        to cover "win32-g++-cross" as well.

        * WebCore.pro:

2010-06-16  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Kenneth Christiansen.

        Spatial Navigation: using offset{Left,Top} is not enough to get the proper inner frames position
        https://bugs.webkit.org/show_bug.cgi?id=39439

        As pointed out by Darin Adler in https://bugs.webkit.org/show_bug.cgi?id=18662#c20,
        "It's not correct to use the offsetLeft and offsetTop of the frame owner element's renderer because
        that's just the distance from the offsetParent, not the absolute position".

        Patch fixes that behavior by now considering the offsetTop and offsetLeft the offsetParent recursively,
        starting from the HtmlFrameOwnerElement. Previously, only calling offsetTop and offsetLeft works
        because all tests were done in htmls where the {i}frame element was a directly a child of the body,
        e.g. <html>...<body><iframe src=xxx>....<body></html>.

        Test: fast/events/spatial-navigation/snav-iframe-recursive-offset-parent.html

        * page/SpatialNavigation.cpp:
        (WebCore::renderRectRelativeToRootDocument):

2010-06-16  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Simon Fraser.

        Spatial Navigation: refactor scrollInDirection to work with scrollable content
        https://bugs.webkit.org/show_bug.cgi?id=39195

        scrollInDirection now receives as parameter the node that the Spatial Navigation
        found as the more appropriated to move focus to. If it is in a scrollable container
        (e.g. <div> with clipped overflow content), it scrolls recursively starting from
        the container, not the current focused node.

        Test: fast/events/spatial-navigation/snav-only-clipped-overflow-content.html

        * page/FocusController.cpp:
        (WebCore::FocusController::advanceFocusDirectionally):
        * page/SpatialNavigation.cpp:
        (WebCore::scrollInDirection):
        * page/SpatialNavigation.h:

2010-05-28  Viatcheslav Ostapenko  <ostapenko.viatcheslav@nokia.com>

        Reviewed by Simon Hausmann, Antti Koivisto

        Make repaint throttling parameters runtime configurable.
        https://bugs.webkit.org/show_bug.cgi?id=38401

        REPAINT_THROTTLING now chooses default values for throttling parameters.
        Should be removed when applications start using runtime configuration.

        * page/FrameView.cpp:
        (WebCore::FrameView::reset):
        (WebCore::FrameView::updateDeferredRepaintDelay):
        (WebCore::FrameView::setRepaintThrottlingDeferredRepaintDelay):
        (WebCore::FrameView::setRepaintThrottlingnInitialDeferredRepaintDelayDuringLoading):
        (WebCore::FrameView::setRepaintThrottlingMaxDeferredRepaintDelayDuringLoading):
        (WebCore::FrameView::setRepaintThrottlingDeferredRepaintDelayIncrementDuringLoading):
        * page/FrameView.h:

2010-06-16  Dawit Alemayehu  <adawit@kde.org>

        Reviewed by Simon Hausmann.

        [Qt] QtWebKit crashes while initializing flash plugin 10.1.53.64.
        https://bugs.webkit.org/show_bug.cgi?id=40567

        Avoid preventable crashes by ensuring gtk_init() is called in the
        flash viewer plugins before calling NP_Initialize.

        * plugins/qt/PluginPackageQt.cpp:
        (WebCore::PluginPackage::load):

2010-04-21  Zoltan Herczeg  <zherczeg@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] startAnimation() is not needed to preceede nativeImageForCurrentFrame()
        https://bugs.webkit.org/show_bug.cgi?id=37844

        nativeImageForCurrentFrame() resets the m_decoder parameter under Qt,
        which is required by startAnimation() to detect frame and repetition counts.
        Hence, Image::drawTiled cannot start animations under Qt:
        <html><body background="animated.gif"></body></html> does not work

        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::internalHandleCurrentImage):

2010-05-28  Peter Kasting  <pkasting@google.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=39857
        Make GIFs loop the correct number of times.  Previously, everyone looped
        one time too few for non-infinitely-looping GIFs.

        Modified a Qt manual test to be correct and moved it to the general
        manual test directory.

        * manual-tests/animated-gif-looping.html: Copied from WebCore/manual-tests/qt/qt-gif-test.html.
        * manual-tests/qt/qt-10loop-anim.gif: Removed.
        * manual-tests/qt/qt-anim.gif: Removed.
        * manual-tests/qt/qt-gif-test.html: Removed.
        * manual-tests/qt/qt-noanim.gif: Removed.
        * manual-tests/resources/animated-10x.gif: Copied from WebCore/manual-tests/qt/qt-10loop-anim.gif and modified.
        * manual-tests/resources/animated-infinite.gif: Copied from WebCore/manual-tests/qt/qt-anim.gif.
        * manual-tests/resources/non-animated.gif: Copied from WebCore/manual-tests/qt/qt-noanim.gif.
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::internalAdvanceAnimation): For a loop count of n, show a total of n + 1 animation cycles.
        * platform/graphics/ImageSource.h:
        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::repetitionCount):
        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::repetitionCount): Remove translation code now that WebCore matches Qt's internal handling of the loop count.  Qt itself may still have a bug here.
        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::repetitionCount):
        * platform/image-decoders/gif/GIFImageReader.cpp:
        (GIFImageReader::read): Translate loop count 0 to "loop infinitely" (by restoring one piece of the Mozilla code we'd removed).

2010-05-04  Tucker Jay  <jay.tucker@nokia.com>

        Reviewed by Holger Freyther.

        Animated GIF images does not animate 10x as expected by default.
        https://bugs.webkit.org/show_bug.cgi?id=36818

        Added test case to existing manual test to test the
        fixed functionality.

        * manual-tests/qt/qt-10loop-anim.gif: Added.
        * manual-tests/qt/qt-gif-test.html:
        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::repetitionCount):

2010-05-16  Antonio Gomes  <tonikitoo@webkit.org>

        Unreviewed naming fixes of local variables used in Spatial Navigation methods.

        Summary:
            * "candidate" renamed to "node";
            * "currentFocusCandidate" renamed to "candidate"
            * "closestFocusCandidate" renamed to "closest"

        That way naming is more consistent in the various Spatial Navigation methods.

        * page/FocusController.cpp:
        (WebCore::FocusController::findFocusableNodeInDirection):
        (WebCore::FocusController::deepFindFocusableNodeInDirection):

2010-06-14  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Simon Fraser and Kenneth Christiansen.

        Spatial Navigation: make it work with focusable elements in overflow content
        https://bugs.webkit.org/show_bug.cgi?id=36463

        This patch addresses the problem with Spatial Navigation. It currently does not
        properly traverse scrollable contents, including scrollable div's. For this to work,
        a new class member called scrollableEnclosingBox was introduced to FocusCandidate class which
        keeps track of the current scrollable box Node wrapping a FocusCandidate.

        To make use of enclosingScrollableBox of FocusCandidate, the DOM traversal routine
        (FocusController::findNextFocusableInDirection) was changed as follows: when it
        encounters a scrollable Node, each focusable node which is 'inner' keeps track of
        the container reference. By the time a sibling of the scrollable Node is encountered,
        there is no need to track this reference any more and the traversal algorithm continues
        normally.

        The common case is obviously that there is no scrollable container wrapping it.

        updateFocusCandiditeIfCloser logic was also adapted to fit the need of the
        newly introduced enclosingScrollableBox class member, getting simpler and more
        easily maintainable.

        Tests: fast/events/spatial-navigation/snav-div-scrollable-but-without-focusable-content.html
               fast/events/spatial-navigation/snav-clipped-overflow-content.html

        * page/FocusController.cpp:
        (WebCore::updateFocusCandidateInSameContainer):
        (WebCore::updateFocusCandidateIfCloser):
        (WebCore::FocusController::findFocusableNodeInDirection):
        (WebCore::FocusController::deepFindFocusableNodeInDirection):
        * page/SpatialNavigation.cpp:
        (WebCore::isScrollableContainerNode):
        * page/SpatialNavigation.h:
        (WebCore::FocusCandidate::FocusCandidate):
        (WebCore::FocusCandidate::isInScrollableContainer):

2010-06-15  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] The qt_webkit_version.pri file gets overwritten on install
        https://bugs.webkit.org/show_bug.cgi?id=40487

        Don't install qt_webkit_version.pri when building WebKit inside of Qt.
        The import of WebKit into Qt will take care of providing the file
        in mkspecs/modules and it'll be installed through projects.pro.

        * WebCore.pro:

2010-06-13  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Eric Seidel.

        [Qt] GraphicsLayer: recaching images creates an unnecessary deep copy
        https://bugs.webkit.org/show_bug.cgi?id=40535

        Made sure the painter ends its operation before copying the pixmap.

        No new tests: this is an optimization.

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::GraphicsLayerQtImpl::recache):

2010-03-24  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Dimitri Glazkov.

        Changing the V8 and JSC implementations of
        SQLStatementErrorCallback to interpret as false all results that
        could be converted to a false boolean. Pretty much a revert of
        r54981.

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

        * bindings/js/JSCustomSQLStatementErrorCallback.cpp:
        (WebCore::JSCustomSQLStatementErrorCallback::handleEvent):
        * bindings/v8/custom/V8CustomSQLStatementErrorCallback.cpp:
        (WebCore::V8CustomSQLStatementErrorCallback::handleEvent):
        * bindings/v8/custom/V8CustomVoidCallback.cpp:
        (WebCore::invokeCallback):
        * bindings/v8/custom/V8CustomVoidCallback.h:

2010-06-13  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] tests/hybridPixmap fails
        https://bugs.webkit.org/show_bug.cgi?id=37316

        The problem was that JSC::Instance::createRuntimeObject was never called.
        This is fixed by overloading newRuntimeObject and calling Instance::createRuntimeObject
        in between, instead of creating the runtime object directly inside the static function
        QtPixmapInstance::createRuntimeObject, which had to be renamed as to not overshadow the virtual function.

        This fixes an existing test, tests/hybridPixmap

        * bridge/qt/qt_pixmapruntime.cpp:
        (JSC::Bindings::QtPixmapInstance::newRuntimeObject):
        (JSC::Bindings::QtPixmapInstance::createPixmapRuntimeObject):
        * bridge/qt/qt_pixmapruntime.h:
        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::convertQVariantToValue):

2010-06-07  Mahesh Kulakrni  <mahesh.kulkarni@nokia.com>

        Reviewed by Simon Hausmann.

        [QT] QT_BEARER flag is not enabled on S60 properly
        https://bugs.webkit.org/show_bug.cgi?id=39357

        enable QT_BEARER for all platform based on qtmobility + 
        bearer module availability or for qt 4.7+

        * WebCore.pri: 

2010-06-09  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Dirk Schulze.

        [Qt] Imperfect dependency for generated SVGNames.cpp
        https://bugs.webkit.org/show_bug.cgi?id=40359

        * WebCore.pri: Missing dependency added.

2010-06-08  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Unreviewed Buildbot fix.

        Reset the Qt TextBreakIterator when reusing it.

        * platform/text/qt/TextBreakIteratorQt.cpp:
        (WebCore::setUpIterator):

2010-06-08  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Reviewed by Antti Koivisto.

        [Qt] TextBreakIterator Qt performance
        https://bugs.webkit.org/show_bug.cgi?id=39958

        Rework TextBreakIteratorQt to be more in line with the ICU version.

        We now reuse iterators where ever possible. The string data is compared
        with memcmp, which should be faster than using a hash, as you need
        to traverse the full buffer in the case the strings don't match,
        where as the compare would fail quickly.

        * platform/text/qt/TextBreakIteratorQt.cpp:
        (WebCore::TextBreakIterator::TextBreakIterator):
        (WebCore::setUpIterator):
        (WebCore::wordBreakIterator):
        (WebCore::characterBreakIterator):
        (WebCore::lineBreakIterator):
        (WebCore::sentenceBreakIterator):

2010-06-07  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Fix text selection drawing.
        https://bugs.webkit.org/show_bug.cgi?id=40221

        The regression was introduced in r60169.

        * platform/graphics/qt/FontQt.cpp:
        (WebCore::drawTextCommon):

2010-06-04  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Fix compilation with QT_NO_FEATURE
        https://bugs.webkit.org/show_bug.cgi?id=38324

        The #ifdef QT_NO_GRAPHICSEFFECT was in the wrong place, would have
        made AC not work at all.

        No new tests.

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::GraphicsLayerQtImpl::flushChanges):

2010-05-24  Tasuku Suzuki  <tasuku.suzuki@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Fix compilation with QT_NO_TEMPORARYFILE
        https://bugs.webkit.org/show_bug.cgi?id=38324

        * platform/qt/FileSystemQt.cpp:
        (WebCore::openTemporaryFile):

2010-05-21  Tasuku Suzuki  <tasuku.suzuki@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Fix compilation with QT_NO_GRAPHICSEFFECT
        https://bugs.webkit.org/show_bug.cgi?id=38324

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::GraphicsLayerQtImpl::flushChanges):

2010-05-02  Tasuku Suzuki  <tasuku.suzuki@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Fix compilation with QT_NO_BEARERMANAGEMENT
        https://bugs.webkit.org/show_bug.cgi?id=38324

        * platform/network/NetworkStateNotifier.h:
        * platform/network/qt/NetworkStateNotifierQt.cpp:

2010-05-02  Tasuku Suzuki  <tasuku.suzuki@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Fix compilation with QT_NO_LINEEDIT
        https://bugs.webkit.org/show_bug.cgi?id=38324

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::~RenderThemeQt):
        (WebCore::RenderThemeQt::findFrameLineWidth):

2010-06-04  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Compilation fails when compiling against Qt 4.7 and Qt Mobility is installed
        https://bugs.webkit.org/show_bug.cgi?id=40116

        CONFIG += mobility has the side-effect of pulling in mobility includes, which conflict
        with Qt 4.7's bearer managenent includes and break the build.

        * WebCore.pro:

2010-06-03  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Fix NPAPI support on Mac OS X/Cocoa-32

        qt_mac_window_for() returns a NSWindow on Cocoa, so we were
        passing in a NSWindow instead of a WindowRef as part of the
        NP_CGContext.

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

        * WebCore.gypi: Reflect rename
        * WebCore.pro: Reflect rename
        * plugins/mac/PluginViewMac.cpp: Renamed to PluginViewMac.mm
        and fix bug by getting the Carbon windowRef from the NSWindow.
        * wscript: Reflect rename

2010-06-02  Nico Weber  <thakis@chromium.org>

        Reviewed by Simon Fraser.

        Scroll events are sent twice per keypress for ports that don't have a platformWidget scrollbar
        https://bugs.webkit.org/show_bug.cgi?id=39918

        This was regressed by http://trac.webkit.org/changeset/58615 . Fix this by slightly tweaking
        that patch.

        Test: editing/input/page-up-down-scrolls.html

        * page/FrameView.cpp:
        (WebCore::FrameView::scrollPositionChanged):
        * page/FrameView.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::valueChanged):
        * platform/ScrollView.h:
        (WebCore::ScrollView::repaintFixedElementsAfterScrolling):

2010-06-02  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Fix make install on Symbian for headers in package builds when INSTALL_HEADERS is not defined

        First we wrote inst_headers.output with $$[QT_INSTALL_HEADERS] and then
        overwrote it with the $$INSTALL_HEADERS variant without checking if the
        variable was set.

        Fixed and cleaned up the logic of falling back to $$[QT_INSTALL_HEADERS].

        * WebCore.pro:

2010-06-01  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] GraphicsLayer: warnings when reloading page
        https://bugs.webkit.org/show_bug.cgi?id=39694

        Made sure recaching and masks aren't attempted on zero-size layers.

        No new tests. Old tests (e.g. LayoutTests/compositing/masks) show the problem.

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::MaskEffectQt::draw):
        (WebCore::GraphicsLayerQtImpl::recache):

2010-05-10  Rodrigo Belem  <rodrigo.belem@openbossa.org>

        Reviewed by Kenneth Christiansen , Simon Hausmann and Gustavo Noronha.

        [Qt, Gtk] Allows build-webkit script to receive an install prefix as parameter
        https://bugs.webkit.org/show_bug.cgi?id=26224

        This patch adds the ability, in the QtWebkit build system, to change
        the installation path.

        * WebCore.pro:

2010-06-01  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] Fix installation of the QtWebKit module .pri file when building inside of Qt

        * WebCore.pro:

2010-06-01  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Fix a QtWebKit.pc corruption problem.
        https://bugs.webkit.org/show_bug.cgi?id=36826

        The problem occurs while installing QtWebKit from trunk
        or a source package.

        * WebCore.pro:

2010-06-01  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] Fix Symbian package dependencies of apps against QtWebKit when installing into Qt

        Install the versioning qt_webkit_version.pri into $$[QMAKE_MKSPECS]/modules, which is
        where mkspecs/features/qt.prf expects it.

        * WebCore.pro:

2010-05-17  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Bring CanvasRenderingContext2D's createImageData() in line with HTML5 spec
        Added createImageData(ImageData) which returns a new ImageData with the same size as the one passed.
        Changed createImageData(width, height) to use the absolute values of width and height.

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

        Spec link:
        http://www.whatwg.org/specs/web-apps/current-work/#dom-context-2d-createimagedata

        Test: fast/canvas/canvas-createImageData.html

        * bindings/js/JSCanvasRenderingContext2DCustom.cpp:
        (WebCore::JSCanvasRenderingContext2D::createImageData):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::createImageData):
        * html/canvas/CanvasRenderingContext2D.h:
        * html/canvas/CanvasRenderingContext2D.idl:

2010-05-16  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Properly handle invalid arguments to CanvasRenderingContext2D's getImageData() and putImageData().
        Both should throw NOT_SUPPORTED_ERR when called with nonfinite arguments.
        getImageData() should throw INDEX_SIZE_ERR if either width or height is 0.

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

        Spec link:
        http://www.whatwg.org/specs/web-apps/current-work/#pixel-manipulation

        Test: fast/canvas/canvas-getImageData-invalid.html

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::createImageData):
        (WebCore::CanvasRenderingContext2D::getImageData):
        (WebCore::CanvasRenderingContext2D::putImageData):

2010-05-31  Oswald Buddenhagen  <oswald.buddenhagen@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Escape backslashes in the .pro files

        qmake in Qt 4.7 warns about unescaped backspaces and deprecates them.

        * WebCore.pro:

2010-05-28  Antti Koivisto  <koivisto@iki.fi>

        Reviewed by Kenneth Rohde Christiansen.

        https://bugs.webkit.org/show_bug.cgi?id=39874
        [Qt] Make tiled backing store more configurable
    
        Make tile size, tile creation delay and tiling area dynamically configurable.

        * platform/graphics/TiledBackingStore.cpp:
        (WebCore::TiledBackingStore::TiledBackingStore):
        (WebCore::TiledBackingStore::setTileSize):
        (WebCore::TiledBackingStore::setTileCreationDelay):
        (WebCore::TiledBackingStore::setKeepAndCoverAreaMultipliers):
        (WebCore::TiledBackingStore::createTiles):
        * platform/graphics/TiledBackingStore.h:
        (WebCore::TiledBackingStore::tileSize):
        (WebCore::TiledBackingStore::tileCreationDelay):
        (WebCore::TiledBackingStore::getKeepAndCoverAreaMultipliers):

2010-05-28  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] REGRESSION(r59837): Incorrect clipping of TransparencyLayers
        https://bugs.webkit.org/show_bug.cgi?id=39784

        Move coordinate transformation from TransparencyLayer to clipToImageBuffer()

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::TransparencyLayer::TransparencyLayer):
        (WebCore::GraphicsContext::clipToImageBuffer):

2010-05-13  Antti Koivisto  <koivisto@iki.fi>

        Reviewed by Kenneth Rohde Christiansen.

        https://bugs.webkit.org/show_bug.cgi?id=39063
        [Qt] Tiled backing store checker pattern does not paint correctly when scaling factor is not 1

        Use the dirty rect that has been adjusted for scaling instead of the original one.

        * platform/graphics/TiledBackingStore.cpp:
        (WebCore::TiledBackingStore::paint):

2010-05-24  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Hausmann.

        [Qt] Make text filling work together with text stroke.

        When the text has stroke a new QPen was set, overriding the pen
        set for text filling. This patch fixes that by storing the two
        pens and using where appropriate.

        * platform/graphics/qt/FontQt.cpp:
        (WebCore::Font::drawComplexText):

2010-05-17  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Darin Adler.

        Add an optional "starting node' parameter to scrollRecursively and scrollOverflow of EventHandler
        https://bugs.webkit.org/show_bug.cgi?id=39217

        It would be usefull if scrollOverflow and scrollRecursively methods of EventHandler
        could receive a parameter to specify where to start scrolling from. Currently they
        start scrolling from either the current focused node or the node where mouse last
        pressed on. Patch proposes an aditional starting point as an optional parameter.
        Since it is optional, all call sites can remain as are, and if a Null node is passed
        in, both methods work as previously.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::scrollOverflow):
        (WebCore::EventHandler::scrollRecursively):
        * page/EventHandler.h:

2010-05-23  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Using Accelerated Composing the rocket back animation on http://www.the-art-of-web.com/css/css-animation/ works differently as when not using AC.
        https://bugs.webkit.org/show_bug.cgi?id=39513

        The value of GraphicsLayer->transform() needs to be changed during the animation, regardless of m_fillsForward.
        m_fillsForward should only apply at the end of the animation. Based on previous patch by Kenneth Christiansen.

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::TransformAnimationQt::applyFrame):
        (WebCore::OpacityAnimationQt::applyFrame):

2010-05-25  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Reviewed by Laszlo Gombos.

        [Qt] Running with accelerated compositing enabled sometimes result in a crash
        https://bugs.webkit.org/show_bug.cgi?id=39609

        Check if we have a scene before applying the workaround for
        the QGraphicsScene bug where opacity change doesn't always have
        immediate effect.

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::OpacityAnimationQt::applyFrame):

2010-05-19  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Hausmann.

        Fix painting when using clipToImageBuffer()

        When we apply the transform of the parent painter to the painter of
        the transparency layer, we adopt its coordinate system, thus offset
        should not be in page coordinates, but in the coordinate system of
        the parent painter.

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::TransparencyLayer::TransparencyLayer):

2010-05-19  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] REGRESSION: CoolClock isn't rendered properly

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

        CanvasRenderingContext2D's arc() should connect to the previous point
        with a straight line (HTML5 spec 4.8.11.1.8), but if the path is empty
        to begin with, we don't want a line back to (0,0)
        This also fixes the rendering artifact discussed in bug 36226.

        Spec link:
        http://www.whatwg.org/specs/web-apps/current-work/#dom-context-2d-arc

        Test: fast/canvas/canvas-arc-connecting-line.html

        * platform/graphics/qt/PathQt.cpp:
        (WebCore::Path::addArc):

2010-05-18  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Rubberstamped by Simon Hausmann.

        Return null when creating an ImageBuffer failed, due to for
        instance a nulled pixmap.

        * platform/graphics/qt/ImageBufferQt.cpp:
        (WebCore::ImageBufferData::ImageBufferData):
        (WebCore::ImageBuffer::ImageBuffer):

2010-05-17  Antti Koivisto  <koivisto@iki.fi>

        Reviewed by Kenneth Rohde Christiansen.

        https://bugs.webkit.org/show_bug.cgi?id=39218
        [Qt] Tiled backing store tiles sometimes flicker when exiting a zoom animation
        
        Tiles sometimes flicker when exiting a zoom animation. This happens as a result
        of the visible rectangle being momentarily out of sync.
        
        Instead of updating the visible rect by explicitly setting it, pull it through
        the client and recompute in the WebKit level.

        * page/ChromeClient.h:
        (WebCore::ChromeClient::visibleRectForTiledBackingStore):
        * page/Frame.cpp:
        (WebCore::Frame::tiledBackingStoreVisibleRect):
        * page/Frame.h:
        * platform/graphics/TiledBackingStore.cpp:
        (WebCore::TiledBackingStore::checkVisibleRectChanged):
        (WebCore::TiledBackingStore::createTiles):
        * platform/graphics/TiledBackingStore.h:
        * platform/graphics/TiledBackingStoreClient.h:

2010-05-18  Zoltan Herczeg  <zherczeg@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Implementing clipToImageBuffer for Qt port.
        https://bugs.webkit.org/show_bug.cgi?id=24289

        The implementation combines pixmap layers and destinationIn
        composition mode.

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::TransparencyLayer::TransparencyLayer):
        (WebCore::GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate):
        (WebCore::GraphicsContext::savePlatformState):
        (WebCore::GraphicsContext::restorePlatformState):
        (WebCore::GraphicsContext::inTransparencyLayer):
        (WebCore::GraphicsContext::beginTransparencyLayer):
        (WebCore::GraphicsContext::endTransparencyLayer):
        (WebCore::GraphicsContext::clipToImageBuffer):

2010-05-16  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Canvas's toDataURL() should be case insensitive wrt the mimeType argument.
        https://bugs.webkit.org/show_bug.cgi?id=39153

        Spec link:
        http://www.whatwg.org/specs/web-apps/current-work/#dom-canvas-todataurl

        Test: fast/canvas/canvas-toDataURL-case-insensitive-mimetype.html

        * dom/CanvasSurface.cpp:
        (WebCore::CanvasSurface::toDataURL):

2010-05-16  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Canvas's getContext() must return null when called with an invalid/unsupported parameter.
        (HTML5 spec 4.8.11): http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-canvas-getcontext

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

        Test: fast/canvas/canvas-getContext-invalid.html

        * bindings/js/JSHTMLCanvasElementCustom.cpp:
        (WebCore::JSHTMLCanvasElement::getContext):
        * bindings/v8/custom/V8HTMLCanvasElementCustom.cpp:
        (WebCore::V8HTMLCanvasElement::getContextCallback):

2010-05-17  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Laszlo Gombos.

        REGRESSION(59563): [Qt] JSValue QtClass::fallbackObject can be optimized

        Patch declared a variable index, which shadowed an earlier declared
        variable.

        * bridge/qt/qt_class.cpp:
        (JSC::Bindings::QtClass::fallbackObject):

2010-05-14  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] GraphicsLayer caches directly composited images
        https://bugs.webkit.org/show_bug.cgi?id=38444

        Directly-composited images and solid fills shouldn't be cached, as that cache
        is never used (see GraphicsLayerQtImpl::paint). Cache is only relevant for HTML content,
        but we were missing that test.
        The fix makes sure we only cache HTML content.

        No new tests: this is a minor optimization.

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::GraphicsLayerQtImpl::flushChanges):

2010-05-15  Anders Bakken  <agbakken@gmail.com>

        Reviewed by Kenneth Rohde Christiansen.

        Don't unnecessarily copy data when searching for methods in QtClass.

        [Qt] JSValue QtClass::fallbackObject can be optimized
        https://bugs.webkit.org/show_bug.cgi?id=37684

        * bridge/qt/qt_class.cpp:
        (JSC::Bindings::QtClass::fallbackObject):

2010-05-06  Luiz Agostini  <luiz.agostini@openbossa.org>

        Rubber-stamped by Simon Hausmann.

        [Qt] use QT_MOBILE_THEME in Symbian
        https://bugs.webkit.org/show_bug.cgi?id=38440

        Putting QT_MOBILE_THEME into use for Symbian.

        * WebCore.pro:

2010-05-14  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Darin Adler.

        CSSParser::parseColor() shouldn't alter 'color' unless passed a valid color string.
        https://bugs.webkit.org/show_bug.cgi?id=39031

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseColor):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::StyleChange::extractTextStyles): Don't depend on old behavior.
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setShadow): Remove dead code.

2010-05-14  Aaron Kennedy  <tffeeb@gmail.com>

        Reviewed by Simon Hausmann.

        [Qt] JavaScript unable to invoke methods declared in QML
        https://bugs.webkit.org/show_bug.cgi?id=38949

        JavaScript code executed by webkit cannot call into QML declared
        methods, as it does not check for dynamic meta objects.

        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtInstance::stringValue): Use QMetaObject::metacall.
        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::QtRuntimeMetaMethod::call): Ditto.

2010-05-12  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Detect debug mode consistently
        https://bugs.webkit.org/show_bug.cgi?id=38863

        No new tests as there is no new functionality.

        * WebCore.pro:

2010-05-14  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Darin Adler.

        Ignore invalid values for various CanvasRenderingContext2D properties
        (lineWidth, miterLimit, shadowOffsetX, shadowOffsetY and shadowBlur)

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

        Test: fast/canvas/canvas-invalid-values.html

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setLineWidth):
        (WebCore::CanvasRenderingContext2D::setMiterLimit):
        (WebCore::CanvasRenderingContext2D::setShadowOffsetX):
        (WebCore::CanvasRenderingContext2D::setShadowOffsetY):
        (WebCore::CanvasRenderingContext2D::setShadowBlur):

2010-05-12  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] GraphicsLayer: depth-test causes flicker in certain situations

        This patch removes the simplistic 2D depth test as it leads to flickering side effects.
        https://bugs.webkit.org/show_bug.cgi?id=38370

        Tested by http://webkit.org/blog-files/3d-transforms/morphing-cubes.html

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::GraphicsLayerQtImpl::updateTransform):

2010-04-29  James Robinson  <jamesr@chromium.org>

        Reviewed by Simon Fraser.

        Calls FrameView::scrollPositionChanged whenever a ScrollView is scrolled
        https://bugs.webkit.org/show_bug.cgi?id=38286

        When a ScrollView's  scroll position is changed, we have to call
        FrameView::scrollPositionChanged to generate repaint invalidation for
        fixed position elements.  This ends up getting called indirectly when
        the ScrollView has a platformWidget through the port layer
        (see WebHTMLView.mm's _frameOrBoundsChanged method for how the mac
        port does it) but not when there is no platformWidget.

        This is tested by the fast/repaint/fixed-* tests when run in pixel
        mode.

        Test: fast/repaint/fixed-move-after-keyboard-scroll.html

        * page/FrameView.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::valueChanged):
        * platform/ScrollView.h:
        (WebCore::ScrollView::scrollPositionChanged):

2010-04-23  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Unreviewed build fix.

        Change Media to StyleMedia

        * DerivedSources.make:

2010-04-22  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Laszlo Gombos.

        Rename window.media to window.styleMedia
        https://bugs.webkit.org/show_bug.cgi?id=36187

        Rename the interface Media to StyleMedia as required by the
        new CSSOM View spec.

        * Android.derived.jscbindings.mk:
        * Android.derived.v8bindings.mk:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/Media.cpp: Removed.
        * css/Media.h: Removed.
        * css/Media.idl: Removed.
        * css/StyleMedia.cpp: Added.
        (WebCore::StyleMedia::StyleMedia):
        (WebCore::StyleMedia::type):
        (WebCore::StyleMedia::matchMedium):
        * css/StyleMedia.h: Added.
        (WebCore::StyleMedia::create):
        (WebCore::StyleMedia::disconnectFrame):
        * css/StyleMedia.idl: Added.
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::styleMedia):
        * page/DOMWindow.h:
        (WebCore::DOMWindow::optionalMedia):
        * page/DOMWindow.idl:

2010-04-22  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Fraser.

        Rename window.media to window.styleMedia
        https://bugs.webkit.org/show_bug.cgi?id=36187

        It has been defined that the AbstractView media extension
        defined in the CSSOM View spec should be renamed to styleMedia.
        This patch does that and updates the current layout tests
        making use of it.

        * page/AbstractView.idl:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::styleMedia):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:

2010-05-11  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] fast/text/find-hidden-text.html
        https://bugs.webkit.org/show_bug.cgi?id=32922

        Use the real page step for populating the QStyleOption otherwhise
        the size can be negative, which can break the QStyle used.

        * platform/qt/ScrollbarThemeQt.cpp:
        (WebCore::styleOptionSlider):

2010-05-03  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Kenneth Christiansen.

        Spatial Navigation: create a getter for the "fudgeFactor"
        https://bugs.webkit.org/show_bug.cgi?id=38488

        A couple of places in the Spatial Navigation code make use of a "fudge factor"
        to improve precision by working around outline focus metrics and such. Patch adds
        a helper method for unify getter operations of this value, instead of having it
        declared locally in the various methods it is used.

        No behaviour change.

        * page/SpatialNavigation.cpp:
        (WebCore::scrollIntoView):
        (WebCore::deflateIfOverlapped):
        * page/SpatialNavigation.h:
        (WebCore::fudgeFactor):

2010-05-10  Markus Goetz  <Markus.Goetz@nokia.com>

        Reviewed by Simon Hausmann.

        Qt after 4.6.3 has its integrated DNS cache. Therefore some
        code is not necessary anymore.

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

        * platform/network/qt/DnsPrefetchHelper.h:
        (WebCore::DnsPrefetchHelper::lookup):
        (WebCore::DnsPrefetchHelper::lookedUp):

2010-05-06  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Unreviewed, build fix WinCE for QtWebKit.

        [Qt] Compilation with Plugins disabled is broken
        https://bugs.webkit.org/show_bug.cgi?id=31407

        Rename platform/qt/TemporaryLinkStubs.cpp to avoid name collition on
        Windows.

        Thanks for Ismail "cartman" Donmez for help.

        No new tests, as there is no new functionality.

        * WebCore.gypi:
        * WebCore.pro:
        * platform/qt/TemporaryLinkStubs.cpp: Removed.
        * platform/qt/TemporaryLinkStubsQt.cpp: Copied from WebCore/platform/qt/TemporaryLinkStubs.cpp.

2010-04-23  Qi Zhang  <qi.2.zhang@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] LayoutTests/fast/canvas/pointInPath.html passed, actually it failed
        https://bugs.webkit.org/show_bug.cgi?id=37276

        QPainterPath::contains doesn't count the point on the bound.

        * platform/graphics/qt/PathQt.cpp:
        (WebCore::isPointOnPathBorder):
        (WebCore::Path::contains):

2010-05-07  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Fix rendering of -webkit-user-select: none

        -webkit-user-select: none is implemented by filling
        the area with an invalid default-constructed Color.
        In most ports passing an invalid color down to the
        graphics backend seems to produce transparent fills.

        In Qt the behavior of painting with an invalid QColor
        is undefined, and in practice it results in painting
        black opaque areas.

        One way to fix this would be to use Qt::transparent
        when converting an undefined Color to a QColor, but
        Qt does not have short circuits for fully transparent
        painting, and we actually end up in slow code paths
        due to the transparency. So, we're better of doing the
        short circuit in WebKit.

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

        * platform/graphics/qt/GraphicsContextQt.cpp:

2010-04-05  Robert Hogan  <robert@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Fix infinite redirection loop in QNetworkReplyHandler

        Put a maximum on consecutive redirections so we don't have to
        worry about whether it's the same url or not.

        Tolerate up to 10 consecutive redirections, anything beyond
        that is considered a potentially infinite recursion in the
        redirection requests. This is the same behaviour as Firefox.

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

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::QNetworkReplyHandler):
        (WebCore::QNetworkReplyHandler::sendResponseIfNeeded):
        * platform/network/qt/QNetworkReplyHandler.h:

2010-04-05  Robert Hogan  <robert@webkit.org>

        Reviewed by Kenneth Rohde-Christiansen.

        [Qt] Fix infinite redirection loop in QNetworkReplyHandler

        Qt enters an infinite loop if a redirect response redirects to itself.

        Fixes http/tests/xmlhttprequest/connection-error-sync.html

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

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::sendResponseIfNeeded):

2010-05-07  Ben Murdoch  <benm@google.com>

        Reviewed by Darin Adler.

        Potential crash in EventHandler::handleTouchEvent
        https://bugs.webkit.org/show_bug.cgi?id=38646

        Fix a ref counting bug that can cause a crash if the m_originatingouchPointTargets
        hashmap holds the last ref to an EventTarget when the user lifts their finger.

        This is very hard to reproduce in a consistent way and clearly a
        simple logic error in the code, therefore no new tests.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleTouchEvent): Don't let the RefPtr we get back from
            the hasmap go out of scope so soon as it could delete the wrapped ptr if the
            hashmap held the last ref (and we use the raw ptr that the RefPtr
            wraps later in the WebCore::Touch constructor).

2010-05-04  Ben Murdoch  <benm@google.com>

        Reviewed by Simon Hausmann.

        Crash in handleTouchEvent: using dangling node ptrs in hashmap
        https://bugs.webkit.org/show_bug.cgi?id=38514

        When navigating away from a page, if you have your finger still
        pressed and then lift it on the new page we see a crash if the
        node got deleted as we still have a dangling pointer in the
        m_originatingTouchPointTargets hashmap and try to use it as the
        receiver to dispatch a touchend event.

        Test: fast/events/touch/touch-stale-node-crash.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::clear): Clear the hashmap of touch targets.

2010-05-04  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Simon Hausmann.

        [Qt] QT_MOBILE_THEME compile time flag
        https://bugs.webkit.org/show_bug.cgi?id=38439

        Replacing preprocessor conditional used in RenderThemeQt from Q_WS_MAEMO_5 to
        USE(QT_MOBILE_THEME).

        * WebCore.pro:
        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::RenderThemeQt):
        (WebCore::RenderThemeQt::qStyle):
        (WebCore::RenderThemeQt::extraDefaultStyleSheet):
        (WebCore::RenderThemeQt::adjustMenuListButtonStyle):
        (WebCore::RenderThemeQt::setPaletteFromPageClientIfExists):
        * platform/qt/RenderThemeQt.h:

2010-03-25  Tasuku Suzuki  <tasuku.suzuki@nokia.com>

        Reviewed by Eric Seidel.

        [Qt]Fix compile error with QT_NO_LIBRARY
        https://bugs.webkit.org/show_bug.cgi?id=36533

        * platform/FileSystem.h:
        * platform/qt/FileSystemQt.cpp:
        (WebCore::unloadModule):

2010-05-06  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed WinCE buildfix after r58842.
        Preprocessor doesn't understand "true", changed to "1"

        * platform/graphics/MediaPlayer.cpp:

2010-05-06  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Kenneth Christiansen.

        Spatial Navigation: adapt the logic of {deep}findFocusableNodeInDirection to do traversal starting from Node* not Document*
        https://bugs.webkit.org/show_bug.cgi?id=37803

        Instead of receiving a Document pointer as incoming parameter, patch modifies
        findFocusableNodeInDirection and deepFindFocusableNodeInDirection methods to
        receive a Node pointer as start for content traversal.
        This way we can make good use of deepFindFocusableNodeInDirection to traverse
        other scrollable container like scrollable div's, and not only frames or iframes.

        Patch also makes use of 'while' instead of 'for' to loop control, that gives move
        flexibility to the incremental step: e.g. if a scrollable div was processed, the incremental
        step in the loop does not have to do node->traverseNextNode() but node->traverseNextSibling().

        No behavior change. It is a preparation for supporting scrollable containers in Spatial
        Navigation.

        * page/FocusController.cpp:
        (WebCore::FocusController::advanceFocusDirectionally):
        (WebCore::FocusController::findFocusableNodeInDirection):
        (WebCore::FocusController::deepFindFocusableNodeInDirection):
        * page/FocusController.h:

2010-05-06  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] REGRESSION: Loading of external CSS and JS files over network fails in some cases
        https://bugs.webkit.org/show_bug.cgi?id=36755

        Enable the direct connection between QtNetwork and QtWebKit only for Qt versions
        greater than 4.6.2, due to a bug in Qt that's been fixed after 4.6.2.

        * platform/network/qt/QNetworkReplyHandler.cpp:

2010-05-05  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Simon Hausmann.

        [Qt]Disable Qt Multimedia backend for HTML 5 Audio and Video elements
        Fall back to the Phonon backend until the release situation has been cleared up.

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

        Buildfix for QT_VERSION >= 0x040700 after r58810.

        * platform/graphics/MediaPlayer.cpp:

2010-05-03  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Fix rendering of <button> elements on Mac OS X

        The <button> element has ButtonPart appearance, not PushButton part,
        so we have to include ButtonPart when we decide if we should draw the
        button as raised on Mac OS X.

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

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::initializeCommonQStyleOptions):

2010-04-26  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        View modes names in CSSValueKeywords.in
        https://bugs.webkit.org/show_bug.cgi?id=38125

        View mode names has changed in previous patch but CSSValueKeywords.in file was
        not updated.

        * css/CSSValueKeywords.in:

2010-04-28  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Simon Fraser.

        Media queries empty values
        https://bugs.webkit.org/show_bug.cgi?id=38116

        Adding isValid() method to MediaQueryExp to make it possible to differentiate
        between queries with empty values and queries with invalid values.

        Test: fast/media/media-query-invalid-value.html

        * css/MediaQueryEvaluator.cpp:
        (WebCore::MediaQueryEvaluator::eval):
        * css/MediaQueryExp.cpp:
        (WebCore::MediaQueryExp::MediaQueryExp):
        * css/MediaQueryExp.h:
        (WebCore::MediaQueryExp::isValid):

2010-05-05  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Disable Qt Multimedia backend for HTML 5 Audio and Video elements

        Fall back to the Phonon backend until the release situation has been cleared up.

        * WebCore.pro:

2010-05-03  Janne Koskinen  <janne.p.koskinen@digia.com>

        Reviewed by Simon Hausmann.

        [Qt] Fix qtlibraryinfix not to contain space

        List catenation with += adds whitespace cutting the infix
        from the final target.

        * WebCore.pro:

2010-05-03  Thomas Zander <t.zander@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Fix library infix usage when compiling inside of Qt

        Don't apply the infix when building inside Qt, as that's done through the
        inclusion of qbase.pri.

        * WebCore.pro:

2010-04-29  Janne Koskinen  <janne.p.koskinen@digia.com>

        Reviewed by Simon Hausmann.

        [Qt] QtWebKit versioning added
        https://bugs.webkit.org/show_bug.cgi?id=37207

        QtWebkit releases separated from Qt release cycle.

        * WebCore.pro:

2010-03-27  Robert Hogan  <robert@webkit.org>

        Reviewed by nobody, fix typo in previous commit.

        Allow plugins implemented by the application, such as mimetype 'x-qt-plugin',
         when pluginsEnabled is false

        Fix parentheses typo in r56661. This happened while rebasing and was not present
        in the reviewed patch, so committing unreviewed.

        https://bugs.webkit.org/attachment.cgi?id=49515

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::requestObject):

2010-03-26  Robert Hogan  <robert@roberthogan.net>

        Reviewed by Simon Hausmann.

        Allow plugins implemented by the application, such as mimetype 'x-qt-plugin',
         when pluginsEnabled is false.

        The purpose of disabling plugins is to prevent the execution of third-party code
        that may be untrustworthy. Qt plugins are implemented by the client rather than
        loaded from an external source, so the client should have the opportunity to
        consider them separately from other plugins.

        Add a function MimeTypeRegistry::isApplicationPluginMIMEType() that WebKit
        uses in conjunction with arePluginsEnabled() to determine if it should attempt
        to load a plugin. If isApplicationPluginMIMEType() returns true, WebKit will load
        the plugin even if arePluginsEnabled() is false.

        Currently, only Qt has application-implemented plugins: these use the mimetype
        'x-qt-plugin' and 'x-qt-styled-widget'. This patch permits Qt clients'
        reimplementation of QWebPage::createPlugin() to decide whether or not
        to create a Qt plugin, even when arePluginsEnabled is false.

        For all platforms apart from Qt, isApplicationPluginMIMEType() returns false.

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

        Test: plugins/application-plugin-plugins-disabled.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::requestObject):
        * platform/MIMETypeRegistry.h:
        * platform/brew/MIMETypeRegistryBrew.cpp:
        (WebCore::MIMETypeRegistry::isApplicationPluginMIMEType):
        * platform/chromium/MIMETypeRegistryChromium.cpp:
        (WebCore::MIMETypeRegistry::isApplicationPluginMIMEType):
        * platform/gtk/MIMETypeRegistryGtk.cpp:
        (WebCore::MIMETypeRegistry::isApplicationPluginMIMEType):
        * platform/haiku/MIMETypeRegistryHaiku.cpp:
        (WebCore::MIMETypeRegistry::isApplicationPluginMIMEType):
        * platform/mac/MIMETypeRegistryMac.mm:
        (WebCore::MIMETypeRegistry::isApplicationPluginMIMEType):
        * platform/qt/MIMETypeRegistryQt.cpp:
        (WebCore::MIMETypeRegistry::isApplicationPluginMIMEType):
        * platform/win/MIMETypeRegistryWin.cpp:
        (WebCore::MIMETypeRegistry::isApplicationPluginMIMEType):
        * platform/wince/MIMETypeRegistryWince.cpp:
        (WebCore::MIMETypeRegistry::isApplicationPluginMIMEType):
        * platform/wx/MimeTypeRegistryWx.cpp:
        (WebCore::MIMETypeRegistry::isApplicationPluginMIMEType):

2010-04-29  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] GraphicsLayer: flicker when starting an animation before the previous one ended.
        https://bugs.webkit.org/show_bug.cgi?id=38076

        This was due to the cude in the removeAnimations functions, which called deleteLater() without stopping the
        animation synchronously. The delay between the call to that function and the actual call to the animation's destructor
        is when the flicker occured. We fix this by calling stop() synchronously, and making sure that the value is reverted
        upon stop (updateState) and not upon the object's destruction.

        http://staff.washington.edu/fmf/2009/03/25/iphone-3d-css-transformations/ now doesn't flicker when
        the animation is toggled frequently.

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::TransformAnimationQt::~TransformAnimationQt):
        (WebCore::TransformAnimationQt::applyFrame):
        (WebCore::TransformAnimationQt::updateState):
        (WebCore::OpacityAnimationQt::~OpacityAnimationQt):
        (WebCore::OpacityAnimationQt::updateState):
        (WebCore::GraphicsLayerQt::removeAnimationsForProperty):
        (WebCore::GraphicsLayerQt::removeAnimationsForKeyframes):

2010-04-29  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Simon Hausmann.

        Reverse animations don't work in some use cases        
        https://bugs.webkit.org/show_bug.cgi?id=38075

        This was due to a code path special-casing reverse animations, that became obselete when we aligned our animation code
        with the CA implementation. That special case code path is now a bug - and this patch removes it.

        http://staff.washington.edu/fmf/2009/03/25/iphone-3d-css-transformations/ now runs the reverse
        animation correctly.

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::TransformAnimationQt::applyFrame):

2010-04-29  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Speed up text layouting
        https://bugs.webkit.org/show_bug.cgi?id=31719

        Use QFontMetrics::width() for the text width calculation instead
        of QTextLayout. This avoids expensive bearing calculations and the
        line breaking code.

        * platform/graphics/qt/FontQt.cpp:
        (WebCore::Font::floatWidthForComplexText):

2010-04-29  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] REGRESSION(r57638): tst_qwebframe::objectDeleted() fails
        https://bugs.webkit.org/show_bug.cgi?id=38316

        Accessing properties of a deleted objects doesn't throw an exception
        anymore.

        Continue to expose the QObject class wrapper for objects that
        previously existed but don't exist anymore. QtClass is safe to
        use with a deleted QObject.

        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtInstance::getClass): Return null only if m_class
        doesn't exist yet and there's no m_object.

2010-04-28  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] GraphicsLayer: preserves-3d and backface visibility
        https://bugs.webkit.org/show_bug.cgi?id=35312

        Implement preserves-3d by maintaining the 3D transformation heirarchy inside GraphicsLayerQt, and extrapolating
        the relative QTransform. When the extrapolation fails (un-invertible matrix) we ignore the transformation change.

        WebKitSite/blog-files/3d-transforms test now work with Qt.

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::GraphicsLayerQtImpl::updateTransform):
        (WebCore::GraphicsLayerQtImpl::opaqueArea):
        (WebCore::GraphicsLayerQtImpl::boundingRect):
        (WebCore::GraphicsLayerQtImpl::paint):
        (WebCore::GraphicsLayerQtImpl::flushChanges):

2010-04-28  Justin McPherson <justin.mcpherson@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Fix detection of Qt 4.7's multimedia libraries

        QtMultimedia has been split into an additional media services library, which
        we're using. mediaservices depends on multimedia.

        * WebCore.pro:

2010-04-26  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Fix compilation against Qt 4.7

        Some QtMultimedia things have been moved into QtMediaServices
        https://bugs.webkit.org/show_bug.cgi?id=38111

        * WebCore.pro:
        * platform/graphics/qt/MediaPlayerPrivateQt.cpp:
        (WebCore::MediaPlayerPrivate::supportsType):
        (WebCore::MediaPlayerPrivate::totalBytes):

2010-04-21  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Make sure WebKit is not compiled using C++0x.
        https://bugs.webkit.org/show_bug.cgi?id=37867

        As the rest of Qt compiles in the C++0x mode, people might start
        compiling it in this mode. WebKit don't support this yet.

        Patch by Thiago Macieira <thiago.macieira@nokia.com>

        * WebCore.pro:

2010-04-22  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Hide the OpenGL and QtMultimedia dependencies from syncqt.

        This prevents the dependent headers from being included by
        qt/include/QtWebKit/QtWebKit

        * WebCore.pro:

2010-04-27  Thomas Zander <t.zander@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Fix linking on Symbian on Linux using the Makefile based mkspec.

        Disable thumb mode due to library size limitations, just like it's done
        for the sbs/sbsv2 based build system.

        * WebCore.pro:

2010-04-26  Ruben Van Boxem  <vanboxem.ruben@gmail.com>

        Reviewed by Adam Roben.

        Fixes for Win64 compilation under gcc (mingw-w64)

        *  WebCore/bridge/npapi.h: for win64 compatibility, mirroring mozilla-central, see Mozilla bug 560298
        *  WebCore/platform/Arena.h: uword is used to cast from pointers here. unsigned long is 32-bit on Windows (but 64-bit on mac), and too small to hold a pointer. uintptr_t is 32-bit on 32-bit systems (mac, linux and windows) and 64-bit on all 64-bit systems
        *  WebCore/platform/graphics/transforms/TransformationMatrix.h: let mingw-w64/w32 use MSVC codepath
        *  WebCore/platform/text/TextStream.cpp: let mingw-w64 use MSVC codepath
        *  WebCore/platform/text/TextStream.h: let mingw-w64 use MSVC codepath
        *  WebCore/plugins/PluginView.cpp: fix pointer casts on WIN64 and let mingw-w64 use MSVC codepath
        *  WebCore/plugins/win/PluginViewWin.cpp: fix pointer casts on WIN64

2010-01-07  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by NOBODY (OOPS!).

        [RVCT] ACID3 test crash
        https://bugs.webkit.org/show_bug.cgi?id=33280

        Workaround developed by Yongjun Zhang.

        * dom/Element.cpp:
        (WebCore::Element::setAttribute):

2010-04-26  Markus Goetz  <Markus.Goetz@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] HTTP pipelining efficiency increase
        https://bugs.webkit.org/show_bug.cgi?id=38062

        Increase number of network requests that are fed into
        QNetworkAccessManager.

        * platform/network/qt/ResourceRequestQt.cpp:
        (WebCore::initializeMaximumHTTPConnectionCountPerHost):

2010-04-26  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Fix compilation with RVCT 4
        https://bugs.webkit.org/show_bug.cgi?id=37727

        Swap extern and declspec to fix visibility of symbol imported from QtGui.

        * page/qt/EventHandlerQt.cpp:

2010-04-26  Bruno Schmidt  <bruno.schmidt@gmail.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Exposing an QVariantMap containing QObjectStar to Javascript
        causes Segmentation Fault
        https://bugs.webkit.org/show_bug.cgi?id=34729

        If an QVariantMap containing QObjectStar is added to the to QtWebkit
        Javascript, it's use causes Segmentation Fault.
        It happens because, in the case QMetaType::QVariantMap, the "root"
        object that is inside of a PassRefPtr is passed recursively inside a
        loop to recover the content of the map, but the PassRefPtr semantics
        prohibit its use inside a loop, so the "root" object mus be passed
        using the method "PassRefPtr::get" in order to keep the current
        reference.

        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::convertValueToQVariant):
        (JSC::Bindings::convertQVariantToValue): change to root.get()

2010-04-22  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Darin Adler.

        Fix the MSVC 64bit build.
        https://bugs.webkit.org/show_bug.cgi?id=37980

        * platform/text/TextStream.cpp:
        * platform/text/TextStream.h:
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::platformStart):

2010-04-22  Ray Rischpater  <Raymond.Rischpater@Nokia.com>

        Reviewed by Darin Adler.

        In HTMLInputElement.cpp, shouldUseInputMethod does not return true for
        some text input types (TELEPHONE, NUMBER, URL, and EMAIL). Addressed
        this by changing shouldUseInputMethod to use internal methods to 
        check that the field is a text field that isn't a password field. 

        No new tests.

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

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::shouldUseInputMethod):

2010-04-22  Gustavo Sverzut Barbieri  <barbieri@profusion.mobi>

        Reviewed by Eric Seidel.

        Fix build if NPAPI support is disabled
        https://bugs.webkit.org/show_bug.cgi?id=36621

        No new tests, this is a build fix.
        Re-submit r58043 with fix for EFL.

        * plugins/PluginViewNone.cpp:

2010-03-25  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Darin Adler.

        Fix build if NPAPI support is disabled
        https://bugs.webkit.org/show_bug.cgi?id=36621

        No new tests, this is a build fix.

        * plugins/PluginView.cpp: Guard getValueStatic() with
        NETSCAPE_PLUGIN_API
        (WebCore::PluginView::getValue):
        * plugins/PluginView.h: Guard getValue() with NETSCAPE_PLUGIN_API
        * plugins/PluginViewNone.cpp: Guard platformGetValue() and
        platformGetValueStatic with NETSCAPE_PLUGIN_API;
        Guard privateBrowsingStateChanged() and setJavaScriptPaused() with
        PLATFORM(MAC)

2010-04-14  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Repaint of fixed, transformed element is broken
        https://bugs.webkit.org/show_bug.cgi?id=37637

        RenderBox::computeRectForRepaint() failed to set the 'fixed' flag correctly
        for elements that had both fixed position and a transform. If the element has
        a transform, 'fixed' should only remain true if the element itself is fixed
        position.
        
        Also cache style()->position() in a local variable for performance.
        
        Test: fast/repaint/fixed-tranformed.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeRectForRepaint):

2010-04-19  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Simon Fraser.

        Spatial Navigation: at @updateFocusCandidateIfCloser make an assignment shortcut when FocusCandidate is null
        https://bugs.webkit.org/show_bug.cgi?id=37802

        In updateFocusCandidateIfCloser method, we do all bail out checks in the begining of
        the method body. If after those bail out checks, no "best FocusCandidate" has been taken
        yet (i.e. focusCandidate.isNull() == true), we can safely take the current candidate,
        and exit earlier.

        No behavior change, it is just a safe assignment shortcut.

        * page/FocusController.cpp:
        (WebCore::updateFocusCandidateIfCloser):

2010-04-21  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Simon Fraser.

        [Qt] Fix or remove the runtime flag for accelerated compositing.

        This adds a way for a chrome client to disallow layers from becoming composited,
        even if the settings enable accelerated compositing. This is necessary for platforms
        where different views can be applied with the same settings to the same page.

        We enable an API through ChromeClient to ask the chrome-client whether or not
        it can render composited layers, which is taken into account when the compositor
        decides whether or not to start compositing.

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

        Pages under LayoutTests/compositing now work under QWebView, even when
        QWebSettings::AcceleratedCompositingEnabled is on.

        * page/ChromeClient.h:
        (WebCore::ChromeClient::allowsAcceleratedCompositing):
        * platform/qt/QWebPageClient.h:
        (QWebPageClient::allowsAcceleratedCompositing):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::canBeComposited):

2010-04-23  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] [Performance] GraphicsLayer: constructing the layers takes too long
        https://bugs.webkit.org/show_bug.cgi?id=36365

        The issue came from using QGraphicsView's cache as is. The problem is that
        several code-paths require re-rendering of the item, but not re-rendering
        of the web content into the cache.

        The way to solve it is by having GraphicsLayerQt manage the cache directly
        via QPixmapCache, instead of using QGraphicsItem cache modes.

        FPS measurement shows significant improvement (20FPS before, 40FPS after)
        on several use-cases, including blog-files/leaves on a desktop environment.

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::GraphicsLayerQtImpl::GraphicsLayerQtImpl):
        (WebCore::GraphicsLayerQtImpl::recache):
        (WebCore::GraphicsLayerQtImpl::paint):
        (WebCore::GraphicsLayerQtImpl::flushChanges):

2010-04-21  Benjamin Poulain  <ikipou@gmail.com>

        Reviewed by Simon Fraser.

        Update of fixed elements is not made correctly when the page has been scrolled
        https://bugs.webkit.org/show_bug.cgi?id=36783

        When a fixed element was updated, the old geometry was not repainted correctly
        because the repaint rect was cached during the layout and not updated when 
        scrolling.

        The rect is now updated while scrolling so the region updated correspond to the
        region of the element on the screen.

        The method RenderLayer::updateRepaintRectsAfterScroll() updates
        the repaint rect of all fixed tree after scroll.

        Tests: fast/repaint/fixed-child-move-after-scroll.html
               fast/repaint/fixed-child-of-fixed-move-after-scroll.html
               fast/repaint/fixed-child-of-transformed-move-after-scroll.html
               fast/repaint/fixed-move-after-scroll.html

        * page/FrameView.cpp:
        (WebCore::FrameView::scrollPositionChanged):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateRepaintRectsAfterScroll):
        * rendering/RenderLayer.h:

2010-04-21  David Leong  <david.leong@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Symbian apps crash on exit due to a bad qObject_cast.

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

        Added check for NULL to avoid the crash. Reworked to fix memory leak
           
        * plugins/symbian/PluginViewSymbian.cpp:
        (WebCore::PluginView::platformDestroy):

2010-04-14  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Simon Fraser.

        Spatial Navigation: make hasOffscreenRect() to earlier return 'true' if absoluteClippedOverflowRect() gives an empty rect
        https://bugs.webkit.org/show_bug.cgi?id=37635

        absoluteClippedOverflowRect method of RenderObject does return an empty IntRect for offscreen nodes.
        So hasOffscreenRect method (SpatialNavigation.cpp) can safily bail out earlier in such cases.

        * page/SpatialNavigation.cpp:
        (WebCore::hasOffscreenRect):

2010-04-12  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Simon Fraser.

        Spatial Navigation: make renderRectRelativeToRootDocument method to fallback to getRect() of Element when needed
        https://bugs.webkit.org/show_bug.cgi?id=37461

        getRect() of Element can be used instead of absoluteClippedOverflowRect of RenderObject when
        the node is currently offscreen in an scroll overflowed content.

        Test: fast/events/spatial-navigation/snav-simple-content-overflow.html

        * page/SpatialNavigation.cpp:
        (WebCore::renderRectRelativeToRootDocument):

2010-03-29  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Simon Fraser.

        Spatial Navigation: proper handle negative x or y coordinates
        https://bugs.webkit.org/show_bug.cgi?id=36773

        In Spatial Navigation logic, during rect acquisition in renderRectRelativeToRootDocument,
        sometimes negative x() or y() values are got, and the current algorithm bails out in
        any of such cases.

        However, when a node is in a scrollable content (content overflow <div>) and
        this scrollable container scrolled up, element gets offscreen, and gets negative values
        for y(), for example. In such cases, they are still valid to be used in Spatial Navigation
        logic.

        Test: fast/events/spatial-navigation/snav-offscreen-content.html

        * page/SpatialNavigation.cpp:
        (WebCore::distanceDataForNode):
        (WebCore::checkNegativeCoordsForNode):

2010-04-05  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Kenneth Christiansen.

        Spatial Navigation: bail out as soon as algorithm finds a focus candidate is not applicable
        https://bugs.webkit.org/show_bug.cgi?id=37135

        It happens, for example, when distanceDataForNode assigns numeric_limits<long long> to
        current focus candidate's. It means that current candidate is not in direction, or not
        a valid target node.

        * page/FocusController.cpp:
        (WebCore::FocusController::findFocusableNodeInDirection):

2010-03-29  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Simon Fraser.
        Patch by Antonio Gomes <tonikitoo@webkit.org>

        Spatial Navigation: Initial code simplification in FocusController.cpp and SpatialNavigation.cpp

        WebCore::distanceInDirection method was handling much of the logic not
        strictly only related to the distance between nodes acquisition. This
        method was simplified and renamed to 'WebCore::distanceDataForNode'.
        The latter is now responsible for only getting the distance and alignment
        data, while all assignement logic previously in distanceInDirection method
        was moved place to updateFocusCandidateIfCloser.

        Parent document distance and alignment acquisitions, in turn, have also
        changed location: they are both got from deepFindFocusableNodeInDirection,
        and passed in a recursive call to findFocusableNodeInDirection via the
        candidateParent variable (optional parameter). In addition, the need for
        the 'focusCandidateCopy' variable in deepFindFocusableNodeInDirection method
        was removed, making the code much cleaner.

        No behaviour change at this point. Mostly moving code around to the place
        where it should live in.

        * page/FocusController.cpp:
        (WebCore::FocusController::advanceFocusDirectionally):
        (WebCore::updateFocusCandidateIfCloser):
        (WebCore::FocusController::findFocusableNodeInDirection):
        (WebCore::FocusController::deepFindFocusableNodeInDirection):
        * page/FocusController.h:
        * page/SpatialNavigation.cpp:
        (WebCore::distanceDataForNode):
        (WebCore::renderRectRelativeToRootDocument):
        * page/SpatialNavigation.h:

2010-04-20  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Antti Koivisto.

        [Qt] GraphicsLayer: support fill-modes
        https://bugs.webkit.org/show_bug.cgi?id=36216
        Implement the CSS-animation "fill mode" concept in GraphicsLayerQt. The concept
        enables a key-frame animation to go to the animation's starting point before the delay,
        and/or to stay at the animation's ending point after its ended, without reverting to the default
        value.
        We do that by manually setting the value to keyframe-0 before the delay if fill-mode is backwards/both,
        and manually modifying the default value to the animated value as we animate, with fill-mode forwards/both.

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::AnimationQtBase::AnimationQtBase):
        (WebCore::TransformAnimationQt::~TransformAnimationQt):
        (WebCore::TransformAnimationQt::applyFrame):
        (WebCore::GraphicsLayerQt::addAnimation):

2010-04-13  Eskil Blomfeldt <eblomfel@trolltech.com>, Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        Reviewed by Simon Hausmann.

        [Qt] Use integer pixel metric QFont API to fix rounding errors in text rendering on the Mac
        https://bugs.webkit.org/show_bug.cgi?id=36532

        * platform/graphics/qt/FontQt.cpp:
        (WebCore::Font::floatWidthForComplexText):
        (WebCore::Font::font):

2010-04-16  Daniel Bates  <dbates@rim.com>

        Reviewed by Adam Treat.

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

        Adds support for the viewport meta tag. The code is largely derived in whole
        or in part from the WebCore-528.15 source published as part of the iPhone 3.1.3
        source code <http://www.opensource.apple.com/source/WebCore/WebCore-528.15/>.

        * Android.mk: Added file ViewportArguments.cpp.
        * GNUmakefile.am: Added files ViewportArguments.cpp and ViewportArguments.h.
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * dom/Document.cpp:
        (WebCore::isSeparator): Added.
        (WebCore::Document::processArguments): Added.
        (WebCore::Document::processViewport): Added.
        * dom/Document.h:
        * dom/ViewportArguments.cpp: Added.
        (WebCore::setViewportFeature):
        (WebCore::viewportErrorMessageTemplate):
        (WebCore::viewportErrorMessageLevel):
        (WebCore::reportViewportWarning):
        * dom/ViewportArguments.h: Added.
        (WebCore::):
        (WebCore::ViewportArguments::):
        (WebCore::ViewportArguments::ViewportArguments):
        (WebCore::ViewportArguments::hasCustomArgument):
        * html/HTMLMetaElement.cpp:
        (WebCore::HTMLMetaElement::process): Modified to call Document::processViewport.
        * page/ChromeClient.h:
        (WebCore::ChromeClient::didReceiveViewportArguments): Added.

2010-04-15  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Antti Koivisto.

        No default selection for <select multiple> menu lists.
        https://bugs.webkit.org/show_bug.cgi?id=37530

        Manual test: manual-tests/no-listbox-rendering.html

        For menu lists, if the selection is not indicated by the html file, the first <option> will be
        selected after loading the page or reseting the form. On the other hand listboxes may have no
        element selected after loading the page or reseting the form.

        When NO_LISTBOX_RENDERING is enabled listboxes becomes menu lists. Those <select multiple>
        that did not have selected elements, now being menu lists, will have the first <option>
        selected. That is the behavior difference that this patch corrects.

        When NO_LISTBOX_RENDERING is enabled usesMenuList() always returns true then usesMenuList() cannot
        be used to decide about initial selection of the elements. This patch replaces (usesMenuLists())
        by (!multiple && size <= 1) where initial selection is considered.

        * dom/SelectElement.cpp:
        (WebCore::SelectElement::recalcListItems):
        (WebCore::SelectElement::reset):
        * manual-tests/no-listbox-rendering.html: Added.

2010-04-19  Balazs Kelemen  <kb@inf.u-szeged.hu>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Destroy SharedTimerQt before destruction of QCoreApplication.

        To avoid unsafe situations caused by running WebCore code (through firing timers) when destruction of QCoreApplication
        has been started, we should explicitly destroy the SharedTimerQt instance on application exit.
        We can achieve that through installing a self-destroying slot for the QCoreApplication::aboutToQuit() signal
        into the SharedTimerQt instance.

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

        No functional change so no new tests.

        * platform/qt/SharedTimerQt.cpp:
        (WebCore::SharedTimerQt::SharedTimerQt):
        (WebCore::SharedTimerQt::destroy):
        (WebCore::SharedTimerQt::inst):

2010-04-16  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Make GraphicsLayerQt always use ItemCoordinateCache, and remove ItemUsesExtendedStyleOption.
        This aligns our implementation with the Safari implementation - layers are always uploaded
        to textures in item units, and WebCore is responsible for the heuristics.

        [Qt] GraphicsLayer: performance optimizations
        https://bugs.webkit.org/show_bug.cgi?id=35393

        No new tests. Still no FPS benchmarks available (on any platform)
        but animations are noticably better.

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::GraphicsLayerQtImpl::GraphicsLayerQtImpl):
        (WebCore::GraphicsLayerQtImpl::paint):
        (WebCore::GraphicsLayerQtImpl::flushChanges):
        (WebCore::TransformAnimationQt::updateState):

2010-04-16  Antonio Gomes  <tonikitoo@webkit.org>

        Unreviewed QtWebKit (with Qt 4.7) build fix.

        Bug 37683 moved code from FontQt.cpp to FontPlatformDataQt.cpp but did not
        renamed the variable used.

        * platform/graphics/qt/FontPlatformDataQt.cpp:
        (WebCore::FontPlatformData::FontPlatformData):

2010-04-16  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] WebCore::Font::font() causes a QFont detach
        https://bugs.webkit.org/show_bug.cgi?id=37683

        Moved the setStyleStrategy call to FontPlatformData
        to avoid the detach.

        Thanks to Holger for spotting this.

        * platform/graphics/qt/FontPlatformDataQt.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        * platform/graphics/qt/FontQt.cpp:
        (WebCore::Font::font):

2010-04-16  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Antti Koivisto.

        [Qt]QtLauncher crash on page with CSS 3D transform
        https://bugs.webkit.org/show_bug.cgi?id=36859

        Added a neccessary null-pointer check, lack of which created the crash circumstances.

        Tested by http://css-vfx.googlecode.com/svn/trunk/snowstack/snowstack.html

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::GraphicsLayerQtImpl::flushChanges):

2010-04-18  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] Fix JavaScriptCore's include path for WinCE builds

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

        * WebCore.pro:

2010-04-19  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Fix compilation against namespaced Qt.

        * platform/graphics/GraphicsLayer.h:
        * platform/graphics/Tile.h:
        * platform/graphics/qt/MediaPlayerPrivateQt.h:
        * platform/network/qt/NetworkStateNotifierPrivate.h:

2010-04-14  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        Changing view mode names due to specification changes
        https://bugs.webkit.org/show_bug.cgi?id=37615

        test: fast/media/media-feature-wgt-view-mode.html

        specification: http://dev.w3.org/2006/waf/widgets-vmmf/

        * css/MediaQueryEvaluator.cpp:
        (WebCore::view_modeMediaFeatureEval):
        * page/ChromeClient.h:
        (WebCore::ChromeClient::isWindowed):
        (WebCore::ChromeClient::isMaximized):
        (WebCore::ChromeClient::isMinimized):

2010-04-15  Bruno Schmidt  <bruno.schmidt@gmail.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Null QObjects properties cause Segmentation Fault
        https://bugs.webkit.org/show_bug.cgi?id=34730

        QObjects exported to the QWebkit javascript with properties that are
        a null "QObject*" cause Segmentation Fault.

        If an QObject is added to the javascript context and it contains
        properties of the type QObject* with NULL value, calling the property
        causes Segmentation Fault.
        So now the code below properly checks for null pointers:

        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtInstance::getClass): may return NULL
        (JSC::Bindings::QtInstance::getMethod): may return jsNull()
        (JSC::Bindings::QtInstance::stringValue): may return jsNull()
        (JSC::Bindings::QtInstance::booleanValue): may return false
        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::convertValueToQVariant): 
        (JSC::Bindings::convertQVariantToValue): May return jsNull on QObjectStar

2010-04-09  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Fraser.

        Remove "all" value from the view-mode media feature (as agreed on
        1-Apr-2010) in the Widgets voice conf.

        * css/CSSValueKeywords.in:
        * css/MediaQueryEvaluator.cpp:
        (WebCore::view_modeMediaFeatureEval):

2010-04-09  Tasuku Suzuki  <tasuku.suzuki@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt]Fix compile error with QT_NO_PROPERTIES
        https://bugs.webkit.org/show_bug.cgi?id=36526

        Disable dynamic properties when QT_NO_PROPERTIES is defined.

        * bridge/qt/qt_class.cpp:
        (JSC::Bindings::QtClass::fieldNamed):
        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtInstance::getPropertyNames):
        (JSC::Bindings::QtField::name):
        (JSC::Bindings::QtField::valueFromInstance):
        (JSC::Bindings::QtField::setValueToInstance):
        * bridge/qt/qt_runtime.h:
        (JSC::Bindings::QtField::):

2010-03-25  Tasuku Suzuki  <tasuku.suzuki@nokia.com>

        Reviewed by Eric Seidel.

        [Qt]Fix compile error with QT_NO_ANIMATION
        https://bugs.webkit.org/show_bug.cgi?id=36526

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::GraphicsLayerQtImpl::~GraphicsLayerQtImpl):
        * platform/graphics/qt/GraphicsLayerQt.h:

2010-04-09  David Leong  <david.leong@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Symbian apps crash on exit due to a bad qObject_cast.

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

        Added check for NULL to avoid the crash.

        * plugins/symbian/PluginViewSymbian.cpp:
        (WebCore::PluginView::platformDestroy):

2010-04-09  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Fix crashes with package builds in release

        * WebCore.pro: Don't add NDEBUG to the defines here, add it from JavaScriptCore.pri

2010-04-09  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Simon Hausmann.

        [Qt] User agent style sheets are crippled by moc -E in make-css-file-arrays.pl
        https://bugs.webkit.org/show_bug.cgi?id=37296

        Do not use moc to preprocess user agent style sheets because it removes at-symbols
        and hexadecimal colours from declarations.
        Remove unneeded preprocessor usage from make-css-file-arrays.pl since the script
        processes default css files using regular expressions therefore preprocessing is redundant.

        * WebCore.pri: remove --preprocessor usage
        * css/make-css-file-arrays.pl: remove gcc dependency

2010-04-01  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by David Hyatt.

        [Qt] REGRESSION:(r50665) QWebFrame::setScrollBarPolicy(Qt::Vertical,Qt::ScrollBarAlwaysOff) has no effect.
        https://bugs.webkit.org/show_bug.cgi?id=29431

        Test: fast/overflow/scrollbar-restored-and-then-locked.html

        Patch introduces a lock scrollbars concept to ScrollView, as in WebDynamicScrollBarsView.mm/h
        on WebKit/mac. It is needed because in QtWebKit, we have Api for setting both vertical and
        horizontal scrollbars on/off/auto. When it is set to off, for example, it should remain
        as such, unless unset.

        For the locking concept, optional 'lock' parameters were added to setScrollbarModes,
        setHorizontalScrollbarMode and setVerticalScrollbarMode methods of ScrollView. As these
        are all optional, any previous code calling them do not need modification.

        Two optional parameters were also added to Frame's createView method, for horizontal and vertical
        lock state persistence cross page loads.

        * page/Frame.cpp:
        (WebCore::Frame::createView):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::ScrollView):
        (WebCore::ScrollView::setScrollbarModes):
        (WebCore::ScrollView::setHorizontalScrollbarMode):
        (WebCore::ScrollView::setVerticalScrollbarMode):
        * platform/ScrollView.h:
        (WebCore::ScrollView::setHorizontalScrollbarLock):
        (WebCore::ScrollView::isHorizontalScrollbarLocked):
        (WebCore::ScrollView::setVerticalScrollbarLock):
        (WebCore::ScrollView::isVerticalScrollbarLocked):
        (WebCore::ScrollView::setScrollingModesLocked):

2010-04-08  Jarkko Sakkinen  <jarkko.sakkinen@tieto.com>

        Reviewed by Simon Hausmann.

         [Qt] Remove shaderSource manipulation from GraphicsContext3DQt.cpp
         https://bugs.webkit.org/show_bug.cgi?id=37226

        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3D::shaderSource):

2010-04-07  Rodrigo Belem  <rodrigo.belem@openbossa.org>

        Reviewed by Simon Hausmann.

        [Qt] The build system is not installing the generated headers (QGraphicsWebView, QWebDatabase, etc)
        https://bugs.webkit.org/show_bug.cgi?id=37173

        This patch sets the correct path to the classheaders.pri and then
        fixes the installation of the generated headers.

        * WebCore.pro:

2010-04-07  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Darin Adler.

        Poor rendering on lala.com with frame flattening
        https://bugs.webkit.org/show_bug.cgi?id=37164

        Do not flatten offscreen iframes.

        Test: fast/frames/flattening/iframe-flattening-offscreen.html

        * rendering/RenderPartObject.cpp:
        (WebCore::RenderPartObject::flattenFrame):
        * rendering/RenderPartObject.h:

2010-04-07  Dawit Alemayehu  <adawit@kde.org>

        Reviewed by Simon Hausmann.

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

        Replaced the 'shouldTreatAsAttachment' function with a more generic 
        function that returns the content disposition type.

        See comments 39-42 in https://bugs.webkit.org/show_bug.cgi?id=36395

        * platform/network/HTTPParsers.cpp:
        (WebCore::contentDispositionType):
        * platform/network/HTTPParsers.h:
        (WebCore::):

2010-04-07  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Laszlo Gombos.

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

        [Qt] Package build without touch support is broken

        Use the conditional attribute instead of #ifdefs in the idl file for the
        touch specific properties, to make the generated files compile with and
        without the touch events enabled.

        * dom/Document.idl: Use conditional instead of #ifdef.
        * dom/Element.idl: Ditto.
        * page/DOMWindow.idl: Ditto.

2010-04-07  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Holger Freyther.

        Add the touch event related IDL files to the idl generation, so that
        they can be safely included from generated JS bindings files. The
        generated files have #ifdef feature guards.

        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:

2010-03-25  yael aharon  <yael.aharon@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] Windowed netscape plugins don't work with QGraphicsWebView on Symbian
        https://bugs.webkit.org/show_bug.cgi?id=35112

        Add a proxy widget when loading a QWidget based plugin in a QGraphicsWebView.

        * plugins/symbian/PluginContainerSymbian.cpp:
        (PluginContainerSymbian::PluginContainerSymbian):
        (PluginContainerSymbian::focusInEvent):
        * plugins/symbian/PluginContainerSymbian.h:
        (WebCore::PluginContainerSymbian::proxy):
        * plugins/symbian/PluginViewSymbian.cpp:
        (WebCore::PluginView::updatePluginWidget):
        (WebCore::PluginView::platformStart):
        (WebCore::PluginView::platformDestroy):

2010-04-06  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Darin Adler.

        JS code generator does not support feature conditional attributes that are writable
        https://bugs.webkit.org/show_bug.cgi?id=37149

        Write out the feature #ifdef not only for the getter, but also for the setter
        function.

        * bindings/scripts/CodeGeneratorJS.pm:

2010-04-06  Abhinav Mithal <abhinav.mithal@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] npapi header leaves XP_WIN flag defined even when __SYMBIAN32__ flag is found
        https://bugs.webkit.org/show_bug.cgi?id=34614

        Do not define XP_WIN if WebKit is compiled for Symbian.

        No new tests as there is no new functionality.

        * bridge/npapi.h:

2010-04-05  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Maemo5 theme - wrong spelling
        https://bugs.webkit.org/show_bug.cgi?id=37110

        Correcting wrong spelling in RenderThemeQt.cpp.

        * platform/qt/RenderThemeQt.cpp:

2010-04-01  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Maemo5 theme - <select multiple> custom rendering
        https://bugs.webkit.org/show_bug.cgi?id=36369

        Customizing rendering of <select multiple> elements in Maemo5.

        * platform/qt/Maemo5Webstyle.cpp:
        (Maemo5WebStyle::drawMultipleComboButton):
        (Maemo5WebStyle::drawSimpleComboButton):
        (Maemo5WebStyle::getButtonImageSize):
        (Maemo5WebStyle::findComboButton):
        (Maemo5WebStyle::drawComplexControl):
        * platform/qt/Maemo5Webstyle.h:

2010-03-31  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Maemo5 theme - form controls style
        https://bugs.webkit.org/show_bug.cgi?id=36370

        Adjusting Mameo5 form elements rendering.

        * WebCore.pri:
        * WebCore.pro:
        * css/themeQtMaemo5.css: Added.
        (select):
        (select:disabled):
        (select:active):
        (select:active:disabled):
        (textarea):
        (textarea:disabled):
        (textarea:active):
        * platform/qt/Maemo5Webstyle.cpp: Added.
        (Maemo5WebStyle::Maemo5WebStyle):
        (drawRectangularControlBackgorund):
        (Maemo5WebStyle::drawChecker):
        (Maemo5WebStyle::findChecker):
        (Maemo5WebStyle::drawRadio):
        (Maemo5WebStyle::findRadio):
        (Maemo5WebStyle::drawControl):
        (Maemo5WebStyle::drawComplexControl):
        * platform/qt/Maemo5Webstyle.h: Added.
        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::RenderThemeQt):
        (WebCore::RenderThemeQt::isControlStyled):
        (WebCore::RenderThemeQt::popupInternalPaddingBottom):
        (WebCore::RenderThemeQt::extraDefaultStyleSheet):
        (WebCore::RenderThemeQt::adjustMenuListButtonStyle):
        * platform/qt/RenderThemeQt.h:

2010-04-05  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Symbian] Consolidate Symbian WINSCW environment configuration
        https://bugs.webkit.org/show_bug.cgi?id=37100

        Move the "undefinition" of WIN32 and _WIN32 from WebCore/config.h
        to JavaScriptCore/wtf/Platform.h as it is not specific to WebCore.

        No new tests as there is no new functionality.

        * config.h:

2010-04-05  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Consolidate the definition of SKIP_STATIC_CONSTRUCTORS_ON_GCC

        Instead of defining and undefining it later, let's not
        define SKIP_STATIC_CONSTRUCTORS_ON_GCC for WINSCW.

        No new tests as there is no new functionality.

        * config.h:

2010-03-30  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Maemo5 theme - QtMaemoWebPopup class
        https://bugs.webkit.org/show_bug.cgi?id=36790

        Moving maemo5 theme related code from WebCore.pri to WebCore.pro and adding
        new maemo menu lists popup class source and header to the project.

        The code was in .pri file because of a theme css that was conditionally included.
        As the css file is been included unconditionally there is no need to this
        code to be kept in webcore.pri.

        * WebCore.pri:
        * WebCore.pro:

2010-04-02  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Eric Seidel.

        Accept XHTML-MP content type as XHTML content
        https://bugs.webkit.org/show_bug.cgi?id=34262

        Enable processing XHTML-MP mime type as an XHTML document
        even if XHTML-MP support is not enabled.

        * platform/MIMETypeRegistry.cpp:
        (WebCore::initializeSupportedNonImageMimeTypes):

2010-04-01  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Dave Hyatt.

        iframe flattening doesn't flatten
        https://bugs.webkit.org/show_bug.cgi?id=36798

        Fixed to the iframe flattening code so that the iframes on
        http://www.samisite.com/test-csb2nf/id43.htm are actually
        flattened.

        Covered by current tests.

        * page/FrameView.cpp: Propagate contents changes of iframes
        and subframes in framesets to the parent so that it is relayouted
        (WebCore::FrameView::setContentsSize):
        (WebCore::FrameView::adjustViewSize):
        (WebCore::FrameView::scheduleRelayout):
        * rendering/RenderPart.cpp: HTMLIFrameElement do not inherit from
        HTMLFrameElement, but HTMLFrameElementBase, correct cast. Correct
        the use of inset border values. Avoid a sometimes unnecessary
        relayout.
        (WebCore::RenderPart::layoutWithFlattening):
        * rendering/RenderPartObject.cpp: Make the calcHeight and calcWidth
        return the right values, considering scrolling and fixed width/height
        (WebCore::RenderPartObject::flattenFrame):
        (WebCore::RenderPartObject::calcHeight):
        (WebCore::RenderPartObject::calcWidth):
        (WebCore::RenderPartObject::layout):

2010-03-31  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Unreviewed crash fix.

        Crash with frame flattening on after r56854
        https://bugs.webkit.org/show_bug.cgi?id=36894

        Solution tested by Greg Bolsinga, thanks.

        * page/FrameView.cpp:
        (WebCore::FrameView::avoidScrollbarCreation):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::setHasHorizontalScrollbar):
        (WebCore::ScrollView::setHasVerticalScrollbar):

2010-03-31  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Antti Koivisto.

        iframe flattening doesn't flatten
        https://bugs.webkit.org/show_bug.cgi?id=36798

        Do not draw scrollbars for subframes when frame flattening is
        enabled. Implemented using a virtual method in ScrollView as
        suggested by Dave Hyatt.

        Do not suppress scrollbars as that is wrong according to
        Dave Hyatt.

        Covered by current tests.

        * page/FrameView.cpp:
        (WebCore::FrameView::avoidScrollbarCreation):
        * page/FrameView.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::setHasHorizontalScrollbar):
        (WebCore::ScrollView::setHasVerticalScrollbar):
        * platform/ScrollView.h:
        (WebCore::ScrollView::avoidScrollbarCreation):
        * rendering/RenderPart.cpp:
        (WebCore::RenderPart::layoutWithFlattening):

2010-03-30  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Antti Koivisto.

        iframe flattening doesn't flatten
        https://bugs.webkit.org/show_bug.cgi?id=36798

        Fix wrongly reversing logic in frame flattening check.

        Tests:
        fast/frames/flattening/iframe-flattening-fixed-height.html
        fast/frames/flattening/iframe-flattening-fixed-width.html
        fast/frames/flattening/iframe-flattening-fixed-width-and-height.html
        fast/frames/flattening/iframe-flattening-fixed-width-and-height-no-scrolling.html

        * rendering/RenderPartObject.cpp:
        (WebCore::RenderPartObject::flattenFrame):

2010-03-31  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Darin Adler.

        tryLayoutDoingPositionedMovementOnly does not have to be in RenderObject or be virtual
        https://bugs.webkit.org/show_bug.cgi?id=36810

        Move tryLayoutDoingPositionedMovementOnly as a regular method of RenderBox

        * rendering/RenderBox.h:
        (WebCore::RenderBox::tryLayoutDoingPositionedMovementOnly):
        * rendering/RenderObject.h:

2010-03-30  Stanislav Paltis  <Stanislav.Paltis@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] qmake/symbian build failure
        https://bugs.webkit.org/show_bug.cgi?id=36745

        Fix build break in Symbian build introduced in r56714,
        by modifying comment escape character from ";" to "#".

        * WebCore.pro:

2010-03-29  Janne Koskinen  <janne.p.koskinen@digia.com>

        Reviewed by Simon Hausmann.

        [Qt] Package build fixes for Symbian

        * enable building standalone QtWebkit for Symbian using qtlibinfix configuration option

        qtlibinfix adds possibility having multiple versions of Qt in Symbian devices.
        Fix also allows unfrozen DLL exports during development.

        * Removed heap size configuration. DLLs don't have a heap.

        * Removed enforcement to def files for package builds. Instead inherit the setting from
        Qt's qconfig.pri whether to use def files or not. It's still possible to override this
        also at qmake time by passing CONFIG+=def_files.

        * WebCore.pro:

2010-03-26  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Antti Koivisto.

        Implement flattening for iframes.

        Refactoring of frameset flattening code to reuse it for
        iframe flattening.

        Tests: fast/frames/flattening/iframe-flattening-simple.html

        * WebCore.base.exp:
        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        (WebCore::FrameView::scheduleRelayout):
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setFrameFlatteningEnabled):
        * page/Settings.h:
        (WebCore::Settings::frameFlatteningEnabled):
        * rendering/RenderFrame.cpp:
        * rendering/RenderFrame.h:
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::flattenFrameSet):
        * rendering/RenderFrameSet.h:
        * rendering/RenderPart.cpp:
        (WebCore::RenderPart::layoutWithFlattening):
        * rendering/RenderPart.h:
        * rendering/RenderPartObject.cpp:
        (WebCore::RenderPartObject::flattenFrame):
        (WebCore::RenderPartObject::calcHeight):
        (WebCore::RenderPartObject::calcWidth):
        (WebCore::RenderPartObject::layout):
        * rendering/RenderPartObject.h:

2010-03-30  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by David Kilzer.

        Guard Geolocation files with ENABLE_GEOLOCATION
        https://bugs.webkit.org/show_bug.cgi?id=25756

        The intent is to guard the Geolocation implementation files 
        and minimize the impact on on clients/call sites.

        * DerivedSources.make:
        * WebCore.Geolocation.exp: Added. Exported interfaces if GEOLOCATION
        is enabled.
        * WebCore.base.exp:
        * bindings/js/JSCustomPositionCallback.cpp:
        * bindings/js/JSCustomPositionErrorCallback.cpp:
        * bindings/js/JSGeolocationCustom.cpp:
        * page/Geolocation.cpp:
        (WebCore::Geolocation::disconnectFrame): Stub implementation if
        GEOLOCATION is turned off.
        (WebCore::Geolocation::Geolocation): Ditto.
        (WebCore::Geolocation::~Geolocation): Ditto.
        (WebCore::Geolocation::setIsAllowed): Ditto.
        * page/Geolocation.h: 
        * page/Geolocation.idl:
        * page/GeolocationPositionCache.cpp:
        * page/Geoposition.idl:
        * page/PositionError.idl:
        * platform/GeolocationService.cpp:
        * platform/mock/GeolocationServiceMock.cpp:

2010-03-22  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Fraser.

        Add support for Widgets 1.0: View Mode Media Feature
        https://bugs.webkit.org/show_bug.cgi?id=35446

        When enabling Web Widgets, add support for the view-mode media
        feature (http://www.w3.org/TR/widgets-vmmf/).

        Test: fast/media/media-feature-wgt-view-mode.html

        * css/CSSValueKeywords.in:
        * css/MediaFeatureNames.h:
        * css/MediaQueryEvaluator.cpp:
        (WebCore::view_modeMediaFeatureEval):
        * page/ChromeClient.h:
        (WebCore::ChromeClient::isDocked):
        (WebCore::ChromeClient::isFloating):
        (WebCore::ChromeClient::isApplication):
        (WebCore::ChromeClient::isFullscreen):

2010-03-29  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Multiselect - Adding method itemIsSelected() to QtAbstractWebPopup
        https://bugs.webkit.org/show_bug.cgi?id=36769

        Adding method itemIsSelected() to QtAbstractWebPopup.

        * platform/qt/QtAbstractWebPopup.h:
        (WebCore::QtAbstractWebPopup::itemIsSelected):

2010-03-29  Dawit Alemayehu  <adawit@kde.org>

        Reviewed by Simon Hausmann.

        Added a function, WebCore::shouldTreatAsAttachment, to HTTPParsers.*

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

        This function, which was moved from WebKit/chromium/src/FrameClientImpl.cpp,
        is used to check whether or not a request is supposed to be rendered or
        simply downloaded based on the "Content-Disposition" header sent by the
        web server. The intent of code refactoring is to avoid code duplication
        so that this piece of code can be used by other implementations such as
        QtWebKit.

        * platform/network/HTTPParsers.cpp:
        (WebCore::shouldTreatAsAttachment):
        * platform/network/HTTPParsers.h:

2010-03-29  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by nobody, build fix.

        [Qt] Fix build break introduced in r56724.

        * WebCore.pro:

2010-03-29  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Do not generate INSTALLS for webkit when building inside Qt.
        Qt will do this for us.

        * WebCore.pro:

2010-03-29  Antti Koivisto  <koivisto@iki.fi>

        Reviewed by Kenneth Rohde Christiansen.

        https://bugs.webkit.org/show_bug.cgi?id=36703
        Timer restart loop during page loading
        
        Fix regression introduced in http://trac.webkit.org/changeset/54526. 
        Restarting the request timer unconditionally from the timer callback is a bad idea. 
        Instead, start the timer when a non-cached request completes.

        * loader/loader.cpp:
        (WebCore::Loader::Host::nonCacheRequestComplete):
        (WebCore::Loader::Host::servePendingRequests):

2010-03-29  Thomas Zander  <t.zander@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Shadowbuilds of WebCore with Qt on Symbian fails.

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

        Doing a 'make sis' expects the dll in the libdir, so place it
        there. This fixes out-of-source building to always put the dll
        in the expected dir.

        * WebCore.pro: Fix for shadow builds inside Qt.

2010-03-29  Thomas Zander  <t.zander@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Make it possible to build using both Windows and Linux for Symbian
        https://bugs.webkit.org/show_bug.cgi?id=36748

        * WebCore.pro: don't assume Windows buildsystem is the only one
        and exclude the windows-only setters from the linux builds.

2010-03-29  Thomas Zander  <t.zander@nokia.com>

        Reviewed by Simon Hausmann.

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

        [Qt] Fix def file builds with Qt 4.7.

        Switched to using DEF_FILE, which is the official variable.

        * WebCore.pro: Use DEF_FILE

2010-03-28  Kim Grönholm  <kim.gronholm@nomovok.com>

        Reviewed by Simon Hausmann.

        [Qt] GraphicsLayer: Timing functions don't work with transitions
        https://bugs.webkit.org/show_bug.cgi?id=36589

        If the animation value doesn't have timing function set, we need to
        use the animation's timing function.
        
        Fixed also a bug in passing the duration to solveCubicBezierFunction.
        The duration was divided two times by 1000 and meanwhile casted to int.
        It needs to be kept as double and divided by 1000 only once.

        Test case: https://bugs.webkit.org/attachment.cgi?id=51619

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::applyTimingFunction):
        (WebCore::AnimationQt:::AnimationQtBase):
        (WebCore::AnimationQt::updateCurrentTime):

2010-03-28  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Remove the definition of WTF_CHANGES guards from the build system
        https://bugs.webkit.org/show_bug.cgi?id=31670

        No new tests as there is no new functionality.

        * WebCore.pri: Remove the definition of WTF_CHANGES
        as it is already defined in config.h

2010-03-26  Janne Koskinen  <janne.p.koskinen@digia.com>

        Reviewed by Laszlo Gombos.

        Don't undefine SKIP_STATIC_CONSTRUCTORS_ON_GCC for Symbian HW targets.
        https://bugs.webkit.org/show_bug.cgi?id=34081

        Defining StringImpl instances as globals will cause a crash on process exit as 
        StringImpl::Remove expects TLS which was already deleted at time of exiting main and ends up
        constructing one exiting thread.

        * config.h:

2010-03-26  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Build JavaScriptCore as a static library.
        https://bugs.webkit.org/show_bug.cgi?id=36590

        This patch takes what was left of the unused JavaScriptCore.pro
        and moved the compilation logic from JavaScriptCore.pri to
        JavaScriptCore.pro.

        * WebCore.pro:

2010-03-25  Jakub Wieczorek  <jwieczorek@webkit.org>

        Reviewed by Eric Seidel.

        [Qt] RenderTheme: fix size adjustment for text fields
        https://bugs.webkit.org/show_bug.cgi?id=36413

        To match other ports, remove the hardcoded dimensions for text fields so that
        the default ones from WebCore can be used.
        Properly apply the correct padding to text areas - this fixes their appearance
        with the Oxygen style.

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::computeSizeBasedOnStyle):

2010-03-26  Qi Zhang  <qi.2.zhang@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] fast/canvas/drawImage-with-negative-source-destination.html failed
        https://bugs.webkit.org/show_bug.cgi?id=35005

        To support negative width or height at context.drawImage

        * platform/graphics/qt/StillImageQt.cpp:
        (WebCore::StillImage::draw):

2010-03-24  Dmitry Titov  <dimich@chromium.org>

        Unreviewed, Chromium test fix.

        Recent r56445 added CustomEvent and a test but it didn't work on Chromium bots.
        Test crashed due to infinte recursion because the compiler did not have the right definition of toV8(CustomEvent*)
        and was substituting toV8(Event*).

        Fixing test fast/events/custom-event.html

        * bindings/v8/custom/V8EventCustom.cpp:

2010-03-03  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Antti Koivisto.

        Add support for DOM Level 3 Custom Event
        http://www.w3.org/TR/DOM-Level-3-Events

        V8 Generator change by Nate Chapin <japhet@chromium.org>, Thanks!

        Test: fast/events/custom-event.html

        * DerivedSources.cpp:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.pro:
        * WebCore/DerivedSources.make:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSEventCustom.cpp:
        (WebCore::toJS):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorV8.pm:
        * dom/CustomEvent.cpp: Added.
        (WebCore::CustomEvent::CustomEvent):
        (WebCore::CustomEvent::initCustomEvent):
        (WebCore::CustomEvent::isCustomEvent):
        * dom/CustomEvent.h: Added.
        (WebCore::CustomEvent::create):
        (WebCore::CustomEvent::detail):
        * dom/Document.cpp:
        (WebCore::Document::createEvent):
        * dom/Event.cpp:
        (WebCore::Event::isCustomEvent):
        * dom/Event.h:

2010-03-23  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Hausmann.

        Add a way to check if the page client is making use of
        a QWidget.

        * platform/qt/QWebPageClient.h:
        (QWebPageClient::isQWidgetClient):

2010-03-25  Antti Koivisto  <koivisto@iki.fi>

        Reviewed by Kenneth Rohde Christiansen.

        https://bugs.webkit.org/show_bug.cgi?id=36316
        Tiles of selected content do not update if not in viewport
        
        Don't clip repaints to viewport when tiling is enabled.

        * page/Frame.cpp:
        (WebCore::Frame::setView):
        (WebCore::Frame::setTiledBackingStoreEnabled):

2010-03-25  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Implement ChromeClient::windowResizerRect()

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

        The helper function geometryRelativeToOwnerWidget() in the page
        client is used to clip the resize rect to the actual size of the
        viewport, not the size of the QGraphicsView.

        * platform/qt/QWebPageClient.h:

2010-03-26  Olivier Goffart  <ogoffart@trolltech.com>

        Reviewed by Simon Hausmann.

        [Qt] Fix compilation on Windows

        For some reason, the MSVC compiler choose the
        operator+(const QString &, const QString &) instead of
        operator+(const WebCore::String &, const WebCore::String &)
        resulting in errors when QT_USE_FAST_OPERATOR_PLUS is used.

        * dom/XMLTokenizerQt.cpp:
        (WebCore::handleElementNamespaces):

2010-03-25  Diego Gonzalez  <diego.gonzalez@openbossa.org>

        Reviewed by Eric Seidel.

        Missing forward ENABLE_DATALIST macro to JavaScript enabled features macros
        on WebKit.pri

        [Qt] Forward ENABLE_DATALIST macro to JavaScript enabled macros
        https://bugs.webkit.org/show_bug.cgi?id=36547

        * WebCore.pri:

2010-03-25  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Fix the package build on Maemo 5

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

        Always embed the stylesheet for the no-listbox rendering. This way it'll be
        included in the generated files for the package generation.

        * WebCore.pri:

2010-03-19  Miikka Heikkinen  <miikka.heikkinen@digia.com>

        Reviewed by Simon Hausmann.

        [Qt] Support for QT_LIBINFIX in Symbian builds

        Configuring Qt with -qtlibinfix parameter will enable installing
        an alternate version of Qt on devices that already have it on ROM.
        This patch provides support for infixed builds of Webkit.

        * WebCore.pro:

2010-03-24  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        Make Icon::createIconForFiles() optional.
        https://bugs.webkit.org/show_bug.cgi?id=35072

        r54923 made Icon::createIconForFiles() deprecated. However moving
        existing icon loading code to outside of WebCore is not good.  So,
        we assume:
        - ChromeClient::chooseIconForFiles(), renamed from iconForFiles(), is
          the primary API to load icons.
        - Icon::createIconForFiles() is an optional API to help
          implementing ChromeClient::iconForFiles().

        This patch removes a call to Icon::createIconForFiles() from
        FileChooser::loadIcon(), and ChromeClient::chooseIconForFiles() of
        non-Chromium ports calls Icon::createIconForFiles().

        * WebCore.base.exp: Export FileChooser::iconLoaded(),
          Icon::createIconForFiles(), and Icon::~Icon().
        * WebCore.xcodeproj/project.pbxproj: Export Icon.h
        * loader/EmptyClient.h: Rename iconForFiles() to chooseIconForFiles().
        * page/Chrome.cpp: ditto.
        * page/Chrome.h: ditto.
        * page/ChromeClient.h: ditto.
        * platform/FileChooser.cpp:
        (WebCore::FileChooser::loadIcon):
        * platform/graphics/Icon.h: Remove a comment on createIconForFiles().
        * platform/graphics/chromium/IconChromiumLinux.cpp: Remove createIconForFiles().
        * platform/graphics/chromium/IconChromiumMac.cpp: ditto.
        * platform/graphics/chromium/IconChromiumWin.cpp: ditto.
        * rendering/RenderFileUploadControl.cpp: Rename iconForFiles() to chooseIconForFiles().
        * rendering/RenderFileUploadControl.h: ditto.

2010-03-23  Dan Bernstein  <mitz@apple.com>

        Fixed typos.

        * manual-tests/plugin-visible-rect-change.html:

2010-03-23  Dan Bernstein  <mitz@apple.com>

        Reviewed by John Sullivan.

        WebCore part of
        <rdar://problem/7197736> Plug-in clip rect does not update when overflow
        clip changes
        https://bugs.webkit.org/show_bug.cgi?id=36479.

        * manual-tests/plugin-visible-rect-change.html: Added.
        * platform/mac/WidgetMac.mm:
        (WebCore::WidgetPrivate::WidgetPrivate): Added previousVisibleRect.
        (WebCore::Widget::setFrameRect): If the visible rect changed but the
        frame rect did not, send a -visibleRectDidChange message to the view,
        if it responds to it.
        (WebCore::Widget::releasePlatformWidget): Reset previousVisibleRect.
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::setWidgetGeometry): Track changes to the clip rect
        imposed by the enclosing layer. Call Widget::setFrameRect when it changes,
        even if the frame rect did not.
        * rendering/RenderWidget.h:
        (WebCore::RenderWidget::windowClipRect): Added this accessor.

2010-03-23  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Assertion ASSERTION FAILED: rootLayer == m_clipRectsRoot at hulu.com
        https://bugs.webkit.org/show_bug.cgi?id=34065
        
        Fix another cause of assertions related to the clip rects root. Embeds
        with zero size caused the overlap testing to fail, yet we require them to work
        for correct compositing, so when the composited bounds is empty, use a 1x1 rect
        for overlap testing.

        Test: compositing/geometry/empty-embed-rects.html

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::addToOverlapMap):
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):

2010-03-23  David Levin  <levin@chromium.org>

        Reviewed by Nate Chapin.

        [chromium] XMLHttpRequest.send sends 'undefined' string when passed undefined value.
        https://bugs.webkit.org/show_bug.cgi?id=36506

        Test: http/tests/xmlhttprequest/send-undefined-and-null.html

        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        (WebCore::isDocumentType): Unrelated style fix: fixed the casing of the method.
        (WebCore::V8XMLHttpRequest::sendCallback): Added check for null/undefined to do the send.
        This mirrors what is done in the JSC bindings. Previously, sending 'null' worked because
        the last case, which did "toWebCoreStringWithNullCheck", resulted in sending an empty
        request body.

2010-03-23  Chris Evans  <cevans@chromium.org>

        Reviewed by Darin Adler.

        Fix hard-to-see crash due to incorrect libxml API usage.

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

        Test: fast/text/bad-encoding.html

        * dom/XMLTokenizerLibxml2.cpp:
        (WebCore::XMLTokenizer::doEnd): Avoid operations on a closed context.

2010-03-23  Nate Chapin  <japhet@chromium.org>

        Unreviewed, revert r56376.

        This revision introduced a crash in a couple of layout tests
        on Chromium Linux.

        * page/chromium/ChromeClientChromium.h:
        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::):
        (WebCore::PopupContainer::create):
        (WebCore::PopupContainer::PopupContainer):
        (WebCore::PopupContainer::showPopup):
        (WebCore::PopupContainer::showExternal):
        (WebCore::PopupContainer::hidePopup):
        (WebCore::PopupMenu::show):
        * platform/chromium/PopupMenuChromium.h:
        (WebCore::PopupItem::):
        (WebCore::PopupItem::PopupItem):
        (WebCore::PopupContainerSettings::):
        (WebCore::PopupContainer::listBox):

2010-03-23  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser and Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=36272, make sure nth-child can work when the portion with "n" is omitted.

        Added fast/css/nth-child-implied-step.html

        * css/CSSGrammar.y:
        * css/tokenizer.flex:

2010-03-23  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Reduce and straighten internal use of DOMImplementation
        https://bugs.webkit.org/show_bug.cgi?id=36501

        * WebCore.xcodeproj/project.pbxproj: Xcode decided to
        re-sort this file.

        * dom/Clipboard.cpp: Removed unneeded include of DOMImplementation.h.

        * dom/DOMImplementation.cpp: Removed unneeded createDocument and
        createHTMLDocument functions. These should be done directly instead
        of involving the DOMImplementation class.
        * dom/DOMImplementation.h: Ditto.

        * dom/DocumentType.cpp: Removed unneeded include of DOMImplementation.h.

        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::createTokenizer): Don't allocate a
        DOMImplementation object just to use a class member function.

        * loader/CachedFont.cpp: Removed unneeded include of DOMImplementation.h.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::responseXML): Use Document::create to create a
        new document instead of involving DOMImplementation.
        * xml/XSLTProcessor.cpp:
        (WebCore::XSLTProcessor::createDocumentFromSource): Ditto. And in the case
        where we do need to call DOMImplementation to interpret the MIME type,
        don't allocate a DOMImplementation object just to use a class member
        function.

2010-03-23  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Maemo5 theme - all <select> elements should be rendered as menu lists.
        https://bugs.webkit.org/show_bug.cgi?id=36367

        Enabling NO_LISTBOX_RENDERING in WebCore.pri for Maemo5.

        * WebCore.pri:

2010-03-22  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by David Kilzer.

        Upstream iPhone KeyEvent platform code and share with Mac platform
        https://bugs.webkit.org/show_bug.cgi?id=35870

        * platform/iphone/KeyEventCodesIPhone.h: Improper comment for #endif.
        * platform/iphone/KeyEventIPhone.mm: Fixed headers.

2010-03-23  David Hyatt  <hyatt@apple.com>

        Reviewed by Jeremy Orlow.

        https://bugs.webkit.org/show_bug.cgi?id=36277, make sure nth-child supports the positive unary prefix (+) as well as the negative
        one (-).

        Added fast/css/nth-child-unary-prefix.html

        * css/tokenizer.flex:

2010-03-23  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Dmitry Titov.

        Change notification sent to inspector frontend on workers creation / destruction
        to be posted asynchronously to avoid JS reenterability problems. Also, renamed
        willDestroyWorker to didDestroyWorker to reflect that it gets called later and got
        rid of explicit IDs for workers (use addresses instead).
        https://bugs.webkit.org/show_bug.cgi?id=36213

        * inspector/InjectedScriptHost.cpp:
        (WebCore::InjectedScriptHost::didDestroyWorker):
        * inspector/InjectedScriptHost.h:
        * inspector/InjectedScriptHost.idl:
        * inspector/InspectorController.cpp:
        (WebCore::PostWorkerNotificationToFrontendTask::create):
        (WebCore::PostWorkerNotificationToFrontendTask::PostWorkerNotificationToFrontendTask):
        (WebCore::PostWorkerNotificationToFrontendTask::performTask):
        (WebCore::InspectorController::postWorkerNotificationToFrontend):
        (WebCore::InspectorController::didCreateWorker):
        (WebCore::InspectorController::didDestroyWorker):
        * inspector/InspectorController.h:
        (WebCore::InspectorController::):
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::didDestroyWorker):
        * inspector/InspectorFrontend.h:
        * inspector/InspectorWorkerResource.h:
        (WebCore::InspectorWorkerResource::create):
        (WebCore::InspectorWorkerResource::id):
        (WebCore::InspectorWorkerResource::InspectorWorkerResource):
        * inspector/front-end/InjectedFakeWorker.js:
        (InjectedFakeWorker.FakeWorker.prototype.terminate):
        * inspector/front-end/WorkersSidebarPane.js:
        (WebInspector.didDestroyWorker):
        * workers/AbstractWorker.cpp:
        (WebCore::AbstractWorker::AbstractWorker):
        (WebCore::AbstractWorker::onDestroyWorker):
        * workers/AbstractWorker.h:
        (WebCore::AbstractWorker::asID):
        * workers/SharedWorker.cpp:
        (WebCore::SharedWorker::SharedWorker):
        * workers/Worker.cpp:
        (WebCore::Worker::Worker):

2010-03-22  David Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=36266, support DOM Level 3 focusin/focusout events.  Add support for
        IE onfocusin/onfocusout extensions to HTML.  The old DOM level 2 names (DOMFocusIn/DOMFocusOut are still supported).

        Added fast/events/focusinout.html

        * dom/Document.cpp:
        (WebCore::Document::setFocusedNode):
        * dom/Event.cpp:
        (WebCore::Event::aliasedType):
        (WebCore::Event::hasAliasedType):
        * dom/Event.h:
        * dom/EventNames.h:
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::fireEventListeners):
        * dom/EventTarget.h:
        * dom/Node.cpp:
        (WebCore::Node::dispatchUIEvent):
        * html/HTMLAttributeNames.in:
        * html/HTMLButtonElement.cpp:
        (WebCore::HTMLButtonElement::parseMappedAttribute):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::parseMappedAttribute):
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::parseMappedAttribute):
        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::parseMappedAttribute):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::parseMappedAttribute):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::parseMappedAttribute):

2010-03-23  MORITA Hajime  <morrita@google.com>

        Reviewed by Alexey Proskuryakov.

        WebCore::SelectionController::setSelection NULL pointer
        https://bugs.webkit.org/show_bug.cgi?id=31545

        Added missing NULL-check that other APIs have.

        Test: svg/dom/frame-related-api-during-load.html

        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::deselectAll):

2010-03-23  Qi Zhang  <qi.2.zhang@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] LayoutTests/fast/canvas/fillrect_gradient.html failed
        https://bugs.webkit.org/show_bug.cgi?id=36444

        Handle duplicated or unsorted colorStop at platformDestory

        * platform/graphics/qt/GradientQt.cpp:
        (WebCore::Gradient::platformGradient):

2010-03-23  Julien Chaffraix  <jchaffraix@webkit.org>

        Unreviewed build fix.

        Try to make the window buildbot happy.

        * xml/XMLHttpRequestProgressEventThrottle.cpp:
        * xml/XMLHttpRequestProgressEventThrottle.h: Move initialization of the
        static const in the cpp file.

2010-03-23  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: make gear menu appear on styles panel at all times.

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

        * inspector/front-end/inspector.css:

2010-03-23  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: render nodes in inherited style bars as links.

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

        * English.lproj/localizedStrings.js:
        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.BreakpointsSidebarPane.prototype._appendBreakpointElement.breakpointClicked):
        (WebInspector.BreakpointsSidebarPane.prototype._appendBreakpointElement):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.prototype._update.else.insertInheritedNodeSeparator):
        (WebInspector.StylesSidebarPane.prototype._update):
        (WebInspector.StylesSidebarPane.prototype._selectNode):
        * inspector/front-end/inspector.js:

2010-03-23  Julien Chaffraix  <jchaffraix@webkit.org>

        Reviewed by Alexey Proskuryakov.

        [XHR] onProgress event needs to be dispatched according to what the specification states
        https://bugs.webkit.org/show_bug.cgi?id=18654

        Test: http/tests/xmlhttprequest/xmlhttprequest-50ms-download-dispatch.html

        * Android.mk:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        Added XMLHttpRequestProgressEventThrottle to the build systems.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::XMLHttpRequest): Created the throttle.
        (WebCore::XMLHttpRequest::callReadyStateChangeListener): The 'readyState' event are
        dispatched using the XMLHttpRequestProgressEventThrottle now. For the DONE state, we
        need to flush any pending progress event as we do not want it to be dispatched after
        the DONE readyState event.
        (WebCore::XMLHttpRequest::createRequest): Made this event use the
        XMLHttpRequestProgressEventThrottle for event dispatching.
        (WebCore::XMLHttpRequest::abort): Ditto.
        (WebCore::XMLHttpRequest::networkError): Ditto.
        (WebCore::XMLHttpRequest::abortError): Ditto.
        (WebCore::XMLHttpRequest::didReceiveData): Ditto. Also fixed a potential warning.
        (WebCore::XMLHttpRequest::suspend):
        (WebCore::XMLHttpRequest::resume): Implemented the logic for suspend / resume.
        * xml/XMLHttpRequest.h:
        * xml/XMLHttpRequestProgressEventThrottle.cpp: Added.
        (WebCore::XMLHttpRequestProgressEventThrottle::XMLHttpRequestProgressEventThrottle):
        (WebCore::XMLHttpRequestProgressEventThrottle::~XMLHttpRequestProgressEventThrottle):
        (WebCore::XMLHttpRequestProgressEventThrottle::dispatchProgressEvent): Implemented the bulk
        of the event throttling here: we use a timer to do so, as long as the timer is active it means
        that events are coming faster than the throttling time and we coalesce them.
        (WebCore::XMLHttpRequestProgressEventThrottle::dispatchEvent): Generic method to dispatch an event.
        (WebCore::XMLHttpRequestProgressEventThrottle::flushProgressEvent): Called when we want to dispatch
        any pending events and stopping any further dispatching.
        (WebCore::XMLHttpRequestProgressEventThrottle::dispatchPausedEvent): Used to dispatch the event
        that was queued due to the object being suspended.
        (WebCore::XMLHttpRequestProgressEventThrottle::fired): Used to dispatch any coalesced event.
        (WebCore::XMLHttpRequestProgressEventThrottle::hasEventToDispatch): Used to check if we have
        an event to dispatch.
        (WebCore::XMLHttpRequestProgressEventThrottle::suspend): Marked the object as suspended.
        (WebCore::XMLHttpRequestProgressEventThrottle::resume): Dispatched the event that was queued.
        * xml/XMLHttpRequestProgressEventThrottle.h: Added.
        (WebCore::):
        (WebCore::XMLHttpRequestProgressEventThrottle::suspended):

2010-03-23  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Element inspector search funtion: Error dispatching: performSearch.

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

        Test: inspector/elements-panel-search.html

        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.performSearch):
        (WebInspector.ElementsPanel.prototype.addNodesToSearchResult):
        * inspector/front-end/InjectedScript.js:
        (injectedScriptConstructor.):
        (injectedScriptConstructor):

2010-03-23  Qi Zhang  <qi.2.zhang@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt]  fast/canvas/patternfill-repeat.html failed.
        https://bugs.webkit.org/show_bug.cgi?id=34477

        Change Pattern to expose the repeatX and repeatY
        At GraphicsContextQt to apply repeatX and repeatY

        * platform/graphics/Pattern.h:
        (WebCore::Pattern::repeatX):
        (WebCore::Pattern::repeatY):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::drawLine):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::rotate):

2010-03-23  Alex Milowski  <alex@milowski.com>

        Reviewed by Kenneth Rohde Christiansen.

        Removed the use of beta STIX fonts.

        * css/mathml.css:

2010-03-23  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Holger Freyther.

        [GTK] Does not build with latest GTK+ development release
        https://bugs.webkit.org/show_bug.cgi?id=36398

        Fix building with newest GTK+ versions.

        * GNUmakefile.am:
        * platform/gtk/GtkPluginWidget.cpp:
        (WebCore::GtkPluginWidget::invalidateRect):
        (WebCore::GtkPluginWidget::paint):
        * platform/gtk/GtkVersioning.h: Added.
        * platform/gtk/PlatformScreenGtk.cpp:
        (WebCore::getVisual):
        (WebCore::screenRect):
        (WebCore::screenAvailableRect):
        * platform/gtk/ScrollbarGtk.cpp:
        (ScrollbarGtk::paint):
        * plugins/gtk/gtk2xtbin.c:
        (gtk_xtbin_set_position):
        (gtk_xtbin_unrealize):

2010-03-23  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Remove support for Qt v4.4
        https://bugs.webkit.org/show_bug.cgi?id=36389

        No new tests as there is no new functionality.

        * WebCore.pri:
        * WebCore.pro:
        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::ResourceHandle::willLoadFromCache):
        * platform/qt/CookieJarQt.cpp:
        (WebCore::setCookies):
        (WebCore::cookies):
        * platform/qt/KURLQt.cpp:
        (WebCore::KURL::operator QUrl):
        * platform/qt/ScrollbarThemeQt.cpp:
        (WebCore::ScrollbarThemeQt::paintScrollCorner):
        * plugins/mac/PluginViewMac.cpp:

2010-03-23  Kent Tamura  <tkent@chromium.org>

        Reviewed by Adam Barth.

        Add checks if setNeedsWillValidateCheck() and
        setNeedsValidityCheck() are called correctly.
        https://bugs.webkit.org/show_bug.cgi?id=34924

        Introduce HTMLFormControlElement::m_willValidate and
        m_isValid. They are the caches of willValidate() and
        isValidFormControlElement(). setNeedsWillValidateCheck() updates
        m_willValidate and setNeedsValidityCheck() updates m_isValid.

        willValidate() and isValidFormControlElement() have assertions to
        check m_willvalidate or m_isValid has the correct state. If
        setNeedsWillValidateCheck() or setNeedsValidityCheck() is needed
        to be called and is not called, these assertions fail.

        * html/HTMLButtonElement.h:
        (WebCore::HTMLButtonElement::recalcWillValidate):
        * html/HTMLFieldSetElement.h:
        (WebCore::HTMLFieldSetElement::recalcWillValidate):
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::HTMLFormControlElement):
        (WebCore::HTMLFormControlElement::parseMappedAttribute):
        (WebCore::HTMLFormControlElement::recalcWillValidate):
        (WebCore::HTMLFormControlElement::willValidate):
        (WebCore::HTMLFormControlElement::setNeedsWillValidateCheck):
        (WebCore::HTMLFormControlElement::validationMessage):
        (WebCore::HTMLFormControlElement::isValidFormControlElement):
        (WebCore::HTMLFormControlElement::setNeedsValidityCheck):
        * html/HTMLFormControlElement.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setInputType):
        (WebCore::HTMLInputElement::parseMappedAttribute):
        (WebCore::HTMLInputElement::setValue):
        (WebCore::HTMLInputElement::recalcWillValidate):
        * html/HTMLInputElement.h:
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::setNonDirtyValue):

2010-03-22  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Dave Hyatt.

        Web Inspector: display CSS selector source line in the styles sidebar pane.

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

        This change adds a sourceLine field into the CSSStyleRule that is populated
        from within the parser. CSSParser is now keeping track of the line numbers
        and last selector line number that is being used while creating CSSStyleRules.

        Test: inspector/styles-source-lines.html

        * css/CSSGrammar.y:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::CSSParser):
        (WebCore::CSSParser::lex):
        (WebCore::CSSParser::countLines):
        (WebCore::CSSParser::createStyleRule):
        * css/CSSParser.h:
        (WebCore::CSSParser::updateLastSelectorLine):
        * css/CSSStyleRule.cpp:
        (WebCore::CSSStyleRule::CSSStyleRule):
        * css/CSSStyleRule.h:
        (WebCore::CSSStyleRule::create):
        (WebCore::CSSStyleRule::sourceLine):
        * css/tokenizer.flex:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::buildObjectForRule):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.CSSStyleDeclaration.parseRule):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertiesSection):

2010-03-22  Qi Zhang  <qi.2.zhang@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] Fix arc function in canvas
        https://bugs.webkit.org/show_bug.cgi?id=36296

        Based on HTLM5 spec (4.8.10.1.8 Complex shapes), arc function should draw a line to previous point, not only the arc.

        * platform/graphics/qt/PathQt.cpp:
        (WebCore::Path::addArc):

2010-03-19  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=36339
        Off-by-one memory corruption fix for long invalid websockets upgrade header

        Test: websocket/tests/long-invalid-header.html

        * websockets/WebSocketHandshake.cpp:
        (WebCore::WebSocketHandshake::readServerHandshake):

2010-03-22  Fumitoshi Ukai  <ukai@chromium.org>

        Unreviewed build fix for Chromim Mac at r56376

        Fix initializer order  of PopupContainer.

        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupContainer::PopupContainer):

2010-03-22  Jay Campan  <jcampan@google.com>

        Reviewed by Darin Fisher.

        Making Chromium select popups not steal activation from the browser.
        Select popups are now like autocomplete popups, shown in non-activated
        windows.
        https://bugs.webkit.org/show_bug.cgi?id=36062

        * page/chromium/ChromeClientChromium.h:
        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::):
        (WebCore::PopupContainer::create):
        (WebCore::PopupContainer::PopupContainer):
        (WebCore::PopupContainer::~PopupContainer):
        (WebCore::PopupContainer::showPopup):
        (WebCore::PopupContainer::showExternal):
        (WebCore::PopupContainer::hidePopup):
        (WebCore::PopupMenu::show):
        * platform/chromium/PopupMenuChromium.h:
        (WebCore::PopupContainer::):
        (WebCore::PopupContainer::popupType):

2010-03-22  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Nate Chapin.

        [v8] Crash if the worker is terminated before its initial script is executed.
        https://bugs.webkit.org/show_bug.cgi?id=36336

        Test: fast/workers/termination-early.html

        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::initContextIfNeeded): Check for 0 context. When terminated, the v8 heap initialization returns 0.
        (WebCore::WorkerContextExecutionProxy::evaluate): Don't execute script if initialization failed.
        * bindings/v8/WorkerContextExecutionProxy.h:

2010-03-22  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Pavel Feldman.

        Support creation of fake workers before document is loaded by deferring
        attaching of fake workers iframe until document is loaded and buffering all
        messages addressed to worker.
        https://bugs.webkit.org/show_bug.cgi?id=36445

        * inspector/front-end/InjectedFakeWorker.js:
        (InjectedFakeWorker.FakeWorker.prototype.postMessage):
        (InjectedFakeWorker.FakeWorker.prototype._buildWorker):
        (InjectedFakeWorker.FakeWorker.prototype._attachWorkerFrameToDocument):
        (InjectedFakeWorker.FakeWorker.prototype._onWorkerFrameLoaded):

2010-03-22  Darin Fisher  <darin@chromium.org>

        Reviewed by Brady Eidson.

        HistoryController::replaceState() should modify m_currentItem
        instead of the current HistoryItem of the BackForwardList.

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

        Test: fast/loader/stateobjects/replacestate-in-iframe.html

        * loader/HistoryController.cpp:
        (WebCore::HistoryController::replaceState):

2010-03-22  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by David Kilzer.

        Upstream Part of the iPhone Platform sharing code with the Mac Platform
        https://bugs.webkit.org/show_bug.cgi?id=35870
        <rdar://problem/7707283> and <rdar://problem/7707318>

        Part 3 of 3: Shared code between iphone and mac. The shared code was
        refactored to be usable by both platforms without platform specific
        typing, meaning no NSEvent versus WebEvent special cases.

          Shared code usable by either mac or iphone platforms.

        * platform/cocoa/KeyEventCocoa.h:
        * platform/cocoa/KeyEventCocoa.mm:
        (WebCore::keyIdentifierForCharCode):
        (WebCore::windowsKeyCodeForKeyCode):
        (WebCore::windowsKeyCodeForCharCode):

          Make use of the shared code. Keep anything platform specific in the
          original file before calling the shared code.

        * platform/iphone/KeyEventIPhone.mm:
        (WebCore::keyIdentifierForKeyEvent):
        * platform/mac/KeyEventMac.mm:
        (WebCore::keyIdentifierForKeyEvent):
        (WebCore::windowsKeyCodeForKeyEvent):

2010-03-22  Kevin Decker  <kdecker@apple.com>

        Reviewed by Simon Fraser.

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

        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::RenderEmbeddedObject): Fix a find/repalce mistake from my earlier patch.
        Rename m_setShowsMissingPluginIndicator -> m_showsMissingPluginIndicator. 
        (WebCore::RenderEmbeddedObject::updateWidget): Don't update the widget if we're showing
        the missing plug-in indicator.
        (WebCore::RenderEmbeddedObject::paint):Fix a find/repalce mistake from my earlier patch.
        Rename m_setShowsMissingPluginIndicator -> m_showsMissingPluginIndicator. 
        (WebCore::RenderEmbeddedObject::paintReplaced): Ditto.
        * rendering/RenderEmbeddedObject.h: Ditto.
        (WebCore::RenderEmbeddedObject::setShowsMissingPluginIndicator): Ditto.
        (WebCore::RenderEmbeddedObject::showsMissingPluginIndicator): Ditto.

2010-03-22  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by David Kilzer.

        Upstream Part of the iPhone Platform sharing code with the Mac Platform
        https://bugs.webkit.org/show_bug.cgi?id=35870
        <rdar://problem/7707283>

        Part 2 of 3: No changes other than moving code around.
        Copied KeyEvent function from platform/mac to a platform/cocoa shared directory.

        * WebCore.xcodeproj/project.pbxproj: Added cocoa group and new files.
        * platform/cocoa/KeyEventCocoa.h: Added.
        * platform/cocoa/KeyEventCocoa.mm: Copied from WebCore/platform/mac/KeyEventMac.mm.
        (WebCore::keyIdentifierForKeyEvent):
        (WebCore::windowsKeyCodeForKeyEvent): Include the shared code.
        * platform/mac/KeyEventMac.mm:

2010-03-22  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by David Kilzer.

        Part 1 of 3: Upstream iPhone KeyEvent platform code and share with Mac platform
        https://bugs.webkit.org/show_bug.cgi?id=35870
        <rdar://problem/7707283>

        * WebCore.xcodeproj/project.pbxproj: Added iphone group and new files.
        * platform/iphone: Added.
        * platform/iphone/KeyEventCodesIPhone.h: Added.
        * platform/iphone/KeyEventIPhone.mm: Added. Ensure PLATFORM(IPHONE)
        * platform/mac/KeyEventMac.mm: Ensure PLATFORM(MAC)

2010-03-22  Kevin Decker  <kdecker@apple.com>
    
        Attempt to fix the Leopard build.
        * rendering/RenderEmbeddedObject.cpp: Add ".f" to contants.

2010-03-22  Justin Schuh  <jschuh@chromium.org>

        Reviewed by Dirk Schulze.

        Out of bounds read in SVG feColorMatrix filter
        https://bugs.webkit.org/show_bug.cgi?id=32714

        Prevents an invalid read when a valid values attribute is not
        supplied for an feColorMatrix SVG filter. Also fixes general
        handling of missing or invalid values attribute.

        Tests: svg/filters/feColorMatrix-invalid-value.svg
               svg/filters/feColorMatrix-values.svg

        * svg/SVGFEColorMatrixElement.cpp:
        (WebCore::SVGFEColorMatrixElement::build):

2010-03-22  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Eric Carlson.

        [GStreamer] Use ImageBuffer API to do painting
        https://bugs.webkit.org/show_bug.cgi?id=35783

        New ImageGStreamer class abstracting the conversion of GStreamer
        buffers to cairo surfaces. Using this makes the painting code of
        the player more generic.

        * GNUmakefile.am:
        * platform/graphics/gstreamer/ImageGStreamer.h: Added.
        (WebCore::ImageGStreamer::image):
        * platform/graphics/gstreamer/ImageGStreamerCairo.cpp: Added.
        (ImageGStreamer::createImage):
        (ImageGStreamer::ImageGStreamer):
        (ImageGStreamer::~ImageGStreamer):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::paint):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:

2010-03-22  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin Adler.

        Fix for <rdar://problem/7766437> With Web Inspector opened, a crash 
        occurs at Webcore:getMatchedCSSRules() when navigating to a 
        previous page

        defaultView() can legitimately by null (as it is in this case), so 
        it must be null-checked.

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::getStyles):
        (WebCore::InspectorDOMAgent::getComputedStyle):
        (WebCore::InspectorDOMAgent::getMatchedCSSRules):

2010-03-22  Kevin Decker  <kdecker@apple.com>

        Reviewed by Darin.

        https://bugs.webkit.org/show_bug.cgi?id=36328
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadPlugin): Call setShowsMissingPluginIndicator(true) in cases that fail
        to generate a widget.
        * rendering/RenderEmbeddedObject.cpp: Added new missing plug-in related static constants
        (WebCore::RenderEmbeddedObject::RenderEmbeddedObject): Initialize newly boolean to false.
        (WebCore::RenderEmbeddedObject::paint): Added.
        (WebCore::RenderEmbeddedObject::paintReplaced): Added. Draws a subtle rounded rectangle
        containing the text "Missing Plug-in".
        * rendering/RenderEmbeddedObject.h: Added the following two methods below.
        (WebCore::RenderEmbeddedObject::setShowsMissingPluginIndicator):
        (WebCore::RenderEmbeddedObject::showsMissingPluginIndicator):
        * rendering/RenderWidget.h: Moved paint(PaintInfo&, int, int) from private to protected.

2010-03-22  Jakub Wieczorek  <faw217@gmail.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Phonon media backend: expose supported MIME types to WebCore

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

        MediaPlayerPrivate should expose the MIME types that are supported
        by the underlying backend in Phonon.

        * platform/graphics/qt/MediaPlayerPrivatePhonon.cpp:
        (WebCore::MediaPlayerPrivate::supportedTypesCache):
        (WebCore::MediaPlayerPrivate::getSupportedTypes):
        (WebCore::MediaPlayerPrivate::supportsType):
        * platform/graphics/qt/MediaPlayerPrivatePhonon.h:

2010-03-22  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: AuditRules still use getMatchedCSSRules as a part of the img-related audit.
        https://bugs.webkit.org/show_bug.cgi?id=36424

        * inspector/front-end/AuditRules.js:
        (WebInspector.AuditRules.ImageDimensionsRule.prototype.doRun):
        (WebInspector.AuditRules.ImageDimensionsRule.prototype.doRun.receivedImages):
        (WebInspector.AuditRules.ImageDimensionsRule.prototype.doRun.pushImageNodes):
        * inspector/front-end/InjectedScript.js:
        (injectedScriptConstructor):

2010-03-22  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        TextBreakIteratorICU.cpp is incompatible with new UBreakIterator type in ICU 4.4
        https://bugs.webkit.org/show_bug.cgi?id=36381

        * platform/text/TextBreakIteratorICU.cpp:
        (WebCore::setUpIterator): Use reinterpret_cast instead of static_cast or relying
        on conversion to void*.
        (WebCore::textBreakFirst): Ditto.
        (WebCore::textBreakLast): Ditto.
        (WebCore::textBreakNext): Ditto.
        (WebCore::textBreakPrevious): Ditto.
        (WebCore::textBreakPreceding): Ditto.
        (WebCore::textBreakFollowing): Ditto.
        (WebCore::textBreakCurrent): Ditto.
        (WebCore::isTextBreak): Ditto.
        (WebCore::setUpIteratorWithRules): Ditto.

2010-03-22  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Sam Weinig.

        Typo in GPL license text
        https://bugs.webkit.org/show_bug.cgi?id=36442

        Fix typo - "aint with this library" -> "along with this library".

        * bindings/scripts/CodeGenerator.pm:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorObjC.pm:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/scripts/IDLParser.pm:
        * bindings/scripts/IDLStructure.pm:
        * bindings/scripts/generate-bindings.pl:

2010-03-22  Jakub Wieczorek  <jwieczorek@webkit.org>

        Reviewed by Simon Hausmann.

        [Qt] Don't construct a QLineEdit every time when painting a text field
        https://bugs.webkit.org/show_bug.cgi?id=36373

        Instead, keep one instance per RenderTheme around.

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::findFrameLineWidth):

2010-03-22  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Multiselect Popup - adjusting QtAbstractWebPopup
        https://bugs.webkit.org/show_bug.cgi?id=36186

        QtAbstractWebPopup must provide new methods to be used by its descendants that
        wish to handle <select multiple> elements.

        * platform/qt/QtAbstractWebPopup.cpp:
        (WebCore::QtAbstractWebPopup::selectItem):
        (WebCore::QtAbstractWebPopup::multiple):
        * platform/qt/QtAbstractWebPopup.h:

2010-03-22  Alex Milowski  <alex@milowski.com>

        Reviewed by Kenneth Rohde Christiansen.

        Added basic support for mfrac (fractions)

        Test: mathml/presentation/fractions.xhtml

        * WebCore.xcodeproj/project.pbxproj:
        * mathml/MathMLInlineContainerElement.cpp:
        (WebCore::MathMLInlineContainerElement::createRenderer):
        * mathml/RenderMathMLFraction.cpp: Added.
        (WebCore::RenderMathMLFraction::RenderMathMLFraction):
        (WebCore::RenderMathMLFraction::updateFromElement):
        (WebCore::RenderMathMLFraction::addChild):
        * mathml/RenderMathMLFraction.h: Added.

2010-03-22  Kevin Decker  <kdecker@apple.com>

        Reviewed by John Sullivan.

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

        * page/mac/WebCoreViewFactory.h: Added -missingPluginText method 
        * platform/LocalizedStrings.h: Added missingPluginText()
        * platform/gtk/LocalizedStringsGtk.cpp: Likewise.
        * platform/mac/LocalizedStringsMac.mm: Same here.
        * platform/qt/Localizations.cpp: Ditto.

2010-03-22  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Handle worker exceptions in V8MessageHandler like it's done in regular documents. This way all worker exceptions will be logged in the console not only those which happen in event listeners. 

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

        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::invokeEventHandler): Removed explicit call to reportException.
        * bindings/v8/V8Utilities.cpp: reportException function was removed since it's not used.
        (WebCore::getScriptExecutionContext):
        * bindings/v8/V8Utilities.h:
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::v8MessageHandler):
        (WebCore::WorkerContextExecutionProxy::initContextIfNeeded): Setup message handler when first worker context is created.

2010-03-22  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Simon Hausmann.

        Add EFL-specific code to page/EventHandler.cpp.
        http://webkit.org/b/36306

        * page/EventHandler.cpp:

2010-03-22  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Simon Hausmann.

        Add EFL-specific code to platform/DragImage.h and
        platform/DragData.h.
        http://webkit.org/b/36310

        * platform/DragImage.h:
        * platform/DragData.h:

2010-03-22  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Simon Hausmann.

        Add EFL-specific code to platform/FileSystem.h.
        http://webkit.org/b/36313

        * platform/FileSystem.h:

2010-03-22  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Simon Hausmann.

        Add EFL-specific code to platform/Cursor.h.
        http://webkit.org/b/36319

        * platform/Cursor.h:

2010-03-22  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Simon Hausmann.

        Add EFL-specific code to platform/NotImplemented.h.
        http://webkit.org/b/36320

        * platform/NotImplemented.h:

2010-03-21  Kim Grönholm  <kim.gronholm@nomovok.com>

        Reviewed by Simon Hausmann.

        [Qt] GraphicsLayer: matrix interpolations in transform-animations don't behave correctly
        https://bugs.webkit.org/show_bug.cgi?id=35520
        
        The case where the list of source and target transform operations are 
        not the same but have the same size needs to be special-cased in
        GraphicsLayerQt, as well as the case where the source or target
        operation list is empty. The URLs listed here render correctly after
        applying the patch.

        Tests: https://bug-35520-attachments.webkit.org/attachment.cgi?id=49890
               https://bug-35520-attachments.webkit.org/attachment.cgi?id=49889
            

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::TransformAnimationQt::applyFrame):

2010-03-21  Dmitry Gorbik  <socket.h@gmail.com>

        <http://webkit.org/b/14858> <col> width ignored when not tied to a single cell

        Reviewed by David Kilzer.

        Fixed width calculation for cells with span when <col> is defined.

        Test: fast/table/col-width-span-expand.html

        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::styleOrColWidth): Added the calculation of cell width
        in case of <col> defined and span > 1.

2010-03-20  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Kenneth Christiansen.
        Patch by Antonio Gomes <tonikitoo@webkit.org>

        Spatial Navigation: Code simplification in FocusController.cpp and SpatialNavigation.cpp (part I)
        https://bugs.webkit.org/show_bug.cgi?id=36168

        Make use of isNull and document methods introduced in FocusCandidate class by patch in bug 36167.
        No functionalty change.

        * page/FocusController.cpp:
        (WebCore::updateFocusCandidateIfCloser):
        * page/SpatialNavigation.cpp:
        (WebCore::distanceInDirection):

2010-03-20  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fixes after recent changes.

        * platform/graphics/wx/ImageWx.cpp:
        * wscript:

2010-03-20  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by David Kilzer.

        Assertion failure in media/video-controls-with-mutation-event-handler.html
        https://bugs.webkit.org/show_bug.cgi?id=36376

        Test: media/video-controls-with-mutation-event-handler.html

        Break early (when not attached) in the defaultEventHandler before the
        slider is completely set up.

        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlTimelineElement::defaultEventHandler):
        (WebCore::MediaControlVolumeSliderElement::defaultEventHandler):
        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::createVolumeSlider):

2010-03-19  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Dan Bernstein.

        WebCore::RenderButton::styleDidChange ReadAV@NULL (6739b7fe455ecb54a6812c0866c3b47c)
        https://bugs.webkit.org/show_bug.cgi?id=34641

        Don't dig into buttons and menu lists when finding which element
        should be modified by :first-letter pseudo class.  Even before
        this change, we didn't dig into inline buttons and menu lists as
        they are replaced so this issue wasn't found long time.

        Test: fast/css/first-letter-block-form-controls-crash.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::updateFirstLetter):

2010-03-19  Adam Barth  <abarth@webkit.org>

        Reviewed by Daniel Bates.

        Change XSSAuditor block syntax
        https://bugs.webkit.org/show_bug.cgi?id=34436

        Update our blocking syntax to something more reasonable.  Also,
        implemented a way for a web site to disable the filter.

        Tests: http/tests/security/xssAuditor/no-protection-script-tag.html
               http/tests/security/xssAuditor/xss-protection-parsing-01.html

        * page/XSSAuditor.cpp:
        (WebCore::XSSAuditor::xssProtection):
        (WebCore::XSSAuditor::findInRequest):
        * page/XSSAuditor.h:
        * platform/network/HTTPParsers.cpp:
        (WebCore::skipToken):
        (WebCore::parseXSSProtectionHeader):
        * platform/network/HTTPParsers.h:
        (WebCore::):

2010-03-19  Eric Uhrhane  <ericu@chromium.org>

        Reviewed by Dmitry Titov.

        Refactor DatabaseTracker.cpp for thread safety
        https://bugs.webkit.org/show_bug.cgi?id=34991

        This enables calling into DatabaseTracker from multiple context threads,
        as will happen once Workers can access the Database.  It required a fair
        amount of reshuffling of locks.  I ended up splitting the public
        interface [calls that take locks and call private functions] from the
        implementations [calls that assert that locks are already held] in order
        to avoid lock conflicts.  I also had to make sure we weren't sharing
        Strings or SecurityOrigins across threads.

        No new tests.

        Allow access to database handles from multiple threads IFF SQLite is new enough and the user requests it.

        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::SQLiteDatabase):
        (WebCore::SQLiteDatabase::disableThreadingChecks):
        * platform/sql/SQLiteDatabase.h:
        (WebCore::SQLiteDatabase::sqlite3Handle):
        (WebCore::SQLiteDatabase::disableThreadingChecks):

        Remove an asynchronous call from Database::close back to the execution thread, so that cleanup can be more deterministic.

        * storage/Database.cpp:
        (WebCore::Database::markAsDeletedAndClose):
        (WebCore::Database::close):
        * storage/Database.h:
        (WebCore::Database::):
        * storage/DatabaseDetails.h:
        (WebCore::DatabaseDetails::DatabaseDetails):
        (WebCore::DatabaseDetails::thread):
        * storage/DatabaseTask.cpp:
        (WebCore::DatabaseCloseTask::doPerformTask):
        * storage/DatabaseThread.cpp:
        (WebCore::DatabaseThread::databaseThread):

        Any Strings that get stored in DatabaseTracker, and any Strings returned from DatabaseTracker, are now threadsafeCopies.
        Public functions now take all needed locks, then generally call only private functions [there are a few exceptions: deletion functions and origins()].
        Private functions no longer take locks.
        m_quotaMapGuard becomes m_databaseGuard, and now protects m_database, m_quotaMap, m_proposedDatabases, m_databaseDirectoryPath, m_originsBeingDeleted, m_beingCreated, and m_beingDeleted.
        m_proposedDatabases replaces m_proposedDatabase, to account for reentrancy.

        * storage/DatabaseTracker.h:
        * storage/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::originQuotaManagerNoLock):
        (WebCore::DatabaseTracker::originQuotaManager):
        (WebCore::DatabaseTracker::DatabaseTracker):
        (WebCore::DatabaseTracker::setDatabaseDirectoryPath):
        (WebCore::DatabaseTracker::databaseDirectoryPath):
        (WebCore::DatabaseTracker::trackerDatabasePath):
        (WebCore::DatabaseTracker::openTrackerDatabase):
        (WebCore::DatabaseTracker::canEstablishDatabase):
        (WebCore::DatabaseTracker::hasEntryForOriginNoLock):
        (WebCore::DatabaseTracker::hasEntryForOrigin):
        (WebCore::DatabaseTracker::hasEntryForDatabase):
        (WebCore::DatabaseTracker::originPath):
        (WebCore::DatabaseTracker::fullPathForDatabaseNoLock):
        (WebCore::DatabaseTracker::fullPathForDatabase):
        (WebCore::DatabaseTracker::populateOrigins):
        (WebCore::DatabaseTracker::origins):
        (WebCore::DatabaseTracker::databaseNamesForOriginNoLock):
        (WebCore::DatabaseTracker::databaseNamesForOrigin):
        (WebCore::DatabaseTracker::detailsForNameAndOrigin):
        (WebCore::DatabaseTracker::setDatabaseDetails):
        (WebCore::DatabaseTracker::usageForDatabase):
        (WebCore::DatabaseTracker::addOpenDatabase):
        (WebCore::DatabaseTracker::removeOpenDatabase):
        (WebCore::DatabaseTracker::usageForOriginNoLock):
        (WebCore::DatabaseTracker::usageForOrigin):
        (WebCore::DatabaseTracker::quotaForOriginNoLock):
        (WebCore::DatabaseTracker::quotaForOrigin):
        (WebCore::DatabaseTracker::setQuota):
        (WebCore::DatabaseTracker::addDatabase):
        (WebCore::DatabaseTracker::deleteAllDatabases):
        (WebCore::DatabaseTracker::deleteOrigin):
        (WebCore::DatabaseTracker::deleteDatabase):
        (WebCore::DatabaseTracker::deleteDatabaseFile):
        (WebCore::DatabaseTracker::setClient):
        (WebCore::DatabaseTracker::scheduleNotifyDatabaseChanged):
        (WebCore::DatabaseTracker::notifyDatabasesChanged):

        These functions keep track of in-progress deletions and creations, so that we can make sure nobody every deletes a database file while a live database is using it.
        (WebCore::DatabaseTracker::canCreateDatabase):
        (WebCore::DatabaseTracker::recordCreatingDatabase):
        (WebCore::DatabaseTracker::doneCreatingDatabase):
        (WebCore::DatabaseTracker::creatingDatabase):
        (WebCore::DatabaseTracker::canDeleteDatabase):
        (WebCore::DatabaseTracker::recordDeletingDatabase):
        (WebCore::DatabaseTracker::doneDeletingDatabase):
        (WebCore::DatabaseTracker::deletingDatabase):
        (WebCore::DatabaseTracker::canDeleteOrigin):
        (WebCore::DatabaseTracker::deletingOrigin):
        (WebCore::DatabaseTracker::recordDeletingOrigin):
        (WebCore::DatabaseTracker::doneDeletingOrigin):

        Any SecurityOrigins stored in OriginQuotaManager are now threadsafeCopies of inputs.  There's a new tryLock() function in addition to the existing lock().

        * storage/OriginQuotaManager.cpp:
        (WebCore::OriginQuotaManager::tryLock):
        (WebCore::OriginQuotaManager::trackOrigin):
        * storage/OriginQuotaManager.h:

        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::databaseIdentifier):
        Removed DEFINE_STATIC_LOCAL wrapper on a local variable; it appears to have been a small optimization, but it's not thread-safe.

2010-03-19  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Antti Koivisto.

        Multiselect popups - rendering
        https://bugs.webkit.org/show_bug.cgi?id=36006

        The objective of this patch is to create a compile time flag that can be used
        to force all <select> elements to be rendered as menu lists.

        Theme stylesheet mechanism has been used to change the appearance of the elements.

        Class QtStyleOptionWebComboBox has been introduced to provide to QStyle objects
        the needed information to render <select multiple> comboboxes.

        * WebCore.pri:
        * WebCore.pro:
        * css/themeQtNoListboxes.css: Added.
        (select[size][multiple]):
        * dom/SelectElement.h:
        (WebCore::SelectElementData::usesMenuList):
        * platform/qt/QtStyleOptionWebComboBox.h: Added.
        (WebCore::QtStyleOptionWebComboBox::QtStyleOptionWebComboBox):
        (WebCore::QtStyleOptionWebComboBox::multiple):
        (WebCore::QtStyleOptionWebComboBox::checkMultiple):
        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::extraDefaultStyleSheet):
        (WebCore::RenderThemeQt::paintMenuList):
        (WebCore::RenderThemeQt::paintMenuListButton):
        * platform/qt/RenderThemeQt.h:

2010-03-19  Zhenyao Mo  <zmo@google.com>

        Reviewed by Oliver Hunt.

        Update WebGLArray.slice() to new spec
        https://bugs.webkit.org/show_bug.cgi?id-35612

        * bindings/js/JSWebGLArrayCustom.cpp: Adding support for default inputs.
        (WebCore::JSWebGLArray::slice):
        * bindings/v8/custom/V8WebGLArrayCustom.cpp: Ditto.
        (WebCore::V8WebGLArray::sliceCallback):
        * html/canvas/WebGLArray.cpp: Map start/end to offset/length.
        (WebCore::WebGLArray::calculateOffsetAndLength):
        * html/canvas/WebGLArray.h: Modified slice parameters.
        * html/canvas/WebGLArray.idl: Define custom binding for slice().
        * html/canvas/WebGLByteArray.cpp: Modified slice parameters.
        (WebCore::WebGLByteArray::slice):
        * html/canvas/WebGLByteArray.h: Ditto.
        * html/canvas/WebGLFloatArray.cpp: Ditto.
        (WebCore::WebGLFloatArray::slice):
        * html/canvas/WebGLFloatArray.h: Ditto.
        * html/canvas/WebGLIntArray.cpp: Ditto.
        (WebCore::WebGLIntArray::slice):
        * html/canvas/WebGLIntArray.h: Ditto.
        * html/canvas/WebGLShortArray.cpp: Ditto.
        (WebCore::WebGLShortArray::slice):
        * html/canvas/WebGLShortArray.h: Ditto.
        * html/canvas/WebGLUnsignedByteArray.cpp: Ditto.
        (WebCore::WebGLUnsignedByteArray::slice):
        * html/canvas/WebGLUnsignedByteArray.h: Ditto.
        * html/canvas/WebGLUnsignedIntArray.cpp: Ditto.
        (WebCore::WebGLUnsignedIntArray::slice):
        * html/canvas/WebGLUnsignedIntArray.h: Ditto.
        * html/canvas/WebGLUnsignedShortArray.cpp: Ditto.
        (WebCore::WebGLUnsignedShortArray::slice):
        * html/canvas/WebGLUnsignedShortArray.h: Ditto.

2010-03-19  Yong Li <yong.li@torchmobile.com> and Andy Estes <aestes@apple.com>

        Reviewed by Darin Adler.

        Ensure the segments inside SharedBuffer are merged before constructing
        a CFData with it.

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

        * manual-tests/WebKitSite.webarchive: Added.
        * manual-tests/webarchive-test.html: Added.
        * platform/cf/SharedBufferCF.cpp:
        (WebCore::SharedBuffer::createCFData):

2010-03-19  Justin Schuh  <jschuh@chromium.org>

        Reviewed by Oliver Hunt.

        Security: ReadAV@NULL for negative feMorphology filter radius
        https://bugs.webkit.org/show_bug.cgi?id=34566

        Prevents building the filter if either radius is negative.
        Catches negative radii resulting from conversions.

        Test: svg/filters/feMorphology-invalid-radius.svg

        * svg/SVGFEMorphologyElement.cpp:
        (WebCore::SVGFEMorphologyElement::build):
        * svg/graphics/filters/SVGFEMorphology.cpp:
        (WebCore::FEMorphology::apply):

2010-03-19  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Fixed a crash with AnimationController getting deleted out from under itself.
        
        It's possible for the Frame that owns an AnimationController to get deleted
        in the EndTransitionEvent (or other animation events) to get deleted in the
        event handler. Normally this case is protected against by preventing the Frame
        from getting deleted until the end of the runloop. But native uses of the 
        WebView can subvert this protection. So I added a protector to the 
        animation event dispatcher to protect it in those cases.

        Test: transitions/transition-end-event-destroy-iframe.html

        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::updateStyleIfNeededDispatcherFired):

2010-03-19  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Antti Koivisto.

        Multiselect Popup - PopupMenuClient extension
        https://bugs.webkit.org/show_bug.cgi?id=36178

        PopupMenuClient class is the interface used by combobox popup implementations.
        It needs to be extended to handle <select multiple> needs.

        A new interface named ListPopupMenuClient that inherits from PopupMenuClient was created.
        The use of this new class instead of adding methods to PopupMenuClient avoids changes
        in other non related implementations of PopupMenuClient.

        RenderMenuList has changed to inherit ListPopupMenuClient instead of PopupMenuClient
        and to have the new methods implemented.

        * platform/PopupMenuClient.h:
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::listBoxSelectItem):
        (WebCore::RenderMenuList::multiple):
        * rendering/RenderMenuList.h:

2010-03-19  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=36387
        REGRESSION: Can "uncheck" radio buttons by clicking on them
        
        My change in r56174 caused radio buttons and checkboxes to go down the same code path by virtue
        of allowsIndeterminate(), but this broke save/restore behavior on radio buttons.
        
        Fix by saving and restoring both the intermediate and checked state for radio buttons
        and checkboxes, as well as the "current radio button" state.

        Test: fast/forms/radio-checkbox-restore-indeterminate.html

        * html/HTMLInputElement.cpp:
        (WebCore::EventHandlingState::EventHandlingState): New struct to hold state between preDispatchEventHandler()
        and postDispatchEventHandler().
        (WebCore::HTMLInputElement::preDispatchEventHandler): Store intermedate and checked state
        and the current radio button.
        (WebCore::HTMLInputElement::postDispatchEventHandler): Restore state as appropriate.
        * html/HTMLInputElement.h: Add a comment to clarify how 'intermediate' interacts with 'checked', according
        to the spec.

2010-03-19  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: caret moves past prompt in javascript console
        https://bugs.webkit.org/show_bug.cgi?id=26602

        Having noticed any Element children besides a leading <br> (which are empty
        text nodes), WebCore editing facility thinks it should delete the <br>,
        thus clearing away the text prompt contents.

        * inspector/front-end/TextPrompt.js:
        (WebInspector.TextPrompt.prototype.clearAutoComplete):
        (WebInspector.TextPrompt.prototype._completionsReady):
        * inspector/front-end/utilities.js:
        (Element.prototype.pruneEmptyTextNodes):

2010-03-19  Adam Roben  <aroben@apple.com>

        Windows clean build fix after r56192

        * WebCore.vcproj/WebCore.vcproj: Copy headers from
        platform/graphics/cg to $WebKitOutputDir as part of the post-build
        event so that WebKit can use them. (The only one we currently require
        is FontPlatformData.h.)

        * platform/graphics/win/FontPlatformDataCGWin.cpp: Touched to force a
        build.

2010-03-19  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by David Kilzer.

        Assertion failure in media/video-controls-with-mutation-event-handler.html
        https://bugs.webkit.org/show_bug.cgi?id=36376

        Fix crashing test. Underlying the media element's volume slider is a
        range input, which sanitizes values before expected on the media control.

        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::createVolumeSlider):

2010-03-19  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        3 of the new HTML5 loading events need to be asynchronous.

        Laying the groundwork for:
        https://bugs.webkit.org/show_bug.cgi?id=36201
        https://bugs.webkit.org/show_bug.cgi?id=36202
        https://bugs.webkit.org/show_bug.cgi?id=36334
        https://bugs.webkit.org/show_bug.cgi?id=36335

        Document already had an asynchronous event delivery mechanism for storage events, so
        we can repurpose that for all async events.

        No new tests. (No change in behavior)

        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::implicitClose): Use Document::schedule* for the related events.
        (WebCore::Document::enqueueEvent): Renamed from enqueueStorageEvent
        (WebCore::Document::pendingEventTimerFired): Renamed from "storageEventTimerFired"
        (WebCore::Document::statePopped): Use Document::schedulePopstateEvent
        (WebCore::Document::enqueuePageshowEvent): All Pageshow events are piped through here.
          This will be made asynchronous in a separate patch.
        (WebCore::Document::enqueueHashchangeEvent): All Hashchange events are piped through here.
          This will be made asynchronous in a separate patch.
        (WebCore::Document::enqueuePopstateEvent): All Popstate events are piped through here.
          This will be made asynchronous in a separate patch.
        * dom/Document.h:
        (WebCore::):

        * history/CachedFrame.cpp:
        (WebCore::CachedFrameBase::restore): Use Document::enqueuePageshowEvent

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadInSameDocument): Use Document::enqueueHashchangeEvent

        * storage/StorageEventDispatcher.cpp:
        (WebCore::StorageEventDispatcher::dispatch): Use Document::enqueueEvent

2010-03-19  Kevin Decker  <kdecker@apple.com>

        Reviewed by Darin Adler and Brady Eidson.

        First step toward:
        https://bugs.webkit.org/show_bug.cgi?id=36328

        This is the first step torward eliminating the WebKit WebNullPluginView class. The responsibility for this will soon
        be in platform-independent code in WebCore. The plan is to change RenderEmbeddedObject and give it the capability of
        drawing the missing plug-in text. 

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::requestObject): Renamed the renderer parameter to requestEmbeddedObject and made it
        a RenderEmbeddedObject.
        (WebCore::FrameLoader::loadPlugin): Likewise.
        * loader/FrameLoader.h: Updated loadPlugin() and requestObject() method signatures accordingly. 

2010-03-19  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Disable TILED_BACKING_STORE if Qt version is earlier than Qt4.6
        https://bugs.webkit.org/show_bug.cgi?id=36348

        Backing store implementation for QtWebKit requires at least Qt
        version 4.6.

        No new tests as there is no new functionality.

        * WebCore.pri:

2010-03-19  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by David Kilzer.

        <input type=range> does not validate correctly without a renderer and the tests are incorrect
        https://bugs.webkit.org/show_bug.cgi?id=36259

        Setting value attribute on an <input type=range> to an out-of-range value fires oninput
        https://bugs.webkit.org/show_bug.cgi?id=16990

        Part 2 of 2: When setting the range element's value, overflows and underflows
        are automatically sanitized to valid values. Moved the general case
        sanitization code out of the Renderer into HTMLInputElement::sanitizeValue.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::value): when getting a default value on reset() ensure the defaultValue is provided
        (WebCore::HTMLInputElement::sanitizeValue): clamp the value within the max/min/step range constraints
        * html/StepRange.cpp:
        (WebCore::StepRange::StepRange): allow const element in the constructor
        (WebCore::StepRange::clampValue): clamp from a String value
        * html/StepRange.h:
        (WebCore::StepRange::defaultValue): easy calculation of the default value for max/min/step range constraints
        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::updateFromElement): no longer handle the general case sanitization in the renderer

2010-03-19  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by David Kilzer.

        <input type=range> does not validate correctly without a renderer and the tests are incorrect
        https://bugs.webkit.org/show_bug.cgi?id=36259

        Part 1 of 2: Refactoring the SliderRange struct out of RenderSlider
        into a more appropriate place. Changed the named to StepRange. Changed
        from a struct to a class.

          Added new files to the build.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:

          Renamed and moved class SliderRange to StepRange.

        * html/StepRange.cpp: Added.
        (WebCore::StepRange::StepRange):
        (WebCore::StepRange::clampValue):
        (WebCore::StepRange::valueFromElement):
        (WebCore::sliderPosition):
        * html/StepRange.h: Added.
        (WebCore::StepRange::proportionFromValue):
        (WebCore::StepRange::valueFromProportion):
        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::updateFromElement): updated to use StepRange
        (WebCore::RenderSlider::setValueForPosition): updated to use StepRange

2010-03-19  Antti Koivisto  <koivisto@iki.fi>

        Reviewed by Simon Hausmann.

        https://bugs.webkit.org/show_bug.cgi?id=36366
        Repaint loop when painting using scaled CTMs with different translations

        The code in RenderBoxModelScaleObserver::shouldPaintBackgroundAtLowQuality
        tests if the scaling has changed from the previous value by comparing the
        transformations. The test fails if the scale is the same but the translation 
        changes. This can lead to infinite repaint loop if the document is painted 
        in pieces using different translations (for example for tiling).

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelScaleObserver::shouldPaintBackgroundAtLowQuality):

2010-03-19  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: editing shorthands does not always work.

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

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::applyStyleText):
        (WebCore::InspectorDOMAgent::populateObjectWithStyleProperties):
        (WebCore::InspectorDOMAgent::shorthandValue):
        * inspector/InspectorDOMAgent.h:
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertyTreeElement.prototype):
        * inspector/front-end/inspector.css:
        (.section .properties li.disabled .enabled-button):
        * inspector/front-end/inspector.js:
        (WebInspector.startEditing.editingCommitted):

2010-03-19  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Don't replace clip when drawing complex text

        * platform/graphics/qt/FontQt.cpp:

2010-03-18  Darin Fisher  <darin@chromium.org>

        Reviewed by Adam Barth.

        If a frame is already in the document, then setting its "src" attribute
        should add the resultant navigation to history.

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

        This behavior is specified in section 4.8.2 of the HTML5 spec.

        Test: fast/loader/frame-src-change-added-to-history.html

        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::openURL):
        (WebCore::HTMLFrameElementBase::setLocation):
        * html/HTMLFrameElementBase.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::requestFrame):
        * loader/FrameLoader.h:

2010-03-18  Chris Evans  <cevans@chromium.org>

        Reviewed by Nikolas Zimmermann.

        Fix a minor crash with mismatched array sizes in SVG animation
        elements.

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

        Test: svg/animations/keypoints-mismatch.svg

        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::startedActiveInterval):
        Globally apply validations relevant to all animation types.

2010-03-18  Vangelis Kokkevis  <vangelis@chromium.org>

        Reviewed by Adam Barth.

        Implement software composited graphics layers in Chromium using the Skia library.
        https://bugs.webkit.org/show_bug.cgi?id=35557
        This is an initial step in the implementation. Layer compositing is functioning
        but not optimized in any way. Subsesquent check-ins will be necessary to fine tune
        it.

        Test: No new exposed functionality so no new tests.

        * WebCore.gypi:
          Added new source files to the chromium build
        * platform/graphics/GraphicsLayer.h:
          Added necessary typedef's and forward declarations for Chromium.
        * platform/graphics/skia/GraphicsLayerSkia.cpp: Added.
        * platform/graphics/skia/GraphicsLayerSkia.h: Added.
          Declaration and implementation of the platform-specific GraphicsLayer class.
        * platform/graphics/skia/LayerRendererSkia.cpp: Added.
        * platform/graphics/skia/LayerRendererSkia.h: Added.
          Declaration and implementation of the Skia-based software compositor.
        * platform/graphics/skia/LayerSkia.cpp: Added.
        * platform/graphics/skia/LayerSkia.h: Added.
          Declaration and implementation of a compositable layer that uses a Skia canvas
          for backing store.

2010-03-18  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Darin Adler.

        Make setPrinting() with printing=false, restore the previous
        media type in use.

        Test: fast/media/print-restores-previous-mediatype.html

        * page/Frame.cpp:
        (WebCore::Frame::setPrinting):
        * page/FrameView.cpp:
        (WebCore::FrameView::adjustMediaTypeForPrinting):
        * page/FrameView.h:

2010-03-18  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/36338> Remove unused RenderReplaced::adjustOverflowForBoxShadowAndReflect() declaration

        Rubber-stamped by Darin Adler.

        This declaration should have been removed in r47440.

        * rendering/RenderReplaced.h:
        (WebCore::RenderReplaced::adjustOverflowForBoxShadowAndReflect): Removed.

2010-03-18  Jian Li  <jianli@chromium.org>

        Reviewed by Dmitry Titov.

        Dragging a PDF image triggers assertion in DragController::startDrag()
        https://bugs.webkit.org/show_bug.cgi?id=36247

        Test: fast/images/drag-pdf-as-image.html

        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::PDFDocumentImage::filenameExtension):
        * platform/graphics/cg/PDFDocumentImage.h:

2010-03-18  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Avoid taking a reference to a String owned by a temporary AtomicString.

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::RareData::parseNth):

2010-03-18  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Fixed parenting issues with HW layers on Windows
        https://bugs.webkit.org/show_bug.cgi?id=32449
        
        CACF can't properly fix superlayer changes, so a layer added
        as a sublayer must have a null superlayer. I changed a couple of
        places that change sublayers to removeFromSuperlayer while adding
        to a new layer. This fixes both the problem of disappearing children
        and children getting doubled. Also got rid of removeSublayer(). Layers
        should always be removed from their parent with removeFromSuperlayer().
        
        This also removed moveLayer(), which is not used and may not be safe in how
        it copies.

        * platform/graphics/win/GraphicsLayerCACF.cpp:Changed setName to be like Mac, to give more debugging info (to fix problems like these)
        (WebCore::GraphicsLayerCACF::setName):
        * platform/graphics/win/WKCACFLayer.cpp:Make sure superlayer is null before adding
        (WebCore::WKCACFLayer::insertSublayer):
        (WebCore::WKCACFLayer::replaceSublayer):
        (WebCore::WKCACFLayer::removeFromSuperlayer):
        (WebCore::WKCACFLayer::setSublayers):
        (WebCore::WKCACFLayer::printLayer):print the superlayer for better debugging
        * platform/graphics/win/WKCACFLayer.h:

2010-03-18  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, build fix.

        [Chromium] Change the order of mac/ and cg/ include dirs to fix compile break
        due to http://trac.webkit.org/changeset/56192,

        * WebCore.gyp/WebCore.gyp: Changed the order.

2010-03-18  David Hyatt  <hyatt@apple.com>

        Reviewed by Oliver Hunt.

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

        Add support for stopImmediatePropagation from DOM Level 3 Events.

        Added fast/events/stop-immediate-propagation.html.

        * dom/Event.cpp:
        (WebCore::Event::Event):
        * dom/Event.h:
        (WebCore::Event::timeStamp):
        (WebCore::Event::stopPropagation):
        (WebCore::Event::stopImmediatePropagation):
        (WebCore::Event::propagationStopped):
        (WebCore::Event::immediatePropagationStopped):
        * dom/Event.idl:
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::fireEventListeners):

2010-03-18  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, build fix.

        Return frame accessor back to Geolocation, it's used in GeolocationServiceChromium.
        The accessor was removed in http://trac.webkit.org/changeset/56188.

        * page/Geolocation.h:
        (WebCore::Geolocation::frame): Added back.

2010-03-18  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Adam Roben.

        Help reduce build problems due to font declarations.
        https://bugs.webkit.org/show_bug.cgi?id=36190

        Functions unchanged, no new tests.

        * WebCore.vcproj/WebCore.vcproj: Add new file, and show
          movement of FontPlatformData.h to cg/ directory.
        * platform/graphics/cairo/FontPlatformData.h: Merge in
          WinCairo-specific declarations.  Correct constructor
          declaration to use type float for font size.
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::hfont):
        (WebCore::FontPlatformData::useGDI):
        (WebCore::FontPlatformData::fontFace):
        (WebCore::FontPlatformData::setSize):
        (WebCore::FontPlatformData::hash):
        (WebCore::FontPlatformData::isHashTableDeletedValue):
        * platform/graphics/cairo/FontPlatformDataCairo.cpp:
        (WebCore::FontPlatformData::FontPlatformData): Correct
          constructor to accept type float for font size.
        * platform/graphics/cg/FontPlatformData.h: Copied from WebCore/platform/graphics/win/FontPlatformData.h.
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::hfont):
        (WebCore::FontPlatformData::cgFont):
        (WebCore::FontPlatformData::operator==):
        * platform/graphics/win/FontPlatformData.h: Removed.
        * platform/graphics/win/FontPlatformDataCairoWin.cpp:
        (WebCore::FontPlatformData::operator==): Move implementation
          here (previously in header) to match other cairo-based ports.
        * platform/graphics/win/RefCountedHFONT.h: Added.  This
          was extracted from win/FontPlatformData.h, and is now shared
          by the cg/FontPlatformData.h and cairo/FontPlatformData.h
        (WebCore::RefCountedHFONT::create):
        (WebCore::RefCountedHFONT::createDeleted):
        (WebCore::RefCountedHFONT::~RefCountedHFONT):
        (WebCore::RefCountedHFONT::hfont):
        (WebCore::RefCountedHFONT::hash):
        (WebCore::RefCountedHFONT::RefCountedHFONT):

2010-03-18  Simon Fraser  <simon.fraser@apple.com>

        No review.

        Fix brace style after r56170.
        
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector):

2010-03-18  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt.

        https://bugs.webkit.org/show_bug.cgi?id=36274
        CSS3 :nth-child selector 'odd' keyword case sensitivity test fails
        
        The tests for "odd", "even" etc. for nth-child selectors should be case insensitive.

        Test: fast/css/nth-child-odd-case-insensitive.html

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::RareData::parseNth):

2010-03-18  David Hyatt  <hyatt@apple.com>

        Reviewed by Oliver Hunt.

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

        Add support for event.defaultPrevented from DOM level 3.
    
        Added fast/events/defaultprevented.html

        * dom/Event.idl:

2010-03-18  Darin Adler  <darin@apple.com>

        Reviewed by Kenneth Rohde Christiansen.

        Remove Geolocation.lastPosition, no longer in the spec.
        https://bugs.webkit.org/show_bug.cgi?id=36255
        rdar://problem/7746357

        * WebCore.base.exp: Updated since Geolocation's destructor is now non-virtual.

        * page/Geolocation.cpp:
        (WebCore::Geolocation::lastPosition): Add an assertion; it's only legal to
        call this if access to the location is allowed.

        * page/Geolocation.h: Removed unneeded includes. Made destructor non-virtual,
        although it will still be virtual if any of the base classes have a virtual
        destructor. Made lastPosition, isAllowed, and isDenied functions private.
        Removed unused suspend, resume, setShouldClearCache, shouldClearCache,
        and frame functions.

        * page/Geolocation.idl: Removed lastPosition read-only attribute. No longer in
        the Geolocation specification.

2010-03-18  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser.

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

        Make sure :not does not allow pseudo-elements inside it. (Hooray for another pointless
        restriction on :not.)

        Added fast/css/invalid-not-with-pseudo-element.html

        * css/CSSGrammar.y:
        * css/CSSSelector.h:
        (WebCore::CSSSelector::matchesPseudoElement):

2010-03-18  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/7761400> Rework the fix for
        https://bugs.webkit.org/show_bug.cgi?id=18722

        Test: fast/dynamic/float-remove-above-line-2.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::removeFloatingObject): Treat 0- and less-than-0-height floats
        as having a height of 1 so that they intersect with the line they originate on.
        (WebCore::RenderBlock::clearFloats): Use numeric_limits.
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::layoutInlineChildren): Removed the intersection checks here,
        so that a float is always included in the float list of the line it originates on, even
        if it does not intersect that line. This ensures that every float is accounted for, which
        is necessary during incremental layout when adding floats from clean lines.

2010-03-18  Antti Koivisto  <koivisto@iki.fi>

        Reviewed by Kenneth Rohde Christiansen.

        https://bugs.webkit.org/show_bug.cgi?id=36102
        [Qt] Scaling control API for tiled backing store
        
        Commit the new scale synchronously after unfreeze to avoid ugliness.

        * platform/graphics/TiledBackingStore.cpp:
        (WebCore::TiledBackingStore::TiledBackingStore):
        (WebCore::TiledBackingStore::setContentsScale):
        (WebCore::TiledBackingStore::commitScaleChange):
        (WebCore::TiledBackingStore::setContentsFrozen):
        * platform/graphics/TiledBackingStore.h:

2010-03-18  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser.

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

        Make sure an exception is raised if an @import rule is inserted in the wrong place.
        
        Also make sure (so that this particular test case passes) that rgba(0, 0, 0, 0) is dumped
        as transparent by getComputedStyle, since it most commonly occurs in background-color and
        that default makes more sense than dumping rgba values.

        Added fast/css/invalid-import-insertion.html

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::createColor):
        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::insertRule):

2010-03-18  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        Multiselect Popup - Listbox click simulation
        https://bugs.webkit.org/show_bug.cgi?id=36177

        Listbox popups will need to notify the corresponding select elements that a
        selection change happened. The current HTMLSelectElement interface does not
        allow multiple selections.

        The new method  listBoxSelectItem will be used for that. I have refactored part
        of the mouse handling code in bug 36124 and I am now reusing it here for
        <select multiple> popups. All the other cases will handled as they were before to be
        sure that no side effects will show up.

        * dom/SelectElement.cpp:
        (WebCore::SelectElement::updateListBoxSelection):
        (WebCore::SelectElement::listBoxOnChange):
        * dom/SelectElement.h:
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::listBoxPopupClick):
        * html/HTMLSelectElement.h:

2010-03-12  Ojan Vafai  <ojan@chromium.org>

        Reviewed by David Levin.

        smartdelete should only occur after double-click
        https://bugs.webkit.org/show_bug.cgi?id=35314

        1. Consolidate all notions of selection-granularity into SelectionController.
        2. Now only mouse-based selections store a selection-granularity. This matches NSTextView.

        New tests were added in http://trac.webkit.org/changeset/55913.

        * WebCore.base.exp:
        * editing/MoveSelectionCommand.cpp:
        (WebCore::MoveSelectionCommand::MoveSelectionCommand):
        (WebCore::MoveSelectionCommand::doApply):
        * editing/MoveSelectionCommand.h:
        (WebCore::MoveSelectionCommand::create):
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::SelectionController):
        (WebCore::SelectionController::setSelection):
        (WebCore::SelectionController::modify):
        (WebCore::SelectionController::clear):
        * editing/SelectionController.h:
        (WebCore::SelectionController::setSelection):
        (WebCore::SelectionController::granularity):
        * editing/VisibleSelection.cpp:
        (WebCore::VisibleSelection::VisibleSelection):
        (WebCore::VisibleSelection::expandUsingGranularity):
        (WebCore::VisibleSelection::setStartAndEndFromBaseAndExtentRespectingGranularity):
        (WebCore::VisibleSelection::validate):
        * editing/VisibleSelection.h:
        (WebCore::operator==):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::clear):
        * page/DOMSelection.cpp:
        (WebCore::DOMSelection::extend):
        * page/DragController.cpp:
        (WebCore::DragController::concludeEditDrag):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::selectClosestWordFromMouseEvent):
        (WebCore::EventHandler::selectClosestWordOrLinkFromMouseEvent):
        (WebCore::EventHandler::handleMousePressEventTripleClick):
        (WebCore::EventHandler::handleMousePressEventSingleClick):
        (WebCore::EventHandler::updateSelectionForMouseDrag):
        * page/Frame.cpp:
        (WebCore::Frame::Frame):
        (WebCore::Frame::selectionGranularity):
        * page/Frame.h:
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::setSelectionRange):

2010-03-18  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, build fix.

        [V8] Turn npObjectTypeInfo into a function, make everyone happy.

        * bindings/v8/NPV8Object.cpp:
        (WebCore::npObjectTypeInfo): Added new function.
        (npCreateV8ScriptObject):
        * bindings/v8/NPV8Object.h: Turned npObjectTypeInfo into function.
        * bindings/v8/V8NPObject.cpp: Replaced references to function

2010-03-18  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=36283
        
        The wrong constants were being used for the code that attempted to compact the background-repeat shorthand to
        a single value.

        Added fast/backgrounds/background-repeat-computed-style.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::fillRepeatToCSSValue):

2010-03-18  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt.

        https://bugs.webkit.org/show_bug.cgi?id=36273
        CSS3 :indeterminate and input type=radio test fails

        The :indeterminate pseudo-class should apply to both radio buttons and checkboxes.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setIndeterminate): Use allowsIndeterminate() to determine if the input
        supports the indeterminate state.
        (WebCore::HTMLInputElement::preDispatchEventHandler): Use allowsIndeterminate() to determine whether
        to handle the indeterminate state.
        (WebCore::HTMLInputElement::postDispatchEventHandler): Ditto.
        * html/HTMLInputElement.h:
        (WebCore::HTMLInputElement::allowsIndeterminate): New utility method, returns true for radio buttons
        and checkboxes.

2010-03-18  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt.

        https://bugs.webkit.org/show_bug.cgi?id=36271
        CSS3 :enabled on an input type=hidden element fails
        
        The CSS3 selectors spec now makes it clear that hidden inputs should respect
        the :enabled and :disabled pseudo-classes.

        Test: fast/forms/hidden-input-enabled.html

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector): Remove checks for hidden inputs.

2010-03-18  Enrica Casucci  <enrica@apple.com>

        Reviewed by Simon Fraser.

        Intro text at Star Wars demo is clipped.
        <rdar://problem/7560979>
        https://bugs.webkit.org/show_bug.cgi?id=33909
        
        Test: compositing/repaint/layer-repaint.html
        
        We are flipping the coordinates for drawing, therefore
        we must flip them also when we invalidate the rectangles.

        * platform/graphics/win/GraphicsLayerCACF.cpp:
        (WebCore::WebLayer::setNeedsDisplay):

2010-03-18  Nate Chapin  <japhet@chromium.org>

        Unreviewed, Chromium build fix.

        Missed a #include in V8Collection.h.

        * bindings/v8/V8Collection.h:

2010-03-18  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=36284.
        
        Make sure the CSS parser properly rejects negative border widths.

        Added fast/borders/negative-border-width.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):

2010-03-18  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Remove V8Index.h and all references to V8ClassIndex.
        
        https://bugs.webkit.org/show_bug.cgi?id=33477

        * WebCore.gypi:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/NPV8Object.cpp:
        * bindings/v8/NPV8Object.h:
        * bindings/v8/V8Collection.h:
        * bindings/v8/V8DOMWindowShell.cpp:
        * bindings/v8/V8DOMWindowShell.h:
        * bindings/v8/V8DOMWrapper.cpp:
        * bindings/v8/V8DOMWrapper.h:
        * bindings/v8/V8GCController.cpp:
        * bindings/v8/V8Helpers.cpp:
        * bindings/v8/V8Index.h: Removed.
        * bindings/v8/V8IsolatedContext.h:
        * bindings/v8/V8NPObject.cpp:
        * bindings/v8/V8Proxy.cpp:
        * bindings/v8/V8Proxy.h:
        * bindings/v8/V8SVGPODTypeWrapper.h:
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        * bindings/v8/WorkerContextExecutionProxy.h:
        * bindings/v8/WrapperTypeInfo.h: Move WrapperTypeInfo struct into its own file from V8Index.h.
        * bindings/v8/custom/V8CanvasRenderingContext2DCustom.cpp:
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        * bindings/v8/custom/V8EventSourceConstructor.cpp:
        * bindings/v8/custom/V8HTMLAudioElementConstructor.cpp:
        * bindings/v8/custom/V8HTMLAudioElementConstructor.h:
        * bindings/v8/custom/V8HTMLImageElementConstructor.cpp:
        * bindings/v8/custom/V8HTMLImageElementConstructor.h:
        * bindings/v8/custom/V8HTMLOptionElementConstructor.cpp:
        * bindings/v8/custom/V8HTMLOptionElementConstructor.h:
        * bindings/v8/custom/V8HistoryCustom.cpp:
        * bindings/v8/custom/V8LocationCustom.cpp:
        * bindings/v8/custom/V8WebGLArrayCustom.h:
        * bindings/v8/custom/V8WebGLByteArrayCustom.cpp:
        * bindings/v8/custom/V8WebGLFloatArrayCustom.cpp:
        * bindings/v8/custom/V8WebGLIntArrayCustom.cpp:
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        * bindings/v8/custom/V8WebGLShortArrayCustom.cpp:
        * bindings/v8/custom/V8WebGLUnsignedByteArrayCustom.cpp:
        * bindings/v8/custom/V8WebGLUnsignedIntArrayCustom.cpp:
        * bindings/v8/custom/V8WebGLUnsignedShortArrayCustom.cpp:
        * bindings/v8/custom/V8WebKitPointConstructor.cpp:

2010-03-18  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Preserve console history between debugging sessions.

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

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype._settingsLoaded):
        (WebInspector.ConsoleView.prototype._enterKeyPressed.printResult):
        (WebInspector.ConsoleView.prototype._enterKeyPressed):
        * inspector/front-end/Settings.js:
        (WebInspector.Settings.prototype._load):

2010-03-18  Kim Grönholm  <kim.gronholm@nomovok.com>

        Reviewed by Simon Hausmann.

        [Qt] GraphicsLayer: Pausing and resuming of animations don't work as expected
        https://bugs.webkit.org/show_bug.cgi?id=36219
        
        addAnimation and pauseAnimation were handling animation state changes in
        the wrong way.
        Apparently WebCore calls addAnimation for resuming, so we have to make 
        sure to resume an existing animation if that happens. Also, timeOffset 
        is now used for synchronization of the Qt animation clock with the 
        WebCore clock, as opposed to using it as a delay timer. 
        Both those fixes were necessary to get the layout test to work.
        
        LayoutTests/animations/play-state.html now passed on Qt.

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::AnimationQtBase::AnimationQtBase):
        (WebCore::TransformAnimationQt::updateState):
        (WebCore::GraphicsLayerQt::addAnimation):
        (WebCore::GraphicsLayerQt::pauseAnimation):

2010-03-18  Adam Langley  <agl@chromium.org>

        Reviewed by David Levin.

        [chromium] Fix inverted logic in per-strike renderer patch.

        I screwed up in r55089 and got one of the conditions backwards. Thanks
        to Roman Tsisyk for pointing it out.

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

        Test: platform/chromium/fast/text/chromium-linux-fontconfig-renderstyle.html

        * platform/graphics/chromium/FontPlatformDataLinux.cpp:
        (WebCore::FontPlatformData::querySystemForRenderStyle):

2010-03-18  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Show inherited styles for a selected DOM element

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

        * English.lproj/localizedStrings.js:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::getStyles):
        (WebCore::InspectorDOMAgent::populateObjectWithStyleProperties):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.CSSStyleDeclaration):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.prototype._update):
        (WebInspector.StylesSidebarPane.prototype._containsInherited):
        (WebInspector.StylePropertiesSection):
        (WebInspector.StylePropertiesSection.prototype.isPropertyInherited):
        (WebInspector.StylePropertiesSection.prototype.onpopulate):

2010-03-15  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Gustavo Noronha.
        Patch by Antonio Gomes <tonikitoo@webkit.org>

        Spatial Navigation: Add isNull() and document() convenience methods to FocusCandidate.
        https://bugs.webkit.org/show_bug.cgi?id=36167

        It turns out that Spatial Navigation related code (in FocusController.cpp for
        instance) can be simplified and look better if FocusCandidate class offer some
        convenience method. This patch introduces a couple of them (isNull and a Document
        getter). It also adds another constructor that receives a Node as parameter.

        A followup refactoring patch will be making use of these helper methods.

        * page/SpatialNavigation.h:
        (WebCore::FocusCandidate::FocusCandidate): Added a "Node*" parameter
        to FocusCandidate's constructor.
        (WebCore::FocusCandidate::isNull): In the Spatial Navigation logic, a NULL
        FocusCandidate object is one that does not hold a valid reference to a "Node*".
        (WebCore::FocusCandidate::document): This method returns a pointer for the FocusCandidate
        node's document, if |node| is a valid pointer.

2010-03-18  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Antti Koivisto.

        [Qt] [Performance] GraphicsLayerQt updates the scene too often
        https://bugs.webkit.org/show_bug.cgi?id=36158

        This fix makes sure that flushChanges is only called when necessary,
        by calling the notifySync function asynchronously, which makes sure flushChanges() is called
        after the WebCore compositor has made all its changes.

        This has shown a visual improvement on several test-cases.

        * Makefile:
        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::GraphicsLayerQtImpl::):
        (WebCore::GraphicsLayerQtImpl::notifySyncRequired):
        (WebCore::GraphicsLayerQtImpl::notifyChange):
        (WebCore::GraphicsLayerQtImpl::flushChanges):
        (WebCore::GraphicsLayerQt::setMaskLayer):
        (WebCore::GraphicsLayerQt::setPosition):
        (WebCore::GraphicsLayerQt::setAnchorPoint):
        (WebCore::GraphicsLayerQt::setSize):
        (WebCore::GraphicsLayerQt::setTransform):
        (WebCore::GraphicsLayerQt::setChildrenTransform):
        (WebCore::GraphicsLayerQt::setPreserves3D):
        (WebCore::GraphicsLayerQt::setMasksToBounds):
        (WebCore::GraphicsLayerQt::setDrawsContent):
        (WebCore::GraphicsLayerQt::setBackgroundColor):
        (WebCore::GraphicsLayerQt::clearBackgroundColor):
        (WebCore::GraphicsLayerQt::setContentsOpaque):
        (WebCore::GraphicsLayerQt::setBackfaceVisibility):
        (WebCore::GraphicsLayerQt::setOpacity):
        (WebCore::GraphicsLayerQt::setContentsRect):

2010-03-18  Stephen White  <senorblanco@chromium.org>

        Reviewed by Oliver Hunt.

        Parsing of rgb() colors in HTML canvas is still fairly slow.
        findNamedColor() was showing up as hot, so this patch attempts to
        avoid calling it by putting the rgb() check ahead of the named
        colors.  It also removes a call to Color::Color() from
        CanvasStyle, which was doing a redundant check for the hex
        color and named colors, which CSSParser already does.  Finally, it
        changes the ad-hoc parser to check for negative values, and clamps them
        at zero.  This avoids the lex/yacc path for rgb() colors with
        negative color components.

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

        Covered by fast/canvas/set-colors.html.

        * css/CSSParser.cpp:
        (WebCore::parseInt):
        (WebCore::CSSParser::parseColor):
        * html/canvas/CanvasStyle.cpp:
        (WebCore::CanvasStyle::applyFillColor):

2010-03-18  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/36246> Node::removeAllEventListenersSlowCase is declared but not used

        Reviewed by Sam Weinig.

        * dom/Node.h:
        (WebCore::Node::removeAllEventListenersSlowCase): Removed
        declaration.  Implementation was removed in r48701.

2010-03-17  Stephan Aßmus  <superstippi@gmx.de>

        Reviewed by Oliver Hunt.

        [Haiku] Implement ImageBuffer support
        https://bugs.webkit.org/show_bug.cgi?id=35288

        Covered by existing tests.

        The StillImage class implements WebCore::Image by wrapping a native
        BBitmap. It will be needed to implement WebCore::ImageBuffer. This
        solution is just like it's done in the Qt port.

        * platform/graphics/haiku/StillImageHaiku.cpp: Added.
        (WebCore::StillImage::StillImage):
        (WebCore::StillImage::destroyDecodedData):
        (WebCore::StillImage::decodedSize):
        (WebCore::StillImage::size):
        (WebCore::StillImage::nativeImageForCurrentFrame):
        (WebCore::StillImage::draw):
        * platform/graphics/haiku/StillImageHaiku.h: Added.
        (WebCore::StillImage::create):

2010-03-17  Holger Hans Peter Freyther  <zecke@selfish.org>

        Rubber stamped by Gustavo Noronha Silva.

        [Gtk+] Avoid making a copy of the HTTPHeaderMap.

        ResourceRequest::httpHeaderFields() is returning a const
        reference but we are storing it as a simple value. This
        means that we run either the copy constructor or the assignment
        operator and make a copy of the RefPtrs.

        This extra copy can be avoided easily by storing
        the result as a const reference.

        * platform/network/soup/ResourceRequestSoup.cpp:
        (WebCore::ResourceRequest::toSoupMessage):
        * platform/network/soup/ResourceResponseSoup.cpp:
        (WebCore::ResourceResponseSoup::toSoupMessage):

2010-03-17  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: When switching resources in the Resources panel, the Content tab is always selected
        https://bugs.webkit.org/show_bug.cgi?id=36222

        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.showResource):

2010-03-17  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        databaseIdentifiers are not filtered for slashes
        <rdar://problem/7708789> and https://bugs.webkit.org/show_bug.cgi?id=36243

        In addition to filtering for '/' and '\', to remove the directory vulnerability
        on all platforms, it seems worth it to also escape other characters that are
        obviously dangerous or illegal to have in a filename (mostly inspired by the 
        Windows illegal-character list).

        No new tests - It's unclear how a test could possibly work into our testing
        infrastructure.

        * page/SecurityOrigin.cpp:
        (WebCore::): Added a 128-bool table "needsEscaping" that has a true/false answer
          for lower-ASCII.
        (WebCore::SecurityOrigin::SecurityOrigin):
        (WebCore::SecurityOrigin::createFromDatabaseIdentifier): "Unescape" the host
          component using the KURL utility.
        (WebCore::shouldEscapeUChar): If the char is lower-ASCII, look it up in the 
          needsEscaping table. Otherwise, let it pass.
        (WebCore::encodedHost): Modeled after KURL's host escaping method, but targeted 
          for the escaping considerations for the host component. We don't use the KURL
          version because this one is "different" enough because it operates on UTF16 and
          has its own "is bad character?" decider.
        (WebCore::SecurityOrigin::databaseIdentifier): Create the escaped host if needed,
          and use it instead of the unescaped host.
        * page/SecurityOrigin.h:

2010-03-17  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Dimitri Glazkov.

        [v8] Avoid reentry into v8 after TerminateExecution() on a worker thread.
        https://bugs.webkit.org/show_bug.cgi?id=36239

        Test: fast/workers/termination-with-port-messages.html

        * bindings/v8/V8Proxy.h:
        (WebCore::throwError): Avoid throwing if v8 execution is terminated anyways.
        * bindings/v8/WorkerScriptController.h:
        (WebCore::WorkerScriptController::proxy): Return V8 proxy as 0 if execution is terminating. Callers to check for 0 before invoking v8.
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        (WebCore::SetTimeoutOrInterval): Bail out if v8 proxy is 0.
        (WebCore::toV8): Ditto

2010-03-17  José Millán Soto  <jmillan@igalia.com>

        Reviewed by Adam Barth.

        Change the way of prefetching DNS to allow prefetching function to use full URL
        https://bugs.webkit.org/show_bug.cgi?id=35589

        Creates a new function, ResourceHandle::prepareForURL, whose default implementation
        calls prefetchDNS with the host of the given URL as the parameter.
        Soup implementation of ResourceHandle::prepareForURL executes soup_session_prepare_for_uri.
        Soup implementation of prefetchDNS is removed.
        Changed various prefetchDNS calls to ResourceHandle::prepareForURL calls.

        * GNUmakefile.am:
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::parseMappedAttribute):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::process):
        * page/Chrome.cpp:
        (WebCore::Chrome::mouseDidMoveOverElement):
        * platform/network/DNS.h:
        * platform/network/ResourceHandle.cpp:
        (WebCore::ResourceHandle::prepareForURL):
        * platform/network/ResourceHandle.h:
        * platform/network/chromium/DNSChromium.cpp:
        (WebCore::ResourceHandle::prepareForURL):
        * platform/network/soup/DNSSoup.cpp: Removed.
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandle::prepareForURL):
        * wml/WMLAElement.cpp:
        (WebCore::WMLAElement::parseMappedAttribute):

2010-03-17  Kenneth Russell  <kbr@google.com>

        Reviewed by Darin Fisher.

        Revert WebGL context attributes changes 33416 / r56074 and 36200 / r56093
        https://bugs.webkit.org/show_bug.cgi?id=36233

        The patch for bug 33416, which added multisampling support to the
        WebGL back buffer, uncovered some OpenGL driver bugs on the build
        bots which need further investigation to determine the appropriate
        workaround. Reverting this change, the minor build fix in 36189,
        and the skipping of the affected tests in bug 36200.

        Built and tested WebKit and Chromium and ran all WebGL layout
        tests in both.

        * bindings/v8/custom/V8HTMLCanvasElementCustom.cpp:
        (WebCore::V8HTMLCanvasElement::getContextCallback):
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/mac/Canvas3DLayer.h:
        * platform/graphics/mac/Canvas3DLayer.mm:
        (-[Canvas3DLayer drawInCGLContext:pixelFormat:forLayerTime:displayTime:]):
        * platform/graphics/mac/GraphicsContext3DMac.cpp:
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        (WebCore::GraphicsContext3D::~GraphicsContext3D):
        (WebCore::GraphicsContext3D::reshape):
        (WebCore::GraphicsContext3D::bindFramebuffer):
        (WebCore::GraphicsContext3D::readPixels):
        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::GraphicsLayerCA::setContentsToGraphicsContext3D):

2010-03-17  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Darin Adler.

        Optimize painting for HTMLProgressElement
        https://bugs.webkit.org/show_bug.cgi?id=36113
        Cache the progress bar's position, so it is not required to recalculate
        it for each repaint. 
        Call repaintRectangle() when the position changes.

        No new tests, as no new functionality introduced.

        * html/HTMLProgressElement.cpp:
        (WebCore::HTMLProgressElement::parseMappedAttribute):
        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::getNumberOfPixelsForProgressPosition):
        (WebCore::RenderThemeQt::paintProgressBar):
        * platform/qt/RenderThemeQt.h:
        * rendering/RenderProgress.cpp:
        (WebCore::RenderProgress::RenderProgress):
        (WebCore::RenderProgress::updateFromElement):
        * rendering/RenderProgress.h:
        (WebCore::RenderProgress::position):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::getNumberOfPixelsForProgressPosition):
        * rendering/RenderTheme.h:

2010-03-17  Antonio Gomes  <tonikitoo@webkit.org>

        Mac Buildfix: Using ASSERT_UNUSED instead of ASSERT.

        Reviewed by Simon fraser.
        Patch by Antonio Gomes <tonikitoo@webkit.org>

        * dom/SelectElement.cpp:
        (WebCore::SelectElement::listBoxDefaultEventHandler):

2010-03-17  Enrica Casucci  <enrica@apple.com>

        Reviewed by Darin Adler.

        Missing support for showing compositing layers borders and repaint count on Windows.
        <rdar://problem/7760736>
        <https://bugs.webkit.org/show_bug.cgi?id=36197>

        * platform/graphics/win/GraphicsLayerCACF.cpp:
        (WebCore::WebLayer::drawInContext): Modified to use the correct font on Windows.

2010-03-16  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Antti Koivisto.

        [Qt] Multiselect Popup - SelectElement refactoring.
        https://bugs.webkit.org/show_bug.cgi?id=36124

        As it is today it is not possible to the menulists popups to tell SelectElement
        that more then one option is selected. If you select one the other ones
        selected state will turn off.

        For <select multiple> I needed to extend the API used by menulist popups. This
        is the first step. Just refactoring SelectElement without any behavior change.
        Separating code that will be reused in future patches.

        * dom/SelectElement.cpp:
        (WebCore::SelectElement::updateSelectedState):
        (WebCore::SelectElement::listBoxDefaultEventHandler):
        * dom/SelectElement.h:

2010-03-17  Nate Chapin  <japhet@chromium.org>

        Unreviewed, Chromium build fix.

        Delete the correct file this time.

        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp: Copied from WebCore/bindings/v8/custom/V8XMLHttpRequestCustom.cpp.
        * bindings/v8/custom/V8XMLHttpRequestUploadCustom.cpp: Removed.

2010-03-17  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Remove custom bindings callbacks that aren't in use.
        (The relevant .idl doesn't mark them as V8Custom or Custom).
        
        https://bugs.webkit.org/show_bug.cgi?id=33066

        * Android.v8bindings.mk:
        * WebCore.gypi:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        * bindings/v8/custom/V8WebGLArrayCustom.h:
        * bindings/v8/custom/V8WebGLByteArrayCustom.cpp:
        * bindings/v8/custom/V8WebGLFloatArrayCustom.cpp:
        * bindings/v8/custom/V8WebGLIntArrayCustom.cpp:
        * bindings/v8/custom/V8WebGLShortArrayCustom.cpp:
        * bindings/v8/custom/V8WebGLUnsignedByteArrayCustom.cpp:
        * bindings/v8/custom/V8WebGLUnsignedIntArrayCustom.cpp:
        * bindings/v8/custom/V8WebGLUnsignedShortArrayCustom.cpp:
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        * bindings/v8/custom/V8XMLHttpRequestUploadCustom.cpp: Removed.

2010-03-17  Steve Block  <steveblock@google.com>

        Reviewed by Dimitri Glazkov.

        Adds ENABLE(WORKERS) guards to V8 bindings
        https://bugs.webkit.org/show_bug.cgi?id=36221

        Build fix only, no new tests.

        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::instantiateV8Object):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::toV8Context):

2010-03-17  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Remove unused reference to InspectorController from InspectorFrontend.

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

        * inspector/InspectorFrontend.h:

2010-03-17 Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        WebInspector: Timeline improvements - next iteration.

        The top level records should be collapsed.
        Virtually linked events should be nested in Timeline like Send Request and
        corresponding Received Responce, Timer Install and Timer Fire etc.
        It should be possible to see Main Resource request.

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

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::resetScriptObjects):
        (WebCore::InspectorController::didReceiveResponse):
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::willReceiveResourceResponse):
        (WebCore::InspectorTimelineAgent::didReceiveResourceResponse):
        * inspector/InspectorTimelineAgent.h:
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel):
        (WebInspector.TimelinePanel.prototype._createStatusbarButtons):
        (WebInspector.TimelinePanel.prototype.addRecordToTimeline):
        (WebInspector.TimelinePanel.prototype._findParentRecord):
        (WebInspector.TimelinePanel.prototype._innerAddRecordToTimeline):
        (WebInspector.TimelinePanel.prototype.resize):
        (WebInspector.TimelinePanel.prototype._createTopLevelRecord):
        (WebInspector.TimelinePanel.prototype.reset):
        (WebInspector.TimelinePanel.prototype._clean):
        (WebInspector.TimelinePanel.prototype._refresh):
        (WebInspector.TimelinePanel.prototype._refreshRecords):
        (WebInspector.TimelinePanel.prototype._addToRecordsWindow):
        (WebInspector.TimelineCalculator.prototype.computeBarGraphPercentages):
        (WebInspector.TimelineCalculator.prototype.updateBoundaries):
        (WebInspector.TimelineRecordGraphRow):
        (WebInspector.TimelineRecordGraphRow.prototype.update):
        (WebInspector.TimelinePanel.FormattedRecord):
        (WebInspector.TimelinePanel.FormattedRecord.prototype.get children):
        (WebInspector.TimelinePanel.FormattedRecord.prototype._generatePopupContent):
        * inspector/front-end/inspector.css:
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::didReceiveResponse):

2010-03-17  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Reimplement style-related audits using native API
        https://bugs.webkit.org/show_bug.cgi?id=36172

        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::getAllStyles):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::getAllStyles):
        (WebCore::InspectorDOMAgent::getMatchedCSSRules):
        (WebCore::InspectorDOMAgent::buildObjectForStyleSheet):
        (WebCore::InspectorDOMAgent::buildObjectForRule):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::didGetAllStyles):
        * inspector/InspectorFrontend.h:
        * inspector/front-end/AuditRules.js:
        (WebInspector.AuditRules.evaluateInTargetWindow):
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun.evalCallback.selectorsCallback):
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun.evalCallback.routine):
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun.evalCallback):
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun.routine):
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun):
        (WebInspector.AuditRules.ImageDimensionsRule.prototype.doRun):
        (WebInspector.AuditRules.CssInHeadRule.prototype.doRun):
        (WebInspector.AuditRules.StylesScriptsOrderRule.prototype.doRun):
        * inspector/front-end/DOMAgent.js:
        * inspector/front-end/InjectedScript.js:
        (injectedScriptConstructor):

2010-03-17  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        Replace instances of bzero in WebCore/bridge common code with memset
        https://bugs.webkit.org/show_bug.cgi?id=36214

        Syntax change only, no new tests.

        * bridge/jni/JNIUtility.cpp:
        (JSC::Bindings::getJNIField):
        * bridge/jni/jsc/JNIBridgeJSC.cpp:
        (JavaField::dispatchValueFromInstance):
        * bridge/jni/jsc/JNIUtilityPrivate.cpp:
        (JSC::Bindings::convertValueToJValue):
        * bridge/jni/v8/JNIUtilityPrivate.cpp:
        (JSC::Bindings::convertNPVariantToJValue):
        * bridge/jni/v8/JavaNPObjectV8.cpp:
        (JSC::Bindings::AllocJavaNPObject):

2010-03-17  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Mark inspector resources as changed so that they are reloaded on the next frontend connection.
        
        Split resetScriptObjects into code specific for page navigation and insepctor frontend disconnection.

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

        * WebCore.xcodeproj/project.pbxproj: Added InspectorWorkerResource.h to the project file.
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::disconnectFrontend):
        (WebCore::InspectorController::unbindAllResources):
        (WebCore::InspectorController::didCommitLoad):
        * inspector/InspectorController.h:
        * inspector/InspectorResource.cpp:
        (WebCore::InspectorResource::releaseScriptObject):

2010-03-17  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Capture main resource load events in timeline panel.

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

        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype._createStatusbarButtons):
        (WebInspector.TimelinePanel.prototype._toggleTimelineButtonClicked):
        (WebInspector.TimelinePanel.prototype.timelineWasStopped):
        (WebInspector.TimelinePanel.prototype.addRecordToTimeline):
        (WebInspector.TimelinePanel.prototype._clearPanel):
        (WebInspector.TimelinePanel.FormattedRecord):

2010-03-17  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Eric Seidel.

        Allow custom memory allocation control for AtomicString class
        https://bugs.webkit.org/show_bug.cgi?id=35907

        Inherits the following class from FastAllocBase because it is
        instantiated by 'new':

        class name   - instantiated at: WebCore/'location'
        AtomicString - WebCore/html/HTMLTableElement.cpp:525

        * platform/text/AtomicString.h:

2010-03-16  John Abd-El-Malek  <jam@chromium.org>

        Reviewed by Darin Fisher.

        Give keyboard focus to PluginDocuments by default
        https://bugs.webkit.org/show_bug.cgi?id=36147

        Test: http/tests/plugins/plugin-document-has-focus.html

        * loader/PluginDocument.cpp:
        (WebCore::PluginDocument::pluginNode):
        * loader/PluginDocument.h:
        * page/EventHandler.cpp:
        (WebCore::eventTargetNodeForDocument):

2010-03-16  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        REGRESSION (r53857): Crash when tabbing to <map>
        https://bugs.webkit.org/show_bug.cgi?id=36017

        Test: fast/events/imagemap-norender-crash.html

        * html/HTMLMapElement.cpp:
        (WebCore::HTMLMapElement::imageElement):

2010-03-16  Brent Fulgham  <bfulgham@webkit.org>

        Build fix.  No Review.

        Correct missing includes in cURL network backend introduced
        by recent changes in WebKit.

        * platform/network/curl/ResourceHandleCurl.cpp: Add missing
          includes for SharedBuffer and PassRefPtr.
        (WebCore::ResourceHandle::loadResourceSynchronously): Correct
          constructor signature for ResourceHandle to match @r55688.
        * platform/network/curl/ResourceHandleManager.cpp: Add missing
          include for RetainPtr.

2010-03-16  Zhenyao Mo  <zmo@google.com>

        Reviewed by Darin Fisher.

        Hook up WebGLContextAttributes to OpenGL context creation code
        https://bugs.webkit.org/show_bug.cgi?id=33416

        Test: fast/canvas/webgl/context-attributes-alpha-depth-stencil-antialias.html

        * bindings/v8/custom/V8HTMLCanvasElementCustom.cpp: Fix an index bug.
        * platform/graphics/GraphicsContext3D.h: Add members/functions for multisampling/stencil buffer purpose.
        * platform/graphics/mac/Canvas3DLayer.h: Add GraphicsContext3D as a member of Canvas3DLayer.
        * platform/graphics/mac/Canvas3DLayer.mm: Add multisampling support.
        * platform/graphics/mac/GraphicsContext3DMac.cpp: Hook up WebGLContextAttributes to OpenGL context creation code for Mac.
        * platform/graphics/mac/GraphicsLayerCA.mm: Adjust to modified Canvas3DLayer init call.

2010-03-16  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Xan Lopez.

        https://bugs.webkit.org/show_bug.cgi?id=35504
        [Gtk] Evaluate and fix AtkTable for layout tables

        Causes "layout tables" to be exposed as AccessibilityTables for Gtk.

        * accessibility/AccessibilityTable.cpp:
        (AccessibilityTable::isTableExposableThroughAccessibility):

2010-03-16  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Unreviewed. Build fix for distcheck.

        * GNUmakefile.am:

2010-03-15  Darin Fisher  <darin@chromium.org>

        Reviewed by Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=36152
        [chromium] Add support for history.pushState and history.replaceState

        This is covered by the existing tests in fast/loader/stateobjects

        * bindings/v8/SerializedScriptValue.cpp:
        (WebCore::ZigZag::Deserializer::deserialize):
        (WebCore::SerializedScriptValue::deserialize):
        * bindings/v8/SerializedScriptValue.h:
        Switch to returning v8::Null instead of the empty value to match JSC
        and the spec.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadInSameDocument): Call
        dispatchDidNavigateWithinPage just before dispatching events to the
        page.  This ordering is important since the event handlers could
        destroy the page or start another navigation.

        * loader/FrameLoaderClient.h: Add dispatchDidNavigateWithinPage to
        notify the client whenever a navigation occurs without changing any of
        the documents in the page.

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

        Fix linker warnings when building WebCore on Windows

        Rubber-stamped by Steve Falkenburg.

        * WebCore.vcproj/WebCore.vcproj: Exclude JSDOMFormData.cpp from the
        build, since it's already included in DerivedSources.cpp. Also let VS
        sort this file as it saw fit.

2010-03-15  Antti Koivisto  <koivisto@iki.fi>

        Reviewed by Simon Hausmann.

        https://bugs.webkit.org/show_bug.cgi?id=36121
        [Qt] Make WebKit scrollbars work with tiling
         
        Translate coordinates correctly.

        * page/Frame.cpp:
        (WebCore::Frame::tiledBackingStorePaintEnd):

2010-03-16  Jakub Wieczorek  <jwieczorek@webkit.org>

        Reviewed by Eric Seidel.

        [Qt] MediaPlayerPrivate: Initialize m_mediaPlayerControl to 0 to avoid crashes
        when no media services can be found.

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

        * platform/graphics/qt/MediaPlayerPrivateQt.cpp:
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):

2010-03-16  Adam Barth  <abarth@webkit.org>

        Unreviewed.

        noscript tag should render when @sandbox disables JavaScript
        https://bugs.webkit.org/show_bug.cgi?id=36092

        Add missing "!" in plugin code.  Should fix plugins/embed-inside-object
        on Gtk and Qt.

        * plugins/PluginView.cpp:
        (WebCore::PluginView::load):

2010-03-16  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Delete DerivedSourcesAllInOne.cpp.

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

        * Android.v8bindings.mk:
        * bindings/v8/DerivedSourcesAllInOne.cpp: Removed.

2010-03-16  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Revert r56006 as it caused functional issues. We will work on a
        testcase, and rework the fix, and land when we have this a bit
        more testable.

        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::paintMediaPlayButton):

2010-03-16  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Errors when inspecting styles of non-renderable elements in XHTML.

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

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::getStyles):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMNode.prototype._addAttribute):
        (WebInspector.DOMWindow.prototype.Object):
        * inspector/front-end/MetricsSidebarPane.js:
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.prototype.update.callback):
        (WebInspector.StylesSidebarPane.prototype.update):
        (WebInspector.StylesSidebarPane.prototype._update):

2010-03-12  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Simon Fraser.
        Patch by Antonio Gomes <tonikitoo@webkit.org>

        Spatial Navigation: Add a scrollIntoView call when focusing an element.
        https://bugs.webkit.org/show_bug.cgi?id=36020

        When focusing an element in Spatial Navigation logic, it is desired to make
        this element visible in the current viewport. For that to happen, there
        could be a call to Element's scrollIntoView method at focusing time. However
        for visual aspects, it is preferable to scroll to an inflated rect of |element|
        in order to consider the focus outline width.
        As Element's scrollIntoView method does not provide this flexibility, patch adds
        a custom scrollIntoView method to SpatialNavigation.h .

        * page/FocusController.cpp:
        (WebCore::FocusController::advanceFocusDirectionally):
        * page/SpatialNavigation.cpp:
        (WebCore::scrollIntoView):
        * page/SpatialNavigation.h:

2010-03-10  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Eric Seidel.

        [GTK] Position queries are lagging
        https://bugs.webkit.org/show_bug.cgi?id=34372

        Normalize timeout priorities through the GStreamer media player as
        a whole. This should help avoid that any of them is starved.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::volumeChanged):
        (WebCore::MediaPlayerPrivate::processBufferingStats):
        (WebCore::MediaPlayerPrivate::muteChanged):
        * platform/graphics/gstreamer/VideoSinkGStreamer.cpp:
        (webkit_video_sink_render):
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webKitWebSrcNeedDataCb):
        (webKitWebSrcEnoughDataCb):
        (webKitWebSrcSeekDataCb):

2010-03-10  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Eric Seidel.

        [GTK] Position queries are lagging
        https://bugs.webkit.org/show_bug.cgi?id=34372

        Use default priority also for parsing data: URIs.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::startData):

2010-03-10  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Eric Seidel.

        [GTK] Position queries are lagging
        https://bugs.webkit.org/show_bug.cgi?id=34372

        Normalize SharedTimers priorities to always be
        G_PRIORITY_DEFAULT. As it is currently, timers that should happen
        immediately (0 miliseconds delay) end up delayed by a lot of time
        due to glib starving lower priority sources.

        * platform/gtk/SharedTimerGtk.cpp:
        (WebCore::setSharedTimerFireTime):

2010-03-16  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Add support for Fast Mobile Scrolling in the build system.

        * GNUmakefile.am:

2010-03-11  Yury Semikhatsky <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Introduce InspectorFrontendClient that provides InspectorFrontend with an interface to the embedder. InspectorClient now serves as a delegate for InspectorController and does not contain methods for managing inspector frontend window. That allows to create remote InspectorFrontendHost.

        Introduce InspectorFrontendClient that would provide InspectorFrontend with an interface to the embedder
        https://bugs.webkit.org/show_bug.cgi?id=35036

        * GNUmakefile.am:
        * WebCore.Inspector.exp:
        * WebCore.base.exp:
        * WebCore.gypi:
        * WebCore.order:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::addToFrontend):
        * inspector/ConsoleMessage.h:
        * inspector/InspectorClient.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::~InspectorController):
        (WebCore::InspectorController::inspectedPageDestroyed):
        (WebCore::InspectorController::windowVisible):
        (WebCore::InspectorController::frontendReady):
        (WebCore::InspectorController::willCloseFrontend):
        (WebCore::InspectorController::addConsoleMessage):
        (WebCore::InspectorController::setInspectorFrontendClient):
        (WebCore::InspectorController::inspectedWindowScriptObjectCleared):
        (WebCore::InspectorController::setFrontend):
        (WebCore::InspectorController::show):
        (WebCore::InspectorController::close):
        (WebCore::InspectorController::releaseDOMAgent):
        (WebCore::InspectorController::populateScriptObjects):
        (WebCore::InspectorController::didCommitLoad):
        (WebCore::InspectorController::getProfile):
        (WebCore::InspectorController::enableDebugger):
        * inspector/InspectorController.h:
        (WebCore::InspectorController::hasInspectorFrontendClient):
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::InspectorFrontend):
        (WebCore::InspectorFrontend::~InspectorFrontend):
        (WebCore::InspectorFrontend::addConsoleMessage):
        (WebCore::InspectorFrontend::bringToFront):
        (WebCore::InspectorFrontend::inspectedURLChanged):
        * inspector/InspectorFrontend.h:
        * inspector/InspectorFrontendClient.h: Added.
        (WebCore::InspectorFrontendClient::~InspectorFrontendClient):
        * inspector/InspectorFrontendClientLocal.cpp: Added.
        (WebCore::FrontendMenuProvider::create):
        (WebCore::FrontendMenuProvider::disconnect):
        (WebCore::FrontendMenuProvider::FrontendMenuProvider):
        (WebCore::FrontendMenuProvider::~FrontendMenuProvider):
        (WebCore::FrontendMenuProvider::populateContextMenu):
        (WebCore::FrontendMenuProvider::contextMenuItemSelected):
        (WebCore::FrontendMenuProvider::contextMenuCleared):
        (WebCore::InspectorFrontendClientLocal::InspectorFrontendClientLocal):
        (WebCore::InspectorFrontendClientLocal::~InspectorFrontendClientLocal):
        (WebCore::InspectorFrontendClientLocal::windowObjectCleared):
        (WebCore::InspectorFrontendClientLocal::frontendLoaded):
        (WebCore::InspectorFrontendClientLocal::canAttachWindow):
        (WebCore::InspectorFrontendClientLocal::changeAttachedWindowHeight):
        (WebCore::InspectorFrontendClientLocal::moveWindowBy):
        (WebCore::InspectorFrontendClientLocal::showContextMenu):
        (WebCore::InspectorFrontendClientLocal::setAttachedWindow):
        (WebCore::InspectorFrontendClientLocal::restoreAttachedWindowHeight):
        (WebCore::InspectorFrontendClientLocal::constrainedAttachedWindowHeight):
        * inspector/InspectorFrontendClientLocal.h: Added.
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::InspectorFrontendHost):
        (WebCore::InspectorFrontendHost::~InspectorFrontendHost):
        (WebCore::InspectorFrontendHost::loaded):
        (WebCore::InspectorFrontendHost::attach):
        (WebCore::InspectorFrontendHost::detach):
        (WebCore::InspectorFrontendHost::closeWindow):
        (WebCore::InspectorFrontendHost::bringToFront):
        (WebCore::InspectorFrontendHost::inspectedURLChanged):
        (WebCore::InspectorFrontendHost::canAttachWindow):
        (WebCore::InspectorFrontendHost::setAttachedWindowHeight):
        (WebCore::InspectorFrontendHost::moveWindowBy):
        (WebCore::InspectorFrontendHost::showContextMenu):
        * inspector/InspectorFrontendHost.h:
        (WebCore::InspectorFrontendHost::create):
        * inspector/InspectorFrontendHost.idl:
        * inspector/front-end/InspectorFrontendHostStub.js:
        (.WebInspector.InspectorFrontendHostStub.prototype.bringToFront):
        (.WebInspector.InspectorFrontendHostStub.prototype.inspectedURLChanged):
        * inspector/front-end/inspector.js:
        (WebInspector.loaded):
        (WebInspector.close):
        (WebInspector.bringToFront):
        (WebInspector.inspectedURLChanged):
        * loader/EmptyClients.h:
        (WebCore::EmptyInspectorClient::openInspectorFrontend):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::dispatchDidClearWindowObjectInWorld):
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::~Page):
        * page/Page.h:
        * platform/ContextMenu.cpp:
        (WebCore::ContextMenu::populate):
        (WebCore::ContextMenu::addInspectElementItem):

2010-03-16  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: migrate to native styles inspector in
        order to inspect styles from foreighn domains.

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

        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::getStyles):
        (WebCore::InspectorBackend::getInlineStyle):
        (WebCore::InspectorBackend::getComputedStyle):
        (WebCore::InspectorBackend::applyStyleText):
        (WebCore::InspectorBackend::setStyleText):
        (WebCore::InspectorBackend::setStyleProperty):
        (WebCore::InspectorBackend::toggleStyleEnabled):
        (WebCore::InspectorBackend::setRuleSelector):
        (WebCore::InspectorBackend::addRule):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::InspectorDOMAgent):
        (WebCore::InspectorDOMAgent::getStyles):
        (WebCore::InspectorDOMAgent::getInlineStyle):
        (WebCore::InspectorDOMAgent::getComputedStyle):
        (WebCore::InspectorDOMAgent::getMatchedCSSRules):
        (WebCore::InspectorDOMAgent::getAttributeStyles):
        (WebCore::InspectorDOMAgent::applyStyleText):
        (WebCore::InspectorDOMAgent::setStyleText):
        (WebCore::InspectorDOMAgent::setStyleProperty):
        (WebCore::InspectorDOMAgent::toggleStyleEnabled):
        (WebCore::InspectorDOMAgent::setRuleSelector):
        (WebCore::InspectorDOMAgent::addRule):
        (WebCore::InspectorDOMAgent::bindStyle):
        (WebCore::InspectorDOMAgent::bindRule):
        (WebCore::InspectorDOMAgent::buildObjectForStyle):
        (WebCore::InspectorDOMAgent::populateObjectWithStyleProperties):
        (WebCore::InspectorDOMAgent::buildObjectForRule):
        (WebCore::InspectorDOMAgent::uniqueStyleProperties):
        (WebCore::InspectorDOMAgent::longhandProperties):
        (WebCore::InspectorDOMAgent::shorthandPriority):
        (WebCore::InspectorDOMAgent::ruleAffectsNode):
        (WebCore::InspectorDOMAgent::toArray):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::didGetEventListenersForNode):
        (WebCore::InspectorFrontend::didGetStyles):
        (WebCore::InspectorFrontend::didGetComputedStyle):
        (WebCore::InspectorFrontend::didGetInlineStyle):
        (WebCore::InspectorFrontend::didApplyStyleText):
        (WebCore::InspectorFrontend::didSetStyleText):
        (WebCore::InspectorFrontend::didSetStyleProperty):
        (WebCore::InspectorFrontend::didToggleStyleEnabled):
        (WebCore::InspectorFrontend::didSetRuleSelector):
        (WebCore::InspectorFrontend::didAddRule):
        * inspector/InspectorFrontend.h:
        * inspector/front-end/DOMAgent.js:
        (WebInspector.CSSStyleDeclaration):
        * inspector/front-end/ElementsTreeOutline.js:
        * inspector/front-end/InjectedScript.js:
        * inspector/front-end/MetricsSidebarPane.js:
        (WebInspector.MetricsSidebarPane.prototype.update):
        (WebInspector.MetricsSidebarPane.prototype.editingCommitted):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.prototype.update):
        (WebInspector.StylePropertiesSection.prototype.editingSelectorCommitted.callback):
        (WebInspector.StylePropertiesSection.prototype.editingSelectorCommitted):
        (WebInspector.BlankStylePropertiesSection.prototype.editingSelectorCommitted.callback):
        (WebInspector.BlankStylePropertiesSection.prototype.editingSelectorCommitted):
        (WebInspector.StylePropertyTreeElement.prototype):
        (WebInspector.StylePropertyTreeElement.prototype.):

2010-03-16  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Darin Adler.

        RenderText::m_text should be a String, not RefPtr<StringImpl>
        https://bugs.webkit.org/show_bug.cgi?id=36010

        Refactoring only, so no new tests.

        * platform/text/PlatformString.h:
        (WebCore::String::makeLower):
        (WebCore::String::makeUpper):
        (WebCore::String::makeSecure):
        (WebCore::String::makeCapitalized):
        (WebCore::String::containsOnlyASCII):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::RenderText):
        (WebCore::RenderText::widthFromCache):
        (WebCore::RenderText::trimmedPrefWidths):
        (WebCore::RenderText::containsOnlyWhitespace):
        (WebCore::RenderText::setTextInternal):
        (WebCore::RenderText::setText):
        (WebCore::RenderText::previousOffset):
        (WebCore::RenderText::previousOffsetForBackwardDeletion):
        (WebCore::RenderText::nextOffset):
        * rendering/RenderText.h:
        (WebCore::RenderText::text):
        (WebCore::RenderText::characters):
        (WebCore::RenderText::textLength):

2010-03-16  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        noscript tag should render when @sandbox disables JavaScript
        https://bugs.webkit.org/show_bug.cgi?id=36092

        Instead of talking to Settings directly to figure out if JavaScript is
        enabled in a frame, we need to talk to the ScriptController.  The
        ScriptController is better at answering that question because it knows
        about @sandbox.

        Test: fast/frames/sandboxed-iframe-noscript.html

        * dom/Document.cpp:
        (WebCore::Document::Document):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::createRenderer):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::rendererIsNeeded):
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::noscriptCreateErrorCheck):
        (WebCore::HTMLParser::isInline):
        * plugins/PluginView.cpp:
        (WebCore::PluginView::load):

2010-03-15  John Gregg  <johnnyg@google.com>

        Reviewed by David Levin.

        Notification object should expose absolute URL of icon
        https://bugs.webkit.org/show_bug.cgi?id=35800

        Covered by existing tests.

        * notifications/Notification.cpp:
        (WebCore::Notification::Notification):
        * notifications/Notification.h:
        (WebCore::Notification::iconURL):

2010-03-15  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Holger Freyther.

        Add EFL port files to platform/efl.
        http://webkit.org/b/35887

        * platform/efl/ClipboardEfl.cpp: Added.
        * platform/efl/PasteboardEfl.cpp: Added.

2010-03-15  Kent Tamura  <tkent@chromium.org>

        Reviewed by Eric Seidel.

        Don't submit disabled menu options.
        https://bugs.webkit.org/show_bug.cgi?id=35056

        Test: fast/forms/menulist-disabled-selected-option.html

        * dom/OptionElement.h:
        * dom/SelectElement.cpp:
        (WebCore::SelectElement::appendFormData):
         If a selected option is disabled, skip it.
         Remove code for non-selected menulist because of compatibility with
         other browsers.

2010-03-15  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Holger Freyther.

        Add EFL port files to platform/efl.
        http://webkit.org/b/35884

        * platform/efl/FileSystemEfl.cpp: Added.

2010-03-15  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Holger Freyther.

        Add EFL port files to platform/efl.
        http://webkit.org/b/35882

        * platform/efl/ContextMenuItemEfl.cpp: Added.

2010-03-15  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Holger Freyther.

        https://bugs.webkit.org/show_bug.cgi?id=35502
        [Gtk] Objects of ATK_ROLE_TABLE should not implement AtkText

        Simple change to stop tables from implementing AtkText.

        * accessibility/gtk/AccessibilityObjectAtk.cpp:
        (getInterfaceMaskFromObject):

2010-03-15  Adam Bergkvist  <adam.bergkvist@ericsson.com>

        Reviewed by Adam Barth.

        According to the updated specification, a data field should always
        result in a newline character being appended to the data buffer
        regardless if the data buffer contains any data or not. However, upon
        event dispatch, the last newline will be removed. This differs from an
        older version of the specification where a newline character was
        appended before the data value only if the buffer already contained
        data. As a result, EventSource now supports receiving events with empty
        data or newline characters only.
        https://bugs.webkit.org/show_bug.cgi?id=33210

        * page/EventSource.cpp:
        (WebCore::EventSource::parseEventStreamLine):

2010-03-15  Valters Svabe  <vsvabe@gmail.com>

        Reviewed by Darin Adler.

        :after selector displays in wrong place with nested div
        https://bugs.webkit.org/show_bug.cgi?id=32288
        
        Make sure we don't append things after :after-generated content, if
        it's inside an anonymous block.

        Test: fast/css-generated-content/block-after.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::addChild):

2010-03-15  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Eric Seidel.

        Add EFL port files to platform/efl.
        http://webkit.org/b/35885

        * platform/efl/KURLEfl.cpp: Added.

2010-03-15  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        VO not able to perform a VO-spacebar on facebook links
        https://bugs.webkit.org/show_bug.cgi?id=36132

        When a label element is used as a click event handler, and it doesn't have any
        corresponding control, it should handle the action itself.

        Test: accessibility/label-element-press.html

        * html/HTMLLabelElement.cpp:
        (WebCore::HTMLLabelElement::accessKeyAction):

2010-03-15  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Geoff Garen.

        Bug 36135 - GCController::garbageCollectNow() crashes when called from garbage collection
        <https://bugs.webkit.org/show_bug.cgi?id=36135>
        <rdar://problem/7752552>

        * bindings/js/GCController.cpp:
        (WebCore::GCController::garbageCollectNow): Fail silently if garbage collection is
        active rather than hitting the CRASH() reentrancy guard.

2010-03-15  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Drop out of compositing mode when no elements need to composite
        https://bugs.webkit.org/show_bug.cgi?id=36134

        When no more elements on the page need to be composited, drop out of compositing
        mode altogether, including removing the layer-backed view that hosts the layers.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateCompositingLayers): If the list of child layers to attach at
        the root is empty, we have no composited layers, and can drop out of compositing mode by calling
        willMoveOffscreen().
        
        (WebCore::RenderLayerCompositor::computeCompositingRequirements): In several places,
        use willBeComposited rather than calling needsToBeComposited(), because it avoids
        recomputing state that we know already (but assert that we're getting it right).
        When we're assessing the root layer in post-order, see if we have any child layers that
        are compositing, and also whether the root itself needs to composite. If neither are
        true, then we can drop out of compositing mode.
        
        (WebCore::RenderLayerCompositor::needsToBeComposited):
        (WebCore::RenderLayerCompositor::requiresCompositingLayer): Move the
        "inCompositingMode() && layer->isRootLayer()" test out of requiresCompositingLayer()
        and into needsToBeComposited() so that we can call requiresCompositingLayer() separately
        on the root layer above.

2010-03-15  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Kenneth Rohde Christiansen.

        Add EFL port files to platform/efl.
        http://webkit.org/b/35888

        * platform/efl/SoundEfl.cpp: Added.

2010-03-15  Andy Estes  <aestes@apple.com>

        Reviewed by John Sullivan.

        For continuous scrolling devices on the Mac (trackpads and Mighty/Magic
        Mice), set the number of wheel ticks equal to the atomic increment of
        the device: a pixel.  This ensures that any scrolling action will
        generate at least one wheel tick, regardless of the speed/length of
        the gesture.

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

        Tests: fast/events/continuous-platform-wheelevent-in-scrolling-div.html
               fast/events/platform-wheelevent-in-scrolling-div.html

        * platform/mac/WebCoreSystemInterface.h: Modify method signature.
        * platform/mac/WebCoreSystemInterface.mm: Ditto.
        * platform/mac/WheelEventMac.mm:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent): Call into
        WebKitSystemInterface to determine both wheelTicksX/Y and deltaX/Y.
        WKSI will query the event system for number of wheel ticks and
        pixels/lines scrolled based on the device type.

2010-03-15  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GStreamer] duration query optimizations
        https://bugs.webkit.org/show_bug.cgi?id=36116

        Don't reattempt duration queries that previously failed and cache
        media duration only if it's known.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::duration):
        (WebCore::MediaPlayerPrivate::updateStates):
        (WebCore::MediaPlayerPrivate::durationChanged):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:

2010-03-11  Peter Kasting  <pkasting@google.com>

        Reviewed by Adam Barth.

        Clean up more bits of the open-source image decoders.  In addition to
        simplifying things somewhat, this makes all the decoders the same in
        terms of how they construct "image reader" subclasses and init scale
        data.

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

        No functional change, so no tests.

        * platform/image-decoders/ImageDecoder.h: Reorder a few declarations to try and group/order members slightly better.
        (WebCore::ImageDecoder::ImageDecoder):
        * platform/image-decoders/gif/GIFImageDecoder.cpp: Move reader construction into decode().  Prep scale data in setSize().  Remove useless comment.
        (WebCore::GIFImageDecoder::setData):
        (WebCore::GIFImageDecoder::setSize):
        (WebCore::GIFImageDecoder::frameBufferAtIndex):
        (WebCore::GIFImageDecoder::decode):
        * platform/image-decoders/gif/GIFImageDecoder.h: Prep scale data in setSize().
        * platform/image-decoders/gif/GIFImageReader.cpp: Prep scale data in setSize().
        (GIFImageReader::read):
        * platform/image-decoders/ico/ICOImageDecoder.cpp: Shorten code.
        (WebCore::ICOImageDecoder::setSize):
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp: Fix style.  Move reader construction into decode().
        (WebCore::JPEGImageReader::close):
        (WebCore::JPEGImageReader::skipBytes):
        (WebCore::JPEGImageDecoder::decode):
        * platform/image-decoders/jpeg/JPEGImageDecoder.h: Move reader construction into decode().
        (WebCore::JPEGImageDecoder::filenameExtension):
        * platform/image-decoders/png/PNGImageDecoder.cpp: Move reader construction into decode().  Track completion on decoder, not reader.  Prep scale data in setSize().  Remove useless comment.
        (WebCore::PNGImageReader::PNGImageReader):
        (WebCore::PNGImageReader::close):
        (WebCore::PNGImageReader::decode):
        (WebCore::PNGImageDecoder::setSize):
        (WebCore::PNGImageDecoder::frameBufferAtIndex):
        (WebCore::PNGImageDecoder::headerAvailable):
        (WebCore::PNGImageDecoder::pngComplete):
        (WebCore::PNGImageDecoder::decode):
        * platform/image-decoders/png/PNGImageDecoder.h: Move reader construction into decode().  Track completion on decoder, not reader.  Prep scale data in setSize().
        (WebCore::PNGImageDecoder::filenameExtension):
        (WebCore::PNGImageDecoder::isComplete):

2010-03-15  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GStreamer] updateStates called for all elements posting a state-change
        https://bugs.webkit.org/show_bug.cgi?id=36115

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::mediaPlayerPrivateMessageCallback): Update player state
        only for state-change messages coming from playbin2 directly.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        (WebCore::MediaPlayerPrivate::pipeline): public accessor for the
        playbin element.

2010-03-15  Jian Li  <jianli@chromium.org>

        Reviewed by Nate Chapin.

        [v8] Add V8 bindings for DOMFormData.
        https://bugs.webkit.org/show_bug.cgi?id=36026

        Test: http/tests/local/send-form-data.html

        * Android.v8bindings.mk:
        * WebCore.gypi:
        * bindings/v8/V8Index.h:
        * bindings/v8/custom/V8DOMFormDataCustom.cpp: Added.
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        (WebCore::V8XMLHttpRequest::sendCallback):

2010-03-15  Jian Li  <jianli@chromium.org>

        Reviewed by Sam Weinig.

        Add DOMFormData.idl to expose FormData interface.
        https://bugs.webkit.org/show_bug.cgi?id=36024
        
        The implementation is based on XMLHttpRequest 2 spec:
        http://dev.w3.org/2006/webapi/XMLHttpRequest-2/#formdata

        Test: http/tests/local/send-form-data.html

        * Android.derived.jscbindings.mk:
        * Android.derived.v8bindings.mk:
        * Android.jscbindings.mk:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.pri:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMFormDataCustom.cpp: Added.
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::send):
        * bindings/scripts/CodeGeneratorJS.pm:
        * html/DOMFormData.idl: Added.
        * page/DOMWindow.idl:

2010-03-15  Patrik Persson  <patrik.j.persson@ericsson.com>

        Reviewed by Darin Adler.

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

        Revise iframe sandbox behavior to match the updated HTML5 spec.

        - Enables window.sessionStorage in sandboxed iframes.

        - Raises SECURITY_ERR exceptions when window.localStorage or
          window.openDatabase() is blocked by iframe sandboxing.

          Note: window.sessionStorage does not raise exceptions.

        WebKit would previously return null references in these cases.  The
        new behavior is in accordance with HTML5:

          http://dev.w3.org/html5/webstorage/   (sections 4.2 and 4.3)
          http://dev.w3.org/html5/webdatabase/  (section 4.1)
          http://www.mail-archive.com/whatwg@lists.whatwg.org/msg19786.html

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::selectDOMStorage): exception handling
        * inspector/InspectorDOMStorageResource.cpp:
        (WebCore::InspectorDOMStorageResource::handleEvent): exception handling
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::sessionStorage): re-enabled in iframe sandbox
        (WebCore::DOMWindow::localStorage): raise exception rather than return null
        (WebCore::DOMWindow::openDatabase): raise exception rather than return null
        * page/DOMWindow.h: added exceptions to interface
        * page/DOMWindow.idl: added exceptions to interface
        * page/SecurityOrigin.h:
        (WebCore::SecurityOrigin::canAccessLocalStorage): renamed function to reflect its purpose
        * storage/StorageEventDispatcher.cpp:
        (WebCore::StorageEventDispatcher::dispatch): exception handling

2010-03-15  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Implement a progress indicator in the Audits panel
        when resources are reloading
        https://bugs.webkit.org/show_bug.cgi?id=35971

        * English.lproj/localizedStrings.js:
        * GNUmakefile.am:
        * WebCore.gypi:
        * inspector/front-end/AuditLauncherView.js:
        (WebInspector.AuditLauncherView.prototype.updateResourceTrackingState):
        (WebInspector.AuditLauncherView.prototype.get totalResources):
        (WebInspector.AuditLauncherView.prototype.set totalResources):
        (WebInspector.AuditLauncherView.prototype.get loadedResources):
        (WebInspector.AuditLauncherView.prototype.set loadedResources):
        (WebInspector.AuditLauncherView.prototype._resetResourceCount):
        (WebInspector.AuditLauncherView.prototype.resourceStarted):
        (WebInspector.AuditLauncherView.prototype.resourceFinished):
        (WebInspector.AuditLauncherView.prototype.reset):
        (WebInspector.AuditLauncherView.prototype._setAuditRunning):
        (WebInspector.AuditLauncherView.prototype._launchButtonClicked):
        (WebInspector.AuditLauncherView.prototype._createCategoryElement):
        (WebInspector.AuditLauncherView.prototype._createLauncherUI):
        (WebInspector.AuditLauncherView.prototype._updateResourceProgress):
        (WebInspector.AuditLauncherView.prototype._updateButton):
        * inspector/front-end/AuditsPanel.js:
        (WebInspector.AuditsPanel.prototype.resourceStarted):
        (WebInspector.AuditsPanel.prototype.resourceFinished):
        (WebInspector.AuditsPanel.prototype.reset):
        * inspector/front-end/Images/spinner.gif: Added.
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/audits.css:
        (.audit-launcher-view .resource-progress > img):
        * inspector/front-end/inspector.js:
        (WebInspector.updateResource):

2010-03-15  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GStreamer] replace g_idle_add / g_timeout_add calls with Timers in the gstreamer player
        https://bugs.webkit.org/show_bug.cgi?id=35735

        Replaced g_idle_add calls with Timers immediately started once
        only. The g_timeout_add was replaced by a periodic Timer.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::~MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::volumeChangedTimerFired):
        (WebCore::MediaPlayerPrivate::volumeChanged):
        (WebCore::MediaPlayerPrivate::processBufferingStats):
        (WebCore::MediaPlayerPrivate::fillTimerFired):
        (WebCore::MediaPlayerPrivate::maxTimeLoaded):
        (WebCore::MediaPlayerPrivate::updateStates):
        (WebCore::MediaPlayerPrivate::muteChangedTimerFired):
        (WebCore::MediaPlayerPrivate::muteChanged):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:

2010-03-12  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Eric Carlson.

        media/video-preload.html fails
        https://bugs.webkit.org/show_bug.cgi?id=35793

        Only effectively load, and start buffering when playing, or when
        the preload attribute is set.

        Test: media/video-preload.html

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::load):
        (WebCore::MediaPlayerPrivate::commitLoad):
        (WebCore::MediaPlayerPrivate::prepareToPlay):
        (WebCore::MediaPlayerPrivate::setPreload):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:

2010-03-15  Shu Chang  <Chang.Shu@nokia.com>

        Reviewed by Holger Freyther.

        [Qt] The behavior of QGradient with no stops is defined differently from HTML5 spec,
        where the latter requires the gradient to be transparent black. Explicitly added a
        transparent black color stop to match the HTML5 behavior.
        https://bugs.webkit.org/show_bug.cgi?id=36060

        * platform/graphics/qt/GradientQt.cpp:
        (WebCore::Gradient::platformGradient):

2010-03-11  Antonio Gomes  <tonikitoo@webkit.org>

        Rubber-stamped by Holger Freyther.
        Patch by Antonio Gomes <tonikitoo@webkit.org>

        Some minor code clean ups in SpatialNavigation.cpp

        * page/SpatialNavigation.cpp:
        (WebCore::distanceInDirection):
        (WebCore::deflateIfOverlapped):

2010-03-13  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: Position of GraphBar elements is calculating more carefully
        and they fully visible at the bottom of Timeline panel.
       
        http://bugs.webkit.org/show_bug.cgi?id=35966

        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelineRecordGraphRow.prototype.update):

2010-03-15  MORITA Hajime  <morrita@google.com>

        Reviewed by Alexey Proskuryakov.

        Selection.modify extends too far with 'lineboundary'.
        https://bugs.webkit.org/show_bug.cgi?id=33413

        Selection.modify() with 'lineboundary' granularity implies just
        "Go to the end of the line", unlike selection expansion with
        other type of granularities. This change handled LineGranularity
        as special case, to look-up end of line with UPSTREAM affinity. 
        Doing this prevents look-up algorithm to go next line.

        Test: editing/selection/extend-selection-expected.txt

        * dom/Position.cpp:
        (WebCore::Position::getInlineBoxAndOffset):
        Handled an edge case for node look-up with UPSTREAM.
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::modifyExtendingForward):
        Added UPSTREAM tweak for the case for LineGranularity.
        
2010-03-14  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by Shinichiro Hamaji.

        Always call PrintContext.end() from PrintContext::pageNumberForElement().

        Without this change, WebKit remains in printing mode after determining the page number if the specified element is found.

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

        Test: printing/return-from-printing-mode.html

        * page/PrintContext.cpp:
        (WebCore::PrintContext::pageNumberForElement):

2010-03-11  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GStreamer] progressTimer never stopped after EOS
        https://bugs.webkit.org/show_bug.cgi?id=36007

        Mark the pipeline as paused only if playback hasn't ended
        yet. When didEnd() is triggered, the pipeline is paused (but
        paused() still returns false) and a timeupdate event is fired,
        those 2 conditions allow the HTMLMediaElement to stop the
        progressTimer (in updatePlayerState, via mediaPlayerTimeChanged).

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::updateStates):

2010-03-14  Chang Shu  <chang.shu@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] [Symbian] Added block for ENABLE_SYMBIAN_DIALOG_PROVIDERS
        on Symbian platform.
        https://bugs.webkit.org/show_bug.cgi?id=35919

        * WebCore.pro:

2010-03-14  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Darin Adler.

        Support for HTMLProgressElement
        https://bugs.webkit.org/show_bug.cgi?id=35937

        Added support for HTMLProgressElement.
        This implementation is enabled only for Qt, because only RenderThemeQt
        was modified to actually draw the progress element.
        The labels attribute of the progress element will be implemented in a
        separate patch.

        Tests: fast/dom/HTMLProgressElement/progress-element.html
               fast/dom/HTMLProgressElement/set-progress-properties.html

        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::extractPseudoType):
        * css/CSSValueKeywords.in:
        * css/html.css:
        * html/HTMLElement.cpp:
        (WebCore::inlineTagList):
        * html/HTMLElementsAllInOne.cpp:
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::HTMLFormControlElement):
        * html/HTMLFormControlElement.h:
        * html/HTMLProgressElement.cpp: Added.
        (WebCore::HTMLProgressElement::HTMLProgressElement):
        (WebCore::HTMLProgressElement::create):
        (WebCore::HTMLProgressElement::createRenderer):
        (WebCore::HTMLProgressElement::formControlType):
        (WebCore::HTMLProgressElement::parseMappedAttribute):
        (WebCore::HTMLProgressElement::value):
        (WebCore::HTMLProgressElement::setValue):
        (WebCore::HTMLProgressElement::max):
        (WebCore::HTMLProgressElement::setMax):
        (WebCore::HTMLProgressElement::position):
        * html/HTMLProgressElement.h: Added.
        (WebCore::HTMLProgressElement::isOptionalFormControl):
        * html/HTMLProgressElement.idl: Added.
        * html/HTMLTagNames.in:
        * page/DOMWindow.idl:
        * platform/ThemeTypes.h:
        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::adjustProgressBarStyle):
        (WebCore::RenderThemeQt::paintProgressBar):
        * platform/qt/RenderThemeQt.h:
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isProgress):
        * rendering/RenderProgress.cpp: Added.
        (WebCore::RenderProgress::RenderProgress):
        (WebCore::RenderProgress::baselinePosition):
        (WebCore::RenderProgress::calcPrefWidths):
        (WebCore::RenderProgress::layout):
        (WebCore::RenderProgress::updateFromElement):
        * rendering/RenderProgress.h: Added.
        (WebCore::RenderProgress::renderName):
        (WebCore::RenderProgress::isProgress):
        (WebCore::toRenderProgress):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::adjustStyle):
        (WebCore::RenderTheme::paint):
        (WebCore::RenderTheme::paintBorderOnly):
        (WebCore::RenderTheme::paintDecorations):
        (WebCore::RenderTheme::adjustProgressBarStyle):
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::paintProgressBar):

2010-03-14  Oliver Hunt  <oliver@apple.com>

        Reviewed by Darin Adler.

        REGRESSION(r53287): drop event is not fired if dataTransfer.dropEffect is not explicitly set
        https://bugs.webkit.org/show_bug.cgi?id=36095

        The issue here is that while dropEffect is meant to be initialized
        to "none", the behaviour of the drag is differs between dragEffect
        not being set and dragEffect being explicitly set to "none"

        This patch corrects this behaviour by making Clipboard distinguish
        between the initial "none" value of dropEffect and an explicit "none".
        This alone is insufficient for correct behaviour, we also need to
        resurrect the removed defaultOperationForDrag function, but we now
        use the function only when dragEffect is uninitialized.  There are a
        few tweaks to the behaviour of the defaultOperationForDrag as well
        to ensure exactly the same set of outcomes for all cases that we
        may hit it.

        * dom/Clipboard.cpp:
        (WebCore::Clipboard::Clipboard):
        (WebCore::dragOpFromIEOp):
        (WebCore::Clipboard::destinationOperation):
        * dom/Clipboard.h:
        (WebCore::Clipboard::dropEffect):
        (WebCore::Clipboard::dropEffectIsUninitialized):
        * page/DragController.cpp:
        (WebCore::defaultOperationForDrag):
        (WebCore::DragController::tryDHTMLDrag):

2010-03-14  Antti Koivisto  <koivisto@iki.fi>

        Reviewed by Simon Hausmann.
        
        https://bugs.webkit.org/show_bug.cgi?id=35146
        Support tiled backing store

        Implements a basic tiled backing store mechanism. Tiles are created and 
        deleted on demand. The page content is cached to the tiles. Tile content
        is kept in sync with the document. Since the backing store covers area
        larger than the currently visible viewport, the document can be scrolled
        quickly without having to enter rendering tree painting.
        
        The tile management code is platform independent. This patch has simple QPixmap
        based tile implementation for Qt.
        
        The feature is behind ENABLE_TILED_BACKING_STORE flag.

        * WebCore.pri:
        * WebCore.pro:
        * page/Frame.cpp:
        (WebCore::Frame::Frame):
        (WebCore::Frame::setTiledBackingStoreEnabled):
        (WebCore::Frame::tiledBackingStorePaintBegin):
        (WebCore::Frame::tiledBackingStorePaint):
        (WebCore::Frame::tiledBackingStorePaintEnd):
        (WebCore::Frame::tiledBackingStoreContentsRect):
        * page/Frame.h:
        (WebCore::Frame::tiledBackingStore):
        * page/FrameView.cpp:
        (WebCore::FrameView::repaintContentRectangle):
        (WebCore::FrameView::doDeferredRepaints):
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setTiledBackingStoreEnabled):
        * page/Settings.h:
        (WebCore::Settings::tiledBackingStoreEnabled):
        * platform/graphics/Tile.h: Added.
        (WebCore::Tile::create):
        (WebCore::Tile::coordinate):
        (WebCore::Tile::rect):
        * platform/graphics/TiledBackingStore.cpp: Added.
        (WebCore::TiledBackingStore::TiledBackingStore):
        (WebCore::TiledBackingStore::~TiledBackingStore):
        (WebCore::TiledBackingStore::invalidate):
        (WebCore::TiledBackingStore::updateTileBuffers):
        (WebCore::TiledBackingStore::paint):
        (WebCore::TiledBackingStore::viewportChanged):
        (WebCore::TiledBackingStore::setContentsScale):
        (WebCore::TiledBackingStore::tileDistance):
        (WebCore::TiledBackingStore::createTiles):
        (WebCore::TiledBackingStore::dropOverhangingTiles):
        (WebCore::TiledBackingStore::dropTilesOutsideRect):
        (WebCore::TiledBackingStore::tileAt):
        (WebCore::TiledBackingStore::setTile):
        (WebCore::TiledBackingStore::removeTile):
        (WebCore::TiledBackingStore::mapToContents):
        (WebCore::TiledBackingStore::mapFromContents):
        (WebCore::TiledBackingStore::contentsRect):
        (WebCore::TiledBackingStore::tileRectForCoordinate):
        (WebCore::TiledBackingStore::tileCoordinateForPoint):
        (WebCore::TiledBackingStore::startTileBufferUpdateTimer):
        (WebCore::TiledBackingStore::tileBufferUpdateTimerFired):
        (WebCore::TiledBackingStore::startTileCreationTimer):
        (WebCore::TiledBackingStore::tileCreationTimerFired):
        (WebCore::TiledBackingStore::setContentsFrozen):
        * platform/graphics/TiledBackingStore.h: Added.
        (WebCore::TiledBackingStore::contentsScale):
        (WebCore::TiledBackingStore::contentsFrozen):
        * platform/graphics/TiledBackingStoreClient.h: Added.
        * platform/graphics/qt/TileQt.cpp: Added.
        (WebCore::checkeredPixmap):
        (WebCore::Tile::Tile):
        (WebCore::Tile::~Tile):
        (WebCore::Tile::isDirty):
        (WebCore::Tile::isReadyToPaint):
        (WebCore::Tile::invalidate):
        (WebCore::Tile::updateBackBuffer):
        (WebCore::Tile::swapBackBufferToFront):
        (WebCore::Tile::paint):
        (WebCore::Tile::paintCheckerPattern):

2010-03-14  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        WebCore part of removing support for legacy versions of Core Graphics

        * WebCore.vcproj/WebCore.vcproj: Removed FontDatabase.{cpp,h}
        * platform/graphics/win/FontCGWin.cpp:
        (WebCore::Font::drawGlyphs): Removed call to wkCanCreateCGFontWithLOGFONT(),
        as it is now always true.
        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::FontCache::createFontPlatformData): Ditto.
        * platform/graphics/win/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::~FontCustomPlatformData): Updated for
        the removal of m_cgFont.
        (WebCore::FontCustomPlatformData::fontPlatformData): Removed call to
        wkCanCreateCGFontWithLOGFONT(), as it is now always true.
        (WebCore::createFontCustomPlatformData): Ditto. Also updated for change to
        the FontCustomPlatformData constructor.
        * platform/graphics/win/FontCustomPlatformData.h: Removed m_cgFont member.
        (WebCore::FontCustomPlatformData::FontCustomPlatformData): Removed cgFont
        parameter.
        * platform/graphics/win/FontDatabase.cpp: Removed.
        * platform/graphics/win/FontDatabase.h: Removed.
        * platform/graphics/win/FontPlatformDataCGWin.cpp:
        (WebCore::FontPlatformData::platformDataInit): Removed call to
        wkCanCreateCGFontWithLOGFONT(), as it is now always true.
        * platform/win/TemporaryLinkStubs.cpp:
        (WebCore::populateFontDatabase): Removed stub.

2010-03-14  Jessie Berlin  <jberlin@webkit.org>

        Reviewed by Sam Weinig.

        "event.ctrlKey" is always false when dragging an element with "ctrl" key down
        https://bugs.webkit.org/show_bug.cgi?id=17113

        No new tests.

        * page/DragController.cpp:
        (WebCore::createMouseEvent):
        Use the current state of the shift, ctrl, alt, and meta keys when creating the drag mouse event.

2010-03-13  Antonio Gomes  <tonikitoo@webkit.org>

        Not reviewed identation fix.

        * manual-tests/spatial-navigation/spatial-navigation-test-cases.html:

2010-03-13  Kim Grönholm  <kim.gronholm@nomovok.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] GraphicsLayer: Opacity change from zero to non-zero doesn't always have effect with AC
        https://bugs.webkit.org/show_bug.cgi?id=36034

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::OpacityAnimationQt::applyFrame):

2010-03-13  Kim Grönholm  <kim.gronholm@nomovok.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] GraphicsLayer: Opacity transitions end with begin value
        https://bugs.webkit.org/show_bug.cgi?id=36019

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::AnimationQt::updateCurrentTime):

2010-03-13  Dirk Schulze  <krit@webkit.org>

        No review, rolling out r55927.
        http://trac.webkit.org/changeset/55927
        https://bugs.webkit.org/show_bug.cgi?id=35793

        Breaks Gtk build bots.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::load):
        (WebCore::MediaPlayerPrivate::setPreload):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:

2010-03-12  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        SVG Glyphs - transform path not context
        https://bugs.webkit.org/show_bug.cgi?id=36070

        SVGFont should transform the path of a glyph, not the context. Modifying
        the context causes wrong gradient transformations. This bug doesn't
        influence CG because we generally fill or stroke texts with a mask image.
        All other platforms provide a direct way to make the drawings.

        * svg/SVGFont.cpp:
        (WebCore::Font::drawTextUsingSVGFont):

2010-03-12  Beth Dakin  <bdakin@apple.com>

        Reviewed by Simon Fraser.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=34942 Fullscreen 
        API naming is inconsistent
        -and corresponding-
        <rdar://problem/7729165>

        This patch changes all occurrences of "fullScreen" to the more 
        popular "fullscreen." webkitEnterFullScreen and 
        webkitExitFullScreen have been maintained for now for backwards 
        compatibility. 

        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::webkitEnterFullscreen):
        (WebCore::HTMLVideoElement::webkitExitFullscreen):
        * html/HTMLVideoElement.h:
        (WebCore::HTMLVideoElement::webkitEnterFullScreen):
        (WebCore::HTMLVideoElement::webkitExitFullScreen):
        * html/HTMLVideoElement.idl:
        * platform/graphics/mac/MediaPlayerProxy.h:

2010-03-12  James Robinson  <jamesr@chromium.org>

        Reviewed by Adam Barth.

        Add virtual destructor to DOMWrapperWorld
        https://bugs.webkit.org/show_bug.cgi?id=36077

        DOMWrapperWorld is RefCounted<DOMWrapperWorld>.  IsolatedWorld
        inherits from DOMWrapperWorld and has member variables
        with destructors, so DOMWrapperWorld needs to have a declared virtual
        d'tor to ensure that its derived class's destructors are called.

        No new tests, no change in behavior

        * bindings/v8/DOMWrapperWorld.h:
        (WebCore::DOMWrapperWorld::~DOMWrapperWorld):


2010-03-11  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        Bug 36075 - Clean up screwyness re static string impls & Identifiers.

        * platform/text/StringImpl.cpp:
        (WebCore::StringImpl::~StringImpl): Add ASSERT
        (WebCore::StringImpl::sharedBuffer): Add ASSERT
        * platform/text/StringImpl.h:
        (WebCore::StringImpl::setHash): Add ASSERT
        (WebCore::StringImpl::isStatic): added.

2010-03-12  Enrica Casucci  <enrica@apple.com>

        Reviewed by Simon Fraser.

        Content of 3D tests appears at the bottom right corner sometimes.
        <rdar://problem/7556244>
        <https://bugs.webkit.org/show_bug.cgi?id=36027>

        There were two problems to solve here:
        - the incorrect anchoring of the rootChildLayer that was causing the composited
          content to be positioned incorrectly
        - the failure to paint the non composited content into the backing store when
          animating composited content.
          
        The first problem has been solved by leaving the original anchor point for the
        rootChildLayer and splitting the tasks of clipping and scrolling using two separate layers.
        The second problem has been solved leveraging the knowledge that WebView has of the dirty region
        of the backing store to pass this information to the layer renderer. This allows the renderer to force
        a paint into the backing store before moving to the compositing.
        
        Tests: compositing/geometry/horizontal-scroll-composited.html
               compositing/geometry/vertical-scroll-composited.html

        * manual-tests/win/horizontal-scroll-composited.html: Removed. This is now a layout test.
        * manual-tests/win/milliondollar.html: Added.
        * platform/graphics/win/WKCACFLayerRenderer.cpp:
        (WebCore::WKCACFLayerRenderer::WKCACFLayerRenderer): Added initialization of dirty flag.
        (WebCore::WKCACFLayerRenderer::setScrollFrame): 
        (WebCore::WKCACFLayerRenderer::updateScrollFrame): Updated to resize and position the clip and scroll layers.
        (WebCore::WKCACFLayerRenderer::setRootChildLayer):
        (WebCore::WKCACFLayerRenderer::createRenderer): Added new layer hierarchy.
        (WebCore::WKCACFLayerRenderer::destroyRenderer): Remove clip layer on destroy.
        (WebCore::WKCACFLayerRenderer::resize):
        (WebCore::WKCACFLayerRenderer::paint): Forcing paint massage to trigger paint into the backing store.
        * platform/graphics/win/WKCACFLayerRenderer.h:
        (WebCore::WKCACFLayerRenderer::setBackingStoreDirty): Added.

2010-03-12  Robert Hogan  <robert@webkit.org>

        Not reviewed, build fix.

        Revert http://trac.webkit.org/projects/webkit/changeset/55374 which broke
        the !ENABLE(DATABASE) build on all platforms when attempting to fix the
        --minimal build on Qt.

        Support for SQLite now seems to be non-negotiable for the Qt build but making
        it mandatory requires review, so re-break --minimal Qt build for now.

        Qt build issue now tracked at https://bugs.webkit.org/show_bug.cgi?id=36073

        * page/GeolocationPositionCache.cpp:

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

        Reviewed by Alexey Proskuryakov.

        <rdar://problem/7709115> REGRESSION: toolbar is missing at http://www.glom.org/
        https://bugs.webkit.org/show_bug.cgi?id=35507

        * css/CSSImportRule.cpp:
        (WebCore::CSSImportRule::setCSSStyleSheet): Extend the change made in
        <http://trac.webkit.org/changeset/48818> to detect the two variants of
        KHTMLFixes.css in @import rules as well as in <link> elements.

2010-03-12  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Geoff Garen.

        Bug 36052 - [Qt] REGRESSION(55878) 63 test cases crash

        r55878 changed UStringImpl::empty()->characters() to be non-null,
        so TextBreakIteratorQt.cpp now should check the length of strings
        (previously was assuming all strings with a non-null data pointer
        had a length of at least 1).

        * platform/text/qt/TextBreakIteratorQt.cpp:
        (WebCore::wordBreakIterator):
        (WebCore::characterBreakIterator):
        (WebCore::lineBreakIterator):
        (WebCore::sentenceBreakIterator):

2010-03-12  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        SVG fallback color doesn't work for bogus gradients.
        https://bugs.webkit.org/show_bug.cgi?id=35479

        Use a given fallback color on ignored gradients if present. Gradients
        must be ignored, if one dimension of the objects boundingBox is zero.

        Test: svg/custom/gradient-with-1d-boundingbox.svg

        * svg/graphics/SVGPaintServer.cpp:
        (WebCore::SVGPaintServer::strokePaintServer):
        * svg/graphics/SVGPaintServerGradient.cpp:
        (WebCore::SVGPaintServerGradient::setup):

2010-03-12  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=36069
        
        Eliminate InlineRunBox.

        * WebCore.xcodeproj/project.pbxproj:
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::adjustPosition):
        (WebCore::InlineFlowBox::paintFillLayer):
        (WebCore::InlineFlowBox::paintBoxDecorations):
        (WebCore::InlineFlowBox::paintMask):
        * rendering/InlineFlowBox.h:
        (WebCore::InlineFlowBox::InlineFlowBox):
        (WebCore::InlineFlowBox::prevLineBox):
        (WebCore::InlineFlowBox::nextLineBox):
        (WebCore::InlineFlowBox::setNextLineBox):
        (WebCore::InlineFlowBox::setPreviousLineBox):
        * rendering/InlineRunBox.h: Removed.
        * rendering/InlineTextBox.h:
        (WebCore::InlineTextBox::InlineTextBox):
        (WebCore::InlineTextBox::prevTextBox):
        (WebCore::InlineTextBox::nextTextBox):
        (WebCore::InlineTextBox::setNextTextBox):
        (WebCore::InlineTextBox::setPreviousTextBox):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::destroy):
        (WebCore::RenderBlock::rightmostPosition):
        (WebCore::RenderBlock::leftmostPosition):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::destroy):
        (WebCore::RenderInline::absoluteRects):
        (WebCore::RenderInline::absoluteQuads):
        (WebCore::RenderInline::linesBoundingBox):
        (WebCore::RenderInline::linesVisibleOverflowBoundingBox):
        (WebCore::RenderInline::addFocusRingRects):
        (WebCore::RenderInline::paintOutline):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::localBoundingBox):
        * rendering/RenderLineBoxList.cpp:
        (WebCore::RenderLineBoxList::deleteLineBoxTree):
        (WebCore::RenderLineBoxList::extractLineBox):
        (WebCore::RenderLineBoxList::attachLineBox):
        (WebCore::RenderLineBoxList::removeLineBox):
        (WebCore::RenderLineBoxList::deleteLineBoxes):
        (WebCore::RenderLineBoxList::dirtyLineBoxes):
        (WebCore::RenderLineBoxList::paint):
        (WebCore::RenderLineBoxList::hitTest):
        (WebCore::RenderLineBoxList::dirtyLinesFromChangedChild):
        (WebCore::RenderLineBoxList::checkConsistency):
        * rendering/RenderSVGInline.cpp:
        (WebCore::RenderSVGInline::absoluteRects):
        (WebCore::RenderSVGInline::absoluteQuads):
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::absoluteRects):
        (WebCore::RenderSVGText::absoluteQuads):
        (WebCore::RenderSVGText::objectBoundingBox):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::extractTextBox):
        (WebCore::RenderText::attachTextBox):
        (WebCore::RenderText::removeTextBox):
        (WebCore::RenderText::createInlineTextBox):
        (WebCore::RenderText::positionLineBox):
        * rendering/RootInlineBox.h:
        (WebCore::RootInlineBox::nextRootBox):
        (WebCore::RootInlineBox::prevRootBox):

2010-03-12  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Eric Carlson.

        media/video-preload.html fails
        https://bugs.webkit.org/show_bug.cgi?id=35793

        Only effectively load, and start buffering when playing, or when
        the preload attribute is set.

        Test: media/video-preload.html

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::load):
        (WebCore::MediaPlayerPrivate::commitLoad):
        (WebCore::MediaPlayerPrivate::prepareToPlay):
        (WebCore::MediaPlayerPrivate::setPreload):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:

2010-03-12  Dmitry Titov  <dimich@chromium.org>

        Not reviewed, build fix.

        Reverts 55920 and 55921. Landing for Jian Li.

        * Android.derived.jscbindings.mk:
        * Android.derived.v8bindings.mk:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMFormDataCustom.cpp: Removed.
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::send):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/v8/V8Index.h:
        * bindings/v8/custom/V8DOMFormDataCustom.cpp: Removed.
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        (WebCore::V8XMLHttpRequest::sendCallback):
        * html/DOMFormData.idl: Removed.
        * page/DOMWindow.idl:

2010-03-12  Jakob Petsovits  <jpetsovits@rim.com>

        Reviewed by Dirk Schulze.

        [OpenVG] Add support for drawing text to PainterOpenVG
        https://bugs.webkit.org/show_bug.cgi?id=35581

        Doesn't come with any actual font classes, as OpenVG
        by itself doesn't provide any access to platform fonts
        but just the means to draw glyphs that have been loaded
        manually before.

        * platform/graphics/openvg/PainterOpenVG.cpp:
        (WebCore::PlatformPainterState::PlatformPainterState):
        (WebCore::PlatformPainterState::copyPaintState):
        (WebCore::PainterOpenVG::textDrawingMode):
        (WebCore::PainterOpenVG::setTextDrawingMode):
        (WebCore::PainterOpenVG::drawText):
        * platform/graphics/openvg/PainterOpenVG.h:

2010-03-12  Jakob Petsovits  <jpetsovits@rim.com>

        Reviewed by Dirk Schulze.

        [OpenVG] Use masks to implement non-rectilinear clipping
        https://bugs.webkit.org/show_bug.cgi?id=35544

        Requires some additional context switching logic to
        make sure the right context is current when dealing
        with the mask, because we don't store it by ourselves.

        Initial version of this code was written by
        Eli Fidler <efidler@rim.com>, I did a couple of
        bug fixes and efficiency improvements since then.

        * platform/graphics/openvg/GraphicsContextOpenVG.cpp:
        (WebCore::GraphicsContext::clipPath):
        (WebCore::GraphicsContext::clip):
        (WebCore::GraphicsContext::clipOut):
        (WebCore::GraphicsContext::clipOutEllipseInRect):
        (WebCore::GraphicsContext::addInnerRoundedRectClip):
        * platform/graphics/openvg/PainterOpenVG.cpp:
        (WebCore::PlatformPainterState::PlatformPainterState):
        (WebCore::PlatformPainterState::~PlatformPainterState):
        (WebCore::PlatformPainterState::maskingEnabled):
        (WebCore::PlatformPainterState::applyState):
        (WebCore::PlatformPainterState::saveMaskIfNecessary):
        (WebCore::PainterOpenVG::intersectClipRect):
        (WebCore::PainterOpenVG::clipPath):
        (WebCore::PainterOpenVG::save):
        * platform/graphics/openvg/PainterOpenVG.h:
        (WebCore::PainterOpenVG::):
        * platform/graphics/openvg/SurfaceOpenVG.cpp:
        (WebCore::SurfaceOpenVG::makeCurrent):
        (WebCore::SurfaceOpenVG::makeCompatibleCurrent):
        * platform/graphics/openvg/SurfaceOpenVG.h:
        (WebCore::SurfaceOpenVG::):

2010-03-12  Jian Li  <jianli@chromium.org>

        Reviewed by Sam Weinig.

        Add DOMFormData.idl to expose FormData interface.
        https://bugs.webkit.org/show_bug.cgi?id=36024
        
        The implementation is based on XMLHttpRequest 2 spec:
        http://dev.w3.org/2006/webapi/XMLHttpRequest-2/#formdata

        Test: http/tests/local/send-form-data.html

        * Android.derived.jscbindings.mk:
        * Android.derived.v8bindings.mk:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.pri:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMFormDataCustom.cpp: Added.
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::send):
        * bindings/scripts/CodeGeneratorJS.pm:
        * html/DOMFormData.idl: Added.
        * page/DOMWindow.idl:

2010-03-12  Jakob Petsovits  <jpetsovits@rim.com>

        Reviewed by Dirk Schulze.

        [OpenVG] Add a SurfaceOpenVG constructor for EGL client buffer surfaces
        https://bugs.webkit.org/show_bug.cgi?id=35538

        SurfaceOpenVG can now not only encapsulate pbuffer
        and window surfaces but also VGImage-based ones.

        * platform/graphics/openvg/EGLDisplayOpenVG.cpp:
        (WebCore::EGLDisplayOpenVG::createPbufferFromClientBuffer):
        * platform/graphics/openvg/EGLDisplayOpenVG.h:
        * platform/graphics/openvg/SurfaceOpenVG.cpp:
        (WebCore::SurfaceOpenVG::SurfaceOpenVG):
        * platform/graphics/openvg/SurfaceOpenVG.h:

2010-03-12  Alpha Lam  <hclam@chromium.org>

        Reviewed by Eric Carlson.

        Fix a crash when resource loading of media element is canceled.
        https://bugs.webkit.org/show_bug.cgi?id=35992

        Use of HTMLMediaElement::duration() after resource loading was canceled
        will cause a crash. This is because HTMLMediaElement::m_player is used
        when NULL.
        Test: http/tests/media/video-cancel-load.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::duration):
        Avoid calling to m_player when it is null.
        (WebCore::HTMLMediaElement::userCancelledLoad):
        Set m_readyState to HAVE_NOTHING.

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

        Reviewed by Darin Adler.

        <rdar://problem/7725534> CSSPrimitiveValue::parserValue() returns deleted memory
        https://bugs.webkit.org/show_bug.cgi?id=20069

        No test added, since with the CSS variables feature disabled, the pointer
        to the freed memory is never dereferenced.

        * css/CSSPrimitiveValue.cpp:
        (WebCore::valueOrPropertyName): Changed to return a const AtomicString& from
        a static table.
        (WebCore::CSSPrimitiveValue::parserValue): Updated for the above change.

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

        Build fix.

        * platform/chromium/PlatformKeyboardEventChromium.cpp:

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

        Reviewed by Darin Adler.

        <rdar://problem/7694674> Hover states not updated when overflow section scrolls under stationary mouse pointer
        https://bugs.webkit.org/show_bug.cgi?id=35949

        Test: fast/events/overflow-scroll-fake-mouse-move.html

        Soon after an overflow section scrolls under the mouse pointer, dispatch
        a fake mouse move event. This is similar to how frame scrolling is handled
        in WebKit, and has the effect of updating hover state, dispatching DOM mouse
        events, and updating the tool tip.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::EventHandler): Initialize m_fakeMouseMoveEventTimer.
        (WebCore::EventHandler::~EventHandler): Assert that the timer is not active.
        (WebCore::EventHandler::clear): Stop the timer.
        (WebCore::EventHandler::handleMousePressEvent): Cancel pending fake mouse
        move events.
        (WebCore::EventHandler::handleMouseMoveEvent): Ditto.
        (WebCore::EventHandler::dispatchFakeMouseMoveEventSoonInQuad): If the mouse
        is in the passed-in quad, ensure that a fake mouse move event is scheduled
        to fire soon.
        (WebCore::EventHandler::cancelFakeMouseMoveEvent): Does what the name says.
        (WebCore::EventHandler::fakeMouseMoveEventTimerFired): Constructs a
        PlatformMouseEvent with the current mouse location, modifier key state and
        time stamp and calls mouseMoved().
        * page/EventHandler.h:
        * platform/PlatformKeyboardEvent.h: Declared getCurrentModifierState().
        * platform/android/KeyEventAndroid.cpp:
        (WebCore::PlatformKeyboardEvent::getCurrentModifierState): Stubbed out.
        * platform/brew/PlatformKeyboardEventBrew.cpp:
        (WebCore::PlatformKeyboardEvent::getCurrentModifierState): Ditto.
        * platform/chromium/PlatformKeyboardEventChromium.cpp:
        (WebCore::PlatformKeyboardEvent::getCurrentModifierState): Added.
        * platform/efl/PlatformKeyboardEventEfl.cpp:
        (WebCore::PlatformKeyboardEvent::getCurrentModifierState): Stubbed out.
        * platform/gtk/KeyEventGtk.cpp:
        (WebCore::PlatformKeyboardEvent::getCurrentModifierState): Ditto.
        * platform/haiku/PlatformKeyboardEventHaiku.cpp:
        (WebCore::PlatformKeyboardEvent::getCurrentModifierState): Added.
        * platform/mac/KeyEventMac.mm:
        (WebCore::PlatformKeyboardEvent::getCurrentModifierState): Ditto.
        * platform/qt/PlatformKeyboardEventQt.cpp:
        (WebCore::PlatformKeyboardEvent::getCurrentModifierState): Stubbed out.
        * platform/win/KeyEventWin.cpp:
        (WebCore::PlatformKeyboardEvent::getCurrentModifierState): Added.
        * platform/wx/KeyboardEventWx.cpp:
        (WebCore::PlatformKeyboardEvent::getCurrentModifierState): Ditto.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollToOffset): Call
        EventHandler::dispatchFakeMouseMoveEventSoonInQuad(). Moved things around
        a little to avoid computing the repaint rect twice.

2010-03-12  Kent Hansen  <kent.hansen@nokia.com>

        Reviewed by Darin Adler.

        Webkit doesn't build with workers on and database off
        https://bugs.webkit.org/show_bug.cgi?id=35997

        Added missing ENABLE(DATABASE) guards.

        * workers/WorkerThread.cpp:
        (WebCore::WorkerThreadShutdownStartTask::performTask):

2010-03-12  Dan Winship  <danw@gnome.org>

        Reviewed by Gustavo Noronha.

        Make the defaultCookieJar use a no-third-party policy. Most
        applications set their own cookie jar, but DumpRenderTree doesn't,
        so it was failing the new third-party-cookie test.

        * platform/network/soup/CookieJarSoup.cpp:
        (WebCore::defaultCookieJar):

2010-03-11  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] Enable network state notifier when compiling against Qt 4.7
        https://bugs.webkit.org/show_bug.cgi?id=35983

        * WebCore.pri:
        * platform/network/qt/NetworkStateNotifierPrivate.h:
        * platform/network/qt/NetworkStateNotifierQt.cpp:

2010-03-11  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Adam Treat.

        Do not render the full frame when there is some elements with fixed positioning
        https://bugs.webkit.org/show_bug.cgi?id=33150

        The frame view take into acount the list of fixed object when scrolling
        the view. If the number of object is lower than a certain threshold, the pixel
        are blitted, and the invalidated area updated.

        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::useSlowRepaints):
        (WebCore::FrameView::useSlowRepaintsIfNotOverlapped):
        (WebCore::FrameView::addFixedObject):
        (WebCore::FrameView::removeFixedObject):
        (WebCore::FrameView::scrollContentsFastPath):
        * page/FrameView.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::scrollContents):
        (WebCore::ScrollView::scrollContentsFastPath):
        * platform/ScrollView.h:
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::positionedObjects):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::styleWillChange):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::styleWillChange):

2010-03-11  Aaron Boodman  <aa@chromium.org>

        Kill WebDocument::applicationID() (part 1).

        Modify interface to WebCore::NotificationPresenter::checkPermission()
        and remove implementation of WebDocument::applicationID(). Breaking
        API changes will be in a subsequent change.
        https://bugs.webkit.org/show_bug.cgi?id=35846

        * notifications/Notification.cpp:
        (WebCore::Notification::Notification):
        * notifications/NotificationCenter.cpp:
        (WebCore::NotificationCenter::checkPermission):
        * notifications/NotificationPresenter.h:

2010-03-11  Dmitry Titov  <dimich@chromium.org>

        Reviewed by David Levin.

        [v8] Remove obsolete code for delayed dereferencing of DOM objects for single-heap, multithread v8 usage.
        https://bugs.webkit.org/show_bug.cgi?id=36043

        No new tests, no changes in functionality.

        * bindings/v8/DOMData.cpp:
        (WebCore::DOMData::DOMData):
        * bindings/v8/DOMData.h:
        (WebCore::DOMData::handleWeakObject):
        * bindings/v8/DOMDataStore.cpp:
        * bindings/v8/DOMDataStore.h:
        (WebCore::DOMDataStore::domObjectMap):
        (WebCore::DOMDataStore::activeDomObjectMap):
        (WebCore::DOMDataStore::domSvgElementInstanceMap):
        (WebCore::DOMDataStore::domSvgObjectWithContextMap):
        * bindings/v8/ScopedDOMDataStore.cpp:
        (WebCore::ScopedDOMDataStore::ScopedDOMDataStore):
        * bindings/v8/StaticDOMDataStore.cpp:
        (WebCore::StaticDOMDataStore::StaticDOMDataStore):
        * bindings/v8/StaticDOMDataStore.h:
        * bindings/v8/V8DOMMap.cpp:
        (WebCore::removeAllDOMObjectsInCurrentThread):

2010-03-11  Gavin Barraclough  <barraclough@apple.com>

        Rubber stamped by Oliver Hunt.

        Remove nonsense comments used in development & commited in error.

        * platform/text/StringImpl.h:

2010-03-11  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=36041
        Remove unnecessary differences in common code between WebCore::StringImpl & JSC::UStringImpl

        Much of the code in WebCore::StringImpl and JSC::UStringImpl is now very similar,
        but has trivial and unnecessary formatting differences, such as the exact wording
        of comments, missing ASSERTs, functions implemented in the .h vs .cpp etc.

        * platform/text/StringImpl.cpp:
        (WebCore::StringImpl::empty): Reordered in file, made empty()->characters() return a non-null value to match JSC.
        (WebCore::StringImpl::createUninitialized): Added overflow check.
        (WebCore::StringImpl::create): Reordered in file.
        (WebCore::StringImpl::sharedBuffer): Reordered in file.
        * platform/text/StringImpl.h:
        (WebCore::StringImpl::): Remove ThreadGlobalData as friend, move SharableUChar & SharedUChar to WebCore namespace.
        (WebCore::StringImpl::StringImpl): Made static constructor method (used to create empty string) take arguments, to match JSC & prevent accidental use.
        (WebCore::StringImpl::setHash): Added missing ASSERT.
        (WebCore::StringImpl::adopt): Make adpot work with Vectors with a non-zero inline capacity.
        (WebCore::StringImpl::characters): Mark as const to match JSC.
        (WebCore::StringImpl::hash): Use !m_hash instead of m_hash == 0.
        (WebCore::StringImpl::computeHash): Remove redundant 'inline'.

2010-03-11  Mark Rowe  <mrowe@apple.com>

        Reviewed by David Kilzer.

        <rdar://problem/7745082> Make it possible to build WebKit for older Mac OS X versions from the current Mac OS X version

        Default to using the appropriate SDK if the target Mac OS X version is not the current Mac OS X version.

        * Configurations/Base.xcconfig:

2010-03-11  Jungshik Shin  <jshin@chromium.org>

        [Chromium]: Plane 2 characters are rendered "blank" 
         (not even empty boxes) on Windows even when there are fonts to
         cover them. 

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

        Test:LayoutTests/fast/text/international/plane2.html 

        * platform/graphics/chromium/FontCacheChromiumWin.cpp:
        (WebCore::LookupAltName): Add two ExtB fonts to the array (namePairs) that are used for Plane 2 character rendering.
        (WebCore::FontCache::getFontDataForCharacters): Add two more fonts to the fallback font list
        * platform/graphics/chromium/FontUtilsChromiumWin.cpp:
        (WebCore::getFallbackFamily): Fix the fallback font lookup to cover Plane 2 (CJK ExtB).

2010-03-11  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Holger Freyther.

        Add EFL port files to platform/efl.
        http://webkit.org/b/35889

        * platform/efl/SystemTimeEfl.cpp: Added.

2010-03-11  Mark Rowe  <mrowe@apple.com>

        Reviewed by Tim Hatcher.

        <rdar://problem/7745082> Make it possible to build WebKit for older Mac OS X versions from the current Mac OS X version

        Introduce TARGET_MAC_OS_X_VERSION_MAJOR to represent the Mac OS X version that is being targeted.  It defaults to the
        current Mac OS X version unless otherwise specified.

        Key off TARGET_MAC_OS_X_VERSION_MAJOR where we'd previously been keying off MAC_OS_X_VERSION_MAJOR.

        Explicitly map from the target Mac OS X version to the preferred compiler since Xcode's default compiler choice
        may not be usable when targetting a different Mac OS X version.

        Key off TARGET_GCC_VERSION rather than MAC_OS_X_VERSION_MAJOR in locations where we'd previously been keying off
        MAC_OS_X_VERSION_MAJOR but the decision is really related to the compiler version being used.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:
        * Configurations/FeatureDefines.xcconfig:
        * Configurations/Version.xcconfig:
        * Configurations/WebCore.xcconfig:

2010-03-11  Anders Carlsson  <andersca@apple.com>

        Reviewed by David Hyatt.

        Remove invalidateContents, it isn't used and it never makes sense to only invalidate the contents.

        * loader/EmptyClients.h:
        * page/Chrome.cpp:
        * page/Chrome.h:
        * page/ChromeClient.h:
        * platform/HostWindow.h:

2010-03-11  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Remove DOMObjectsInclude.h and update headers accordingly.

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

        * WebCore.gypi:
        * bindings/v8/DOMData.h:
        * bindings/v8/DOMDataStore.h:
        * bindings/v8/DOMObjectsInclude.h: Removed.
        * bindings/v8/V8DOMMap.cpp:
        * bindings/v8/V8DOMWindowShell.cpp:
        * bindings/v8/V8DOMWrapper.cpp:
        * bindings/v8/V8GCController.cpp:
        * bindings/v8/V8Proxy.cpp:

2010-03-11  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Mark Rowe.

        Remove duplicate entries revealed after sorting.

        * WebCore.xcodeproj/project.pbxproj:

2010-03-11  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Mark Rowe.

        Sort the project file (also removing some bogus spaces that caused Xcode to rewrite the file
        every time you opened it).

        * WebCore.xcodeproj/project.pbxproj:

2010-03-11  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        Fix style issues and improve comments from 
        http://trac.webkit.org/changeset/55853.

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

        * platform/animation/TimingFunction.h:
        (WebCore::TimingFunction::TimingFunction):

2010-03-11  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        accessibilityIsIgnoredBase() needs to respect when platform says include
        https://bugs.webkit.org/show_bug.cgi?id=36025

        Changed accessibilityIsIgnoredBase() to return a policy instead of a yes/no
        answer. This allows the platform to make a yes decision on an element.

        * accessibility/AccessibilityList.cpp:
        (WebCore::AccessibilityList::accessibilityIsIgnored):
        * accessibility/AccessibilityListBox.cpp:
        (WebCore::AccessibilityListBox::accessibilityIsIgnored):
        * accessibility/AccessibilityObject.h:
        (WebCore::):
        (WebCore::AccessibilityObject::accessibilityIgnoreAttachment):
        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::accessibilityIsIgnoredBase):
        (WebCore::AccessibilityRenderObject::accessibilityIsIgnored):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/AccessibilitySlider.cpp:
        (WebCore::AccessibilitySlider::accessibilityIsIgnored):
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::accessibilityIsIgnored):
        * accessibility/AccessibilityTableCell.cpp:
        (WebCore::AccessibilityTableCell::accessibilityIsIgnored):
        * accessibility/AccessibilityTableRow.cpp:
        (WebCore::AccessibilityTableRow::accessibilityIsIgnored):
        * accessibility/chromium/AccessibilityObjectChromium.cpp:
        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject):
        * accessibility/gtk/AccessibilityObjectAtk.cpp:
        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject):
        * accessibility/mac/AccessibilityObjectMac.mm:
        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject):
        * accessibility/qt/AccessibilityObjectQt.cpp:
        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject):
        * accessibility/win/AccessibilityObjectWin.cpp:
        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject):
        * accessibility/wx/AccessibilityObjectWx.cpp:
        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject):

2010-03-11  Kenneth Russell  <kbr@google.com>

        Reviewed by Dimitri Glazkov.

        Fix build breakage with ENABLE_3D_CANVAS=0
        https://bugs.webkit.org/show_bug.cgi?id=35995

        No new tests; verified in Chromium that WebGL is disabled in
        ENABLE_3D_CANVAS=0 builds.

        * bindings/v8/custom/V8DocumentCustom.cpp:
        * bindings/v8/custom/V8HTMLCanvasElementCustom.cpp:

2010-03-11  Nate Chapin  <japhet@chromium.org>

        Unreviewed, Chromium mac build fix.

        Add an explicit copy constructor to TimingFunction.
        http://trac.webkit.org/changeset/55835 trigged an inlining
        bug in gcc that the copy constructor resolves.

        * platform/animation/TimingFunction.h:
        (WebCore::TimingFunction::TimingFunction):

2010-03-11  Chris Fleizach  <cfleizach@apple.com>

        Fixing GTK. No review.

        support lang attribute on <option> elements
        https://bugs.webkit.org/show_bug.cgi?id=36021
 
        We don't need to cast to AccessibilityRenderObject to get language().

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (webkit_accessible_document_get_locale):

2010-03-11  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        support lang attribute on <option> elements
        https://bugs.webkit.org/show_bug.cgi?id=36021

        Allow non AccessibilityRenderObject classes to access the lang
        attribute by moving the useful code into AccessibilityObject.

        Test: platform/mac/accessibility/option-with-lang.html

        * accessibility/AccessibilityListBoxOption.cpp:
        (WebCore::AccessibilityListBoxOption::language):
        * accessibility/AccessibilityListBoxOption.h:
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::language):
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::language):
        * accessibility/AccessibilityRenderObject.h:

2010-03-11  Diego Gonzalez  <diego.gonzalez@openbossa.org>

        Reviewed by Simon Hausmann.

        [Qt] Access key modifier should be Ctrl+Alt for Darwin derived OS and Alt for the others
        https://bugs.webkit.org/show_bug.cgi?id=35993

        * page/qt/EventHandlerQt.cpp:
        (WebCore::EventHandler::accessKeyModifiers):

2010-03-08  Brett Wilson  <brettw@chromium.org>

        Reviewed by Adam Barth.

        Remove the deprecated argument to url_util::IsStandard in preparation
        for deleting that version of the function. Pull the latest googleurl
        with the new version for the Chromium builder.

        * platform/KURLGoogle.cpp:
        (WebCore::KURL::isHierarchical):

2010-03-11  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Make it possible to do builds with separate debug info in packages

        * WebCore.pro:

2010-03-11  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Avoid double-buffering with Qt image decoders

        Pass QIODevice::Unbuffered when opening the QBuffer that
        wraps the image data, to hint to Qt that no extra buffering
        is needed.

        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::setData):

2010-03-10  Ben Murdoch  <benm@google.com>

        Reviewed by Jeremy Orlow.

        [Android] The platform touch events on Android are missing support
        for key modifiers.
        https://bugs.webkit.org/show_bug.cgi?id=35521

        Add support in PlatformToucHEventAndroid for the platform supplying
        key modifiers with touch events.

        Fixes Android so it now passes basic-single-touch-events.html.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleTouchEvent): Fix two compiler warnings.
        * platform/PlatformTouchEvent.h:
        (WebCore::PlatformTouchEvent::PlatformTouchEvent): Add support for
            key modifiers on Android.
        * platform/android/PlatformTouchEventAndroid.cpp:
        (WebCore::PlatformTouchEvent::PlatformTouchEvent): ditto.

2010-03-10  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        Implements Geolocation maximumAge property
        https://bugs.webkit.org/show_bug.cgi?id=30676

        Test: fast/dom/Geolocation/maximum-age.html

        * WebCore.xcodeproj/project.pbxproj: Modified. Adds GeolocationPositionCache.h to Private headers
        * page/Geolocation.cpp: Modified.
        (WebCore::Geolocation::GeoNotifier::setUseCachedPosition): Added.
        (WebCore::Geolocation::GeoNotifier::runSuccessCallback): Added.
        (WebCore::Geolocation::GeoNotifier::timerFired): Modified. Added logic to handle using a cached position
        (WebCore::Geolocation::Watchers::contains): Added. Required to determine if a notifier is a watch request
        (WebCore::Geolocation::startRequest): Modified. Added logic to check for a cached position
        (WebCore::Geolocation::requestUsesCachedPosition): Added. Callback to Geolocation object when notifier uses a cached position
        (WebCore::Geolocation::makeCachedPositionCallbacks): Added.
        (WebCore::Geolocation::haveSuitableCachedPosition): Added.
        (WebCore::Geolocation::setIsAllowed): Modified.
        (WebCore::Geolocation::positionChanged): Modified. Make callbacks using cached position where appropriate
        (WebCore::Geolocation::geolocationServiceErrorOccurred): Modified. Make callbacks using cached position where appropriate
        * page/Geolocation.h: Modified.

2010-03-11  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed buildfix after r55823. (To fix Qt --minimal build.)
        I have déjà vu, I'm sure that I did it before. (r55598)

        * bindings/js/JSDOMWindowCustom.cpp: Missing #if ENABLE(DATABASE) guard added. 

2010-03-11  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Unreviewed buildfix after r55833.

        Rename all instances of data() to characters()

        * bridge/qt/qt_class.cpp:
        (JSC::Bindings::QtClass::fieldNamed):
        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::convertValueToQVariant):

2010-03-11  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Simon Hausmann.

        Allow custom memory allocation control for RenderLayerBacking class
        https://bugs.webkit.org/show_bug.cgi?id=35857

        Inherits the following class from Noncopyable because it is
        instantiated by 'new' and no need to be copyable:                                     

        class name    - instantiated at: WebCore/'location'
        RenderLayerBacking - rendering/RenderLayer.cpp:3047

        * rendering/RenderLayerBacking.h:

2010-03-11  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Simon Hausmann.

        Allow custom memory allocation control for TimingFunction struct
        https://bugs.webkit.org/show_bug.cgi?id=35855

        Inherits the following struct from FastAllocBase because it is 
        instantiated by 'new':

        class name    - instantiated at: WebCore/'location'
        TimingFuction - platform/graphics/GraphicsLayer.h:89

        * platform/animation/TimingFunction.h:

2010-03-10  Gavin Barraclough  <barraclough@apple.com>

        Rubber stamped by Oliver Hunt.
        
        Rename JSC::UStringImpl::data() to characters(), to match WebCore::StringImpl.

        * bridge/jni/jsc/JavaStringJSC.h:
        (JSC::Bindings::JavaStringImpl::uchars):
        * platform/text/AtomicString.cpp:
        (WebCore::AtomicString::add):
        (WebCore::AtomicString::find):

2010-03-10  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Mark Rowe.

        Fix for r55825, threadsafeCopy no longer needs to special-case for
        empty strings (in fact, doing so results in leaks).

        * platform/text/StringImpl.cpp:
        (WebCore::StringImpl::threadsafeCopy):

2010-03-10  Chang Shu  <chang.shu@nokia.com>

        Reviewed by Darin Adler.

        While calculating alpha channel, convert the floating point value to
        an integer in [0, 256) with equal distribution.
        https://bugs.webkit.org/show_bug.cgi?id=22150

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseColorParameters):

2010-03-10  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Darin Adler, Geoffrey Garen, Maciej Stachowiak.

        https://bugs.webkit.org/show_bug.cgi?id=35991
        Would be faster to not use a thread specific to implement StringImpl::empty()

        Copy JavaScriptCore in making 'static' strings threadsafe, make the empty string a static,
        shared by all threads.

        ~2% progression on Dromaeo DOM core & JS lib tests.

        * platform/ThreadGlobalData.cpp:
        (WebCore::ThreadGlobalData::ThreadGlobalData):
        (WebCore::ThreadGlobalData::~ThreadGlobalData):
        * platform/ThreadGlobalData.h:
        (WebCore::ThreadGlobalData::eventNames):
        * platform/text/StringImpl.cpp:
        (WebCore::StringImpl::StringImpl):
        (WebCore::StringImpl::empty):
        * platform/text/StringImpl.h:
        (WebCore::StringImpl::deref):
        (WebCore::StringImpl::hasOneRef):

2010-03-08  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Adam Barth.

        Adding support for the optional creation callback that could be
        passed to openDatabase().

        Tests: storage/open-database-creation-callback.html
               storage/open-database-creation-callback-isolated-world.html

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

        * Android.jscbindings.mk
        * Android.v8bindings.mk
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::openDatabase):
        * bindings/js/JSDatabaseCallback.cpp: Added.
        (WebCore::JSDatabaseCallback::JSDatabaseCallback):
        (WebCore::JSDatabaseCallback::~JSDatabaseCallback):
        (WebCore::JSDatabaseCallback::handleEvent):
        * bindings/js/JSDatabaseCallback.h: Added.
        (WebCore::JSDatabaseCallback::create):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8DOMWindow::openDatabaseCallback):
        * bindings/v8/custom/V8DatabaseCallback.cpp: Added.
        (WebCore::V8DatabaseCallback::V8DatabaseCallback):
        (WebCore::V8DatabaseCallback::~V8DatabaseCallback):
        (WebCore::V8DatabaseCallback::handleEvent):
        * bindings/v8/custom/V8DatabaseCallback.h: Added.
        (WebCore::V8DatabaseCallback::create):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::openDatabase):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:
        * storage/Database.cpp:
        (WebCore::DatabaseCreationCallbackTask::create):
        (WebCore::DatabaseCreationCallbackTask::performTask):
        (WebCore::DatabaseCreationCallbackTask::DatabaseCreationCallbackTask):
        (WebCore::Database::openDatabase):
        (WebCore::Database::Database):
        (WebCore::Database::performOpenAndVerify):
        (WebCore::Database::performCreationCallback):
        * storage/Database.h:
        (WebCore::Database::isNew):
        * storage/DatabaseCallback.h: Added.
        (WebCore::DatabaseCallback::~DatabaseCallback):
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::openDatabase):
        * workers/WorkerContext.h:

2010-03-10  Justin Schuh  <jschuh@chromium.org>

        Reviewed by Adam Barth.

        Make Chrome consistently handle leading format characters in URLs

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

        Test: http/tests/security/xss-DENIED-window-open-javascript-url-leading-format-char.html

        * platform/KURLGoogle.cpp:

2010-03-10  Jian Li  <jianli@chromium.org>

        Reviewed by Dmitry Titov.

        Implementing DOMFormData class.
        https://bugs.webkit.org/show_bug.cgi?id=35707

        This patch only addresses the implementation of DOMFormData class and
        moves the FormData construction logic from HTMLFormElement::createFormData
        to FormData::create() so that it can be used by both HTMLFormElement
        and XMLHttpRequest.

        The DOMFormData IDL interface will be exposed in another patch and the
        test will be added then.

        * Android.mk:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * html/DOMFormData.cpp: Added.
        * html/DOMFormData.h: Added.
        * html/FormDataList.h:
        (WebCore::FormDataList::encoding):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::createFormData):
        (WebCore::HTMLFormElement::submit):
        * html/HTMLFormElement.h:
        * platform/network/FormData.cpp:
        (WebCore::FormData::create):
        (WebCore::FormData::createMultiPart):
        (WebCore::FormData::appendDOMFormData):
        * platform/network/FormData.h:
        (WebCore::FormData::boundary):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::send):
        * xml/XMLHttpRequest.h:

2010-03-10  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        VoiceOver can navigate to hidden content in widget (WAI-ARIA)
        https://bugs.webkit.org/show_bug.cgi?id=35986

        Elements that are subclassers of AXRenderObject have not been respecting
        aria-hidden and other cases that would make them ignored. This applies
        to tables, rows, cells, select boxes, sliders, and lists. Select boxes
        also need to make sure their option elements respect aria-hidden as well.

        Test: accessibility/aria-hidden-with-elements.html

        * accessibility/AccessibilityList.cpp:
        (WebCore::AccessibilityList::accessibilityIsIgnored):
        * accessibility/AccessibilityListBox.cpp:
        (WebCore::AccessibilityListBox::addChildren):
        (WebCore::AccessibilityListBox::accessibilityIsIgnored):
        (WebCore::AccessibilityListBox::doAccessibilityHitTest):
        * accessibility/AccessibilityListBox.h:
        * accessibility/AccessibilityListBoxOption.cpp:
        (WebCore::AccessibilityListBoxOption::accessibilityIsIgnored):
        * accessibility/AccessibilityListBoxOption.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::accessibilityIsIgnoredCommon):
        (WebCore::AccessibilityRenderObject::accessibilityIsIgnored):
        (WebCore::AccessibilityRenderObject::doAccessibilityHitTest):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/AccessibilitySlider.cpp:
        (WebCore::AccessibilitySlider::accessibilityIsIgnored):
        * accessibility/AccessibilitySlider.h:
        (WebCore::AccessibilitySlider::roleValue):
        (WebCore::AccessibilitySliderThumb::roleValue):
        (WebCore::AccessibilitySliderThumb::accessibilityIsIgnored):
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::accessibilityIsIgnored):
        * accessibility/AccessibilityTableCell.cpp:
        (WebCore::AccessibilityTableCell::accessibilityIsIgnored):
        * accessibility/AccessibilityTableColumn.cpp:
        (WebCore::AccessibilityTableColumn::accessibilityIsIgnored):
        * accessibility/AccessibilityTableColumn.h:
        (WebCore::AccessibilityTableColumn::roleValue):
        * accessibility/AccessibilityTableHeaderContainer.cpp:
        (WebCore::AccessibilityTableHeaderContainer::accessibilityIsIgnored):
        * accessibility/AccessibilityTableHeaderContainer.h:
        * accessibility/AccessibilityTableRow.cpp:
        (WebCore::AccessibilityTableRow::accessibilityIsIgnored):

2010-03-10  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Darin Adler.

        Make Document::postTask to use a single queue of tasks, to fire them in order
        https://bugs.webkit.org/show_bug.cgi?id=35943

        Test: existing worker-cloneport.html which was broken by initial patch in http://trac.webkit.org/changeset/55593.
        Additional test which indirectly verifies the order of execution will come as part of https://bugs.webkit.org/show_bug.cgi?id=34726

        * dom/Document.cpp:
        (WebCore::Document::postTask): Always use the same task queue, independent of what thread is posting the task.

2010-03-10  Sanjeev Radhakrishnan  <sanjeevr@chromium.org>

        Reviewed by Darin Fisher.

        Allow a plugin to participate in the browser's print workflow.
        https://bugs.webkit.org/show_bug.cgi?id=35550

        * loader/PluginDocument.cpp:
        * loader/PluginDocument.h:

2010-03-10  Ilya Tikhonovsky  <loislo@loislo-macbookpro.local>

        Reviewed by Pavel Feldman.

        Sidebar resize element height was adjusted.
        Display name for Function Call details was adjusted.

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

        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype._refreshRecords):
        (WebInspector.TimelinePanel.FormattedRecord.prototype._getRecordDetails):

2010-03-10  Charles Wei  <charles.wei@torchmobile.com.cn>

        Reviewed by George Staikos.

        Fix https://bugs.webkig.org/show_bug.cgi?id=35207
        When XHTMLMP is enabled, all xhtml documents fail to render for webkit portings wich use libxml2 tokenizer.

        No new tests as all the xhtml test cases in LayoutTests/dom/xhtml fails without this fix when XHTMLMP is enabled.

        * dom/Document.cpp:
        (WebCore::Document::isXHTMLMPDocument):
        * dom/XMLTokenizerLibxml2.cpp:
        (WebCore::XMLTokenizer::internalSubset):
        (WebCore::externalSubsetHandler):

2010-03-10  Garret Kelly  <gdk@chromium.org>

        Reviewed by Darin Fisher.

        Adding all of the touch-related sources into Chromium's WebCore build.
        https://bugs.webkit.org/show_bug.cgi?id=35874

        Patch tested against the try bots, but the feature is exercised in the
        fast/events/touch tests.

        * WebCore.gypi:

2010-03-10  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: now that audits panel is added, add it to the
        enums (for storing last active, etc.).

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

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::setWindowVisible):
        (WebCore::InspectorController::specialPanelForJSName):
        * inspector/InspectorController.h:
        (WebCore::InspectorController::):
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::showPanel):
        * inspector/front-end/inspector.js:
        (WebInspector.showAuditsPanel):

2010-03-10  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Instead of describing the type of a wrapped v8 object
        with an enum value, use a pointer to struct with more complete
        information.

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

        Refactoring only, so new tests.

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/DOMData.cpp:
        * bindings/v8/DOMData.h:
        * bindings/v8/NPV8Object.cpp:
        * bindings/v8/V8Collection.h:
        * bindings/v8/V8DOMWindowShell.cpp:
        * bindings/v8/V8DOMWindowShell.h:
        * bindings/v8/V8DOMWrapper.cpp:
        * bindings/v8/V8DOMWrapper.h:
        * bindings/v8/V8GCController.cpp:
        * bindings/v8/V8Helpers.cpp:
        * bindings/v8/V8Helpers.h:
        * bindings/v8/V8Index.cpp: Removed.
        * bindings/v8/V8Index.h:
        * bindings/v8/V8NPObject.cpp:
        * bindings/v8/V8Proxy.cpp:
        * bindings/v8/V8Proxy.h:
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        * bindings/v8/custom/V8HTMLAudioElementConstructor.cpp:
        * bindings/v8/custom/V8HTMLAudioElementConstructor.h:
        * bindings/v8/custom/V8HTMLImageElementConstructor.cpp:
        * bindings/v8/custom/V8HTMLImageElementConstructor.h:
        * bindings/v8/custom/V8HTMLOptionElementConstructor.cpp:
        * bindings/v8/custom/V8HTMLOptionElementConstructor.h:
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        * bindings/v8/custom/V8MessageChannelConstructor.cpp:
        * bindings/v8/custom/V8SharedWorkerCustom.cpp:
        * bindings/v8/custom/V8WebGLArrayBufferCustom.cpp:
        * bindings/v8/custom/V8WebGLArrayCustom.h:
        * bindings/v8/custom/V8WebGLByteArrayCustom.cpp:
        * bindings/v8/custom/V8WebGLFloatArrayCustom.cpp:
        * bindings/v8/custom/V8WebGLIntArrayCustom.cpp:
        * bindings/v8/custom/V8WebGLShortArrayCustom.cpp:
        * bindings/v8/custom/V8WebGLUnsignedByteArrayCustom.cpp:
        * bindings/v8/custom/V8WebGLUnsignedIntArrayCustom.cpp:
        * bindings/v8/custom/V8WebGLUnsignedShortArrayCustom.cpp:
        * bindings/v8/custom/V8WebKitCSSMatrixConstructor.cpp:
        * bindings/v8/custom/V8WebKitPointConstructor.cpp:
        * bindings/v8/custom/V8WebSocketCustom.cpp:
        * bindings/v8/custom/V8WorkerCustom.cpp:
        * bindings/v8/custom/V8XMLHttpRequestConstructor.cpp:
        * bindings/v8/custom/V8XSLTProcessorCustom.cpp:

2010-03-10  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Dave Hyatt.
        Patch by Antonio Gomes <tonikitoo@webkit.org>

        Extend keyboard navigation to allow directional navigation (Manual tests)
        https://bugs.webkit.org/show_bug.cgi?id=18662

        Adds a manual tests for the Spatial Navigation feature comprasing varios
        Html focusable elements (e.g. <a>, <table>, <iframe>) and much of the logic
        provided by the feature.

        * manual-tests/spatial-navigation/links.html: Added.
        * manual-tests/spatial-navigation/spatial-navigation-test-cases.html: Added.

2010-03-10  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Kenneth Rohde Christiansen.

        Add EFL port files to platform/efl.
        http://webkit.org/b/35890

        * platform/efl/ScrollbarEfl.h: Added.
        * platform/efl/ScrollbarThemeEfl.h: Added.

2010-03-10  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Audits panel needs an icon.
        Landing icon attached by Timothy. Enabling panel!

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

        * WebCore.gypi:
        * inspector/front-end/Images/auditsIcon.png: Added.
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.css:

2010-03-10  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Roll-out r55657, as Xan noticed a bad degradation in playing
        youtube HTML5 videos with it, that is fixed with it
        reverted. Looks like we'll need to work a bit more on this.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::~MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::volumeChangedTimerFired):
        (WebCore::MediaPlayerPrivate::volumeChanged):
        (WebCore::MediaPlayerPrivate::processBufferingStats):
        (WebCore::MediaPlayerPrivate::fillTimerFired):
        (WebCore::MediaPlayerPrivate::maxTimeLoaded):
        (WebCore::MediaPlayerPrivate::updateStates):
        (WebCore::MediaPlayerPrivate::muteChangedTimerFired):
        (WebCore::MediaPlayerPrivate::muteChanged):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:

2010-03-10  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Rubber-stamped by Xan Lopez.

        Fix ready state when buffering under PLAYING. We should not go
        back to HaveNothing in that case.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::updateStates):

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

        Reviewed by Adam Roben.

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

        Retrieve any dwItemData that's set on the context menu item in contextMenuItemByIdOrPosition().

        * platform/win/ContextMenuWin.cpp:

2010-03-10  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Darin Fisher.

        Add IndexedDatabase class and hook it up.
        https://bugs.webkit.org/show_bug.cgi?id=35927

        This change is mostly just adding the plumbing necessary for
        the IndexedDatabaseRequest and IndexedDatabaseSync (not written
        yet).

        This code is non-functional, so no tests (yet).

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * platform/chromium/ChromiumBridge.h:
        * storage/IndexedDatabase.cpp: Added.
        (WebCore::IndexedDatabase::get):
        * storage/IndexedDatabase.h: Added.
        (WebCore::IndexedDatabase::~IndexedDatabase):
        * storage/IndexedDatabaseImpl.cpp: Added.
        (WebCore::IndexedDatabaseImpl::get):
        (WebCore::IndexedDatabaseImpl::IndexedDatabaseImpl):
        (WebCore::IndexedDatabaseImpl::~IndexedDatabaseImpl):
        (WebCore::IndexedDatabaseImpl::open):
        * storage/IndexedDatabaseImpl.h: Added.
        * storage/chromium/IndexedDatabase.cpp: Added.
        (WebCore::IndexedDatabase::get):

2010-03-05  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Sam Weinig.

        Add one more parent check during node removal.
        https://bugs.webkit.org/show_bug.cgi?id=35818

        Test: fast/dom/Node/mutation-blur.html

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::removeChild): Added check.

2010-03-10  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: added missing quote into localized strings.

        * English.lproj/localizedStrings.js:

2010-03-10  Jeremy Orlow  <jorlow@chromium.org>

        Commit files that were supposed to go in with the last checkin.

2010-03-10  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Dimitry Glazkov.

        Baby steps towards IndexedDB: Start implementing callbacks.
        https://bugs.webkit.org/show_bug.cgi?id=35911

        This patch adds some infastructure for IndexedDB callbacks in V8.
        It also adds a stub of IDBDatabaseRequest.  In the near future,
        I'll gut the event based implementation code, flesh out IDBReqest
        further, and start plumbing IndexedDatabaseRequest.

        Code is not testible because it doesn't work (yet).

        * WebCore.gypi:
        * bindings/v8/DOMObjectsInclude.h:
        * bindings/v8/V8Index.cpp:
        * bindings/v8/V8Index.h:
        * bindings/v8/custom/V8CustomIDBCallback.h: Added.
        (WebCore::V8CustomIDBCallback::create):
        (WebCore::V8CustomIDBCallback::~V8CustomIDBCallback):
        (WebCore::V8CustomIDBCallback::handleEvent):
        (WebCore::V8CustomIDBCallback::V8CustomIDBCallback):
        * bindings/v8/custom/V8IndexedDatabaseRequestCustom.cpp:
        (WebCore::V8IndexedDatabaseRequest::openCallback):
        * storage/IDBDatabaseRequest.h: Added.
        (WebCore::IDBDatabaseRequest::request):
        * storage/IDBDatabaseRequest.idl: Added.
        * storage/IndexedDatabaseRequest.idl:

2010-03-10  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann.

        [Qt] Non animated gifs are animated in QtWebKit
        https://bugs.webkit.org/show_bug.cgi?id=35955

        Properly map Qt animated and non-animated values to WebCore's
        understanding of animated and non-animated images. Currently
        we can not map anything to the cAnimationLoopNone value.

        * manual-tests/qt/qt-anim.gif: Added.
        * manual-tests/qt/qt-gif-test.html: Added.
        * manual-tests/qt/qt-noanim.gif: Added.
        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::repetitionCount):

2010-03-07  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Darin Adler.

        [CAIRO] DoS on iexploder test with high text stroke width.
        https://bugs.webkit.org/show_bug.cgi?id=33759

        Specifying a big text stroke width can make WebKitGTK+ spend
        a very long time in the cairo library for stroking the path of
        the text. The best way to prevent this from happening right now
        is to not stroke paths with a certain width. Samuel proposed to
        not stroke with a width that is twice the width of the text. The
        reason to use twice the text width is that even one stroke of
        any charachter to be drawn would cover the full width.

        Test: fast/text/text-stroke-width-cairo-dos.html

        * platform/graphics/cairo/FontCairo.cpp:
        (WebCore::Font::drawGlyphs):

2010-03-10  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: display list of active workers & support debugging
        with fake workers.
        https://bugs.webkit.org/show_bug.cgi?id=35568

        * English.lproj/localizedStrings.js:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::InjectedScriptHost::createInjectedScript):
        (WebCore::InjectedScriptHost::injectedScriptFor):
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::InjectedScriptHost::createInjectedScript):
        (WebCore::InjectedScriptHost::injectedScriptFor):
        * dom/Document.cpp:
        (WebCore::Document::inspectorController):
        * dom/Document.h:
        * dom/ScriptExecutionContext.h:
        (WebCore::ScriptExecutionContext::inspectorController):
        * inspector/InjectedScriptHost.cpp:
        (WebCore::InjectedScriptHost::InjectedScriptHost):
        (WebCore::InjectedScriptHost::injectScript):
        (WebCore::InjectedScriptHost::nextWorkerId):
        (WebCore::InjectedScriptHost::didCreateWorker):
        (WebCore::InjectedScriptHost::willDestroyWorker):
        * inspector/InjectedScriptHost.h:
        * inspector/InjectedScriptHost.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::populateScriptObjects):
        (WebCore::InspectorController::resetScriptObjects):
        (WebCore::InspectorController::didCommitLoad):
        (WebCore::InspectorController::didCreateWorker):
        (WebCore::InspectorController::willDestroyWorker):
        * inspector/InspectorController.h:
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::didCreateWorker):
        (WebCore::InspectorFrontend::willDestroyWorker):
        * inspector/InspectorFrontend.h:
        * inspector/InspectorWorkerResource.h: Added.
        (WebCore::InspectorWorkerResource::create):
        (WebCore::InspectorWorkerResource::id):
        (WebCore::InspectorWorkerResource::url):
        (WebCore::InspectorWorkerResource::isSharedWorker):
        (WebCore::InspectorWorkerResource::InspectorWorkerResource):
        * inspector/front-end/Checkbox.js: Added.
        (WebInspector.Checkbox.callbackWrapper):
        (WebInspector.Checkbox):
        (WebInspector.Checkbox.prototype.checked):
        * inspector/front-end/InjectedFakeWorker.js:
        (InjectedFakeWorker.FakeWorker):
        (InjectedFakeWorker.FakeWorker.prototype.terminate):
        (InjectedFakeWorker.FakeWorker.prototype._handleException):
        (InjectedFakeWorker.FakeWorker.prototype._importScripts):
        (InjectedFakeWorker.FakeWorker.prototype._loadScript):
        (InjectedFakeWorker.FakeWorker.prototype._expandURLAndCheckOrigin):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype.debuggerWasEnabled):
        (WebInspector.ScriptsPanel.prototype.debuggerWasDisabled):
        (WebInspector.ScriptsPanel.prototype.reset):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertiesSection.showInheritedToggleFunction):
        (WebInspector.StylePropertiesSection):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/WorkersSidebarPane.js: Added.
        (WebInspector.WorkersSidebarPane):
        (WebInspector.WorkersSidebarPane.prototype.addWorker):
        (WebInspector.WorkersSidebarPane.prototype.removeWorker):
        (WebInspector.WorkersSidebarPane.prototype.setInstrumentation):
        (WebInspector.WorkersSidebarPane.prototype.reset):
        (WebInspector.WorkersSidebarPane.prototype._onTriggerInstrument):
        (WebInspector.Worker):
        (WebInspector.didCreateWorker):
        (WebInspector.willDestroyWorker):
        * inspector/front-end/inspector.css:
        * inspector/front-end/inspector.html:
        * workers/AbstractWorker.cpp:
        (WebCore::AbstractWorker::AbstractWorker):
        (WebCore::AbstractWorker::~AbstractWorker):
        (WebCore::AbstractWorker::onDestroyWorker):
        (WebCore::AbstractWorker::contextDestroyed):
        * workers/AbstractWorker.h:
        (WebCore::AbstractWorker::id):
        * workers/SharedWorker.cpp:
        (WebCore::SharedWorker::SharedWorker):
        * workers/Worker.cpp:
        (WebCore::Worker::Worker):

2010-03-10  Roland Steiner  <rolandsteiner@chromium.org>

        Unreviewed build fix. Fix variable name change that somehow didn't
        make it into the patch.

2010-03-10  Roland Steiner  <rolandsteiner@chromium.org>

        Reviewed by David Levin.

        Bug 28293 -  [Chromium] event.datatransfer.getdata("text/uri-list") is treated the same as getdata("URL")
        https://bugs.webkit.org/show_bug.cgi?id=28293
        
        Change ChromiumDataObject such that it treats types "URL" and "text/uri-list"
        correctly for event.dataTransfer.getData/setData. Currently both are treated
        as synonyms, but for "URL", getData is supposed to only return the first valid URL
        contained within the data for "text/uri-list" (see HTML5 spec).

        Tests: editing/pasteboard/dataTransfer-setData-getData.html

        * platform/chromium/ChromiumDataObject.cpp:
        (WebCore::ChromiumDataObject::clear):
        (WebCore::ChromiumDataObject::clearAllExceptFiles):
        (WebCore::ChromiumDataObject::hasData):
        (WebCore::ChromiumDataObject::ChromiumDataObject):
        * platform/chromium/ChromiumDataObject.h:
        (WebCore::ChromiumDataObject::clearURL):
        (WebCore::ChromiumDataObject::hasValidURL):
        (WebCore::ChromiumDataObject::getURL):
        (WebCore::ChromiumDataObject::setURL):
        * platform/chromium/ClipboardChromium.cpp:
        (WebCore::):
        (WebCore::clipboardTypeFromMIMEType):
        (WebCore::ClipboardChromium::clearData):
        (WebCore::ClipboardChromium::getData):
        (WebCore::ClipboardChromium::setData):
        (WebCore::ClipboardChromium::types):
        * platform/chromium/DragDataChromium.cpp:
        (WebCore::DragData::asURL):
        (WebCore::DragData::canSmartReplace):

2010-03-09  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: REGRESSION: Tall image resources are cropped over the bottom.

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

        * inspector/front-end/inspector.css:

2010-03-09  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: REGRESSION: Pressing up/down arrow key to change numeric
        value in CSS property takes focus away.

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

        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertyTreeElement.prototype):
        (WebInspector.StylePropertyTreeElement.prototype.):

2010-03-09  Tony Chang  <tony@chromium.org>

        Reviewed by Adam Barth.

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

        Fix an editing bug where replacing a selection would result in the
        new text ending up inside nodes that were not visibly included in the
        selection.  Instead, move our destination position out of nodes that
        were not visibly included.

        Tests: editing/deleting/backspace-avoid-preceding-style.html
               editing/inserting/replace-at-visible-boundary.html

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::positionAvoidingPrecedingNodes):
        (WebCore::ReplaceSelectionCommand::doApply):

2010-03-09  Brady Eidson  <beidson@apple.com>

        Reviewed by Tim Hatcher.

        REGRESSION: WebInspector docking busted on Windows
        <rdar://problem/7728433> and https://bugs.webkit.org/show_bug.cgi?id=35953

        First off, a bit of settings-key related cleanup. If they're shared over multiple files, these 
        things should be properly declared Strings, not random loose char*'s.

        Along with that change, we move the "inspectorStartsAttachedSettingName" from WebKit down to the
        InspectorController in WebCore.

        Finally, when the controller is ready to show the WebInspector window, it can use this newly
        exposed settings key to call "setWindowVisible" directly instead of relying on "showWindow" to do
        it indirectly.

        * WebCore.base.exp:

        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::saveFrontendSettings):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::frontendSettingsSettingName):
        (WebCore::InspectorController::inspectorStartsAttachedSettingName):
        (WebCore::InspectorController::scriptObjectReady): Using the new inspectorStartsAttachedSettingName
          key and some "can I attach this?" logic, call setWindowVisible directly to display the inspector
          window.
        (WebCore::InspectorController::populateScriptObjects):
        * inspector/InspectorController.h:

2010-03-09  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Mark Rowe.

        https://bugs.webkit.org/show_bug.cgi?id=35951
        <rdar://problem/7327060> Frequent crashes in Dashcode at JSC::Bindings::ObjcInstance::~ObjcInstance + 80

        * bridge/objc/objc_instance.mm: (createInstanceWrapperCache): Fix Tiger code path, too.

2010-03-09  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=35951
        <rdar://problem/7327060> Frequent crashes in Dashcode at JSC::Bindings::ObjcInstance::~ObjcInstance + 80

        * bridge/objc/objc_instance.mm: (createInstanceWrapperCache): It's not correct to use object
        personality for keys, because the key can be a mutable object, so its hash can change over its
        lifetime.

2010-03-09  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Darin Adler.

        Fix review comment accidentally overlooked in bug 35713
        https://bugs.webkit.org/show_bug.cgi?id=35947

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::setStartingSelectionOnSmartDelete):
        * editing/DeleteSelectionCommand.h:

2010-03-03  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Adam Barth.

        undo after smartdelete should select the deleted space
        https://bugs.webkit.org/show_bug.cgi?id=35713

        TextEdit behavior is to select the deleted space after a smartdelete.

        Tests: editing/undo/undo-smart-delete-reversed-selection.html
               editing/undo/undo-smart-delete-word.html

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::setStartingSelectionOnSmartDelete):
        (WebCore::DeleteSelectionCommand::initializePositionData):
        * editing/DeleteSelectionCommand.h:
        * editing/VisibleSelection.cpp:
        (WebCore::VisibleSelection::setWithoutValidation):
        This assert looks bogus to me. undo-smart-delete-reversed-selection.html hits it
        but not as a result of the other changes in this patch. The granularity when
        deleting after making a wordgranularity selection is wordgranularity, not charactergranularity.

2010-03-09  Steve Falkenburg  <sfalken@apple.com>

        Rubber stamped by Adam Roben.

        Load debug version of graphics library in Windows Debug_All builds.

        * platform/graphics/win/WKCACFLayerRenderer.cpp:
        (WebCore::WKCACFLayerRenderer::acceleratedCompositingAvailable):

2010-03-09  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        Plug-ins don't always respect the cookie accept policy.
        <rdar://problem/7338359> and https://bugs.webkit.org/show_bug.cgi?id=26391

        The problem is that the various plug-in implementations call into a ResourceLoader
        directly instead of filtering the request through FrameLoader. This bypassed the step
        of adding extra fields to the requests, such as the firstPartyForCookies URL.

        Since plug-in code is currently so strewn about and very platform specific, I
        think reworking it needs to be a task for domain experts. I don't know the implications
        of adding *all* the extra fields to plug-in requests, for example.

        There's no harm in this targeted fix for the hole in our cookie accept policy until
        plug-ins can more fundamentally change.

        Test: http/tests/plugins/third-party-cookie-accept-policy.html

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::load): Don't load a resource without first giving the request 
          a firstPartyForCookies URL.

2010-03-09  Andy Estes  <aestes@apple.com>

        Reviewed by Adele Peterson.

        Check for null renderer in scrollNode().
        https://bugs.webkit.org/show_bug.cgi?id=34700

        Test: fast/events/remove-child-onscroll.html

        * page/EventHandler.cpp:
        (WebCore::scrollNode): Return early if node->renderer() == 0

2010-03-09  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Unreviewed distcheck fix.

        * GNUmakefile.am:

2010-03-09  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Unreviewed build fix (only exposed by make distcheck). The
        SharedWorkers files are not built, they need to be distributed.

        * GNUmakefile.am:

2010-03-09  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Dirk Schulze.

        [GStreamer] Buffering logic is not correct, and does not work very well
        https://bugs.webkit.org/show_bug.cgi?id=35706

        Fix buffering to match GStreamer expectancies regarding the
        pipeline state, so that videos which really need buffering to play
        correctly also work, while maintaining the convenience of
        on-disk-buffering. This required a bit of shuffling of state
        change handling.

        No behaviour change expected.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::processBufferingStats):
        (WebCore::MediaPlayerPrivate::fillTimerFired):
        (WebCore::MediaPlayerPrivate::updateStates):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:

2010-03-09  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Dirk Schulze.

        [GStreamer] Buffering logic is not correct, and does not work very well
        https://bugs.webkit.org/show_bug.cgi?id=35706

        Do not call pause(), but set the GStreamer state directly. This is
        just a GStreamer implementation detail, and this will avoid having
        side effects in case we change the pause implementation in the
        future.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::load):

2010-03-09  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        AX: hit testing a list box doesn't work anymore
        https://bugs.webkit.org/show_bug.cgi?id=35893

        Since <option> elements don't have renderers, their hit testing needs
        to be handled with a special case.

        Test: platform/mac/accessibility/listbox-hit-test.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::ariaIsHidden):
        (WebCore::AccessibilityRenderObject::doAccessibilityHitTest):

2010-03-09  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Refactor Audits panel presentation layer.
        This change removes unnecessary complexity:
          - Audit scores were not used
          - Audit rule parameters are passed as rule constructor arguments
          - View management aligned with the rest of the front-end
          - Single TreeOutline is used for category results (no need to create sections for those)
          - Rules code beautified and simplified where possible
          - Some UI improvements applied (see attached screenshot)

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

        * inspector/front-end/AuditCategories.js:
        (WebInspector.AuditCategories.PagePerformance.prototype.initialize):
        (WebInspector.AuditCategories.NetworkUtilization.prototype.initialize):
        * inspector/front-end/AuditResultView.js:
        (WebInspector.AuditResultView):
        (WebInspector.AuditCategoryResultPane):
        (WebInspector.AuditCategoryResultPane.prototype._appendResult):
        * inspector/front-end/AuditRules.js:
        (WebInspector.AuditRules.GzipRule.prototype.doRun):
        (WebInspector.AuditRules.CombineExternalResourcesRule):
        (WebInspector.AuditRules.CombineExternalResourcesRule.prototype.doRun):
        (WebInspector.AuditRules.CombineJsResourcesRule):
        (WebInspector.AuditRules.CombineCssResourcesRule):
        (WebInspector.AuditRules.MinimizeDnsLookupsRule):
        (WebInspector.AuditRules.MinimizeDnsLookupsRule.prototype.doRun):
        (WebInspector.AuditRules.ParallelizeDownloadRule):
        (WebInspector.AuditRules.ParallelizeDownloadRule.prototype.doRun):
        (WebInspector.AuditRules.UnusedCssRule):
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun.evalCallback):
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun.routine):
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun):
        (WebInspector.AuditRules.CacheControlRule):
        (WebInspector.AuditRules.CacheControlRule.prototype.doRun):
        (WebInspector.AuditRules.CacheControlRule.prototype.execCheck):
        (WebInspector.AuditRules.BrowserCacheControlRule):
        (WebInspector.AuditRules.BrowserCacheControlRule.prototype.handleNonCacheableResources):
        (WebInspector.AuditRules.BrowserCacheControlRule.prototype.runChecks):
        (WebInspector.AuditRules.ProxyCacheControlRule):
        (WebInspector.AuditRules.ProxyCacheControlRule.prototype.runChecks):
        (WebInspector.AuditRules.ImageDimensionsRule):
        (WebInspector.AuditRules.ImageDimensionsRule.prototype.doRun):
        (WebInspector.AuditRules.CssInHeadRule):
        (WebInspector.AuditRules.CssInHeadRule.prototype.doRun):
        (WebInspector.AuditRules.CssInHeadRule.prototype.doRun.routine):
        (WebInspector.AuditRules.StylesScriptsOrderRule):
        (WebInspector.AuditRules.StylesScriptsOrderRule.prototype.doRun):
        (WebInspector.AuditRules.StylesScriptsOrderRule.prototype.doRun.routine):
        (WebInspector.AuditRules.CookieRuleBase):
        (WebInspector.AuditRules.CookieRuleBase.prototype.doRun.resultCallback):
        (WebInspector.AuditRules.CookieRuleBase.prototype.doRun):
        (WebInspector.AuditRules.CookieSizeRule):
        (WebInspector.AuditRules.CookieSizeRule.prototype.processCookies):
        (WebInspector.AuditRules.StaticCookielessRule):
        (WebInspector.AuditRules.StaticCookielessRule.prototype.processCookies):
        * inspector/front-end/AuditsPanel.js:
        (WebInspector.AuditsPanel):
        (WebInspector.AuditsPanel.prototype._executeAudit.ruleResultReadyCallback):
        (WebInspector.AuditsPanel.prototype._executeAudit):
        (WebInspector.AuditsPanel.prototype._reloadResources):
        (WebInspector.AuditsPanel.prototype._didMainResourceLoad):
        (WebInspector.AuditsPanel.prototype.showResults):
        (WebInspector.AuditsPanel.prototype.showLauncherView):
        (WebInspector.AuditsPanel.prototype.get visibleView):
        (WebInspector.AuditsPanel.prototype.set visibleView):
        (WebInspector.AuditsPanel.prototype.show):
        (WebInspector.AuditsPanel.prototype._clearButtonClicked):
        (WebInspector.AuditCategory.prototype.addRule):
        (WebInspector.AuditRule):
        (WebInspector.AuditRule.prototype.set severity):
        (WebInspector.AuditRule.prototype.run):
        (WebInspector.AuditRule.prototype.doRun):
        (WebInspector.AuditCategoryResult):
        (WebInspector.AuditCategoryResult.prototype.addRuleResult):
        (WebInspector.AuditRuleResult):
        (WebInspector.AuditRuleResult.prototype.addChild):
        (WebInspector.AuditRuleResult.prototype.addURL):
        (WebInspector.AuditRuleResult.prototype.addURLs):
        (WebInspector.AuditRuleResult.prototype.addSnippet):
        * inspector/front-end/Settings.js:
        * inspector/front-end/audits.css:
        * inspector/front-end/inspector.js:
        (WebInspector._createPanels):
        (WebInspector.documentKeyDown):

2010-03-09  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.
 
        When enable resource tracking state changes use the same method as
        location.reload for reloading inspected page.

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

        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::reloadPage):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::enableResourceTracking):

2010-03-09  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: highlight text node containers while searching for node.

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

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::mouseDidMoveOverElement):

2010-03-09  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GStreamer] player code cleanups
        https://bugs.webkit.org/show_bug.cgi?id=35868

        Cleaned up the private instance variables of the player.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::fillTimerFired):
        (WebCore::MediaPlayerPrivate::mediaLocationChanged):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:

2010-03-09  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GStreamer] player code cleanups
        https://bugs.webkit.org/show_bug.cgi?id=35868

        Splitted GOwnPtrGtk.{cpp,h} to GOwnPtr{Soup,GStreamer}.{cpp,h}.

        * GNUmakefile.am:
        * platform/graphics/gstreamer/GOwnPtrGStreamer.cpp: Added.
        (WTF::GstElement):
        * platform/graphics/gstreamer/GOwnPtrGStreamer.h: Added.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        * platform/gtk/GOwnPtrGtk.cpp: Removed.
        * platform/gtk/GOwnPtrGtk.h: Removed.
        * platform/network/soup/CookieJarSoup.cpp:
        * platform/network/soup/DNSSoup.cpp:
        * platform/network/soup/GOwnPtrSoup.cpp: Added.
        (WTF::SoupURI):
        * platform/network/soup/GOwnPtrSoup.h: Added.
        * platform/network/soup/ResourceHandleSoup.cpp:
        * platform/network/soup/ResourceRequestSoup.cpp:

2010-03-09  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Eric Seidel.

        [Chromium] Should remove paddings of Win/Linux chromium's buttons
        https://bugs.webkit.org/show_bug.cgi?id=35629

        No new tests, but we may need to rebaseline bunch of expectation
        images in chromium's tree.

        * rendering/RenderThemeChromiumSkia.cpp:
        * rendering/RenderThemeChromiumSkia.h:

2010-03-08  Kent Tamura  <tkent@chromium.org>

        Reviewed by Adam Barth.

        Implement HTML5 <hgroup> element.
        https://bugs.webkit.org/show_bug.cgi?id=33369

        <hgroup> should behave the same as <nav>, <section>, <article>, and <aside>.
        <hgroup> has no specific parsing rules.

        Test: fast/html/hgroup-element.html

        * css/html.css: Add hgroup as a block element.
        * editing/htmlediting.cpp:
        (WebCore::validBlockTag): Add hgroupTag.
        * html/HTMLElement.cpp:
        (WebCore::createTagPriorityMap): Returns 5 for hgroupTag.
        (WebCore::blockTagList): Add hgroupTag.
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::getNode): Add hgroupTag.
        * html/HTMLTagNames.in: Add hgroup.

2010-03-08  Tony Chang  <tony@chromium.org>

        Reviewed by Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=32131
        Crash when inserting an ordered list.

        Test: editing/execCommand/insert-ordered-list.html

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::moveParagraphs):
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::rangeFromLocationAndLength):

2010-03-08  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        Added a test for crash when you quit inside an unload handler.
        rdar://problem/6958347

        * manual-tests/quit-inside-unload.html: Added.

2010-03-08  Darin Adler  <darin@apple.com>

        Reviewed by Jon Honeycutt.

        Don't auto-play <audio> and <video> elements loaded in background tabs
        https://bugs.webkit.org/show_bug.cgi?id=35886
        rdar://problem/7117745

        * manual-tests/video-in-non-frontmost-tab.html: Added.
        * manual-tests/resources/video-tab.html: Added.

        * html/HTMLMediaElement.h: Added MediaCanStartListener as a base class, and
        added the mediaCanStart function as well as a boolean,
        m_isWaitingUntilMediaCanStart.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): Initialize
        m_isWaitingUntilMediaCanStart.
        (WebCore::HTMLMediaElement::~HTMLMediaElement): Call
        removeMediaCanStartListener if m_isWaitingUntilMediaCanStart is true. 
        (WebCore::HTMLMediaElement::loadInternal): Set m_isWaitingUntilMediaCanStart
        and call addMediaCanStartListener if canStartMedia is false.
        (WebCore::HTMLMediaElement::mediaCanStart): Clear m_isWaitingUntilMediaCanStart
        and call loadInternal.

2010-03-08  Csaba Osztrogonác  <ossy@webkit.org>

        [GTK] Unreviewed buildfix after r55688.

        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webKitWebSrcStart):

2010-03-08  Csaba Osztrogonác  <ossy@webkit.org>

        [GTK] Unreviewed buildfix after r55688.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::):

2010-03-08  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Unreviewed buildfix after r55688.

        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::ResourceHandle::loadResourceSynchronously):

2010-03-08  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=35879
        Eliminate m_mightDownloadFromHandle

        It was only used on Mac, and unnecessarily complicated the code.

        No change in behavior, thus no test.

        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::loadNow):
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::load):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::createResourceHandle):
        * platform/network/ResourceHandle.cpp:
        (WebCore::ResourceHandle::ResourceHandle):
        (WebCore::ResourceHandle::create):
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::start):

2010-03-02  Peter Kasting  <pkasting@google.com>

        Reviewed by Adam Barth.

        Clean up usage of m_failed in open-source image decoders, part 1.
        https://bugs.webkit.org/show_bug.cgi?id=35411
        
        Makes setFailed() virtual so subclasses can override it (none do yet) to
        do automatic cleanup on failure; makes it return a bool for easy
        tailcalling; makes failed() the only way to access m_failed so
        subclasses are assured setFailed() won't be bypassed.  Plus one or two
        other tiny cleanup bits.

        Overriding setFailed() is coming in a subsequent patch because it can be
        hairy and needs close review.

        No functional change, so no tests.

        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::setData):
        (WebCore::ImageDecoderQt::frameBufferAtIndex):
        (WebCore::ImageDecoderQt::internalDecodeSize):
        (WebCore::ImageDecoderQt::internalReadImage):
        (WebCore::ImageDecoderQt::internalHandleCurrentImage):
        (WebCore::ImageDecoderQt::forceLoadEverything):
        (WebCore::ImageDecoderQt::clearPointers):
        * platform/graphics/qt/ImageDecoderQt.h:
        * platform/image-decoders/ImageDecoder.h:
        (WebCore::ImageDecoder::ImageDecoder):
        (WebCore::ImageDecoder::setData):
        (WebCore::ImageDecoder::setSize):
        (WebCore::ImageDecoder::setFailed):
        (WebCore::ImageDecoder::failed):
        * platform/image-decoders/bmp/BMPImageDecoder.cpp:
        (WebCore::BMPImageDecoder::isSizeAvailable):
        (WebCore::BMPImageDecoder::frameBufferAtIndex):
        (WebCore::BMPImageDecoder::processFileHeader):
        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::setData):
        (WebCore::GIFImageDecoder::isSizeAvailable):
        (WebCore::GIFImageDecoder::frameBufferAtIndex):
        (WebCore::GIFImageDecoder::decode):
        (WebCore::GIFImageDecoder::initFrameBuffer):
        * platform/image-decoders/ico/ICOImageDecoder.cpp:
        (WebCore::ICOImageDecoder::decodeAtIndex):
        (WebCore::ICOImageDecoder::processDirectory):
        (WebCore::ICOImageDecoder::processDirectoryEntries):
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::JPEGImageReader::decode):
        (WebCore::JPEGImageDecoder::setData):
        (WebCore::JPEGImageDecoder::isSizeAvailable):
        (WebCore::JPEGImageDecoder::frameBufferAtIndex):
        (WebCore::JPEGImageDecoder::outputScanlines):
        (WebCore::JPEGImageDecoder::decode):
        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::decodingFailed):
        (WebCore::PNGImageReader::decode):
        (WebCore::PNGImageDecoder::setData):
        (WebCore::PNGImageDecoder::isSizeAvailable):
        (WebCore::PNGImageDecoder::frameBufferAtIndex):
        (WebCore::PNGImageDecoder::headerAvailable):
        (WebCore::PNGImageDecoder::rowAvailable):
        (WebCore::PNGImageDecoder::decode):
        * platform/image-decoders/png/PNGImageDecoder.h:

2010-03-08  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Darin Adler.

        Disallow WebGL when HW comp is not turned on at runtime
        https://bugs.webkit.org/show_bug.cgi?id=35759

        When HW comp is turned off with the runtime flag, WebGL would still
        create a context, but silently fail to render. This prevents that.
        Now if HW comp is turned off getContext('webgl') will return null.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext):

2010-03-08  Darin Adler  <darin@apple.com>

        Reviewed by Jon Honeycutt.

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

        Fix minor style issues in HTMLMediaElement and classes derived from it.
        Made many public members private and protected.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::screenRect): Got rid of a stray "const" and
        retstructured the function to use early return and get rid of a local.

        * html/HTMLMediaElement.h: Made lots of members private and some
        protected. Also use private inheritance instead of public. Removed
        some unneeded includes.

        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::parseMappedAttribute): Use player() instead
        of m_player; HTMLMediaElement data members are now private, not protected.
        (WebCore::HTMLVideoElement::supportsFullscreen): Ditto.
        (WebCore::HTMLVideoElement::videoWidth): Ditto.
        (WebCore::HTMLVideoElement::videoHeight): Ditto.
        (WebCore::HTMLVideoElement::hasAvailableVideoFrame): Ditto.
        (WebCore::HTMLVideoElement::webkitEnterFullScreen): Use isFullscreen()
        instead of m_isFullscreen; same reason.
        (WebCore::HTMLVideoElement::webkitExitFullScreen): Ditto.
        (WebCore::HTMLVideoElement::webkitDisplayingFullscreen): Ditto.

        * html/HTMLVideoElement.h: Removed an unneeded include. Made many
        public functions private. Got rid of unused paint function, which was
        replaced with paintCurrentFrameInContext a while back.

2010-03-08  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Xan Lopez.

        https://bugs.webkit.org/show_bug.cgi?id=30895
        [Gtk] The accessible hierarchy of tables is significantly incorrect for Atk

        Gives platforms the ability to exclude parts of an AccessibilityTable
        from the accessible hierarchy.

        * accessibility/gtk/AccessibilityObjectAtk.cpp:
        (AccessibilityObject::accessibilityPlatformIncludesObject):
        * accessibility/AccessibilityRenderObject.cpp:
        (AccessibilityRenderObject::determineAccessibilityRole):
        * accessibility/AccessibilityTable.cpp:
        (AccessibilityTable::addChildren):
        * accessibility/AccessibilityTableColumn.h:
        (accessibilityIsIgnored):
        * accessibility/AccessibilityTableHeaderContainer.h:
        (accessibilityIsIgnored):
        * accessibility/AccessibilityTableRow.cpp:
        (accessibilityIsIgnored):

2010-03-08  Jian Li  <jianli@chromium.org>

        No review. Fix build break on Tiger intel release.

        * html/Blob.cpp:
        * html/Blob.h:

2010-03-02  Adam Treat  <atreat@rim.com>

        Reviewed by Dave Hyatt.

        Refactor the HostWindow methods for repaint, scroll, invalidate and blit
        of backingstore and window by eliminating the three bools that currently
        exist as params of the repaint method.
        https://bugs.webkit.org/show_bug.cgi?id=34214

        I've added extra methods to provide the hosts with more semantic
        information of what is being requested thus eliminating the need for
        these bools.

        No tests as this change should not introduce any behavior changes in any
        of the ports.

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

        * loader/EmptyClients.h:
        (WebCore::EmptyChromeClient::invalidateContents):
        (WebCore::EmptyChromeClient::invalidateWindow):
        (WebCore::EmptyChromeClient::invalidateContentsAndWindow):
        (WebCore::EmptyChromeClient::invalidateContentsForSlowScroll):
        * page/Chrome.cpp:
        (WebCore::Chrome::invalidateContents):
        (WebCore::Chrome::invalidateWindow):
        (WebCore::Chrome::invalidateContentsAndWindow):
        (WebCore::Chrome::invalidateContentsForSlowScroll):
        * page/Chrome.h:
        * page/ChromeClient.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::invalidateRect):
        * platform/HostWindow.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::scrollContents):
        (WebCore::ScrollView::wheelEvent):

2010-03-08  Adam Barth  <abarth@webkit.org>

        Reviewed by Nate Chapin.

        [V8] Block popups from inline script
        https://bugs.webkit.org/show_bug.cgi?id=35474

        Apparently, we're supposed to look at the sourceURL to figure out
        whether we're running a script tag or a hyperlink.  This logic is
        copied from the JSC version.

        Test: http/tests/security/popup-blocked-from-window-open.html

        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::processingUserGesture):
        (WebCore::ScriptController::evaluate):

2010-03-08  Stuart Morgan  <stuartmorgan@chromium.org>

        Reviewed by Darin Adler.

        Move the details of secure text mode into WebCore/platform.
        Move the higher-level logic for secure text mode from Frame
        to SelectionController.

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

        No new tests: no functional changes.

        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::setUseSecureKeyboardEntryWhenActive):
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::focusedOrActiveStateChanged):
        (WebCore::SelectionController::updateSecureKeyboardEntryIfActive):
        (WebCore::SelectionController::setUseSecureKeyboardEntry):
        * editing/SelectionController.h:
        * page/Frame.cpp:
        (WebCore::Frame::setDocument):
        * page/Frame.h:
        * platform/SecureTextInput.cpp: Added.
        (WebCore::enableSecureTextInput):
        (WebCore::disableSecureTextInput):
        * platform/SecureTextInput.h: Added.
        (WebCore::enableSecureTextInput):
        (WebCore::disableSecureTextInput):

2010-03-08  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders Carlsson.

        Relax the 3rd party cookie policy in cases where it won't add a new tracking vector.
        <rdar://problem/7163012> and https://bugs.webkit.org/show_bug.cgi?id=35824

        Test: http/tests/cookies/third-party-cookie-relaxing.html

        If the 3rd-party domain in question already has a cookie set, allow changes
        by setting the first party url of the request to be the url of the request itself:        
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::makeFinalRequest):

        Ditto:
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::loadResourceSynchronously):

        I've filed <rdar://problem/7728508> to track changing the policy in our networking layer.

2010-03-08  Jian Li  <jianli@chromium.org>

        Reviewed by Dmitry Titov.

        Blob.slice support.
        https://bugs.webkit.org/show_bug.cgi?id=32993
        
        The following semantic is adopted per the discussions on public-webapps:
        1) File.slice() does a synchronous IO to capture the current size and
           modification time and cache them in the resulting Blob.
        2) Subsequent Blob operations, like Blob.slice and Blob.size simply
           use the cached values.
        3) When the underlying file data are accessed, like in XHR.send(), the
           UA will check the cached modification time against the current
           modification time to determine if the file has been changed or not.
           An error or exception will be thrown if needed.

        Also add ENABLE_BLOB_SLICE feature define.

        Test: http/tests/local/send-sliced-dragged-file.html

        * Configurations/FeatureDefines.xcconfig:
        * GNUmakefile.am:
        * WebCore.pri:
        * html/Blob.cpp:
        (WebCore::Blob::Blob):
        (WebCore::Blob::size):
        (WebCore::Blob::slice):
        * html/Blob.h:
        (WebCore::Blob::start):
        (WebCore::Blob::length):
        (WebCore::Blob::modificationTime):
        * html/Blob.idl:
        * platform/network/FormData.cpp:
        (WebCore::FormData::deepCopy):
        (WebCore::FormData::appendFile):
        (WebCore::FormData::appendFileRange):
        * platform/network/FormData.h:
        (WebCore::FormDataElement::FormDataElement):
        (WebCore::operator==):
        * platform/network/mac/FormDataStreamMac.mm:
        (WebCore::advanceCurrentStream):
        (WebCore::openNextStream):
        (WebCore::formCreate):
        (WebCore::formOpen):
        (WebCore::formRead):
        (WebCore::setHTTPBody):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::send):

2010-03-08  Daniel Bates  <dbates@rim.com>

        Reviewed by Simon Fraser.

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

        Fixes an issue where we repaint the caret rectangle even if the associated
        selection is not in a content editable element. This is extraneous since the
        caret is only visible when the selection is in a content editable element.
        Hence, we should only repaint the caret rectangle when the associated selection
        is in a content editable element.

        Note, we always paint the caret when caret browsing is enabled.

        Test: fast/repaint/no-caret-repaint-in-non-content-editable-element.html

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::recomputeCaretRect): Modified to call method
        SelectionController::shouldRepaintCaret.
        (WebCore::SelectionController::shouldRepaintCaret): Added.
        (WebCore::SelectionController::invalidateCaretRect): Modified to call method
        SelectionController::shouldRepaintCaret.
        * editing/SelectionController.h:

2010-03-08  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Darin Adler.

        YouTube HTML5 video never starts playing on Windows
        https://bugs.webkit.org/show_bug.cgi?id=33954

        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp:
        (WebCore::MediaPlayerPrivate::rfc2616DateStringFromTime): New, create an rfc 2616 formatted
        string for an absolute time value.
        (WebCore::addCookieParam): New, add a cookie param and value to a string builder.
        (WebCore::MediaPlayerPrivate::setUpCookiesForQuickTime): Copy cookies for the movie to
            be loaded from CFNetwork into WinINet so they are available when QuickTime tries to
            download the movie.
        (WebCore::MediaPlayerPrivate::load): Call setupCookiesForQuickTime.
        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.h:

2010-03-08  Eric Uhrhane  <ericu@chromium.org>

        Reviewed by David Levin.

        Remove the now-redundant Settings fields for the Database
        https://bugs.webkit.org/show_bug.cgi?id=35763

        No new tests; this code isn't called.

        * WebCore.base.exp:
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        * page/Settings.h:

2010-03-07  David Levin  <levin@chromium.org>

        Chromium Linux build fix.

        * platform/graphics/chromium/FontPlatformDataLinux.h: Add "class String" since a debug
        only method returns a String.

2010-03-07  Mark Rowe  <mrowe@apple.com>

        Chromium build fix.

        * platform/chromium/ClipboardChromium.cpp: Include Image.h since we're using WebCore::Image.

2010-03-07  Mark Rowe  <mrowe@apple.com>

        Gtk build fix.

        * platform/network/soup/ResourceHandleSoup.cpp: Include SharedBuffer.h since we're using WebCore::SharedBuffer.

2010-03-07  Mark Rowe  <mrowe@apple.com>

        Gtk build fix.

        * platform/graphics/gtk/ImageGtk.cpp: Include SharedBuffer.h since we're using WebCore::SharedBuffer.

2010-03-07  Mark Rowe  <mrowe@apple.com>

        Fix builds where USE_CG_SHADING is set.

        * platform/graphics/cg/GradientCG.cpp: Include wtf/RetainPtr.h since WTF::RetainPtr is used when USE_CG_SHADING is set.

2010-03-07  Mark Rowe  <mrowe@apple.com>

        Windows build fix.  Add some required includes.

        * platform/graphics/win/ImageCGWin.cpp:
        * platform/network/cf/ResourceHandleCFNet.cpp:
        * platform/win/ClipboardWin.cpp:

2010-03-07  Mark Rowe  <mrowe@apple.com>

        Gtk build fix.

        * platform/graphics/GraphicsContext.h: Include wtf/PassOwnPtr.h since some platforms use WTF::PassOwnPtr in this header.

2010-03-07  Mark Rowe  <mrowe@apple.com>

        Qt build fix.

        * platform/network/qt/ResourceHandleQt.cpp: Include SharedBuffer.h since we're using WebCore::SharedBuffer.

2010-03-07  Mark Rowe  <mrowe@apple.com>

        Gtk build fix.

        * platform/gtk/ClipboardGtk.cpp: Include Image.h since we're using WebCore::Image.

2010-03-07  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Cameron Zwarich.

        Remove unnecessary includes from header files, adding them to the handful of implementation files that need them.

        * loader/CachedCSSStyleSheet.cpp:
        * loader/CachedFont.cpp:
        * loader/CachedImage.cpp:
        * loader/CachedResource.cpp:
        * loader/CachedResource.h:
        * loader/CachedScript.cpp:
        * loader/CachedXSLStyleSheet.cpp:
        * loader/icon/IconFetcher.cpp:
        * loader/loader.cpp:
        * page/Page.cpp:
        * platform/graphics/Image.cpp:
        * platform/graphics/Image.h:
        * platform/graphics/cg/GraphicsContextPlatformPrivateCG.h:
        * platform/graphics/cg/PDFDocumentImage.cpp:
        * platform/graphics/cg/PathCG.cpp:
        * platform/graphics/mac/ImageMac.mm:

2010-03-07  Mark Rowe  <mrowe@apple.com>

        Chromium build fix.

        * platform/chromium/ChromiumDataObject.h: Include SharedBuffer.h since the inline constructor of this
        class means that the pointed-to type of the RefPtr member must be available.

2010-03-07  Mark Rowe  <mrowe@apple.com>

        Qt build fix.

        * platform/network/qt/DnsPrefetchHelper.cpp: Include PlatformString.h since we're using WebCore::String.

2010-03-07  Kent Tamura  <tkent@chromium.org>

        Reviewed by Eric Seidel.

        Fix a bug that validity.valueMissing for a radio button with required
        in a form element always returns true.
        https://bugs.webkit.org/show_bug.cgi?id=35472

        Test: fast/forms/ValidityState-valueMissing-radio.html

        * html/HTMLInputElement.cpp:
        (WebCore::checkedRadioButtons): Move the location to be used by valueMissing().
        (WebCore::HTMLInputElement::valueMissing):
          Use checkedRadioButtons() instead of document()->checkedRadioButtons().

2010-03-07  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Cameron Zwarich.

        Remove unnecessary includes from header files, adding them to the handful of implementation files that need them.

        * bindings/objc/DOM.mm:
        * loader/CachedImage.h:
        * loader/EmptyClients.h:
        * platform/graphics/GlyphPageTreeNode.cpp:
        * platform/text/CString.h:
        * platform/text/String.cpp:
        * platform/text/mac/TextCodecMac.cpp:
        * svg/graphics/SVGResourceFilter.h:
        * svg/graphics/filters/SVGFEImage.h:

2010-03-07  Mark Rowe  <mrowe@apple.com>

        Completely remove two files that were deleted in r55635 from the Xcode project.

        * WebCore.xcodeproj/project.pbxproj:

2010-03-07  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Remove inconsistent "Too few arguments" handling for window.atob() and window.btoa()
        https://bugs.webkit.org/show_bug.cgi?id=35848

        - Take the opportunity to fully autogenerate window.atob() and window.btoa().

        * bindings/js/JSDOMWindowCustom.cpp:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::btoa):
        (WebCore::DOMWindow::atob):
        * page/DOMWindow.idl:

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

        Reviewed by Simon Fraser.

        <rdar://problem/7722008> Column breaking ignores floats
        https://bugs.webkit.org/show_bug.cgi?id=35837

        Test: fast/multicol/float-truncation.html

        Introduce an earlier column-break if otherwise a float that could fit
        inside a single column will be split between columns.

        It is still possible for floats to be needlessly broken if initially
        they fit in the column, but normal flow truncation then shortens the
        column.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::visibleTopOfHighestFloatExtendingBelow): Added.
        Returns the visible top of the highest descendant float that visibly
        extends below the given y offset, ignoring floats that are taller than
        the given maximum height.
        (WebCore::RenderBlock::layoutColumns): If the initial column height
        would cause a float to be split, truncate above the float.
        * rendering/RenderBlock.h:

2010-03-07  Dmitry Titov  <dimich@chromium.org>

        Not reviewed. Revert of r55593 which caused a regression of worker-cloneports.html.

        REGRESSION(55593?): fast/workers/worker-cloneport.html is timing out on Leopard
        https://bugs.webkit.org/show_bug.cgi?id=35819

        * Android.jscbindings.mk:
        * Android.v8bindings.mk:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMWindowCustom.cpp:
        * bindings/js/JSDatabaseCallback.cpp: Removed.
        * bindings/js/JSDatabaseCallback.h: Removed.
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        * bindings/v8/custom/V8DatabaseCallback.cpp: Removed.
        * bindings/v8/custom/V8DatabaseCallback.h: Removed.
        * dom/Document.cpp:
        (WebCore::Document::postTask):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::openDatabase):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:
        * storage/Database.cpp:
        (WebCore::Database::openDatabase):
        (WebCore::Database::Database):
        (WebCore::Database::performOpenAndVerify):
        * storage/Database.h:
        * storage/DatabaseCallback.h: Removed.
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::openDatabase):
        * workers/WorkerContext.h:

2010-03-06  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Sam Weinig.

        Remove unnecessary includes of wtf/Platform.h.  This is already pulled in by config.h.

        * accessibility/AccessibilityObject.h:
        * dom/XMLTokenizer.cpp:
        * dom/XMLTokenizerLibxml2.cpp:
        * dom/XMLTokenizerQt.cpp:
        * editing/TextAffinity.h:
        * loader/FrameLoaderClient.h:
        * page/FocusController.cpp:
        * page/FrameTree.cpp:
        * page/Geolocation.h:
        * page/PositionCallback.h:
        * page/PositionErrorCallback.h:
        * platform/Cursor.h:
        * platform/FileSystem.h:
        * platform/FloatConversion.h:
        * platform/KeyboardCodes.h:
        * platform/PlatformKeyboardEvent.h:
        * platform/PlatformTouchPoint.h:
        * platform/SuddenTermination.h:
        * platform/Widget.h:
        * platform/graphics/Color.h:
        * platform/graphics/FloatPoint.h:
        * platform/graphics/FloatSize.h:
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/IntPoint.h:
        * platform/graphics/IntRect.h:
        * platform/graphics/IntSize.h:
        * platform/graphics/openvg/PainterOpenVG.h:
        * platform/graphics/openvg/SurfaceOpenVG.h:
        * platform/network/ResourceHandleClient.h:
        * platform/text/Base64.cpp:
        * rendering/style/SVGRenderStyle.h:
        * xml/XSLTProcessor.cpp:
        * xml/XSLTProcessorLibxslt.cpp:
        * xml/XSLTProcessorQt.cpp:

2010-03-06  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Move debug only JS wrapper-set tracking code into its own file.
        https://bugs.webkit.org/show_bug.cgi?id=35839

        * GNUmakefile.am: Added new files.
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::cacheDOMObjectWrapper):
        (WebCore::forgetDOMObject):
        (WebCore::forgetDOMNode):
        (WebCore::cacheDOMNodeWrapper):
        (WebCore::takeWrappers):
        (WebCore::updateDOMNodeDocument):
        Updated for new signature for willCacheWrapper and didUncacheWrapper.

        * bindings/js/JSDOMWrapper.cpp: Added.
        (WebCore::DOMObject::~DOMObject):
        (WebCore::DOMObject::defineOwnProperty):
        Moved from JSDOMBinding.cpp.

        * bindings/js/JSDebugWrapperSet.cpp: Added.
        (WebCore::JSDebugWrapperSet::shared):
        (WebCore::JSDebugWrapperSet::JSDebugWrapperSet):
        * bindings/js/JSDebugWrapperSet.h: Added.
        (WebCore::JSDebugWrapperSet::add):
        (WebCore::JSDebugWrapperSet::remove):
        (WebCore::JSDebugWrapperSet::contains):
        (WebCore::JSDebugWrapperSet::willCacheWrapper):
        (WebCore::JSDebugWrapperSet::didUncacheWrapper):
        Moved from JSDOMBinding.cpp.

2010-03-06  Sam Weinig  <sam@webkit.org>

        Rubber-stamped by Dan Bernstein.

        Move DOMObjectHashTableMap, DOMWrapperWorld and WebCoreJSClientData into
        their own files.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/DOMObjectHashTableMap.cpp: Copied from bindings/js/JSDOMBinding.cpp.
        * bindings/js/DOMObjectHashTableMap.h: Copied from bindings/js/JSDOMBinding.h.
        (WebCore::DOMObjectHashTableMap::~DOMObjectHashTableMap):
        (WebCore::DOMObjectHashTableMap::get):
        * bindings/js/DOMWrapperWorld.cpp: Copied from bindings/js/JSDOMBinding.cpp.
        (WebCore::forgetWorldOfDOMNodesForDocument):
        * bindings/js/DOMWrapperWorld.h: Copied from bindings/js/JSDOMBinding.h.
        (WebCore::DOMWrapperWorld::create):
        (WebCore::DOMWrapperWorld::rememberDocument):
        (WebCore::DOMWrapperWorld::forgetDocument):
        (WebCore::DOMWrapperWorld::isNormal):
        (WebCore::debuggerWorld):
        (WebCore::pluginWorld):
        (WebCore::currentWorld):
        (WebCore::Document::getWrapperCache):
        * bindings/js/JSDOMBinding.cpp:
        * bindings/js/JSDOMBinding.h:
        * bindings/js/JSDOMWindowBase.cpp:
        * bindings/js/ScriptController.cpp:
        * bindings/js/WebCoreJSClientData.h: Copied from bindings/js/JSDOMBinding.h.
        (WebCore::WebCoreJSClientData::WebCoreJSClientData):
        (WebCore::WebCoreJSClientData::~WebCoreJSClientData):
        (WebCore::WebCoreJSClientData::normalWorld):
        (WebCore::WebCoreJSClientData::getAllWorlds):
        (WebCore::WebCoreJSClientData::rememberWorld):
        (WebCore::WebCoreJSClientData::forgetWorld):
        * bindings/js/WorkerScriptController.cpp:

2010-03-06  Dan Bernstein  <mitz@apple.com>

        Rubber-stamped by Sam Weinig.

        Remove an unused method.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock): Changed comment.
        (WebCore::RenderBlock::floatRect): Removed.
        * rendering/RenderBlock.h: Removed floatRect().

2010-03-06  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: make timeline overview bars transparent to mouse events.

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

        * inspector/front-end/inspector.css:

2010-03-06  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Jeremy Orlow.

        Web Inspector: switching to/from Timeline Panel moves scroller.
        (Also added couple of record details items as I was fixing it).

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

        * English.lproj/localizedStrings.js:
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel):
        (WebInspector.TimelinePanel.prototype.get defaultFocusedElement):
        (WebInspector.TimelinePanel.prototype.show):
        (WebInspector.TimelinePanel.prototype._refreshRecords):
        (WebInspector.TimelinePanel.FormattedRecord.prototype._generatePopupContent):

2010-03-06  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Eric Seidel.

        Removed unnecessary WinCE file.
        The same functionality is provided by platform/win/SystemTimeWin.cpp.
        https://bugs.webkit.org/show_bug.cgi?id=35799

        * platform/wince/SystemTimeWince.cpp: Removed.

2010-03-06  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=30895
        [Gtk] The accessible hierarchy of tables is significantly incorrect for Atk

        This completes the fixing of the Atk table hierarchy which was started
        in bug #35418.

        * accessibility/gtk/AccessibilityObjectAtk.cpp:
        (AccessibilityObject::accessibilityPlatformIncludesObject):
        * accessibility/AccessibilityRenderObject.cpp:
        (AccessibilityRenderObject::determineAccessibilityRole):

2010-03-06  MORITA Hajime  <morrita@google.com>

        Reviewed by Darin Adler.

        Moved implementations of window.btoa() and window.atob() from
        JSDOMWindow to DOMWindow, and make V8DOMWindow use DOMWindow
        functions instead of having a separate implementation. As a side effect, the
        error message has changed from "Cannot decode base64" to one that
        indicates DOM Exception, which is compatible to Firefox.
        
        Refactoring: window.btoa() and window.atob() should be implemented on DOMWindow
        https://bugs.webkit.org/show_bug.cgi?id=35723

        No new test. No new functionality.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::atob):
        (WebCore::JSDOMWindow::btoa):
        Moved conversion code to DOMWindow and invoke it. Argument
        checking remains here.
        
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8DOMWindow::atobCallback):
        (WebCore::V8DOMWindow::btoaCallback):
        Remove conversion code and call DOMWindow APIs. Although argument
        checking remains here.
        
        * page/DOMWindow.cpp:
        (WebCore::hasMultibyteCharacters):
        (WebCore::DOMWindow::btoa):
        (WebCore::DOMWindow::atob):
        * page/DOMWindow.h:
        Moved Conversion code from JSDOMWindow, modifing to fit JSC independent.

2010-03-06  Yuta Kitamura  <yutak@chromium.org>

        Reviewed by Eric Seidel.

        Fix decoration position in search input field.

        This patch fixes rendering of input field of "search" type, whose decoration
        (loupe icon and close button) was wrongly positioned when the input field was
        contained in a block with -webkit-transform property.

        Chromium bug: http://crbug.com/20439

        [Chromium] Decoration of "search" input field is wrongly rendered
        https://bugs.webkit.org/show_bug.cgi?id=30245

        No new tests, since this patch fixes an existing test
        (fast/forms/search-transformed.html) in Chromium layout tests.

        * rendering/RenderThemeChromiumSkia.cpp:
        (WebCore::RenderThemeChromiumSkia::convertToPaintingRect): Added. This method
        does almost the same thing as RenderThemeMac::convertToPaintingRect.
        (WebCore::RenderThemeChromiumSkia::paintSearchFieldCancelButton): The position
        of the icon should not depend on its absolute position.
        (WebCore::RenderThemeChromiumSkia::paintSearchFieldResultsDecoration): Ditto.
        (WebCore::RenderThemeChromiumSkia::paintSearchFieldResultsButton): Ditto.
        * rendering/RenderThemeChromiumSkia.h: Added new method.

2010-03-06  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: in Timeline panel, click followed with mouse move resets popover.

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

        * inspector/front-end/Popover.js:
        (WebInspector.PopoverHelper.prototype._mouseDown):
        (WebInspector.PopoverHelper.prototype._mouseMove):
        (WebInspector.PopoverHelper.prototype._handleMouseAction):

2010-03-05  Tony Chang  <tony@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=33247
        Backwards cursor movement incorrect when previous block ends with <br>.

        If the cursor is trying to move into a node that has a height of 0,
        skip over it.

        Test: editing/execCommand/move-selection-back-line.html

        * editing/visible_units.cpp:
        (WebCore::previousLinePosition):

2010-03-05  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Eric Seidel.

        Enable resource loading callback while loading worker scripts
        https://bugs.webkit.org/show_bug.cgi?id=35744

        * workers/WorkerScriptLoader.cpp:
        (WebCore::WorkerScriptLoader::loadSynchronously):
        (WebCore::WorkerScriptLoader::loadAsynchronously):

2010-03-05  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Eric Seidel.

        WAI-ARIA live region doesn't appear when <div> only has a <div> child
        https://bugs.webkit.org/show_bug.cgi?id=35751

        Elements should not be ignored if they carry ARIA attributes in them.

        Test: platform/mac/accessibility/div-containing-div-with-aria.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::supportsARIAAttributes):
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::supportsARIADropping):
        (WebCore::AccessibilityObject::supportsARIADragging):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::supportsARIADropping):
        (WebCore::AccessibilityRenderObject::supportsARIADragging):
        (WebCore::AccessibilityRenderObject::accessibilityIsIgnored):
        * accessibility/AccessibilityRenderObject.h:

2010-03-05  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Oliver Hunt.

        Add a manual test for crash in DOMWindow::clearTimeout when DOMWindow is not connected to Frame
        https://bugs.webkit.org/show_bug.cgi?id=32353

        * manual-tests/clearTimeout-crash-bug29832.html: Added.

2010-03-05  Dmitry Titov  <dimich@chromium.org>

        Reviewed by David Levin.

        [v8] Remove wrong assert in GC callback
        https://bugs.webkit.org/show_bug.cgi?id=35757

        Test: fast/workers/wrapper-map-gc.html

        * bindings/v8/DOMData.h:
        (WebCore::DOMData::handleWeakObject): remove ASSERT(isMainThread()), move another assert up to verify we are on the right thread.

2010-03-05  Alex Milowski  <alex@milowski.com>

        Reviewed by Kenneth Rohde Christiansen.

        Added support for row layout with stretchy operators and
        adjusted the over spacing for over and underover accordingly.

        Tests: mathml/presentation/mo.xhtml
               mathml/presentation/row.xhtml

        * WebCore.xcodeproj/project.pbxproj:
        * mathml/MathMLInlineContainerElement.cpp:
        * mathml/MathMLTextElement.cpp:
        * mathml/RenderMathMLMath.cpp: Added.
        * mathml/RenderMathMLMath.h: Added.
        * mathml/RenderMathMLOperator.cpp: Added.
        * mathml/RenderMathMLOperator.h: Added.
        * mathml/RenderMathMLRow.cpp: Added.
        * mathml/RenderMathMLRow.h: Added.
        * mathml/RenderMathMLUnderOver.cpp:
        * mathml/mathtags.in:

2010-03-05  Dean Jackson  <dino@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=35772
        Animation fill modes should be supported in the shorthand property

        Add CSSPropertyWebkitAnimationFillMode to the list of properties
        evaluated in the -webkit-animation shorthand.

        Test: animations/animation-shorthand.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseAnimationShorthand):

2010-03-05  Dean Jackson  <dino@apple.com>

        Reviewed by Simon Fraser

        https://bugs.webkit.org/show_bug.cgi?id=35815
        Animation Fill Modes fail on Windows

        * css/CSSComputedStyleDeclaration.cpp:
        * css/CSSStyleSelector.cpp:
        * platform/graphics/mac/GraphicsLayerCA.mm:
            - use new enum value
        * platform/animation/Animation.h:
            - change bitfield type
        * rendering/style/RenderStyleConstants.h:
            - add new enum for fill mode

2010-03-05  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed buildfix after r55593. (To fix Qt --minimal build.)

        * bindings/js/JSDOMWindowCustom.cpp: Missing #if ENABLE(DATABASE) guard added.

2010-03-05  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler.

        ASSERTION FAILED: rootLayer == m_clipRectsRoot at hulu.com
        https://bugs.webkit.org/show_bug.cgi?id=34065
        <rdar://problem/7573509>
        
        Fix one instance of this assertion (not necessarily the one seen on hulu.com).
        
        If the layer that clippingRoot() is being called on is itself compositing,
        then it acts as the clipping root. Without this, calls to RenderLayer::childrenClipRect()
        and RenderLayer::selfClipRect() via FrameView::windowClipRectForLayer(), for plug-ins,
        caused the caching of an incorrect clip rects root.

        Test: compositing/geometry/object-clip-rects-assertion.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::clippingRoot):

2010-03-05  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Child clipping compositing layers don't show the blue debug color
        https://bugs.webkit.org/show_bug.cgi?id=35807

        Set a layer owner on the GraphicsLayers created for clipping children,
        so that they can get to the debug settings that give them the blue color.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateClippingLayers):

2010-03-05  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        MobileMe movie page is missing playback controls
        https://bugs.webkit.org/show_bug.cgi?id=35805
        <rdar://problem/7653169>
        
        On pages with video or plug-ins, we run overlap tests to determine which layers
        need to be composited. There was an ordering dependency bug in
        RenderLayerCompositor::computeCompositingRequirements() that caused us to fail
        to detect that a layer needed to be composited, resulting in page content
        not being visible.
        
        Specifically, layer->setHasCompositingDescendant() can change the answer
        to needsToBeComposited(), when a layer has to clip compositing descendants.
        So if we change setHasCompositingDescendant(), then we need to re-test
        clipsCompositingDescendants() and add the layer to the overlap map if so.

        Test: compositing/overflow/overflow-compositing-descendant.html

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):

2010-03-04  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Adam Barth.

        Adding support for the optional creation callback that could be
        passed to openDatabase().

        Test: storage/open-database-creation-callback.html

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

        * Android.jscbindings.mk
        * Android.v8bindings.mk
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::openDatabase):
        * bindings/js/JSDatabaseCallback.cpp: Added.
        (WebCore::JSDatabaseCallback::JSDatabaseCallback):
        (WebCore::JSDatabaseCallback::~JSDatabaseCallback):
        (WebCore::JSDatabaseCallback::handleEvent):
        * bindings/js/JSDatabaseCallback.h: Added.
        (WebCore::JSDatabaseCallback::create):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8DOMWindow::openDatabaseCallback):
        * bindings/v8/custom/V8DatabaseCallback.cpp: Added.
        (WebCore::V8DatabaseCallback::V8DatabaseCallback):
        (WebCore::V8DatabaseCallback::~V8DatabaseCallback):
        (WebCore::V8DatabaseCallback::handleEvent):
        * bindings/v8/custom/V8DatabaseCallback.h: Added.
        (WebCore::V8DatabaseCallback::create):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::openDatabase):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:
        * storage/Database.cpp:
        (WebCore::DatabaseCreationCallbackTask::create):
        (WebCore::DatabaseCreationCallbackTask::performTask):
        (WebCore::DatabaseCreationCallbackTask::DatabaseCreationCallbackTask):
        (WebCore::Database::openDatabase):
        (WebCore::Database::Database):
        (WebCore::Database::performOpenAndVerify):
        (WebCore::Database::performCreationCallback):
        * storage/Database.h:
        (WebCore::Database::isNew):
        * storage/DatabaseCallback.h: Added.
        (WebCore::DatabaseCallback::~DatabaseCallback):
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::openDatabase):
        * workers/WorkerContext.h:

2010-03-05  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Fixed infinite recursion of composited video on Windows
        https://bugs.webkit.org/show_bug.cgi?id=35798
        
        Due to a change in the way we get the platformLayer (WKCACFLayer)
        for video, the mediaplayer was in an infinite loop with WKCACFLayer
        bouncing notifySyncRequired calls back and forth. After discussion
        we decided it would be better to avoid notifySyncRequired entirely,
        which would walk up through WebCore calls and back down through
        WebKit calls to tell the WKCACFLayerRenderer to kick off a render cycle.
        
        I subclassed WKCACFLayer into a WKCACFRootLayer which has a pointer to
        the WKCACFLayerRenderer. When something changes, we get the rootLayer()
        by walking up the layers and make a virtual call which WKCACFRootLayer
        implements to tell WKCACFLayerRenderer to render.
        
        I also got rid of GraphicsLayer knowledge from WKCACFLayer. GraphicsLayerCACF
        now makes a WebLayer subclass which implements the drawInContext()
        virtual method.
        
        I also had to add protection to the platformLayer() call in 
        MediaPlayerPrivateQuickTimeWin because it gets called earlier than before
        when the layer is still null.

        * platform/graphics/win/GraphicsLayerCACF.cpp:Implement WebLayer
        (WebCore::WebLayer::create):
        (WebCore::WebLayer::drawInContext):
        (WebCore::WebLayer::WebLayer):
        (WebCore::GraphicsLayerCACF::GraphicsLayerCACF):
        (WebCore::GraphicsLayerCACF::setNeedsDisplayInRect):
        (WebCore::GraphicsLayerCACF::updateLayerPreserves3D):
        (WebCore::GraphicsLayerCACF::updateContentsImage):
        * platform/graphics/win/GraphicsLayerCACF.h:
        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp:Protect platformLayer from a null qtLayer
        (WebCore::MediaPlayerPrivate::platformLayer):
        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.h:Got rid of no longer needed method
        (WebCore::MediaPlayerPrivate::notifyAnimationStarted):
        * platform/graphics/win/WKCACFLayer.cpp:Got rid of GraphicsLayer dependency. Made virtual.
        (WebCore::displayCallback):
        (WebCore::WKCACFLayer::create):
        (WebCore::WKCACFLayer::WKCACFLayer):
        (WebCore::WKCACFLayer::setNeedsCommit):
        (WebCore::WKCACFLayer::setNeedsDisplay):
        * platform/graphics/win/WKCACFLayer.h:
        (WebCore::WKCACFLayer::setNeedsRender):
        (WebCore::WKCACFLayer::drawInContext):
        * platform/graphics/win/WKCACFLayerRenderer.cpp:Create WKCACFRootLayer which tells WKCACFLayerRenderer to render
        (WebCore::WKCACFRootLayer::WKCACFRootLayer):
        (WebCore::WKCACFRootLayer::create):
        (WebCore::WKCACFRootLayer::setNeedsRender):
        (WebCore::WKCACFRootLayer::setNeedsDisplay):
        (WebCore::WKCACFLayerRenderer::rootLayer):
        (WebCore::WKCACFLayerRenderer::setRootChildLayer):
        (WebCore::WKCACFLayerRenderer::setNeedsDisplay):
        (WebCore::WKCACFLayerRenderer::createRenderer):
        * platform/graphics/win/WKCACFLayerRenderer.h:

2010-03-05  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by David Levin.

        [Chromium] Missing commas in WebCore.gypi file make building Geo unpossible.
        https://bugs.webkit.org/show_bug.cgi?id=35797

        No new tests, this is a latent compile break.

        * WebCore.gypi:

2010-03-04  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Adele Peterson.

        <rdar://problem/7718442> Implement 'preload=none'
        https://bugs.webkit.org/show_bug.cgi?id=35789

        Don't load any media data when preload is 'none'.

        Test: media/video-preload.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::loadResource): Don't call player's setPreload method
            when autoplay is set.

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::setPreload): Set m_preload so we have the correct value when
            the media engine is created.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate): Initialize m_preload.
        (WebCore::MediaPlayerPrivate::resumeLoad): New, kick off postponed a load.
        (WebCore::MediaPlayerPrivate::load): Do nothing if preload is 'none'
        (WebCore::MediaPlayerPrivate::loadInternal): New, complete loading.
        (WebCore::MediaPlayerPrivate::prepareToPlay): New, resume a postponed load as someone
            has called play().
        (WebCore::MediaPlayerPrivate::setPreload): New, set m_preload.

2010-03-04  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Give CodeGeneratorV8.pm a much-needed spring cleaning.

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

        * bindings/scripts/CodeGeneratorV8.pm: Remove unused code, fix style issues, make less hard-coded.
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8DOMWindow::addEventListenerCallback):
        (WebCore::V8DOMWindow::removeEventListenerCallback):

2010-03-05  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed. Roll back r55522 since it regreses performance
        according to chromium's page cycler.

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

2010-03-05  Dean Jackson  <dino@apple.com>

        Reviewed by Simon Fraser and Chris Marrin.

        Bug 26869: Add fill modes for CSS Animations
        https://bugs.webkit.org/show_bug.cgi?id=26869

        Tests: animations/fill-mode-removed.html
               animations/fill-mode-transform.html
               animations/fill-mode.html

        * css/CSSComputedStyleDeclaration.cpp:
        * css/CSSParser.cpp:
        * css/CSSParser.h:
        * css/CSSPropertyNames.in:
        * css/CSSStyleSelector.cpp:
        * css/CSSStyleSelector.h:
        * css/CSSValueKeywords.in:
            - parse, assign and retrieve the value of the new
              -webkit-animation-fill-mode property
        * page/animation/AnimationBase.cpp:
        * page/animation/AnimationBase.h:
            - new state in animation engine for a finished animation
              that is "filling" forwards in time. This allows the
              engine to keep the animation around and not revert to the
              old style.
            - update the timer code to indicate it doesn't need to
              keep animating if it is filling
            - now that animations can extend beyond their elapsed time,
              make sure progress works correctly with iteration counts
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::animate):
            - ensure correct style value is returned at the right
              time by checking for fill mode
        (WebCore::KeyframeAnimation::onAnimationEnd):
            - continue to send the end event, but only remove the
              animation if it isn't filling forwards
        * platform/animation/Animation.cpp:
        * platform/animation/Animation.h:
            - new fill mode member property
        * platform/animation/AnimationList.cpp:
            - ensure the fill mode is propagated to a list of style valus
        * platform/graphics/mac/GraphicsLayerCA.mm:
            - make hardware layers use Core Animation's fill mode

2010-03-05  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Do not show link helper in popovers and/or for external resources.

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

        * English.lproj/localizedStrings.js:
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.canShowSourceLine):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._scriptOrResourceForURLAndLine):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype.hide):
        * inspector/front-end/inspector.js:
        (WebInspector.documentMouseOver):
        (WebInspector.documentClick.followLink):
        (WebInspector.documentClick):
        (WebInspector.addMainEventListeners):

2010-03-05  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Alexey Proskuryakov.

        WebSocket onmessageerror event handler
        https://bugs.webkit.org/show_bug.cgi?id=35570

        Test: websocket/tests/error-detect.html

        * websockets/WebSocket.cpp:
        (WebCore::WebSocketChannel::didConnect): assert scriptExecutionContext.
        (WebCore::WebSocketChannel::didReceiveMessage): assert scriptExecutionContext.
        (WebCore::WebSocket::didReceiveMessageError):
        (WebCore::WebSocket::didClose): assert scriptExecutionContext.
        * websockets/WebSocket.h:
        * websockets/WebSocket.idl: Add onerror event listener
        * websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::didReceiveData): call didReceiveMessageError if unknown frame tye is detected, or frame length overflowed.
        * websockets/WebSocketChannelClient.h:
        (WebCore::WebSocketChannelClient::didReceiveMessageError):

2010-03-04  Garret Kelly  <gdk@chromium.org>

        Reviewed by Darin Fisher.

        Changing private members from PlatformTouchEvent and PlatformTouchPoint
        to be protected, so that Chromium's PlatformTouchEventBuilder and
        PlatformTouchPointBuilder can access them. Exercised by the
        fast/events/touch tests.
        https://bugs.webkit.org/show_bug.cgi?id=35760

        * platform/PlatformTouchEvent.h:
        (WebCore::PlatformTouchEvent::~PlatformTouchEvent):
        * platform/PlatformTouchPoint.h:
        (WebCore::PlatformTouchPoint::~PlatformTouchPoint):

2010-03-04  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Alexey Proskuryakov.

        WebSocket crash bug when reloading the page while the WebSocket is busy
        https://bugs.webkit.org/show_bug.cgi?id=35732

        * websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::disconnect): clear m_context from WebSocketChannel and WebSocketHandshake.
        (WebCore::WebSocketChannel::didOpen): check m_context
        (WebCore::WebSocketChannel::didClose): clear m_context
        (WebCore::WebSocketChannel::didReceiveData): check m_context, and check m_client early before appending to buffer
        * websockets/WebSocketHandshake.cpp:
        (WebCore::WebSocketHandshake::clearScriptExecutionContext): Added.
        * websockets/WebSocketHandshake.h:

2010-03-04  MORITA Hajime <morrita@google.com>

        Reviewed by Alexey Proskuryakov.

        Refactoring: XMLHTTPRequest.open() should have all overloaded implementations
        https://bugs.webkit.org/show_bug.cgi?id=35630

        Test: http/tests/xmlhttprequest/open-async-overload.html

        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::open):
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        (WebCore::V8XMLHttpRequest::openCallback):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::open):
        * xml/XMLHttpRequest.h:

2010-03-04  James Robinson  <jamesr@google.com>

        Reviewed by Eric Seidel.

        Styles do not have to be synchronously rematched after every event dispatch

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

        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent):
        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::handleEvent):

2010-03-04  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        maemo spelled as mameo in WebCore.pro
        https://bugs.webkit.org/show_bug.cgi?id=35765

        Spelling corrected.

        * WebCore.pro:

2010-03-04  Tony Chang  <tony@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=18819
        Pressing option+page{down,up} should move the cursor and scroll in
        content editable areas.  On other platforms, pressing page{down,up}
        should move the cursor and scroll in content editable areas.

        Test: editing/input/option-page-up-down.html

        * editing/EditorCommand.cpp:
        (WebCore::verticalScrollDistance):

2010-03-03  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Allow static property getters to interact with JSCs caching
        https://bugs.webkit.org/show_bug.cgi?id=35716

        Update the obviously safe getters to allow caching

        Test: fast/js/pic/cached-named-property-getter.html

        * bridge/runtime_array.cpp:
        (JSC::RuntimeArray::getOwnPropertySlot):
        * bridge/runtime_method.cpp:
        (JSC::RuntimeMethod::getOwnPropertySlot):

2010-03-04  Mark Rowe  <mrowe@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/7717249> DOMSVG.h includes a non-existent DOMSVGFEMorphologyElement.h

        * WebCore.xcodeproj/project.pbxproj: Copy DOMSVGFEMorphologyElement.h and DOMSVGFEMorphologyElementInternal.h
        in to the framework wrapper.

2010-03-04  James Robinson  <jamesr@chromium.org>

        Reviewed by Dimitri Glazkov.

        Handles setting HTMLSelectElement.length with mutation handlers present
        https://bugs.webkit.org/show_bug.cgi?id=33983

        When setting an HTMLSelectElement's length attribute, option elements have to be added or removed to the select
        as appropriate.  This is a little tricky with mutation events since they might add, remove, or reorder elements
        while option elements are being added or deleted.

        Tests: fast/forms/select-set-length-optgroup.html
               fast/forms/select-set-length-with-mutation-remove.html
               fast/forms/select-set-length-with-mutation-reorder.html
               fast/forms/select-set-length-with-mutation-reparent.html
               fast/forms/select-set-length-with-mutation.html
               fast/forms/select-set-length.html

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::setLength):

2010-03-04  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Unreviewed buildfix after r55542 on Windows.

        * WebCore.pro:
         - plugins/win/PluginDatabaseWin.cpp removed.
         - platform/win/WebCoreInstanceHandle.cpp added.

        * platform/win/WebCoreInstanceHandle.cpp: Remove explicit qualification in namespace declaration to make gcc happy.

2010-03-04  Nate Chapin  <japhet@chromium.org>

        Reviewed by Kenneth Rohde Christiansen.

        Fix the case where we do a same document navigation, scroll,
        then repeat the same document navigation.  Currently, the second
        navigation does nothing.

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

        Test: fast/loader/repeat-same-document-navigation.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadInSameDocument): Call scrollToFragment() whether or not the hash changed.

2010-03-04  Simon Fraser  <simon.fraser@apple.com>

        Build fix.
        
        const long long cMaxDistance = numeric_limits<long long>::max() created global
        initializers at the call sites, so replace with an inline function.

        * page/FocusController.cpp:
        (WebCore::updateFocusCandidateIfCloser):
        * page/SpatialNavigation.cpp:
        (WebCore::distanceInDirection):
        * page/SpatialNavigation.h:
        (WebCore::maxDistance):
        (WebCore::FocusCandidate::FocusCandidate):

2010-03-04  Antonio Gomes  <tonikitoo@webkit.org>

        Unreviewed attempt to fix Windows build.

        * page/SpatialNavigation.cpp:
        (WebCore::spatialDistance):

2010-03-04  Simon Fraser  <simon.fraser@apple.com>

        Build fix.

        Delcare updateFocusCandidateIfCloser static to avoid warning.

        * page/FocusController.cpp:
        (WebCore::updateFocusCandidateIfCloser):

2010-03-04  Darin Fisher  <darin@chromium.org>

        Reviewed by Dmitry Titov.

        [chromium] make history.{push,replace}State enabled at runtime
        https://bugs.webkit.org/show_bug.cgi?id=35753

        * bindings/generic/RuntimeEnabledFeatures.cpp:
        * bindings/generic/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setPushStateEnabled):
        (WebCore::RuntimeEnabledFeatures::pushStateEnabled):
        (WebCore::RuntimeEnabledFeatures::replaceStateEnabled):
        * page/History.idl:

2010-03-04  Antonio Gomes  <tonikitoo@webkit.org>

        Unreviewed attempt to (again) fix Mac build.

        * page/SpatialNavigation.cpp:
        (WebCore::spatialDistance):

2010-03-04  Dan Bernstein  <mitz@apple.com>

        Based on a patch from Nick Jong.

        Reviewed by Simon Fraser.

        Improve selection in multi-column blocks when hitting points above or
        below a column rect.

        Test: fast/multicol/hit-test-above-or-below.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::adjustPointToColumnContents): If the point lies
        within the horizontal range for a column, constrain it to the column (if
        it is above) or the next column (if it is below).

2010-03-04  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Simon Fraser.

        Attempt to fix Mac build.

        * page/SpatialNavigation.cpp:

2010-03-04  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        Add SpatialNavigation header and cpp to Mac XCode project file.

        Reviewed by Kenneth Christiansen.

        * WebCore.xcodeproj/project.pbxproj:

2010-03-02  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Simon Fraser, Eric Seidel and Darin Adler.
        Patch by Antonio Gomes <tonikitoo@webkit.org>
        Based on the initial work of Marco Barisione <marco.barisione@collabora.co.uk>

        Extend keyboard navigation to allow directional navigation
        https://bugs.webkit.org/show_bug.cgi?id=18662

        This patch implements the core logic of the 'Spatial Navigation' feature [1].
        It improves the accessibility support of WebCore by extending the basic keyboard
        navigation currently available (based on Tab forward and backward) with the
        addition of a two-dimensional directional navigation by using Left, Right, Up and
        Down arrow keys to move to the "nearest" element in the corresponding direction.

        Highlights:
        * Feature is turned off by default in Settings. Port specific APIs need to be added
          for toggling it on/off.
        * Only elements viewed in the current viewport can have focus move to it. If the
          "nearest" is not in viewport dimensions, then a scroll-in-direction action is
          performed.

        Known issues (to be covered in follow-up bugs):
        * Add port specific hooks to each DRT to enable/disable Spatial Navigation.
        * Support for spatial navigation through form elements (<input>, <select>, etc)
          is be added.
        * Make navigation keys customizable. It currently works with arrows keys only
          (up, down, right and left).
        * Make it support modifiers (Alt, Ctrl and Shift).
        * Improve support on scrollable content.

        [1] http://en.wikipedia.org/wiki/Spatial_navigation

        * Android.mk:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::defaultKeyboardEventHandler):
        (WebCore::EventHandler::focusDirectionForKey):
        (WebCore::EventHandler::defaultArrowEventHandler):
        * page/EventHandler.h:
        * page/FocusController.cpp:
        (WebCore::FocusController::advanceFocus):
        (WebCore::FocusController::advanceFocusInDocumentOrder):
        (WebCore::FocusController::advanceFocusDirectionally):
        (WebCore::updateFocusCandidateIfCloser):
        (WebCore::FocusController::findFocusableNodeInDirection):
        (WebCore::FocusController::deepFindFocusableNodeInDirection):
        * page/FocusController.h:
        * page/FocusDirection.h:
        (WebCore::):
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setSpatialNavigationEnabled):
        * page/Settings.h:
        (WebCore::Settings::isSpatialNavigationEnabled):
        * page/SpatialNavigation.cpp: Added.
        (WebCore::distanceInDirection):
        (WebCore::renderRectRelativeToRootDocument):
        (WebCore::alignmentForRects):
        (WebCore::isHorizontalMove):
        (WebCore::areRectsFullyAligned):
        (WebCore::areRectsPartiallyAligned):
        (WebCore::spatialDistance):
        (WebCore::isRectInDirection):
        (WebCore::hasOffscreenRect):
        (WebCore::scrollInDirection):
        (WebCore::isInRootDocument):
        (WebCore::deflateIfOverlapped):
        * page/SpatialNavigation.h: Added.
        (WebCore::):
        (WebCore::FocusCandidate::FocusCandidate):

2010-03-04  Beth Dakin  <bdakin@apple.com>

        Reviewed by Anders Carlsson.

        This fixes the layering violation I committed yesterday by moving 
        Page::instanceHandle into its own file just in the WebCore 
        namespace.

        Added WebCoreInstanceHandle.h + .cpp and removed PageWin.cpp
        * WebCore.vcproj/WebCore.vcproj:
        * page/win/PageWin.cpp: Removed.

        Remove all instance handle code from Page.
        * page/Page.h:

        New files.
        * platform/win/WebCoreInstanceHandle.cpp: Added.
        * platform/win/WebCoreInstanceHandle.h: Added.
        (WebCore::setInstanceHandle):
        (WebCore::instanceHandle):

        Switch to WebCore::instanceHandle() instead of 
        Page::instanceHandle() and include the new header.
        * platform/graphics/win/WKCACFLayerRenderer.cpp:
        (WebCore::WKCACFLayerRenderer::acceleratedCompositingAvailable):
        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::Pasteboard):
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::show):
        (WebCore::PopupMenu::registerClass):
        * platform/win/SharedTimerWin.cpp:
        (WebCore::initializeOffScreenTimerWindow):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::registerPluginView):
        (WebCore::PluginView::platformStart):

2010-03-04  Antonio Gomes  <tonikitoo@webkit.org>

        Unreviewed build fix.
        Patch by Antonio Gomes <tonikitoo@webkit.org>

        'glib_file_name' renamed to 'gligFileName'.

        * platform/graphics/gtk/ImageGtk.cpp:
        (WebCore::Image::loadPlatformResource):

2010-03-04  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Remove two last synchronous calls from front-end to InspectorBackend.

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

        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::enableSearchingForNode):
        (WebCore::InspectorBackend::disableSearchingForNode):
        (WebCore::InspectorBackend::setPauseOnExceptionsState):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::setWindowVisible):
        (WebCore::InspectorContorller::setSearchingForNode):
        (WebCore::InspectorController::populateScriptObjects):
        * inspector/InspectorController.h:
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::searchingForNodeWasEnabled):
        (WebCore::InspectorFrontend::searchingForNodeWasDisabled):
        (WebCore::InspectorFrontend::updatePauseOnExceptionsState):
        * inspector/InspectorFrontend.h:
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel):
        (WebInspector.ElementsPanel.prototype.get statusBarItems):
        (WebInspector.ElementsPanel.prototype.hide):
        (WebInspector.ElementsPanel.prototype.reset):
        (WebInspector.ElementsPanel.prototype.searchingForNodeWasEnabled):
        (WebInspector.ElementsPanel.prototype.searchingForNodeWasDisabled):
        (WebInspector.ElementsPanel.prototype._nodeSearchButtonClicked):
        * inspector/front-end/InspectorBackendStub.js:
        (.WebInspector.InspectorBackendStub.prototype.enableSearchingForNode):
        (.WebInspector.InspectorBackendStub.prototype.disableSearchingForNode):
        (.WebInspector.InspectorBackendStub.prototype.setPauseOnExceptionsState):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype.get statusBarItems):
        (WebInspector.ScriptsPanel.prototype.updatePauseOnExceptionsState):
        (WebInspector.ScriptsPanel.prototype._updateDebuggerButtons):
        (WebInspector.ScriptsPanel.prototype._togglePauseOnExceptions):
        * inspector/front-end/inspector.js:
        (WebInspector.searchingForNodeWasEnabled):
        (WebInspector.searchingForNodeWasDisabled):
        (WebInspector.updatePauseOnExceptionsState):

2010-03-03  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Clicking on an error should take me to the error

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

        * inspector/front-end/ResourceView.js:
        (WebInspector.ResourceView):
        (WebInspector.ResourceView.prototype._selectTab):
        (WebInspector.ResourceView.prototype.selectContentTab):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.showResource):

2010-03-03  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Remove sync access to resourceTrackingEnabled.

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

        * inspector/InspectorBackend.cpp:
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::populateScriptObjects):
        * inspector/front-end/AuditsPanel.js:
        (WebInspector.AuditsPanel.prototype._reloadResources):
        (WebInspector.AuditsPanel.prototype.show):
        * inspector/front-end/InspectorBackendStub.js:
        (.WebInspector.InspectorBackendStub):
        (.WebInspector.InspectorBackendStub.prototype.enableResourceTracking):
        (.WebInspector.InspectorBackendStub.prototype.disableResourceTracking):
        (.WebInspector.InspectorBackendStub.prototype.enableDebugger):
        (.WebInspector.InspectorBackendStub.prototype.disableDebugger):
        (.WebInspector.InspectorBackendStub.prototype.enableProfiler):
        (.WebInspector.InspectorBackendStub.prototype.disableProfiler):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel):
        (WebInspector.ResourcesPanel.prototype.get resourceTrackingEnabled):
        (WebInspector.ResourcesPanel.prototype.get visibleView):
        (WebInspector.ResourcesPanel.prototype.resourceTrackingWasEnabled):
        (WebInspector.ResourcesPanel.prototype.resourceTrackingWasDisabled):
        (WebInspector.ResourcesPanel.prototype.reset):
        (WebInspector.ResourcesPanel.prototype.showResource):
        (WebInspector.ResourcesPanel.prototype._enableResourceTracking):
        (WebInspector.ResourcesPanel.prototype._toggleResourceTracking):

2010-03-04  Antoine Quint  <ml@graougraou.com>

        Reviewed by Darin Adler.

        DOM insertion mutation events should dispatch after a node is attached to the render tree
        https://bugs.webkit.org/show_bug.cgi?id=35590

        Test: fast/events/domnodeinsertedintodocument-dispatched-post-rendering.html

        Split off the internal-to-WebCore node insertion notification code from the DOM mutation
        event dispatching, originally in dispatchChildInsertionEvents(), to a new static function
        called notifyChildInserted(). This allows us to dispatch the mutation events at a later
        time upon insertion of a child into to the tree, specifically _after_ attachment to the render
        tree.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::insertBefore):
        (WebCore::ContainerNode::replaceChild):
        (WebCore::ContainerNode::appendChild):
        (WebCore::notifyChildInserted):
        (WebCore::dispatchChildInsertionEvents):

2010-03-04  Fridrich Strba  <fridrich.strba@bluewin.ch>

        Reviewed by Holger Freyther.

        Make paths relocatable on runtime on Windows
        https://bugs.webkit.org/show_bug.cgi?id=32711

        * platform/graphics/gtk/ImageGtk.cpp:
        (get_webkit_datadir):
        (WebCore::Image::loadPlatformResource):

2010-03-04  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Popup for Timeline panel will work in a tooltip mode

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

        * inspector/front-end/Popover.js:
        (WebInspector.Popover):
        (WebInspector.Popover.prototype.show):
        (WebInspector.Popover.prototype.hide):
        (WebInspector.Popover.prototype._positionElement):
        (WebInspector.PopoverHelper):
        (WebInspector.PopoverHelper.prototype._mouseDown):
        (WebInspector.PopoverHelper.prototype._mouseMove.doHide):
        (WebInspector.PopoverHelper.prototype._mouseMove):
        (WebInspector.PopoverHelper.prototype._resetHoverTimer):
        (WebInspector.PopoverHelper.prototype.hidePopup):
        (WebInspector.PopoverHelper.prototype._mouseHover):
        (WebInspector.PopoverHelper.prototype._killHidePopupTimer):
        * inspector/front-end/TimelineOverviewPane.js:
        (WebInspector.TimelineOverviewPane.prototype.reset):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel):
        (WebInspector.TimelinePanel.prototype.get _recordStyles):
        (WebInspector.TimelinePanel.prototype._innerAddRecordToTimeline):
        (WebInspector.TimelinePanel.prototype._scheduleRefresh):
        (WebInspector.TimelinePanel.prototype._refreshRecords):
        (WebInspector.TimelinePanel.prototype._adjustScrollPosition):
        (WebInspector.TimelinePanel.prototype._getPopoverAnchor):
        (WebInspector.TimelinePanel.prototype._showPopover):
        (WebInspector.TimelinePanel.prototype._closeRecordDetails):
        (WebInspector.TimelineRecordListRow):
        (WebInspector.TimelineRecordListRow.prototype.update):
        (WebInspector.TimelineRecordGraphRow):
        (WebInspector.TimelineRecordGraphRow.prototype._onClick):
        (WebInspector.TimelinePanel.FormattedRecord):
        (WebInspector.TimelinePanel.FormattedRecord.prototype._createCell):
        (WebInspector.TimelinePanel.FormattedRecord.prototype._createRow):
        (WebInspector.TimelinePanel.FormattedRecord.prototype._createLinkRow):
        (WebInspector.TimelinePanel.FormattedRecord.prototype._generatePopupContent):
        (WebInspector.TimelinePanel.FormattedRecord.prototype._getRecordDetails):
        * inspector/front-end/inspector.css:

2010-03-04  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Unreviewed build fix.

        Build fix after r55464.

        No new tests, no new functionality.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::populateScriptObjects):

2010-03-04  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Kenneth Rohde Christiansen.

        Add EFL port files to platform/graphics/efl.
        http://webkit.org/b/35539

        * platform/graphics/efl/FloatRectEfl.cpp: Added.
        * platform/graphics/efl/FontEfl.cpp: Added.
        * platform/graphics/efl/IconEfl.cpp: Added.
        * platform/graphics/efl/ImageEfl.cpp: Added.
        * platform/graphics/efl/IntPointEfl.cpp: Added.
        * platform/graphics/efl/IntRectEfl.cpp: Added.

2010-03-04  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Kenneth Rohde Christiansen.

        Add EFL port files to platform/text/efl.
        http://webkit.org/b/35740

        * platform/text/efl/TextBreakIteratorInternalICUEfl.cpp: Added.

2010-03-04  Fridrich Strba  <fridrich.strba@bluewin.ch>

        Reviewed by Holger Freyther.

        https://bugs.webkit.org/show_bug.cgi?id=35726
        Remove orphaned #ifdef WTF_USE_GLIB_ICU_UNICODE_HYBRID

        Removing orphaned #if USE.

        * platform/ThreadGlobalData.h:

2010-03-03  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Darin Fisher.

        Throttle sync requests sent to the LocalStorage background thread
        https://bugs.webkit.org/show_bug.cgi?id=34943

        Currently, once a second LocalStorage takes all keys/values which have
        been changed and sends them to a background thread to sync.  The problem
        is that this background thread can get overwhelmed and stop being
        responsive.  This means that if any other page tries to start using
        LocalStorage (and thus initiates the initial import) that'll block on
        all the previous syncs completing.

        To mitigate this, I'm adding code so that we never schedule another
        sync task when another is still running.  In order to keep the sync
        tasks from growing exponentially when they do take longer than the
        storage sync interval, I've also added a basic rate limiter.  No effort
        is made to ensure fairness/ordering of what gets synced nor is there
        any way for this rate to be changed because most normal uses of
        LocalStorage really shouldn't be hitting these types of limits anyway.

        The only behavioral change that's observible in JavaScript is time based
        and thus it's not practical to make new tests that aren't racy.  The
        existing layout tests cover LocalStorage pretty well, though.

        * storage/StorageAreaSync.cpp:
        (WebCore::StorageAreaSync::StorageAreaSync):
        (WebCore::StorageAreaSync::scheduleFinalSync):
        (WebCore::StorageAreaSync::syncTimerFired):
        (WebCore::StorageAreaSync::performSync):
        * storage/StorageAreaSync.h:

2010-03-04  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Pavel Feldman.

        Added support for worker instrumentation in inspector
        (display list of active workers, allow debugging of workers
        by injecting fake JS implementation)

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

        * English.lproj/localizedStrings.js:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::InjectedScriptHost::createInjectedScript):
        (WebCore::InjectedScriptHost::injectedScriptFor):
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::InjectedScriptHost::createInjectedScript):
        (WebCore::InjectedScriptHost::injectedScriptFor):
        * dom/Document.cpp:
        (WebCore::Document::inspectorController):
        * dom/Document.h:
        * dom/ScriptExecutionContext.h:
        (WebCore::ScriptExecutionContext::inspectorController):
        * inspector/InjectedScriptHost.cpp:
        (WebCore::InjectedScriptHost::InjectedScriptHost):
        (WebCore::InjectedScriptHost::injectScript):
        (WebCore::InjectedScriptHost::nextWorkerId):
        (WebCore::InjectedScriptHost::didCreateWorker):
        (WebCore::InjectedScriptHost::willDestroyWorker):
        * inspector/InjectedScriptHost.h:
        * inspector/InjectedScriptHost.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::populateScriptObjects):
        (WebCore::InspectorController::resetScriptObjects):
        (WebCore::InspectorController::didCommitLoad):
        (WebCore::InspectorController::didCreateWorker):
        (WebCore::InspectorController::willDestroyWorker):
        * inspector/InspectorController.h:
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::didCreateWorker):
        (WebCore::InspectorFrontend::willDestroyWorker):
        * inspector/InspectorFrontend.h:
        * inspector/InspectorWorkerResource.h: Added.
        (WebCore::InspectorWorkerResource::create):
        (WebCore::InspectorWorkerResource::id):
        (WebCore::InspectorWorkerResource::url):
        (WebCore::InspectorWorkerResource::isSharedWorker):
        (WebCore::InspectorWorkerResource::InspectorWorkerResource):
        * inspector/front-end/Checkbox.js: Added.
        (WebInspector.Checkbox.callbackWrapper):
        (WebInspector.Checkbox):
        (WebInspector.Checkbox.prototype.checked):
        * inspector/front-end/InjectedFakeWorker.js:
        (InjectedFakeWorker.FakeWorker):
        (InjectedFakeWorker.FakeWorker.prototype.terminate):
        (InjectedFakeWorker.FakeWorker.prototype._handleException):
        (InjectedFakeWorker.FakeWorker.prototype._importScripts):
        (InjectedFakeWorker.FakeWorker.prototype._loadScript):
        (InjectedFakeWorker.FakeWorker.prototype._expandURLAndCheckOrigin):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype.debuggerWasEnabled):
        (WebInspector.ScriptsPanel.prototype.debuggerWasDisabled):
        (WebInspector.ScriptsPanel.prototype.reset):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/WorkersSidebarPane.js: Added.
        (WebInspector.WorkersSidebarPane):
        (WebInspector.WorkersSidebarPane.prototype.addWorker):
        (WebInspector.WorkersSidebarPane.prototype.removeWorker):
        (WebInspector.WorkersSidebarPane.prototype.setInstrumentation):
        (WebInspector.WorkersSidebarPane.prototype.reset):
        (WebInspector.WorkersSidebarPane.prototype._onTriggerInstrument):
        (WebInspector.Worker):
        (WebInspector.didCreateWorker):
        (WebInspector.willDestroyWorker):
        * inspector/front-end/inspector.css:
        * inspector/front-end/inspector.html:
        * workers/AbstractWorker.cpp:
        (WebCore::AbstractWorker::AbstractWorker):
        (WebCore::AbstractWorker::~AbstractWorker):
        (WebCore::AbstractWorker::onDestroyWorker):
        (WebCore::AbstractWorker::contextDestroyed):
        * workers/AbstractWorker.h:
        (WebCore::AbstractWorker::id):
        * workers/SharedWorker.cpp:
        (WebCore::SharedWorker::SharedWorker):
        * workers/Worker.cpp:
        (WebCore::Worker::Worker):

2010-03-04  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Make the OUTPUT_DIR variable in qmake projects independent of build-webkit's logic.

        This also allows shadow builds relying only on qmake to work properly.

        * WebCore.pro:

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

        Reviewed by Simon Hausmann.

        [Qt] Avoid calling QFont::detach too often from FontQt
        https://bugs.webkit.org/show_bug.cgi?id=35569

        The letter- and wordspacing is inside the WebCore::Font class,
        our QFont is located in the WebCore::FontPlatformData. Everytime
        we need to use a QFont inside WebCore::Font we are calling the
        font method which gets the QFont from the WebCore::FontPlatformData
        and is applying the letter- and wordspacing. Internally this
        will attempt to detach the QFont...

        Avoid calling setLetterSpacing and setWordSpacing on QFont if
        the WebCore::Font has the default applied.

        * platform/graphics/qt/FontQt.cpp:
        (WebCore::Font::font):

2010-03-04  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Nothing happens on navigation to resource via a link if resource tracking is disabled
        https://bugs.webkit.org/show_bug.cgi?id=35574

        * English.lproj/localizedStrings.js:
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.canShowSourceLine):
        (WebInspector.ResourcesPanel.prototype._toggleResourceTracking):
        * inspector/front-end/inspector.js:
        (WebInspector.documentMouseOver):
        (WebInspector.documentMouseOut):
        (WebInspector.hideBadLinkPopupIfNecessary):
        (WebInspector.documentClick.followLink):
        (WebInspector.documentClick):
        (WebInspector.showBadLinkPopup.popupOverOut):
        (WebInspector.showBadLinkPopup):
        (WebInspector.addMainEventListeners):

2010-03-04  Vangelis Kokkevis  <vangelis@chromium.org>

        Reviewed by Oliver Hunt.

        getUniformLocation() now returns null if uniform requested 
        is not found.
        https://bugs.webkit.org/show_bug.cgi?id=34669
        
        Test:LayoutTests/fast/canvas/webgl/uniform-location.html
        (added missing test)

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getUniformLocation):

2010-03-04  John Abd-El-Malek  <jam@chromium.org>

        Reviewed by Adam Barth.

        Fix incorrect setup of DateExtension.
        https://bugs.webkit.org/show_bug.cgi?id=35710

        * bindings/v8/DateExtension.cpp:
        (WebCore::DateExtension::setAllowSleep):

2010-03-04  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej Stachowiak.

        https://bugs.webkit.org/show_bug.cgi?id=35603
        SVG incorrectly allows nested <use> elements in a <use> shadow tree

        Simplify the handling of invalid or missing use-targets by cloning them
        to empty <g> elements rather than just allowing the <use> element to
        be copied into the shadow tree, as this violates a number of assumptions
        in the shadow tree handling code.

        Tests: svg/custom/use-nested-disallowed-target.svg
               svg/custom/use-nested-missing-target-added.svg
               svg/custom/use-nested-missing-target-removed.svg
               svg/custom/use-nested-missing-target.svg
               svg/custom/use-nested-notarget.svg

        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::buildPendingResource):
        (WebCore::SVGUseElement::buildShadowAndInstanceTree):
        (WebCore::SVGUseElement::expandUseElementsInShadowTree):

2010-03-04  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Gustavo Noronha Silva.

        Move Cairo-related font code from platform/graphics/gtk to
        platform/graphics/cairo, so other ports may use them.
        http://webkit.org/b/35539

        * GNUmakefile.am:
        * platform/graphics/cairo/FontCacheCairo.cpp: Copied from WebCore/platform/graphics/gtk/FontCacheGtk.cpp.
        * platform/graphics/cairo/FontCustomPlatformData.cpp: Copied from WebCore/platform/graphics/gtk/FontCustomPlatformData.cpp.
        * platform/graphics/cairo/FontCustomPlatformData.h: Copied from WebCore/platform/graphics/gtk/FontCustomPlatformData.h.
        * platform/graphics/cairo/FontPlatformData.h: Copied from WebCore/platform/graphics/gtk/FontPlatformData.h.
        * platform/graphics/cairo/FontPlatformDataCairo.cpp: Copied from WebCore/platform/graphics/gtk/FontPlatformDataGtk.cpp.
        * platform/graphics/cairo/GlyphPageTreeNodeCairo.cpp: Copied from WebCore/platform/graphics/gtk/GlyphPageTreeNodeGtk.cpp.
        * platform/graphics/cairo/SimpleFontDataCairo.cpp: Copied from WebCore/platform/graphics/gtk/SimpleFontDataGtk.cpp.
        * platform/graphics/gtk/FontCacheGtk.cpp: Removed.
        * platform/graphics/gtk/FontCustomPlatformData.cpp: Removed.
        * platform/graphics/gtk/FontCustomPlatformData.h: Removed.
        * platform/graphics/gtk/FontPlatformData.h: Removed.
        * platform/graphics/gtk/FontPlatformDataGtk.cpp: Removed.
        * platform/graphics/gtk/GlyphPageTreeNodeGtk.cpp: Removed.
        * platform/graphics/gtk/SimpleFontDataGtk.cpp: Removed.

2010-03-04  Evan Stade  <estade@chromium.org>

        Reviewed by David Levin.

        https://bugs.webkit.org/show_bug.cgi?id=35261
        [skia] crash when attempting to render certain SVGs

        This fixes the crash, but the SVG still doesn't render properly.

        Test: svg/custom/tiling-regular-hexagonal-crash.svg

        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::BitmapImageSingleFrameSkia::create): don't return 0 when
        the copy fails; instead return a blank bitmap. The caller doesn't
        check for 0 before dereferencing.

2010-03-04  Tony Chang  <tony@chromium.org>

        Reviewed by Darin Fisher.

        Initialize m_isMultipartPayload in other ResourceResponse ctor.
        In r55451 (bug 35628) I added an extra bool, but only initialized
        it in one constructor.
        https://bugs.webkit.org/show_bug.cgi?id=35719

        * platform/network/chromium/ResourceResponse.h:
        (WebCore::ResourceResponse::ResourceResponse):

2010-03-03  Yuta Kitamura  <yutak@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Add a new class that stores information about Web Socket handshake request.

        Instances of this class contain the necessary information to send a Web Socket
        handshake request. In the future, this class will provide request information
        to the Web Inspector.

        WebSocketHandshake needs to provide request information
        https://bugs.webkit.org/show_bug.cgi?id=34784

        No new tests, since the current tests will suffice (LayoutTests/websocket/*).

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * websockets/WebSocketChannel.cpp:
        * websockets/WebSocketHandshake.cpp:
        (WebCore::WebSocketHandshake::clientHandshakeMessage):
        (WebCore::WebSocketHandshake::clientHandshakeRequest):
        * websockets/WebSocketHandshake.h:
        * websockets/WebSocketHandshakeRequest.cpp: Added.
        (WebCore::WebSocketHandshakeRequest::WebSocketHandshakeRequest):
        (WebCore::WebSocketHandshakeRequest::~WebSocketHandshakeRequest):
        (WebCore::WebSocketHandshakeRequest::addExtraHeaderField):
        (WebCore::WebSocketHandshakeRequest::headerFields):
        (WebCore::WebSocketHandshakeRequest::host):
        * websockets/WebSocketHandshakeRequest.h: Added.

2010-03-03  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Build fix after r55452.

        No new tests, this is a build fix.

        * page/Settings.cpp:
        (WebCore::Settings::setDatabasesEnabled):

2010-03-03  Diego Gonzalez  <diego.gonzalez@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        Make keyIdentifierForQtKeyCode return the unicode backspace value on Qt PlatformKeyboardEvent

        LayoutTests:
            fast/events/key-events-in-input-text.html
            fast/events/special-key-events-in-input-text.html

        [Qt] Return the unicode backspace value in keyIdentifierForQtKeyCode on Qt PlatformKeyboardEvent
        https://bugs.webkit.org/show_bug.cgi?id=35694

        * platform/qt/PlatformKeyboardEventQt.cpp:
        (WebCore::keyIdentifierForQtKeyCode):

2010-03-03  Chad Faragher  <wyck@chromium.org>

        Reviewed by Darin Adler.
        Changed the double-click framework code to pass adjusted page
        coordinates for zoomed pages.  Added a new test to expose
        mistreatment of mouse click coordinates during a double-click.

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

        Test: fast/events/zoom-dblclick.html

        * dom/Node.cpp:
        (WebCore::Node::dispatchMouseEvent):

2010-03-03  David Levin  <levin@chromium.org>

        No review, rolling out r55474.

        The patch broke fast/frames/sandboxed-iframe-storage.html

        Last one (I hope).
        
        * WebCore.xcodeproj/project.pbxproj:

2010-03-03  David Levin  <levin@chromium.org>

        No review, rolling out r55474.

        The patch broke fast/frames/sandboxed-iframe-storage.html

        Unfortunately, (the webkit-patch rollout and) I missed these in r55485.

        * bindings/js/JSDatabaseCallback.cpp: Removed.
        * bindings/js/JSDatabaseCallback.h: Removed.
        * bindings/v8/custom/V8DatabaseCallback.cpp: Removed.
        * bindings/v8/custom/V8DatabaseCallback.h: Removed.
        * storage/DatabaseCallback.h: Removed.

2010-03-02  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Dimitri Glazkov.

        Fix a bug that could lead to a crash. Some parts of
        SQLTransaction::checkAndHandleClosedDatabase() should only be run
        when that method is invoked on the DB thread.

        We cannot test this fix with a test, because the crash happens
        only when all of the following conditions are met:
        1. A database is closing.
        2. A transaction on that database is in progress.
        3. The transaction is in a state where a statement/transaction
        success/error callback needs to be invoked (so there's a task for
        this transaction pending on the main thread).
        4. The DB thread finished processing all its tasks and called
        SQLTransactionCoordinator::shutdown() before the main thread go to
        that task.

        The closest thing we have to a test is running
        LayoutTests/storage/database-lock-after-reload.html 1000 times in
        a row. Without the patch, the probability of a crash happening in
        one of the runs is very high. With the patch, the test should
        reliably run 1000 times in a row without a single crash.

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

        * storage/SQLTransaction.cpp:
        (WebCore::SQLTransaction::checkAndHandleClosedDatabase):

2010-03-03  Darin Fisher  <darin@chromium.org>

        Reviewed by Mark Rowe.

        Page should not care about Chromium plug-in implementation details
        https://bugs.webkit.org/show_bug.cgi?id=35623

        * WebCore.gypi: Compile PluginViewNone.cpp
        * page/Page.cpp:
        (WebCore::Page::privateBrowsingStateChanged): Remove conditional
        compilation for PLATFORM(CHROMIUM).

2010-03-03  David Levin  <levin@chromium.org>

        No review, rolling out r55474.
        http://trac.webkit.org/changeset/55480

        The patch broke fast/frames/sandboxed-iframe-storage.html

        * Android.jscbindings.mk:
        * Android.v8bindings.mk:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * bindings/js/JSDOMWindowCustom.cpp:
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        * dom/Document.cpp:
        (WebCore::Document::postTask):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::openDatabase):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:
        * storage/Database.cpp:
        (WebCore::Database::openDatabase):
        (WebCore::Database::Database):
        (WebCore::Database::performOpenAndVerify):
        * storage/Database.h:
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::openDatabase):
        * workers/WorkerContext.h:

2010-03-03  David Levin  <levin@chromium.org>

        No review, rolling out r55480.
        http://trac.webkit.org/changeset/55480

        The patch broke fast/frames/sandboxed-iframe-storage.html

        * storage/Database.cpp:
        * storage/Database.h:

2010-03-03  Mark Rowe  <mrowe@apple.com>

        Reviewed by Geoff Garen.

        Add virtual memory tags for TCMalloc and WebCore's purgeable buffers.

        * platform/mac/PurgeableBufferMac.cpp:
        (WebCore::PurgeableBuffer::create):  Use the VM tag.

2010-03-03  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by nobody, build fix.

        Move #include "DatabaseCallback.h" from Database.h to
        Database.cpp.

        * storage/Database.cpp:
        * storage/Database.h:

2010-03-03  Darin Adler  <darin@apple.com>

        Fixed Mac build.

        * WebCore.xcodeproj/project.pbxproj: Marked a couple of headers "private" so they can
        be used in the WebKit project.

2010-03-03  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Adele Peterson.

        https://bugs.webkit.org/show_bug.cgi?id=35044
        Crash in XML tokenizer reloading zoom-coords-viewattr-01-b.svg

        I'm often getting a crash even when opening the test for the first time in Safari, but it
        doesn't seem to crash in DumpRenderTree. Still, I can't think of a stronger way to test for
        this condition, so no new regression test.

        * dom/XMLTokenizer.cpp: (WebCore::XMLTokenizer::end): Be prepared that parsing remaining
        input will pause parsing.

2010-03-03  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Adam Barth.

        Adding support for the optional creation callback that could be
        passed to openDatabase().

        Test: storage/open-database-creation-callback.html

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

        * Android.jscbindings.mk
        * Android.v8bindings.mk
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::openDatabase):
        * bindings/js/JSDatabaseCallback.cpp: Added.
        (WebCore::JSDatabaseCallback::JSDatabaseCallback):
        (WebCore::JSDatabaseCallback::~JSDatabaseCallback):
        (WebCore::JSDatabaseCallback::handleEvent):
        * bindings/js/JSDatabaseCallback.h: Added.
        (WebCore::JSDatabaseCallback::create):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8DOMWindow::openDatabaseCallback):
        * bindings/v8/custom/V8DatabaseCallback.cpp: Added.
        (WebCore::V8DatabaseCallback::V8DatabaseCallback):
        (WebCore::V8DatabaseCallback::~V8DatabaseCallback):
        (WebCore::V8DatabaseCallback::handleEvent):
        * bindings/v8/custom/V8DatabaseCallback.h: Added.
        (WebCore::V8DatabaseCallback::create):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::openDatabase):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:
        * storage/Database.cpp:
        (WebCore::DatabaseCreationCallbackTask::create):
        (WebCore::DatabaseCreationCallbackTask::performTask):
        (WebCore::DatabaseCreationCallbackTask::DatabaseCreationCallbackTask):
        (WebCore::Database::openDatabase):
        (WebCore::Database::Database):
        (WebCore::Database::performOpenAndVerify):
        (WebCore::Database::performCreationCallback):
        * storage/Database.h:
        (WebCore::Database::isNew):
        * storage/DatabaseCallback.h: Added.
        (WebCore::DatabaseCallback::~DatabaseCallback):
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::openDatabase):
        * workers/WorkerContext.h:

2010-03-03  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: resources panel only shows uncompressed resource size.
        https://bugs.webkit.org/show_bug.cgi?id=35403

        * English.lproj/localizedStrings.js:
        * inspector/InspectorResource.cpp:
        (WebCore::InspectorResource::updateScriptObject):
        * inspector/front-end/AbstractTimelinePanel.js:
        (WebInspector.AbstractTimelinePanel.prototype.refresh):
        * inspector/front-end/AuditRules.js:
        (WebInspector.AuditRules.GzipRule.prototype.doRun):
        (WebInspector.AuditRules.GzipRule.prototype._shouldCompress):
        * inspector/front-end/ImageView.js:
        (WebInspector.ImageView):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource.prototype.get resourceSize):
        (WebInspector.Resource.prototype.set resourceSize):
        (WebInspector.Resource.prototype.get transferSize):
        (WebInspector.Resource.CompareBySize):
        (WebInspector.Resource.CompareByTransferSize):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.populateSidebar):
        (WebInspector.ResourceTimeCalculator.prototype.computeBarGraphLabels):
        (WebInspector.ResourceTransferSizeCalculator.prototype.computeBarGraphLabels):
        (WebInspector.ResourceTransferSizeCalculator.prototype.computeBarGraphPercentages):
        (WebInspector.ResourceTransferSizeCalculator.prototype._value):
        (WebInspector.ResourceTransferSizeCalculator.prototype._networkBytes):
        (WebInspector.ResourceSidebarTreeElement.CompareByDescendingTransferSize):
        (WebInspector.ResourceGraph.prototype.refreshLabelPositions):
        (WebInspector.ResourceGraph.prototype.refresh):
        * inspector/front-end/inspector.css:
        * inspector/front-end/inspector.js:
        (WebInspector.updateResource):

2010-03-03  Dan Bernstein  <mitz@apple.com>

        Build fix.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::removeChildren):

2010-03-03  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Get rid of synchronous debuggerEnabled, profilerEnabled calls.

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

        * inspector/InspectorBackend.cpp:
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.BreakpointsSidebarPane.prototype.addBreakpoint):
        (WebInspector.BreakpointsSidebarPane.prototype.removeBreakpoint):
        (WebInspector.BreakpointsSidebarPane.prototype._breakpointEnableChanged):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel):
        (WebInspector.ProfilesPanel.prototype.profilerWasEnabled):
        (WebInspector.ProfilesPanel.prototype.profilerWasDisabled):
        (WebInspector.ProfilesPanel.prototype._updateInterface):
        (WebInspector.ProfilesPanel.prototype._enableProfiling):
        (WebInspector.ProfilesPanel.prototype._toggleProfiling):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype.debuggerWasEnabled):
        (WebInspector.ScriptsPanel.prototype.debuggerWasDisabled):
        (WebInspector.ScriptsPanel.prototype.reset):
        (WebInspector.ScriptsPanel.prototype.canShowSourceLine):
        (WebInspector.ScriptsPanel.prototype._updateDebuggerButtons):
        (WebInspector.ScriptsPanel.prototype._enableDebugging):
        (WebInspector.ScriptsPanel.prototype._toggleDebugging):

2010-03-03  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Adele Peterson.

        Replace 'autobuffer' attribute with 'preload' to align with spec revision 4811.
        https://bugs.webkit.org/show_bug.cgi?id=35385
        rdar://problem/7689602

        Tests: media/audio-constructor-preload.html
               media/video-dom-preload.html

        * html/HTMLAttributeNames.in: Remove autobuffer, add preload

        * html/HTMLAudioElement.cpp:
        (WebCore::HTMLAudioElement::createForJSConstructor): set preload to 'auto' instead of 
            autobuffer to true.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): Initialize m_preload.
        (WebCore::HTMLMediaElement::parseMappedAttribute): Deal with 'preload' attribute.
        (WebCore::HTMLMediaElement::loadResource): Call setPreload() on the newly created MediaPlayer,
            before calling load() so it can pass the setting through to the media engine.
        (WebCore::HTMLMediaElement::preload): New.
        (WebCore::HTMLMediaElement::setPreload): Ditto
        * html/HTMLMediaElement.h:
        * html/HTMLMediaElement.idl:

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::MediaPlayer): Initialize m_preload.
        (WebCore::MediaPlayer::load): Pass m_preload to newly created media engine.
        (WebCore::MediaPlayer::preload): New, return m_preload.
        (WebCore::MediaPlayer::setPreload): New, set m_preload.
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayer::):
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::setPreload):

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::setPreload): Renamed from setAutoplay, fix logic for preload.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:

2010-03-03  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/7682756> Assertion failure when replacing the contents of a <select>

        Test: fast/dom/remove-children-notification-order.html

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::removeChildren): Changed to call childrenChanged()
        before calling removedFromDocument() on each removed child, which matches
        the order removeChild() does things, and avoids the assertion. This required
        temporarily storing the removed children in a vector.
        Also added comments about other discrepancies between this function and
        removeChild().

2010-03-03  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        Document cookieURL and firstPartyForCookies
        https://bugs.webkit.org/show_bug.cgi?id=35613

        Some folks asked what the cookieURL and the firstPartyForCookies were
        on IRC.  This patch documents these properties in the code so folks
        don't have to ask on IRC anymore.

        * dom/Document.h:

2010-03-03  Arno Renevier  <arno@renevier.net>

        Reviewed by Gustavo Noronha Silva.

        [Gtk]: assertion triggered when geolocation getCurrentPosition without an option argument.
        https://bugs.webkit.org/show_bug.cgi?id=35666

        * platform/gtk/GeolocationServiceGtk.cpp:
        (WebCore::GeolocationServiceGtk::startUpdating):

2010-03-03  Fridrich Strba  <fridrich.strba@bluewin.ch>

        Reviewed by Xan Lopez.

        Miscellaneous little fixes for the windows build of webkit-gtk
        https://bugs.webkit.org/show_bug.cgi?id=35640

        * GNUmakefile.am: dist two new files concerning mathml support.

2010-03-03  Xan Lopez  <xlopez@igalia.com>

        Unreviewed distcheck fix.

        Add new file to the build.

        * GNUmakefile.am:

2010-03-03  Antti Koivisto  <koivisto@iki.fi>

        Reviewed by Oliver Hunt.

        Make IntPoint usable as a hash key
        
        https://bugs.webkit.org/show_bug.cgi?id=35586

        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/IntPointHash.h: Added.
        (WTF::IntPointHash::hash):
        (WTF::IntPointHash::equal):
        (WTF::):

2010-03-02  Eric Uhrhane  <ericu@chromium.org>

        Reviewed by David Levin.

        Move database enable bit fully out of settings
        This is stage one of a three-stage commit [webkit, then chromium, then
        webkit again].  In this change I'm adding calls to
        Database::setIsAvailable inside Settings::setDatabaseEnabled and
        anywhere else that called it, and switching webkit fully over to using
        that flag [added in a previous checkin].  Phase two will remove
        Chromium's use of Settings for the Database, and phase three will remove
        the Setting for the Database enable entirely, leaving only
        Database::isAvailable/setIsAvailable.

        No new tests; tested by existing storage tests.

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

        * WebCore.base.exp: Export Database::setIsAvailable
        * WebCore.xcodeproj/project.pbxproj: Export needed headers as Private
        * page/DOMWindow.cpp: Read isAvailable, not Settings::isDatabaseEnabled
        (WebCore::DOMWindow::openDatabase):
        * page/Settings.cpp:  Add a call to Database::setIsAvailable.
        (WebCore::Settings::setDatabasesEnabled):

2010-03-02  Tony Chang  <tony@chromium.org>

        Reviewed by Darin Fisher.

        add a flag to WebURLResponse so we can identify multipart content
        https://bugs.webkit.org/show_bug.cgi?id=35628

        * platform/network/chromium/ResourceResponse.h:
        (WebCore::ResourceResponse::ResourceResponse):
        (WebCore::ResourceResponse::isMultipartPayload):
        (WebCore::ResourceResponse::setIsMultipartPayload):

2010-03-02  Tony Chang  <tony@chromium.org>

        Not reviewed, test fix.

        Revert r55447 because the new layout test is crashing consistently
        on Leopard Intel Debug (tests).
        https://bugs.webkit.org/show_bug.cgi?id=35261

        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::BitmapImageSingleFrameSkia::create):

2010-03-02  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Fisher.

        Google Analytics triggers "blocked plugin" UI
        https://bugs.webkit.org/show_bug.cgi?id=35565

        Just like for running script, we need to distinguish between querying
        whether plug-ins are enabled and actually blocking a page from
        instantiating a plugin.  We need to issue different callbacks to the
        FrameLoaderClient so that the client can inform us that plug-ins are
        disabled in some cases without showing the "plug-in blocked" UI.

        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::requestObject):
        (WebCore::FrameLoader::allowPlugins):
        * loader/FrameLoader.h:
        (WebCore::):
        * loader/FrameLoaderClient.h:
        (WebCore::FrameLoaderClient::didNotAllowPlugins):
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::substituteMIMETypeFromPluginDatabase):
        * loader/PluginDocument.cpp:
        (WebCore::PluginTokenizer::writeRawData):
        * page/Page.cpp:
        (WebCore::Page::pluginData):
        * plugins/MimeType.cpp:
        (WebCore::MimeType::enabledPlugin):

2010-03-02  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Support the HTTP OPTIONS verb (needed for preflight requests)

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

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::QNetworkReplyHandler):
        (WebCore::QNetworkReplyHandler::start):

2010-03-02  Evan Stade  <estade@chromium.org>

        Reviewed by David Levin.

        https://bugs.webkit.org/show_bug.cgi?id=35261
        [skia] crash when attempting to render certain SVGs

        This fixes the crash, but the SVG still doesn't render properly.

        Test: svg/custom/tiling-regular-hexagonal-crash.svg

        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::BitmapImageSingleFrameSkia::create): don't return 0 when
        the copy fails; instead return a blank bitmap. The caller doesn't
        check for 0 before dereferencing.

2010-03-02  Arno Renevier  <arno@renevier.net>

        Reviewed by Gustavo Noronha Silva.

        [Gtk] use geoclue providers with don't provide update
        https://bugs.webkit.org/show_bug.cgi?id=35191

        No new tests, behaviour depends on system.

        * platform/gtk/GeolocationServiceGtk.cpp:
        (WebCore::GeolocationServiceGtk::startUpdating):

2010-03-02  John Abd-El-Malek  <jam@chromium.org>

        Reviewed by Darin Adler.

        Remove unnecessary check.
        https://bugs.webkit.org/show_bug.cgi?id=35513

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::updateScrollbars):

2010-03-02  Darin Fisher  <darin@chromium.org>

        Fix chromium build bustage.

        * page/Page.cpp:
        (WebCore::Page::privateBrowsingStateChanged): PluginView methods may
        not be called in the Chromium port.

2010-03-02  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin Adler and Adam Roben.

        Fix for <rdar://problem/7485289> WebKit crashes on systems that 
        don't support CoreAnimation

        WKCACFLayerRenderer::acceleratedCompositingAvailable() now creates 
        a dummy HWND so that it can step through the whole setHostWindow() 
        and createRenderer() process. createRenderer() also calls a new 
        function, hardwareCapabilitiesIndicateCoreAnimationSupport() which 
        can only be called  once we have a d3dDevice.

        setHostWindow() and createRenderer() now both return bools that 
        indicate whether or not they have succeeded.

        * platform/graphics/win/WKCACFLayerRenderer.cpp:
        (WebCore::hardwareCapabilitiesIndicateCoreAnimationSupport):
        (WebCore::CoreAnimationTesterWindowWndProc):
        (WebCore::WKCACFLayerRenderer::acceleratedCompositingAvailable):
        (WebCore::WKCACFLayerRenderer::shared):
        (WebCore::WKCACFLayerRenderer::createRenderer):
        * platform/graphics/win/WKCACFLayerRenderer.h:
        (WebCore::WKCACFLayerRenderer::setHostWindow):

2010-03-02  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Jon Honeycutt.

        ScriptDebugServer shouldn't care that Mac does not use PluginView for plug-ins.

        * bindings/js/ScriptDebugServer.cpp:
        * plugins/PluginViewNone.cpp:
        (WebCore::PluginView::setJavaScriptPaused): Add an empty implementation of setJavaScriptPaused.

2010-03-02  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Jon Honeycutt.

        Clean up the build fix r55437 by adding an empty implementation of privateBrowsingStateChanged in PluginViewNone.cpp

        * page/Page.cpp:
        * plugins/PluginViewNone.cpp:
        (WebCore::PluginView::privateBrowsingStateChanged):

2010-03-02  Mark Rowe  <mrowe@apple.com>

        Fix the Mac build.

        * page/Page.cpp:
        (WebCore::Page::privateBrowsingStateChanged): Mac doesn't use WebCore's PluginView class
        for plug-ins, so provide an empty implementation of privateBrowsingStateChanged for Mac.

2010-03-02  Andy Estes  <aestes@apple.com>

        Reviewed by Maciej Stachowiak.

        Add the capability to create and dispatch a WheelEvent in JavaScript.
        Ensure the event's default handler is triggered in the same way as it is
        during a PlatformWheelEvent.

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

        Test: fast/events/wheelevent-in-scrolling-div.html

        * dom/Node.cpp: Ensure that the default behavior (scrolling) occurs for
        wheel events originating both from the platform and from
        JavaScript/ObjC.
        (WebCore::Node::dispatchWheelEvent): Instantiate new WheelEvent with
        the graunularity of the PlatformWheelEvent.
        (WebCore::Node::defaultEventHandler): Add support for mousewheel events.
        * dom/WheelEvent.cpp: Add three new member variables: m_deltaX, m_deltaY
        and m_granularity.  m_deltaX and m_deltaY differ from m_wheelDeltaX and
        m_wheelDeltaY, which are the number of wheel ticks multiplied by 120 for
        IE compatibility.
        (WebCore::WheelEvent::WheelEvent): Initialize new member variables.
        (WebCore::WheelEvent::initWheelEvent): Same.
        (WebCore::WheelEvent::initWebKitWheelEvent): Same.
        * dom/WheelEvent.h: See WheelEvent.cpp.
        (WebCore::WheelEvent::): Add Granularity enum (Pixel, Line, Page).
        (WebCore::WheelEvent::create): Add new arguments.
        (WebCore::WheelEvent::deltaX): Amount of scroll in x direction.
        (WebCore::WheelEvent::deltaY): Amount of scroll in y direction.
        (WebCore::WheelEvent::granularity): Units of deltaX and deltaY.
        * dom/WheelEvent.idl: Add initWebKitWheelEvent() to JavaScript.  This is
        the same as the initWheelEvent ObjC method.  As the DOM Level 3 Events
        specification is still a working draft and subject to change, prefix
        'WebKit' to the method signature to indicate experimental support.
        * page/EventHandler.cpp: Move the scroll handling from
        handleWheelEvent() to defaultWheelEventHandler(), which is executed on
        both PlatformWheelEvents and JavaScript WheelEvents.
        (WebCore::scrollNode): Renamed from scrollAndAcceptEvent().  Remove
        the PlatformWheelEvent from the argument list and instead return a
        boolean indicating if the scroll event was accepted.
        (WebCore::EventHandler::handleWheelEvent): Move scrolling code from here
        (WebCore::EventHandler::defaultWheelEventHandler): ...to here.
        * page/EventHandler.h: Add function signature.

2010-03-02  Mark Rowe  <mrowe@apple.com>

        Reviewed by Darin Adler.

        Bug 35576: WebKit should tell plug-in instances when private browsing state changes
        <http://webkit.org/b/35576>

        Notify plug-in instances when the private browsing state changes to match the behavior of the
        Mac plug-in code.

        * page/Page.cpp:
        (WebCore::Page::privateBrowsingStateChanged): Walk the frame tree and notify each PluginView that
        the private browsing state has changed.
        * page/Page.h:
        * page/Settings.cpp:
        (WebCore::Settings::setPrivateBrowsingEnabled): Notify the page that the private browsing state
        has changed.
        * plugins/PluginView.cpp:
        (WebCore::PluginView::privateBrowsingStateChanged): Notify the plug-in instance of the new private
        browsing state.
        * plugins/PluginView.h:

2010-03-02  Mark Rowe  <mrowe@apple.com>

        Reviewed by Oliver Hunt.

        Bug 30348: Implement private mode for plug-ins on Windows
        <http://webkit.org/b/30348> / <rdar://problem/7562261>

        Rework PluginView::getValue and PluginView::getValueStatic to remove the amount of code that
        was duplicated across platforms.  getValue and getValueStatic now call in to platform-specific
        variants that indicate whether they handled the query.  If the query is not handled by the
        platform-specific variants then the cross-platform handler has a chance to handle it.

        * plugins/PluginView.cpp:
        (WebCore::PluginView::getValueStatic): Give the platform-specific variant a chance to handle the
        variable lookup.  If it does not handle it, return an error.
        (WebCore::PluginView::getValue): Give the platform-specific variant and platform-specific static
        variant a chance to handle the variable lookup.  If they do not handle it, apply the cross-platform
        handler.  At the moment the cross-platform code handles NPNVWindowNPObject, NPNVPluginElementNPObject,
        and NPNVprivateModeBool as they have an identical implementation across ports.
        * plugins/PluginView.h:
        * plugins/PluginViewNone.cpp:
        (WebCore::PluginView::platformGetValue): PluginViewNone does not handle any lookups.
        (WebCore::PluginView::platformGetValueStatic): Ditto.
        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::platformGetValueStatic):
        (WebCore::PluginView::platformGetValue):
        platform-independent implementation.
        * plugins/mac/PluginViewMac.cpp:
        (WebCore::PluginView::platformGetValueStatic):
        (WebCore::PluginView::platformGetValue):
        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::platformGetValueStatic):
        (WebCore::PluginView::platformGetValue): Fix a bug noticed while updating this code.
        The Qt implementation of the handler for NPNVToolkit was relying on case fall-through
        to have some values handled by the static handler.  When NPNVprivateModeBool was added
        it was placed before the default case, interferring with this fall-through.  It now
        explicitly indicates in this situation that it was not handled.
        * plugins/symbian/PluginViewSymbian.cpp:
        (WebCore::PluginView::platformGetValueStatic):
        (WebCore::PluginView::platformGetValue):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::platformGetValueStatic):
        (WebCore::PluginView::platformGetValue):

2010-03-02  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Make the default constructor available to all platforms.

        * platform/PlatformKeyboardEvent.h:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        * platform/mac/KeyEventMac.mm:

2010-03-02  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by David Levin.

        Revert database thread changes that are no longer required
        https://bugs.webkit.org/show_bug.cgi?id=35519

        Jochen Eisinger created 55214 and 55247 to track which database
        owns which thread.  Dmitry suggested that this could also
        be done via TLS, though.  After exploring the options, Jochen
        chose to go the TLS route, so these patches are no longer needed.

        * storage/DatabaseThread.cpp:
        (WebCore::DatabaseThread::DatabaseThread):
        (WebCore::DatabaseThread::databaseThread):
        * storage/DatabaseThread.h:
        (WebCore::DatabaseThread::getThreadID):

2010-03-02  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        Followup for REGRESSION(r51097) - Unable to log in to statefarm.com
        <rdar://problem/7672667> and https://bugs.webkit.org/show_bug.cgi?id=35556

        * dom/ScriptElement.cpp:
        (WebCore::ScriptElementData::shouldExecuteAsJavaScript): To more perfectly match Gecko's rule,
          strip whitespace from the attribute values before comparing to window/onload/onload().

2010-03-02  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        aria-label isn't respected on option elements
        https://bugs.webkit.org/show_bug.cgi?id=35400

        When aria-label is used on an <option> element, it can take three forms.
        An option in a multi-select list, a popup button and the menu that is displayed 
        from the popup button. This patches the three requisite locations so that if
        aria-label is used, the correct accessibility text is returned.

        Test: platform/mac/accessibility/option-with-arialabel.html

        * accessibility/AccessibilityListBoxOption.cpp:
        (WebCore::AccessibilityListBoxOption::stringValue):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::getAttribute):
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::getAttribute):
        (WebCore::AccessibilityRenderObject::stringValue):
        * platform/PopupMenuClient.h:
        * platform/mac/PopupMenuMac.mm:
        (WebCore::PopupMenu::populate):
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::itemAccessibilityText):
        * rendering/RenderMenuList.h:
        * rendering/RenderTextControlSingleLine.h:
        (WebCore::RenderTextControlSingleLine::itemAccessibilityText):

2010-03-02  Mads Ager  <ager@chromium.org>

        Reviewed by Adam Barth.

        [V8] V8 should be notified of context disposals
        https://bugs.webkit.org/show_bug.cgi?id=35526

        Notify V8 of context disposals to allow it to clean up memory from those
        contexts when idle.  When disposing a context, start a timer that will
        give V8 an idle notification after a while to force cleanup.  Use a timer
        to avoid performing an idle notification in the middle of navigation where
        we know we are not idle.

        * WebCore.gypi:
        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::disposeContextHandles):
        * bindings/v8/V8GCForContextDispose.cpp: Added.
        (WebCore::V8GCForContextDispose::V8GCForContextDispose):
        (WebCore::V8GCForContextDispose::notifyContextDisposed):
        (WebCore::V8GCForContextDispose::notifyIdleSooner):
        (WebCore::V8GCForContextDispose::instance):
        (WebCore::V8GCForContextDispose::pseudoIdleTimerFired):
        * bindings/v8/V8GCForContextDispose.h: Added.
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::WindowSetTimeoutImpl):

2010-03-02  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: adding missing image files to WebKit.qrc and gypi.

        * WebCore.gypi:
        * inspector/front-end/WebKit.qrc:

2010-03-02  Kim Grönholm  <kim.gronholm@nomovok.com>

        Reviewed by Simon Hausmann.

        [Qt] GraphicsLayer: Video element with 3d transform crashes when AC is enabled.
        https://bugs.webkit.org/show_bug.cgi?id=35516

        No new tests.

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::GraphicsLayerQt::setContentsToMedia):

2010-03-02  Fridrich Strba  <fridrich.strba@bluewin.ch>

        Reviewed by Xan Lopez.

        Use unsigned instead of uint which does not exist on windows
        https://bugs.webkit.org/show_bug.cgi?id=35546

        * platform/graphics/gtk/ImageGtk.cpp:
        (WebCore::getCairoSurfacePixel):
        (WebCore::getGdkPixbufPixel):

2010-03-02  Kenneth Russell  <kbr@google.com>

        Reviewed by Darin Fisher.

        Add EnabledAtRuntime attribute to WebGLArray constructors
        https://bugs.webkit.org/show_bug.cgi?id=35558

        New functionality verified manually in Chromium; not possible to
        write layout test. Ran WebGL tests in WebKit as well.

        * bindings/generic/RuntimeEnabledFeatures.cpp:
        * bindings/generic/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setWebGLEnabled):
        (WebCore::RuntimeEnabledFeatures::webGLRenderingContextEnabled):
        (WebCore::RuntimeEnabledFeatures::webGLArrayBufferEnabled):
        (WebCore::RuntimeEnabledFeatures::webGLByteArrayEnabled):
        (WebCore::RuntimeEnabledFeatures::webGLUnsignedByteArrayEnabled):
        (WebCore::RuntimeEnabledFeatures::webGLShortArrayEnabled):
        (WebCore::RuntimeEnabledFeatures::webGLUnsignedShortArrayEnabled):
        (WebCore::RuntimeEnabledFeatures::webGLIntArrayEnabled):
        (WebCore::RuntimeEnabledFeatures::webGLUnsignedIntArrayEnabled):
        (WebCore::RuntimeEnabledFeatures::webGLFloatArrayEnabled):
        * page/DOMWindow.idl:

2010-03-02  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Fail gracefully if NPN_GetProperty tries to retrieve a property that doesn't exist.

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

        Required for passing LayoutTests/plugins/netscape-plugin-property-access-exception.html on Chromium.

        * bindings/v8/NPV8Object.cpp:
        (_NPN_GetProperty): If the result is empty, don't try to convert it to an NPVariant and return false.

2010-03-02  Jian Li  <jianli@chromium.org>

        Reviewed by Nate Chapin.

        [V8] DOMCoreException should be visible as DOMException 
        https://bugs.webkit.org/show_bug.cgi?id=35552

        Fix V8 code generator to use the correct visible name.

        * bindings/scripts/CodeGeneratorV8.pm:

2010-03-02  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        REGRESSION(r51097) - Unable to log in to statefarm.com
        <rdar://problem/7672667> and https://bugs.webkit.org/show_bug.cgi?id=35556

        Test: fast/loader/for-window-event-onload-scripts.html

        Match Gecko's rules for executing "for/event" scripts:
          -If there's only a 'for' attribute, execute it.
          -If there's only an 'event' attribute, execute it.
          -If there's a 'for=window' and 'event=onload', execute it.
          -If there's a 'for=window' and 'event=onload()', execute it.
          -If there's any other combination of both 'for' and 'event', don't execute it.

        * dom/ScriptElement.cpp:
        (WebCore::ScriptElementData::shouldExecuteAsJavaScript):
        * dom/ScriptElement.h:

        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::eventAttributeValue):
        * html/HTMLScriptElement.h:

        * svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::eventAttributeValue):
        * svg/SVGScriptElement.h:

        Add the event attribute name:
        * html/HTMLAttributeNames.in:


2010-03-02  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=35555
        QuickTime plugin content can spill outside the <object> tag

        Set -masksToBounds on the layer that is handed to us by plug-ins, to ensure that sublayers
        of that layer don't spill outside the <object> contents rect.
        
        Manual test because it relies on QuickTime, and pixel results depend on movie loading timing.

        * manual-tests/plugins/object-clipping.html: Added.
        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::GraphicsLayerCA::setupContentsLayer):

2010-03-02  Adam Roben  <aroben@apple.com>

        Export SecurityOrigin::registerURLSchemeAsSecure

        Fixes <http://webkit.org/b/35580> <rdar://problem/7706407> Expose
        SecurityOrigin::registerURLSchemeAsSecure as WebKit SPI

        Reviewed by Tim Hatcher.

        * WebCore.base.exp: Added symbol, sorted file.

2010-03-02  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: render breakpoints as border images instead of canvas.

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

        * inspector/front-end/Images/breakpointBorder.png: Added.
        * inspector/front-end/Images/breakpointConditionalBorder.png: Added.
        * inspector/front-end/Images/breakpointConditionalCounterBorder.png: Added.
        * inspector/front-end/Images/breakpointCounterBorder.png: Added.
        * inspector/front-end/Images/programCounterBorder.png: Added.
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._updateExecutionLine):
        (WebInspector.SourceFrame.prototype._addBreakpointToSource):
        (WebInspector.SourceFrame.prototype.resize):
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextChunk):
        * inspector/front-end/textViewer.css:

2010-01-28  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Ariya Hidayat.

        [Qt] Special case Font::floatWidthForComplexText for single space
        https://bugs.webkit.org/show_bug.cgi?id=33876

        For a single space we can go through the QFontMetric::width routine
        instead of converting the WebCore::String to a QString and then
        going through the QTextLine.

        * platform/graphics/qt/FontQt.cpp:
        (WebCore::Font::floatWidthForComplexText):

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

        Reviewed by Gustavo Noronha.

        [Gtk] Support private browsing mode in plugins.
        https://bugs.webkit.org/show_bug.cgi?id=35500

        Integrate the PluginViewQt.cpp changes from r55358 into Gtk+.

        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::getValue):

2010-03-02  Oliver Hunt  <oliver@apple.com>

        Reviewed by NOBODY (Build fix).

        Update Qt bridge to new named getter signature

        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::QtRuntimeMetaMethod::lengthGetter):
        (JSC::Bindings::QtRuntimeMetaMethod::connectGetter):
        (JSC::Bindings::QtRuntimeMetaMethod::disconnectGetter):
        (JSC::Bindings::QtRuntimeConnectionMethod::lengthGetter):
        * bridge/qt/qt_runtime.h:

2010-03-01  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Gustavo Noronha.

        [GTK] Move gstreamer-related source files to platform/graphics/gstreamer
        https://bugs.webkit.org/show_bug.cgi?id=35518

        Moved GStreamer-related files to platform/graphics/gstreamer so
        other ports could benefit from this media player implementation.

        * GNUmakefile.am:
        * platform/graphics/gstreamer/DataSourceGStreamer.cpp: Renamed from WebCore/platform/graphics/gtk/DataSourceGStreamer.cpp.
        (_do_init):
        (webkit_data_src_base_init):
        (webkit_data_src_class_init):
        (webkit_data_src_reset):
        (webkit_data_src_init):
        (webkit_data_src_finalize):
        (webkit_data_src_change_state):
        (webkit_data_src_uri_get_type):
        (webkit_data_src_uri_get_protocols):
        (webkit_data_src_uri_get_uri):
        (webkit_data_src_uri_set_uri):
        (webkit_data_src_uri_handler_init):
        * platform/graphics/gstreamer/DataSourceGStreamer.h: Renamed from WebCore/platform/graphics/gtk/DataSourceGStreamer.h.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp: Renamed from WebCore/platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp.
        (WebCore::greatestCommonDivisor):
        (WebCore::mediaPlayerPrivateMessageCallback):
        (WebCore::mediaPlayerPrivateSourceChangedCallback):
        (WebCore::mediaPlayerPrivateVolumeChangedCallback):
        (WebCore::notifyVolumeIdleCallback):
        (WebCore::mediaPlayerPrivateMuteChangedCallback):
        (WebCore::notifyMuteIdleCallback):
        (WebCore::bufferingTimeoutCallback):
        (WebCore::playbackPosition):
        (WebCore::mediaPlayerPrivateRepaintCallback):
        (WebCore::MediaPlayerPrivate::create):
        (WebCore::MediaPlayerPrivate::registerMediaEngine):
        (WebCore::doGstInit):
        (WebCore::MediaPlayerPrivate::isAvailable):
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::~MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::load):
        (WebCore::MediaPlayerPrivate::changePipelineState):
        (WebCore::MediaPlayerPrivate::play):
        (WebCore::MediaPlayerPrivate::pause):
        (WebCore::MediaPlayerPrivate::duration):
        (WebCore::MediaPlayerPrivate::currentTime):
        (WebCore::MediaPlayerPrivate::seek):
        (WebCore::MediaPlayerPrivate::startEndPointTimerIfNeeded):
        (WebCore::MediaPlayerPrivate::cancelSeek):
        (WebCore::MediaPlayerPrivate::endPointTimerFired):
        (WebCore::MediaPlayerPrivate::paused):
        (WebCore::MediaPlayerPrivate::seeking):
        (WebCore::MediaPlayerPrivate::naturalSize):
        (WebCore::MediaPlayerPrivate::hasVideo):
        (WebCore::MediaPlayerPrivate::hasAudio):
        (WebCore::MediaPlayerPrivate::setVolume):
        (WebCore::MediaPlayerPrivate::volumeChangedCallback):
        (WebCore::MediaPlayerPrivate::volumeChanged):
        (WebCore::MediaPlayerPrivate::setRate):
        (WebCore::MediaPlayerPrivate::networkState):
        (WebCore::MediaPlayerPrivate::readyState):
        (WebCore::MediaPlayerPrivate::buffered):
        (WebCore::MediaPlayerPrivate::processBufferingStats):
        (WebCore::MediaPlayerPrivate::queryBufferingStats):
        (WebCore::MediaPlayerPrivate::maxTimeSeekable):
        (WebCore::MediaPlayerPrivate::maxTimeLoaded):
        (WebCore::MediaPlayerPrivate::bytesLoaded):
        (WebCore::MediaPlayerPrivate::totalBytes):
        (WebCore::MediaPlayerPrivate::cancelLoad):
        (WebCore::MediaPlayerPrivate::updateStates):
        (WebCore::MediaPlayerPrivate::mediaLocationChanged):
        (WebCore::MediaPlayerPrivate::loadNextLocation):
        (WebCore::MediaPlayerPrivate::loadStateChanged):
        (WebCore::MediaPlayerPrivate::sizeChanged):
        (WebCore::MediaPlayerPrivate::timeChanged):
        (WebCore::MediaPlayerPrivate::didEnd):
        (WebCore::MediaPlayerPrivate::durationChanged):
        (WebCore::MediaPlayerPrivate::supportsMuting):
        (WebCore::MediaPlayerPrivate::setMuted):
        (WebCore::MediaPlayerPrivate::muteChangedCallback):
        (WebCore::MediaPlayerPrivate::muteChanged):
        (WebCore::MediaPlayerPrivate::loadingFailed):
        (WebCore::MediaPlayerPrivate::setSize):
        (WebCore::MediaPlayerPrivate::setVisible):
        (WebCore::MediaPlayerPrivate::repaint):
        (WebCore::MediaPlayerPrivate::paint):
        (WebCore::mimeTypeCache):
        (WebCore::MediaPlayerPrivate::getSupportedTypes):
        (WebCore::MediaPlayerPrivate::supportsType):
        (WebCore::MediaPlayerPrivate::hasSingleSecurityOrigin):
        (WebCore::MediaPlayerPrivate::supportsFullscreen):
        (WebCore::MediaPlayerPrivate::setAutobuffer):
        (WebCore::MediaPlayerPrivate::createGSTPlayBin):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h: Renamed from WebCore/platform/graphics/gtk/MediaPlayerPrivateGStreamer.h.
        (WebCore::MediaPlayerPrivate::pipelineReset):
        * platform/graphics/gstreamer/VideoSinkGStreamer.cpp: Renamed from WebCore/platform/graphics/gtk/VideoSinkGStreamer.cpp.
        (webkit_video_sink_base_init):
        (webkit_video_sink_init):
        (webkit_video_sink_timeout_func):
        (webkit_video_sink_render):
        (webkit_video_sink_dispose):
        (unlock_buffer_mutex):
        (webkit_video_sink_unlock):
        (webkit_video_sink_unlock_stop):
        (webkit_video_sink_stop):
        (webkit_video_sink_start):
        (marshal_VOID__MINIOBJECT):
        (webkit_video_sink_class_init):
        (webkit_video_sink_new):
        * platform/graphics/gstreamer/VideoSinkGStreamer.h: Renamed from WebCore/platform/graphics/gtk/VideoSinkGStreamer.h.
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp: Renamed from WebCore/platform/graphics/gtk/WebKitWebSourceGStreamer.cpp.
        (doInit):
        (webkit_web_src_base_init):
        (webkit_web_src_class_init):
        (webkit_web_src_init):
        (webKitWebSrcFinalize):
        (webKitWebSrcSetProperty):
        (webKitWebSrcGetProperty):
        (webKitWebSrcStop):
        (webKitWebSrcStart):
        (webKitWebSrcChangeState):
        (webKitWebSrcUriGetType):
        (webKitWebSrcGetProtocols):
        (webKitWebSrcGetUri):
        (webKitWebSrcSetUri):
        (webKitWebSrcUriHandlerInit):
        (webKitWebSrcNeedDataMainCb):
        (webKitWebSrcNeedDataCb):
        (webKitWebSrcEnoughDataMainCb):
        (webKitWebSrcEnoughDataCb):
        (webKitWebSrcSeekMainCb):
        (webKitWebSrcSeekDataCb):
        (webKitWebSrcSetFrame):
        (StreamingClient::StreamingClient):
        (StreamingClient::~StreamingClient):
        (StreamingClient::willSendRequest):
        (StreamingClient::didReceiveResponse):
        (StreamingClient::didReceiveData):
        (StreamingClient::didFinishLoading):
        (StreamingClient::didFail):
        (StreamingClient::wasBlocked):
        (StreamingClient::cannotShowURL):
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.h: Renamed from WebCore/platform/graphics/gtk/WebKitWebSourceGStreamer.h.

2010-03-01  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej Stachowiak.

        Refactor named getter function signature to be in line with indexing getter signature
        https://bugs.webkit.org/show_bug.cgi?id=35563

        Fix up WebCore to use the new named getter function signature, update the
        codegenerator to the new calling convention, and fix the custom bindings.

        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::JSCSSStyleDeclaration::nameGetter):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::objectToStringFunctionGetter):
        * bindings/js/JSDOMBinding.h:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::nonCachingStaticFunctionGetter):
        (WebCore::childFrameGetter):
        (WebCore::namedItemGetter):
        * bindings/js/JSDataGridColumnListCustom.cpp:
        (WebCore::JSDataGridColumnList::nameGetter):
        * bindings/js/JSHTMLAllCollectionCustom.cpp:
        (WebCore::JSHTMLAllCollection::nameGetter):
        * bindings/js/JSHTMLCollectionCustom.cpp:
        (WebCore::JSHTMLCollection::nameGetter):
        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::nameGetter):
        * bindings/js/JSHTMLFormElementCustom.cpp:
        (WebCore::JSHTMLFormElement::nameGetter):
        * bindings/js/JSHTMLFrameSetElementCustom.cpp:
        (WebCore::JSHTMLFrameSetElement::nameGetter):
        * bindings/js/JSHistoryCustom.cpp:
        (WebCore::nonCachingStaticBackFunctionGetter):
        (WebCore::nonCachingStaticForwardFunctionGetter):
        (WebCore::nonCachingStaticGoFunctionGetter):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::nonCachingStaticReplaceFunctionGetter):
        (WebCore::nonCachingStaticReloadFunctionGetter):
        (WebCore::nonCachingStaticAssignFunctionGetter):
        * bindings/js/JSMimeTypeArrayCustom.cpp:
        (WebCore::JSMimeTypeArray::nameGetter):
        * bindings/js/JSNamedNodeMapCustom.cpp:
        (WebCore::JSNamedNodeMap::nameGetter):
        * bindings/js/JSNodeListCustom.cpp:
        (WebCore::JSNodeList::nameGetter):
        * bindings/js/JSPluginArrayCustom.cpp:
        (WebCore::JSPluginArray::nameGetter):
        * bindings/js/JSPluginCustom.cpp:
        (WebCore::JSPlugin::nameGetter):
        * bindings/js/JSPluginElementFunctions.cpp:
        (WebCore::runtimeObjectPropertyGetter):
        * bindings/js/JSPluginElementFunctions.h:
        * bindings/js/JSStorageCustom.cpp:
        (WebCore::JSStorage::nameGetter):
        * bindings/js/JSStyleSheetListCustom.cpp:
        (WebCore::JSStyleSheetList::nameGetter):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/runtime_array.cpp:
        (JSC::RuntimeArray::lengthGetter):
        * bridge/runtime_array.h:
        * bridge/runtime_method.cpp:
        (JSC::RuntimeMethod::lengthGetter):
        * bridge/runtime_method.h:
        * bridge/runtime_object.cpp:
        (JSC::Bindings::RuntimeObject::fallbackObjectGetter):
        (JSC::Bindings::RuntimeObject::fieldGetter):
        (JSC::Bindings::RuntimeObject::methodGetter):
        * bridge/runtime_object.h:

2010-03-01  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        PropertySlot::getValue(ExecState, unsigned) unnecessarily converts index to an Identifier
        https://bugs.webkit.org/show_bug.cgi?id=35561

        Update bindings generation and the few manual indexing getters we have to use
        the new PropertySlot API.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::indexGetter):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/runtime_array.cpp:
        (JSC::RuntimeArray::indexGetter):
        * bridge/runtime_array.h:

2010-03-01  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        AX: changes to WAI-ARIA grid aren't perceived correctly by VoiceOver
        https://bugs.webkit.org/show_bug.cgi?id=35514

        When a table's DOM is changed and an AX Table is not asked first for its children,
        it would return wrong information. A table needs to make sure children are up to date in
        all methods that can be called from the outside.

        Test: platform/mac/accessibility/stale-table-rows.html

        * accessibility/AccessibilityARIAGrid.cpp:
        (WebCore::AccessibilityARIAGrid::cellForColumnAndRow):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::clearChildren):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::clearChildren):
        (WebCore::AccessibilityRenderObject::updateChildrenIfNecessary):
        (WebCore::AccessibilityRenderObject::children):
        * accessibility/AccessibilityRenderObject.h:
        (WebCore::AccessibilityRenderObject::needsToUpdateChildren):
        (WebCore::AccessibilityRenderObject::setNeedsToUpdateChildren):
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::clearChildren):
        (WebCore::AccessibilityTable::columns):
        (WebCore::AccessibilityTable::rows):
        (WebCore::AccessibilityTable::rowHeaders):
        (WebCore::AccessibilityTable::columnHeaders):
        (WebCore::AccessibilityTable::cells):
        (WebCore::AccessibilityTable::columnCount):
        (WebCore::AccessibilityTable::rowCount):
        (WebCore::AccessibilityTable::cellForColumnAndRow):

2010-03-01  Jakob Petsovits  <jpetsovits@rim.com>

        Reviewed by Adam Barth.

        Convert the zoom mode (page vs. text-only) into a proper enum.
        https://bugs.webkit.org/show_bug.cgi?id=35347

        * GNUmakefile.am:
        * WebCore.base.exp: Substituted symbols __ZN7WebCore5Frame13setZoomFactorEfNS_8ZoomModeE
        and __ZN7WebCore8Settings11setZoomModeENS_8ZoomModeE for __ZN7WebCore5Frame13setZoomFactorEfb
        and __ZN7WebCore8Settings16setZoomsTextOnlyEb, respectively.
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * page/Frame.cpp:
        (WebCore::Frame::zoomMode):
        (WebCore::Frame::shouldApplyTextZoom):
        (WebCore::Frame::shouldApplyPageZoom):
        (WebCore::Frame::setZoomFactor):
        * page/Frame.h:
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setZoomMode):
        * page/Settings.h:
        (WebCore::Settings::zoomMode):
        * page/ZoomMode.h: Added.
        (WebCore::):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::setCurrentScale):

2010-03-01  Alex Milowski  <alex@milowski.com>

        Reviewed by Kenneth Rohde Christiansen.

        Added support for the msubsup element that also handles the msup and msub elements.

        Test: mathml/presentation/subsup.xhtml

        * WebCore.xcodeproj/project.pbxproj:
        * mathml/MathMLInlineContainerElement.cpp:
        (WebCore::MathMLInlineContainerElement::createRenderer):
        * mathml/RenderMathMLSubSup.cpp: Added.
        (WebCore::RenderMathMLSubSup::RenderMathMLSubSup):
        (WebCore::RenderMathMLSubSup::addChild):
        (WebCore::RenderMathMLSubSup::stretchToHeight):
        (WebCore::RenderMathMLSubSup::nonOperatorHeight):
        (WebCore::RenderMathMLSubSup::layout):
        (WebCore::RenderMathMLSubSup::baselinePosition):
        * mathml/RenderMathMLSubSup.h: Added.
        (WebCore::RenderMathMLSubSup::hasBase):
        (WebCore::RenderMathMLSubSup::):

2010-03-01  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: use dejavu sans mono 11px on linux.

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

        * inspector/front-end/inspector.css:

2010-03-01  Thatcher Ulrich  <tulrich@google.com>

        Reviewed by Darin Fisher.

        Fix chromium iframe shims.  Add another test case to the
        iframes-shims test.  After r53637, the plugin widget doesn't get
        moved every paint.  This used to hide the bug that if an iframe
        gets added, the plugin's cutout rectangles don't get updated until
        a layout happens.
        https://bugs.webkit.org/show_bug.cgi?id=35184

        * platform/Widget.h:
        (WebCore::Widget::widgetPositionsUpdated): new virtual method
            widgetPositionsUpdated() to notify widgets when other widgets on
            the page have been repositioned.
        * rendering/RenderView.cpp:
        (WebCore::RenderView::updateWidgetPositions): call widgetPositionsUpdated() on the widgets
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::widgetPositionsUpdated): call widgetPositionsUpdated() on the widget
        * rendering/RenderWidget.h:

2010-03-01  Fridrich Strba  <fridrich.strba@bluewin.ch>

        Reviewed by Holger Freyther.

        Dist some mathml related files

        * GNUmakefile.am:

2010-03-01  Kenneth Russell  <kbr@google.com>

        Reviewed by Oliver Hunt.

        Integer overflow in WebGL arrays
        https://bugs.webkit.org/show_bug.cgi?id=35241

        Test: fast/canvas/webgl/webgl-array-invalid-ranges.html

        * bindings/js/JSWebGLArrayBufferConstructor.cpp:
        (WebCore::constructCanvasArrayBuffer):
        * bindings/js/JSWebGLArrayBufferConstructor.h:
        (WebCore::construct):
        * bindings/js/JSWebGLArrayHelper.h:
        (WebCore::setWebGLArrayFromArray):
        * bindings/js/JSWebGLByteArrayConstructor.cpp:
        (WebCore::constructCanvasByteArray):
        * bindings/js/JSWebGLFloatArrayConstructor.cpp:
        (WebCore::constructCanvasFloatArray):
        * bindings/js/JSWebGLIntArrayConstructor.cpp:
        (WebCore::constructCanvasIntArray):
        * bindings/js/JSWebGLShortArrayConstructor.cpp:
        (WebCore::constructCanvasShortArray):
        * bindings/js/JSWebGLUnsignedByteArrayConstructor.cpp:
        (WebCore::constructCanvasUnsignedByteArray):
        * bindings/js/JSWebGLUnsignedIntArrayConstructor.cpp:
        (WebCore::constructCanvasUnsignedIntArray):
        * bindings/js/JSWebGLUnsignedShortArrayConstructor.cpp:
        (WebCore::constructCanvasUnsignedShortArray):
        * bindings/v8/V8Binding.cpp:
        (WebCore::toUInt32):
        * bindings/v8/V8Binding.h:
        (WebCore::toUInt32):
        * bindings/v8/custom/V8WebGLArrayBufferCustom.cpp:
        (WebCore::V8WebGLArrayBuffer::constructorCallback):
        * bindings/v8/custom/V8WebGLArrayCustom.h:
        (WebCore::constructWebGLArray):
        (WebCore::getWebGLArrayElement):
        (WebCore::setWebGLArrayFromArray):
        (WebCore::setWebGLArray):
        * bindings/v8/custom/V8WebGLByteArrayCustom.cpp:
        (WebCore::V8WebGLByteArray::constructorCallback):
        * bindings/v8/custom/V8WebGLFloatArrayCustom.cpp:
        (WebCore::V8WebGLFloatArray::constructorCallback):
        * bindings/v8/custom/V8WebGLIntArrayCustom.cpp:
        (WebCore::V8WebGLIntArray::constructorCallback):
        * bindings/v8/custom/V8WebGLShortArrayCustom.cpp:
        (WebCore::V8WebGLShortArray::constructorCallback):
        * bindings/v8/custom/V8WebGLUnsignedByteArrayCustom.cpp:
        (WebCore::V8WebGLUnsignedByteArray::constructorCallback):
        * bindings/v8/custom/V8WebGLUnsignedIntArrayCustom.cpp:
        (WebCore::V8WebGLUnsignedIntArray::constructorCallback):
        * bindings/v8/custom/V8WebGLUnsignedShortArrayCustom.cpp:
        (WebCore::V8WebGLUnsignedShortArray::constructorCallback):
        * html/canvas/WebGLArray.cpp:
        (WebCore::WebGLArray::setImpl):
        * html/canvas/WebGLArray.h:
        (WebCore::WebGLArray::verifySubRange):
        (WebCore::WebGLArray::clampOffsetAndNumElements):
        * html/canvas/WebGLArrayBuffer.cpp:
        (WebCore::WebGLArrayBuffer::create):
        (WebCore::WebGLArrayBuffer::WebGLArrayBuffer):
        (WebCore::WebGLArrayBuffer::tryAllocate):
        * html/canvas/WebGLArrayBuffer.h:
        * html/canvas/WebGLByteArray.cpp:
        (WebCore::WebGLByteArray::create):
        (WebCore::WebGLByteArray::WebGLByteArray):
        (WebCore::WebGLByteArray::slice):
        * html/canvas/WebGLByteArray.h:
        * html/canvas/WebGLFloatArray.cpp:
        (WebCore::WebGLFloatArray::create):
        (WebCore::WebGLFloatArray::WebGLFloatArray):
        (WebCore::WebGLFloatArray::slice):
        * html/canvas/WebGLFloatArray.h:
        * html/canvas/WebGLIntArray.cpp:
        (WebCore::WebGLIntArray::create):
        (WebCore::WebGLIntArray::WebGLIntArray):
        (WebCore::WebGLIntArray::slice):
        * html/canvas/WebGLIntArray.h:
        * html/canvas/WebGLShortArray.cpp:
        (WebCore::WebGLShortArray::create):
        (WebCore::WebGLShortArray::WebGLShortArray):
        (WebCore::WebGLShortArray::slice):
        * html/canvas/WebGLShortArray.h:
        * html/canvas/WebGLUnsignedByteArray.cpp:
        (WebCore::WebGLUnsignedByteArray::create):
        (WebCore::WebGLUnsignedByteArray::WebGLUnsignedByteArray):
        (WebCore::WebGLUnsignedByteArray::slice):
        * html/canvas/WebGLUnsignedByteArray.h:
        * html/canvas/WebGLUnsignedIntArray.cpp:
        (WebCore::WebGLUnsignedIntArray::create):
        (WebCore::WebGLUnsignedIntArray::WebGLUnsignedIntArray):
        (WebCore::WebGLUnsignedIntArray::slice):
        * html/canvas/WebGLUnsignedIntArray.h:
        * html/canvas/WebGLUnsignedShortArray.cpp:
        (WebCore::WebGLUnsignedShortArray::create):
        (WebCore::WebGLUnsignedShortArray::WebGLUnsignedShortArray):
        (WebCore::WebGLUnsignedShortArray::slice):
        * html/canvas/WebGLUnsignedShortArray.h:

2010-03-01  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        REGRESSION: Telling a WebView to go to its current WebHistoryItem is broken.
        <rdar://problem/7699371> and https://bugs.webkit.org/show_bug.cgi?id=35532

        Test: fast/loader/api-test-go-to-current-back-forward-item.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadItem): If the current item is the same as the target item, don't
          consider this to be a same document navigation.

        * page/Page.cpp:
        (WebCore::Page::goToItem): Hard code the "going to the same item as the current item" relationship
          as a precondition for stopping all loaders, as that will be a new document load.

2010-03-01  Robert Hogan  <robert@webkit.org>

        Reviewed by nobody, build fix.

        Fix --minimal build. Add ENABLE(DATABASE) as compile time condition
        for building file GeolocationPositionCache.cpp.

        * page/GeolocationPositionCache.cpp:

2010-03-01  Jakob Petsovits  <jpetsovits@rim.com>

        Reviewed by Dirk Schulze.

        [OpenVG] Implement support for paths
        https://bugs.webkit.org/show_bug.cgi?id=34366

        Adds an implementation of the Path class -
        *almost* complete, but not quite because OpenVG
        does not provide access to the points in a VGPath
        unless one keeps track of all the points by
        themselves, which we decided not to do.

        Also hooked up to PainterOpenVG and GraphicsContext.

        Further introduced is SharedResourceOpenVG, which is
        intended as base class for paths and other OpenVG
        resources (images, fonts) that WebKit creates as
        long-lived objects. We are at a slight disadvantage
        here as WebKit doesn't have the concept of resources
        belonging to a specific (hardware graphics) context,
        which is the reason why EGLDisplayOpenVG had to
        provide a current display singleton; this class is
        what actually requires that functionality.

        Path::addArcTo() uses code by Yong Li <yoli@rim.com>.

        * platform/graphics/Path.cpp:
        * platform/graphics/Path.h:
        * platform/graphics/openvg/GraphicsContextOpenVG.cpp:
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::drawPath):
        (WebCore::GraphicsContext::beginPath):
        (WebCore::GraphicsContext::addPath):
        * platform/graphics/openvg/PainterOpenVG.cpp:
        (WebCore::PainterOpenVG::PainterOpenVG):
        (WebCore::PainterOpenVG::~PainterOpenVG):
        (WebCore::PainterOpenVG::transformPath):
        (WebCore::PainterOpenVG::beginPath):
        (WebCore::PainterOpenVG::addPath):
        (WebCore::PainterOpenVG::currentPath):
        (WebCore::PainterOpenVG::drawPath):
        * platform/graphics/openvg/PainterOpenVG.h:
        * platform/graphics/openvg/PathOpenVG.cpp: Added.
        (WebCore::PlatformPathOpenVG::PlatformPathOpenVG):
        (WebCore::PlatformPathOpenVG::operator=):
        (WebCore::PlatformPathOpenVG::~PlatformPathOpenVG):
        (WebCore::PlatformPathOpenVG::clear):
        (WebCore::PlatformPathOpenVG::createPath):
        (WebCore::Path::Path):
        (WebCore::Path::~Path):
        (WebCore::Path::operator=):
        (WebCore::Path::contains):
        (WebCore::Path::strokeContains):
        (WebCore::Path::translate):
        (WebCore::Path::boundingRect):
        (WebCore::Path::strokeBoundingRect):
        (WebCore::Path::moveTo):
        (WebCore::Path::addLineTo):
        (WebCore::Path::addQuadCurveTo):
        (WebCore::Path::addBezierCurveTo):
        (WebCore::Path::addArcTo):
        (WebCore::Path::closeSubpath):
        (WebCore::Path::addArc):
        (WebCore::Path::addRect):
        (WebCore::Path::addEllipse):
        (WebCore::Path::clear):
        (WebCore::Path::isEmpty):
        (WebCore::Path::hasCurrentPoint):
        (WebCore::Path::debugString):
        (WebCore::Path::apply):
        (WebCore::Path::transform):
        (WebCore::Path::length):
        (WebCore::Path::pointAtLength):
        (WebCore::Path::normalAngleAtLength):
        * platform/graphics/openvg/PlatformPathOpenVG.h: Added.
        (WebCore::PlatformPathOpenVG::vgPath):
        * platform/graphics/openvg/SharedResourceOpenVG.cpp: Added.
        (WebCore::SharedResourceOpenVG::makeSharedContextCurrent):
        (WebCore::SharedResourceOpenVG::makeCompatibleContextCurrent):
        * platform/graphics/openvg/SharedResourceOpenVG.h: Added.

2010-03-01  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed, bring English.lproj/locallizedStrings.js back to binary (UTF) mode.

        * English.lproj/localizedStrings.js:

2010-03-01  Jakob Petsovits  <jpetsovits@rim.com>

        Reviewed by Nikolas Zimmermann.

        [OpenVG] Convert from TransformationMatrix to AffineTransform.
        https://bugs.webkit.org/show_bug.cgi?id=35445

        Dirk Schulze previously introduced AffineTransform as
        replacement for most TransformationMatrix occurrences
        in GraphicsContext & Co., but did not update the OpenVG
        graphics backend as there's no publicly available way
        to build it. This commit now takes care of that.

        * platform/graphics/openvg/GraphicsContextOpenVG.cpp:
        (WebCore::GraphicsContext::getCTM):
        (WebCore::GraphicsContext::roundToDevicePixels):
        (WebCore::GraphicsContext::origin):
        (WebCore::GraphicsContext::concatCTM):
        * platform/graphics/openvg/PainterOpenVG.cpp:
        (WebCore::isNonRotatedAffineTransformation):
        (WebCore::PlatformPainterState::PlatformPainterState):
        (WebCore::PlatformPainterState::applyState):
        (WebCore::PlatformPainterState::applyTransformation):
        (WebCore::PainterOpenVG::transformation):
        (WebCore::PainterOpenVG::concatTransformation):
        (WebCore::PainterOpenVG::setTransformation):
        (WebCore::PainterOpenVG::scale):
        (WebCore::PainterOpenVG::rotate):
        (WebCore::PainterOpenVG::translate):
        (WebCore::PainterOpenVG::intersectClipRect):
        * platform/graphics/openvg/PainterOpenVG.h:
        * platform/graphics/openvg/VGUtils.cpp:
        (WebCore::VGMatrix::VGMatrix):
        (WebCore::VGMatrix::operator AffineTransform):
        (WebCore::VGMatrix::operator TransformationMatrix):
        (WebCore::AffineTransform::operator VGMatrix):
        * platform/graphics/openvg/VGUtils.h:
        * platform/graphics/transforms/AffineTransform.h:

2010-03-01  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Fix segfault when drawing NPAPI plugins on Mac

        Don't try to get a contexctRef for a null-pixmap. If the pixmap
        size is 0,0 the private pixmap data has not yet been initialized.

        * plugins/mac/PluginViewMac.cpp:

2010-03-01  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        Fix the Qt build on Mac OS X/Cocoa 64-bit

        Use the proper event/drawing-model guards instead of global 64-bit
        guard for the NPAPI plugin implementation (view and package).

        * plugins/mac/PluginPackageMac.cpp: Change guards and fix warning
        * plugins/mac/PluginViewMac.cpp: Remove 64-bit guard

2010-02-27  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: disable breakpoint upon Shift-click.

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

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype._format):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._mouseDown):
        (WebInspector.SourceFrame.prototype._mouseMove):
        * inspector/front-end/textViewer.css:

2010-02-28  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=35496
        <rdar://problem/7663444> Opening newsweek.com and youtube.com has become very slow in debug builds

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSRuleSet::getIDRules):
        (WebCore::CSSRuleSet::getClassRules):
        (WebCore::CSSRuleSet::getTagRules):
        Removed consistency checks, as they affect performance too much in this case.

2010-02-28  Robert Hogan  <robert@roberthogan.net>

        Reviewed by Simon Hausmann.

        [Qt] Support private browsing mode in plugins

        Add support for NPNVprivateModeBool property in plugins.

        See also: https://developer.mozilla.org/En/Supporting_private_browsing_in_plugins

        The NPNVprivateModeBool property is supported as scriptable property privateBrowsingEnabled
        in the test WebKit plugin. The Mac platform also supports a cachedPrivateBrowsingEnabled
        property implemented in the test plugin. This allows the Layout test
        plugins/private-browsing-mode.html to retrieve the previous value of NPNVprivateModeBool
        in the test plugin. Due to the platform-specific overhead required to support this bespoke
        property it is not implemented as part of this patch, instead a new test,
        plugins/private-browsing-mode-2.html, is added to ensure that setting and resetting
        privateBrowsingEnabled works as expected.

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

        Test: plugins/private-browsing-mode-2.html

        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::getValue):


2010-02-27  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Timothy Hatcher.

        Web Inspector shouldn't show a white color box for "-webkit-line-break: after-white-space"
        https://bugs.webkit.org/show_bug.cgi?id=33478

        * inspector/front-end/StylesSidebarPane.js:

2010-02-27  Dan Bernstein  <mitz@apple.com>

        Reviewed by Maciej Stachowiak.

        <rdar://problem/7696607> Links do not respect -webkit-user-drag: none
        https://bugs.webkit.org/show_bug.cgi?id=35475

        Test: fast/css/user-drag-none.html

        * page/DragController.cpp:
        (WebCore::DragController::mayStartDragAtEventLocation): Added a node
        parameter. The image drag check is done against the node, rather than
        than against the hit test result. This prevents a non-draggable image
        with an auto-draggable ancestor from being dragged alone. The link drag
        check now ignores links that are -webkit-user-drag: none.
        * page/DragController.h:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::shouldDragAutoNode): Pass the current node
        to mayStartDragAtEventLocation().

2010-02-27  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: REGRESSION: hangs when scrolling in Resource pane.

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

        * inspector/front-end/TextEditorHighlighter.js:
        (WebInspector.TextEditorHighlighter):
        (WebInspector.TextEditorHighlighter.prototype.highlight):
        (WebInspector.TextEditorHighlighter.prototype._highlightInChunks):
        (WebInspector.TextEditorHighlighter.prototype._highlightLines):

2010-02-27  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Abort XEmbed plugin initialization if our parent is not anchored
        in a widget hierarchy. This can happen when the browser window is
        destroyed while the plugin is being loaded, and will lead to a
        crash.

        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::platformStart):

2010-02-26  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: reload inspected page on Cmd+R / Ctrl+R / F5 key event in inspector.
        Drive-by fix for couple of minor front-end problems.

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

        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::reloadPage):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::didFinishLoading):
        (WebCore::InspectorController::didFailLoading):
        * inspector/front-end/InspectorBackendStub.js:
        (.WebInspector.InspectorBackendStub.prototype.reloadPage):
        * inspector/front-end/InspectorFrontendHostStub.js:
        (.WebInspector.InspectorFrontendHostStub.prototype.copyText):
        (.WebInspector.InspectorFrontendHostStub.prototype.canAttachWindow):
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer.prototype._paintLine):
        * inspector/front-end/inspector.js:
        (WebInspector.documentKeyDown):
        (WebInspector.toggleAttach):

2010-02-26  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Kenneth Rohde Christiansen.

        Add EFL port files to platform/efl.
        http://webkit.org/b/35087

        * platform/efl/ScrollbarEfl.cpp: Added.
        * platform/efl/EventLoopEfl.cpp: Added.
        * platform/efl/PlatformKeyboardEventEfl.cpp: Added.
        * platform/efl/DragImageEfl.cpp: Added.
        * platform/efl/PlatformMouseEventEfl.cpp: Added.

2010-02-26  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Kenneth Rohde Christiansen.

        Add EFL port files to platform/efl.
        http://webkit.org/b/35087

        * platform/efl/CursorEfl.cpp: Added.
        * platform/efl/LocalizedStringsEfl.cpp: Added.
        * platform/efl/SearchPopupMenuEfl.cpp: Added.

2010-02-26  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Kenneth Rohde Christiansen.

        Add EFL port files to page/efl.
        http://webkit.org/b/35087

        * WebCore/page/efl/DragControllerEfl.cpp: Added.
        * WebCore/page/efl/FrameEfl.cpp: Added.
        * WebCore/page/efl/AccessibilityObjectEfl.cpp: Added.
        * WebCore/page/efl/EventHandlerEfl.cpp: Added.

2010-02-26  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Kenneth Rohde Christiansen.

        Add EFL port files to platform/efl.
        http://webkit.org/b/35087

        * WebCore/platform/efl/LoggingEfl.cpp: Added.
        * WebCore/platform/efl/ScrollbarThemeEfl.cpp: Added.
        * WebCore/platform/efl/TemporaryLinkStubs.cpp: Added.
        * WebCore/platform/efl/ScrollViewEfl.cpp: Added.
        * WebCore/platform/efl/SharedBufferEfl.cpp: Added.
        * WebCore/platform/efl/DragDataEfl.cpp: Added.

2010-02-26  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Kenneth Rohde Christiansen.

        Add EFL port files to platform/efl.
        http://webkit.org/b/35087

        * WebCore/platform/efl/RenderThemeEfl.cpp: Added.

2010-02-26  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Kenneth Rohde Christiansen.

        Add EFL port files to platform/efl.
        http://webkit.org/b/35087

        * WebCore/platform/efl/PlatformWheelEventEfl.cpp: Added.
        * WebCore/platform/efl/FileChooserEfl.cpp: Added.
        * WebCore/platform/efl/ContextMenuEfl.cpp: Added.
        * WebCore/platform/efl/PlatformScreenEfl.cpp: Added.
        * WebCore/platform/efl/WidgetEfl.cpp: Added.

2010-02-26  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Fisher.

        Expose an API for ports to add schemes to the mixed content whitelist
        https://bugs.webkit.org/show_bug.cgi?id=35438

        Add a notion of a "secure" scheme that doesn't trigger mixed content
        warnings.  Let folks register new secure schemes in the same way they
        can register "local" schemes.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::isMixedContent):
        * page/SecurityOrigin.cpp:
        (WebCore::secureSchemes):
        (WebCore::SecurityOrigin::registerURLSchemeAsSecure):
        (WebCore::SecurityOrigin::shouldTreatURLSchemeAsSecure):
        * page/SecurityOrigin.h:

2010-02-26  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] GraphicsLayerQt: artifacts and wrong transformOrigin
        This was due to wrong way of applying cache-mode and transformation
        on a graphics-item with HTML. Cache-mode should be updated
        when the content type updates, even if it was the same cache-mode
   
        https://bugs.webkit.org/show_bug.cgi?id=35382

        Test URL attached to the bug now works correctly.

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::GraphicsLayerQtImpl::computeTransform):
        (WebCore::GraphicsLayerQtImpl::flushChanges):

2010-02-26  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        Qt/Mac: Revert null timer removal (r51105)
        https://bugs.webkit.org/show_bug.cgi?id=35396

        r51105 removed the null timer event of the carbon event model. This however
        breaks the flash of many sites.        

        Applying patch suggested by Girish Ramakrishnan in bug comment #1.

        * plugins/PluginView.h:
        * plugins/mac/PluginViewMac.cpp:
        (WebCore::PluginView::platformStart):
        (WebCore::PluginView::handleMouseEvent):
        (WebCore::PluginView::nullEventTimerFired):
        (WebCore::PluginView::mousePosForPlugin):

2010-02-26  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Compile error with 3d-canvas
        Replaced a direct gl call with a getProcAddress call
        https://bugs.webkit.org/show_bug.cgi?id=35448

        No new tests.

        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3D::blendColor):

2010-02-26  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Kenneth Rohde Christiansen.

        [BREWMP] Port EventHandler
        https://bugs.webkit.org/show_bug.cgi?id=34796

        Add platform-specific code required to implement EventHandler.

        * page/brew/EventHandlerBrew.cpp: Added.
        (WebCore::EventHandler::tabsToAllControls):
        (WebCore::EventHandler::focusDocumentView):
        (WebCore::EventHandler::passWidgetMouseDownEventToWidget):
        (WebCore::EventHandler::passMouseDownEventToWidget):
        (WebCore::EventHandler::eventActivatedView):
        (WebCore::EventHandler::passSubframeEventToSubframe):
        (WebCore::EventHandler::passWheelEventToWidget):
        (WebCore::EventHandler::passMousePressEventToSubframe):
        (WebCore::EventHandler::passMouseMoveEventToSubframe):
        (WebCore::EventHandler::passMouseReleaseEventToSubframe):
        (WebCore::EventHandler::accessKeyModifiers):

2010-02-26  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Kenneth Rohde Christiansen.

        Add EFL port files to platform/efl.
        http://webkit.org/b/35087

        * WebCore/platform/efl/ClipboardEfl.cpp: Added.
        * WebCore/platform/efl/PopupMenuEfl.cpp: Added.
        * WebCore/platform/efl/SharedTimerEfl.cpp: Added.
        * WebCore/platform/efl/RenderThemeEfl.h: Added.
        * WebCore/platform/efl/Language.cpp: Added.
        * WebCore/platform/efl/CookieJarEfl.cpp: Added.
        * WebCore/platform/efl/MIMETypeRegistryEfl.cpp: Added.

2010-02-26  Robert Kroeger  <rjkroege@chromium.org>

        Reviewed by Nate Chapin

        To fire each event handler registered on an SVG node once per
        event, Chromium needs an implementation of wasCreatedFromMarkup
        added to V8LazyEventListener.h that matches the one in
        WebKit/WebCore/bindings/js/JSLazyEventListener.h.
        
        This patch adds such a matching implementation of wasCreatedFromMarkup
        to V8LazyEventListener.h.
        
        https://bugs.webkit.org/show_bug.cgi?id=35325

        * bindings/v8/V8LazyEventListener.h:
        (WebCore::V8LazyEventListener::wasCreatedFromMarkup):

2010-02-26  Arno Renevier  <arno@renevier.net>

        Reviewed by Gustavo Noronha Silva.

        [Gtk] use geoclue_position_get_position_async to get geolocation position.
        https://bugs.webkit.org/show_bug.cgi?id=35355

        No new tests, behaviour depends on system.

        * platform/gtk/GeolocationServiceGtk.cpp:
        (WebCore::GeolocationServiceGtk::startUpdating):
        (WebCore::GeolocationServiceGtk::get_position):
        * platform/gtk/GeolocationServiceGtk.h:

2010-02-26  Yaar Schnitman  <yaar@chromium.org>

        Chromium Win build fix.

        * WebCore.gyp/WebCore.gyp: Added missing file to action input.

2010-02-12  Brett Wilson  <brettw@chromium.org>

        Reviewed by Adam Barth.

        Update the Google-URL version of KURL and the V8 bindings to the new
        behavior of KURL.IsStandard.

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

        This is covered by fast/dom/Window/invalid-protocol.html

        * bindings/v8/custom/V8LocationCustom.cpp:
        (WebCore::V8Location::protocolAccessorSetter):
        * platform/KURLGoogle.cpp:
        (WebCore::KURL::setProtocol):
        (WebCore::KURL::isHierarchical):

2010-02-26  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by NOBODY (Build fix following r55312).

        * bridge/qt/qt_pixmapruntime.cpp:
        (JSC::Bindings::QtPixmapInstance::invokeMethod):

2010-02-26  Yaar Schnitman  <yaar@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Auto-generate and split DerivedSourcesAllInOne.cpp
        https://bugs.webkit.org/show_bug.cgi?id=33048

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gyp/scripts/action_derivedsourcesallinone.py: Added.
        * bindings/v8/DerivedSourcesAllInOne.cpp: Removed.

2010-02-26  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by NOBODY (Build fix following r55312).

        * bridge/qt/qt_pixmapruntime.cpp:
        (JSC::Bindings::QtPixmapInstance::invokeMethod):

2010-02-26  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=35450
        Crash when a Java array property accessor raises an exception

        Test: java/inaccessible-class.html

        * bridge/jni/jsc/JNIBridgeJSC.cpp: (JavaField::valueFromInstance): Check if the result
        is null before interpreting it as an object or array.

2010-02-26  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        Extend AffineTransform to mapQuad
        https://bugs.webkit.org/show_bug.cgi?id=35444

        This makes mapQuad available for AffineTransform. So that platforms
        can make use of it after the switch from TransformationMatrix to
        AffineTransform in GraphicsContext.

        * platform/graphics/transforms/AffineTransform.cpp:
        (WebCore::AffineTransform::mapRect): mapRect already did the calculation for mapQuad but gave back the
                                             boundingBox of the resulting FloatQuad.
        (WebCore::AffineTransform::mapQuad):
        * platform/graphics/transforms/AffineTransform.h:

2010-02-26  Brady Eidson  <beidson@apple.com>

        Reviewed by Pavel Feldman.

        Arrow keys do not scroll source view in Resources pane or Scripts pane.
        <rdar://problem/7594367> and https://bugs.webkit.org/show_bug.cgi?id=34356

        Handle vertical scrolling in the Text Viewer:
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer): Listen for the keydown event.
        (WebInspector.TextViewer.prototype._handleKeyDown): If the event has no modifiers and refers
          to an arrow key, scroll. The horizontal values were ripped from the default "pixels per scroll line"
          value in ScrollBar.h.

2010-02-26  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Alexey Proskuryakov.

        Bug 35401 - Fix handling of errors in handling calls over bridge,
        where base object bridge-type does not match method bridge-type.

        The code assumes users will only attempt to invoke a Java method
        on a Java base object, etc.
        Add language specific subclasses of RuntimeMethod, and pass the
        RuntimeMethod into invokeMethod, so we can typecheck before
        casting.  Throw an exception on type mismatch.

        * WebCore.base.exp:
        * WebCore.xcodeproj/project.pbxproj:
        * bridge/c/c_instance.cpp:
        (JSC::Bindings::CRuntimeMethod::CRuntimeMethod):new class to distinguish this type of RuntimeMethod.
        (JSC::Bindings::CInstance::getMethod): create an appropriate sublclass of RuntimeMethod.
        (JSC::Bindings::CInstance::invokeMethod): dynamically check the type of the RuntimeMethod.
        * bridge/c/c_instance.h:
        * bridge/jni/jsc/JavaInstanceJSC.cpp:
        (JavaRuntimeMethod::JavaRuntimeMethod): new class to distinguish this type of RuntimeMethod.
        (JavaInstance::getMethod): create an appropriate sublclass of RuntimeMethod.
        (JavaInstance::invokeMethod): dynamically check the type of the RuntimeMethod.
        * bridge/jni/jsc/JavaInstanceJSC.h:
        * bridge/jsc/BridgeJSC.h:
        * bridge/objc/objc_instance.h:
        * bridge/objc/objc_instance.mm:
        (ObjcRuntimeMethod::ObjcRuntimeMethod): new class to distinguish this type of RuntimeMethod.
        (ObjcInstance::getMethod): create an appropriate sublclass of RuntimeMethod.
        (ObjcInstance::invokeMethod): dynamically check the type of the RuntimeMethod.
        (ObjcInstance::invokeObjcMethod): new method, takes an ObjcMethod* as an argument so that we don't need to dynamically determine the type.
        * bridge/objc/objc_runtime.mm:
        (JSC::Bindings::callObjCFallbackObject): use new invokeObjcMethod method.
        * bridge/runtime_method.cpp:
        (JSC::callRuntimeMethod): pass RuntimeMethod as argument to invokeMethod, rather than its MethodList.
        * bridge/runtime_object.cpp:
        (JSC::RuntimeObject::methodGetter): use new getMethod method.

2010-02-26  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoff Garen.

        Make the lookup table generator include an explicit cast to expected
        type of the function.  We do this because otherwise the blind intptr_t
        cast that is subsequently applied allows incorrectly typed functions
        to be inserted into the table, where they will only fail at runtime.
        This change makes such errors produce a compile time failure.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/scripts/CodeGeneratorJS.pm:

2010-02-26  Alex Milowski  <alex@milowski.com>

        Reviewed by Kenneth Rohde Christiansen.

        Added basic support for the munder, munderover, and mover elements.

        Tests: mathml/presentation/over.xhtml
               mathml/presentation/under.xhtml
               mathml/presentation/underover.xhtml

        * WebCore.xcodeproj/project.pbxproj:
        * mathml/MathMLInlineContainerElement.cpp:
        (WebCore::MathMLInlineContainerElement::createRenderer):
        * mathml/RenderMathMLUnderOver.cpp: Added.
        (WebCore::RenderMathMLUnderOver::RenderMathMLUnderOver):
        (WebCore::RenderMathMLUnderOver::addChild):
        (WebCore::getOffsetHeight):
        (WebCore::RenderMathMLUnderOver::stretchToHeight):
        (WebCore::RenderMathMLUnderOver::layout):
        (WebCore::RenderMathMLUnderOver::baselinePosition):
        (WebCore::RenderMathMLUnderOver::nonOperatorHeight):
        * mathml/RenderMathMLUnderOver.h: Added.
        (WebCore::RenderMathMLUnderOver::hasBase):
        (WebCore::RenderMathMLUnderOver::):

2010-02-24  Stephen White  <senorblanco@chromium.org>

        Reviewed by Darin Adler.

        This CL implements a simple ad-hoc parser for CSS rgb() values.
        If it fails, it returns false and the normal lex/yacc parser will
        be invoked.
        
        https://bugs.webkit.org/show_bug.cgi?id=35362

        Covered by fast/canvas/canvas-bg.html, fast/canvas/canvas-bg-zoom.html,
        and many more.

        * css/CSSParser.cpp:
        (WebCore::parseInt):
        (WebCore::CSSParser::parseColor):

2010-02-26  Jarkko Sakkinen  <jarkko.sakkinen@tieto.com>

        Reviewed by Kenneth Rohde Christiansen.

        https://bugs.webkit.org/show_bug.cgi?id=35419
        3D canvas did not update when WTF_USE_ACCELERATED_COMPOSITING
        was enabled but not from run-time settings. Added run-time 
        check that compositing is enabled.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::markContextChanged):

2010-02-26  Jarkko Sakkinen  <jarkko.sakkinen@tieto.com>

        Reviewed by Kenneth Rohde Christiansen.

        Compilation failed because functions glSampleCoverage, glBlendEquation
        and glActiveTexture were not available.
        https://bugs.webkit.org/show_bug.cgi?id=35423

        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3DInternal::GraphicsContext3DInternal):
        (WebCore::GraphicsContext3D::activeTexture):
        (WebCore::GraphicsContext3D::blendEquation):
        (WebCore::GraphicsContext3D::sampleCoverage):

2010-02-26  Jarkko Sakkinen  <jarkko.sakkinen@tieto.com>
 
         Reviewed by Kenneth Rohde Christiansen.

         https://bugs.webkit.org/show_bug.cgi?id=35380
         Fixed compilation error when WTF_USE_ACCELERATED_COMPOSITING=0
 
         * css/MediaQueryEvaluator.cpp:
         (WebCore::transform_3dMediaFeatureEval):

2010-02-26  Nicholas Young  <nicholas.young@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Incorrect painting after a size changed.
        https://bugs.webkit.org/show_bug.cgi?id=35412

        No new tests. Bug fix in backend.

        * platform/graphics/qt/MediaPlayerPrivateQt.cpp:
        (WebCore::MediaPlayerPrivate::paint): Provide the source rectangle, rather than inferring it.

2010-02-26  Nicholas Young  <nicholas.young@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Incorrect handling of MIME types in Media Player
        https://bugs.webkit.org/show_bug.cgi?id=35413

        No new tests. Bug fix in backend.

        * platform/graphics/qt/MediaPlayerPrivateQt.cpp:
        (WebCore::MediaPlayerPrivate::supportsType): Corrected logic.

2010-02-26  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Xan Lopez.

        https://bugs.webkit.org/show_bug.cgi?id=35418
        [Gtk] Every table, including layout tables, should be exposed as a table

        This patch exposes layout tables as tables. (Addressing the problematic table
        hierarchy remains to be done.)

        * accessibility/gtk/AccessibilityObjectAtk.cpp:
        (AccessibilityObject::accessibilityPlatformIncludesObject):
        * accessibility/AccessibilityRenderObject.cpp:
        (AccessibilityRenderObject::determineAccessibilityRole):

2010-02-26  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        XSSAuditor is super super super slow
        https://bugs.webkit.org/show_bug.cgi?id=35373

        In this patch, we separate the decoding cache for the page's URL and
        form data.  Previously, we used the same cache for both, which caused
        us miss the cache every time when the page had form data (because the
        cache only stored one entry).  When the form data is large, we were
        wasting a lot of time canonicalizing.

        * page/XSSAuditor.cpp:
        (WebCore::XSSAuditor::findInRequest):
        * page/XSSAuditor.h:

2010-02-26  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        SVGResourceClipper needs to be moved to RenderSVGResourceClipper
        https://bugs.webkit.org/show_bug.cgi?id=35421

        Move SVGResourceClipper to RenderSVGResourceClipper. This follows the changes
        of Masker and helps to clean up the SVG code. Code snippets from SVGClipPathElement
        and SVGResourceClipper got combined in RenderSVGResourceClipper. DRT results are
        more readable for clipPath's now. It's possible to see the unit type of clipper, as
        well as it's childs instead of just one path.

        * Android.mk:
        * GNUmakefile.am:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderSVGResource.h:
        (WebCore::):
        * rendering/RenderSVGResourceClipper.cpp: Added.
        (WebCore::RenderSVGResourceClipper::RenderSVGResourceClipper):
        (WebCore::RenderSVGResourceClipper::~RenderSVGResourceClipper):
        (WebCore::RenderSVGResourceClipper::invalidateClients):
        (WebCore::RenderSVGResourceClipper::invalidateClient):
        (WebCore::RenderSVGResourceClipper::applyResource):
        (WebCore::RenderSVGResourceClipper::resourceBoundingBox):
        * rendering/RenderSVGResourceClipper.h: Added.
        (WebCore::RenderSVGResourceClipper::renderName):
        (WebCore::RenderSVGResourceClipper::resourceType):
        (WebCore::RenderSVGResourceClipper::clipPathUnits):
        * rendering/SVGRenderSupport.cpp:
        (WebCore::SVGRenderBase::prepareToRenderSVGContent):
        (WebCore::SVGRenderBase::clipperBoundingBoxForRenderer):
        (WebCore::SVGRenderBase::deregisterFromResources):
        * rendering/SVGRenderTreeAsText.cpp:
        (WebCore::operator<<):
        (WebCore::writeStyle):
        (WebCore::writeSVGResource):
        (WebCore::writeResources):
        * svg/SVGClipPathElement.cpp:
        (WebCore::SVGClipPathElement::svgAttributeChanged):
        (WebCore::SVGClipPathElement::childrenChanged):
        (WebCore::SVGClipPathElement::createRenderer):
        * svg/SVGClipPathElement.h:
        (WebCore::SVGClipPathElement::isValid):
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::invalidateResources):
        * svg/graphics/SVGResource.h:
        (WebCore::):
        (WebCore::SVGResource::isPaintServer):
        (WebCore::SVGResource::isFilter):
        (WebCore::SVGResource::isMarker):
        * svg/graphics/SVGResourceClipper.cpp: Removed.
        * svg/graphics/SVGResourceClipper.h: Removed.

2010-02-26  Ben Murdoch  <benm@google.com>

        Reviewed by Kenneth Rohde Christiansen.

        The element that a touchevent is dispatched to isn't always right
        https://bugs.webkit.org/show_bug.cgi?id=35431

        The element that touch events are dispatched on is not always the
        correct one, as the cached m_touchEventTarget member is only updated
        when the first element of the PlatformTouchEvent touch list is in the
        TouchPressed state.

        This patch changes this behavior to dispatch the event to the target
        of the touch that caused the event to be generated and eliminates the
        m_touchEventTarget in favour of using the touch target hashmap. It also
        simplifies the way in which the touchTargets list is generated as we
        no longer have m_touchEventTarget (which was used previously to build
        the list). The new behavior matches the observed behavior of the
        iPhone and Android.

        * page/EventHandler.cpp:
        (WebCore::assembleTargetTouches): Added. new function to build the
            targetTouches list. Filters a list of touches (passed) about
            another given touch.
        (WebCore::EventHandler::handleTouchEvent): Remove the
            m_touchEventTarget member, and simplify the generation of the
            TouchLists that are bundled with the TouchEVent object. Dispatch
            the event to the target of the touch that caused the event to be
            fired.
        * page/EventHandler.h: Remove m_touchEventTarget.

2010-02-26  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Darin Fisher.

        Fix the handling of updates to #hash fragments to check for differences
        post-canonicalization rather than comparing pre- to post-. Chromium
        had a bug where we would set the #hash on an about:blank URL and generate
        an onload event because we thought the URL (not just the fragment) was
        changing.

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

        Test: fast/loader/about-blank-hash-change.html

        * bindings/v8/custom/V8LocationCustom.cpp:
        (WebCore::V8Location::hashAccessorSetter):

2010-02-26  Zhenyao Mo  <zmo@google.com>

        Reviewed by David Levin.

        texImage2D and texSubImage2D taking ImageData ignore flipY and premultiplyAlpha
        https://bugs.webkit.org/show_bug.cgi?id=34459

        Test: fast/canvas/webgl/tex-image-and-sub-image-2d-with-image-data.html

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::texImage2D): Apply flipY and premultiplyAlpha to the texture data.
        (WebCore::WebGLRenderingContext::texSubImage2D): Ditto.
        * platform/graphics/GraphicsContext3D.cpp:
        (WebCore::GraphicsContext3D::extractImageData): Extract data from ImageData, applying flipY and premultiplyAlpha.
        * platform/graphics/GraphicsContext3D.h: Add function extractImageData declaration.

2010-02-26  Zhenyao Mo  <zmo@google.com>

        Reviewed by David Levin.

        Set viewport to canvas size upon context creation
        https://bugs.webkit.org/show_bug.cgi?id=35057

        Covered by existing tests, in particular fast/canvas/webgl/gl-get-calls.html

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::WebGLRenderingContext): Set the viewport size to match the canvas size.

2010-02-26  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: touch InspectorController to force front-end deployment.

        * inspector/InspectorController.cpp:

2010-02-26  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        WebInspector: While the current timeline view in DevTools provides a great overview of
        things happening, we should make it easier to locate the cause of an event,
        e.g., link to JS where relevant.
        Caller info support for all kind of Timeline events and new Function Call event will be added.
        JSC can be patched the same way as it will be done for V8.

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

        * bindings/js/ScriptCallStack.cpp:
        (WebCore::ScriptCallStack::callLocation):
        * bindings/js/ScriptCallStack.h:
        * bindings/v8/ScriptCallStack.cpp:
        (WebCore::ScriptCallStack::create):
        (WebCore::ScriptCallStack::callLocation):
        * bindings/v8/ScriptCallStack.h:
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::callFunction):
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::InspectorTimelineAgent):
        (WebCore::InspectorTimelineAgent::~InspectorTimelineAgent):
        (WebCore::InspectorTimelineAgent::willCallFunction):
        (WebCore::InspectorTimelineAgent::didCallFunction):
        (WebCore::InspectorTimelineAgent::pushCurrentRecord):
        * inspector/InspectorTimelineAgent.h:
        (WebCore::):
        (WebCore::InspectorTimelineAgent::instanceCount):
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createGenericRecord):
        (WebCore::TimelineRecordFactory::createFunctionCallData):
        * inspector/TimelineRecordFactory.h:
        * inspector/front-end/Popover.js:
        (WebInspector.Popover.prototype.hideWhenClicked):
        (WebInspector.Popover.prototype._positionElement):
        * inspector/front-end/TimelineAgent.js:
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel):
        (WebInspector.TimelinePanel.prototype._innerAddRecordToTimeline):
        (WebInspector.TimelinePanel.prototype._formatRecord):
        (WebInspector.TimelinePanel.prototype._getRecordDetails):
        (WebInspector.TimelinePanel.prototype.reset):
        (WebInspector.TimelinePanel.prototype._closeRecordDetails):
        (WebInspector.TimelinePanel.prototype._onScroll):
        (WebInspector.TimelinePanel.prototype._refresh):
        (WebInspector.TimelinePanel.prototype._refreshRecords):
        (WebInspector.TimelineRecordListRow):
        (WebInspector.TimelineRecordListRow.prototype.update):
        (WebInspector.TimelineRecordListRow.prototype._createCell):
        (WebInspector.TimelineRecordListRow.prototype._createRow):
        (WebInspector.TimelineRecordListRow.prototype._createLinkRow):
        (WebInspector.TimelineRecordListRow.prototype._generateBubbleContent):
        (WebInspector.TimelineRecordListRow.prototype._onClick):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.js:
        (WebInspector.linkifyResourceAsNode):

2010-02-26  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed. Roll-out r55263 because it broke fast/forms/textarea-type-spaces-pretty-diff.html.
        https://bugs.webkit.org/show_bug.cgi?id=30946

        * editing/CompositeEditCommand.cpp:
        (WebCore::isWhitespace):
        (WebCore::CompositeEditCommand::rebalanceWhitespaceAt):
        * editing/InsertTextCommand.cpp:
        (WebCore::InsertTextCommand::input):
        * editing/InsertTextCommand.h:
        * editing/htmlediting.cpp:
        * editing/htmlediting.h:

2010-02-25  Mark Rowe  <mrowe@apple.com>

        Reviewed by Brady Eidson.

        <rdar://problem/7688455> REGRESSION(r55205): Crash inside dispatchEventsOnWindowAndFocusedNode when clicking link from bookmarks view

        Null-check the document's page to avoid dereferencing a null page.

        No regression test is added as this appears to be dependent on an interaction with Safari's bookmarks view that is
        not testable from within DumpRenderTree.

        * page/FocusController.cpp:
        (WebCore::dispatchEventsOnWindowAndFocusedNode):

2010-02-25  Oliver Hunt  <oliver@apple.com>

        Reviewed by Simon Fraser.

        Multiple repaints on apple.com
        https://bugs.webkit.org/show_bug.cgi?id=35409

        apple.com was triggering the fast scaling path for background images due to
        repeated repaints as more content came in.  This occured due to a two problems
        in the logic to detect scaling.  The first is that the main context is flipped
        on mac so fails the identity or translation check.  We work around this by adding
        an function that allows the scaling for a flipped CTM.  The other problem was that
        we were looking at the destination rect size instead of the destination tile size
        when deciding if the size we were drawn at would cause scaling.

        * platform/graphics/transforms/AffineTransform.h:
        (WebCore::AffineTransform::isIdentityOrTranslationOrFlipped):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelScaleObserver::shouldPaintBackgroundAtLowQuality):
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):

2010-02-25  Enrica Casucci  <enrica@apple.com>

        Reviewed by Adele Peterson.

        Extra layout on keypress after a space (problem with rebalanceWhitespaceAt in InsertTextCommand).
        https://bugs.webkit.org/show_bug.cgi?id=30946
        <rdar://problem/7639184>

        Do text insertion and whitespace rebalancing around the insertion in one step so that there's only one layout.
        This patch was originally made by Justin Garcia.
        
        Test: editing/inserting/rebalance-whitespace-1.html

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::rebalanceWhitespaceAt): No behavior changes here,
        just pushed the code that determined the extent of whitespace surrounding a position
        to its own helper function.
        * editing/InsertTextCommand.cpp:
        (WebCore::InsertTextCommand::insertTextIntoNodeAndRebalanceWhitespace): Added.  Find 
        whitespace surrounding the insertion position, add the text to insert, rebalance that entire
        string, then insert it into the document.
        (WebCore::InsertTextCommand::input):
        * editing/InsertTextCommand.h:
        * editing/htmlediting.cpp:
        (WebCore::isWhitespace): Moved from CompositeEditCommand.cpp.
        (WebCore::extentOfWhitespaceForRebalancingAt): Moved code from rebalanceWhitespaceAt into this helper
        function.  Obtains the offset of the start and end of whitespace around a particular position.
        * editing/htmlediting.h:

2010-02-25  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=35406
        <rdar://problem/6945502> Make generic array methods work with JavaArray

        Test: java/array-sort.html

        Made RuntimeArray inherit from JSArray, keeping the promise given in ClassInfo.

        * bridge/runtime_array.cpp:
        (JSC::RuntimeArray::RuntimeArray):
        (JSC::RuntimeArray::~RuntimeArray):
        * bridge/runtime_array.h:
        (JSC::RuntimeArray::classInfo):
        (JSC::RuntimeArray::getConcreteArray):

2010-02-25  Dan Bernstein  <mitz@apple.com>

        Reviewed by Alexey Proskuryakov.

        Fixed a regression introduced in r44243, which made the assertion in checkListItems()
        ineffective.

        * dom/SelectElement.cpp:
        (WebCore::SelectElementData::checkListItems): Copy the items vector before recomputing it,
        then assert that the newly-computed vector is equal to the copy.

2010-02-25  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        SVG's tspan is no member of SVGRenderBase, this can cause crashes on filters
        https://bugs.webkit.org/show_bug.cgi?id=35354

        This makes the base class RenderSVGInline of RenderSVGTSpan and RenderSVGInlineText
        dependent on SVGBaseRenderer.
        The SVG spec want as to use the object bounding box of the text root as the bounding box
        for text-childs. So we search for the text root and use it's bounding box, stroke rect and
        repaint rect for further calculations.

        Test: svg/filters/filter-on-tspan.svg

        * rendering/RenderSVGInline.cpp:
        (WebCore::RenderSVGInline::objectBoundingBox): Find the text root and give back it's bounding box.
        (WebCore::RenderSVGInline::strokeBoundingBox): same for stroke rect
        (WebCore::RenderSVGInline::repaintRectInLocalCoordinates): same for repaint rect
        * rendering/RenderSVGInline.h:
        (WebCore::RenderSVGInline::toSVGRenderBase): RenderSVGInline is part of SVGRenderBase now.
        * rendering/RenderSVGTSpan.h:
        (WebCore::RenderSVGTSpan::renderName): Removed bounding box code. Was just a hack for filters and maskers.
        * rendering/SVGRenderSupport.cpp:
        (WebCore::findTextRootObject): Search for the text root.
        * rendering/SVGRenderSupport.h:
        * svg/graphics/SVGPaintServerGradient.cpp: moved findTextRootObject to SVGRenderSupport

2010-02-25  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        Use-element doesn't transform clipPath
        https://bugs.webkit.org/show_bug.cgi?id=35375

        If the use element is a child of clipPath, any settings on x, y or transform does not
        transform the clipPath it references.
        The use-element just misses this transformation in toClipPath.

        Test: svg/custom/use-on-clip-path-with-transformation.svg

        * platform/graphics/cairo/PathCairo.cpp: Gtk port translated the path to the wrong direction.
        (WebCore::Path::translate):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::toClipPath):

2010-02-25  Jian Li  <jianli@chromium.org>

        Reviewed by Dmitry Titov.

        File.type support.
        https://bugs.webkit.org/show_bug.cgi?id=35361

        Test: LayoutTests/editing/pasteboard/file-input-files-access.html

        * html/File.cpp:
        (WebCore::File::File):
        * html/File.h:
        (WebCore::File::type):
        * html/File.idl:

2010-02-25  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Javascript console should not attempt to scroll to end of console if console is not visible

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

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype._scheduleScrollIntoView.scrollIntoView):
        (WebInspector.ConsoleView.prototype._scheduleScrollIntoView):
        (WebInspector.ConsoleView.prototype.addMessage):

2010-02-25  Alexey Proskuryakov  <ap@apple.com>

        Qt and Gtk build fixes.

        * GNUmakefile.am:
        * WebCore.pro:
        Added CRuntimeObject.{c,cpp}.

2010-02-25  Alexey Proskuryakov  <ap@apple.com>

        Windows build fix.

        * WebCore.vcproj/WebCore.vcproj: Added CRuntimeObject.{c,cpp}.

2010-02-25  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Geoffrey Garen.

        https://bugs.webkit.org/show_bug.cgi?id=35394
        <rdar://problem/7685262> Make passing objects between Java and plug-ins work

        * WebCore.PluginHostProcess.exp: WebKit now subclasses RuntimeObject, so it needed more exports.

        * bridge/runtime_object.cpp:
        (JSC::Bindings::callRuntimeObject):
        (JSC::Bindings::callRuntimeConstructor):
        Assert that a runtime object is passed as function.

        * bridge/runtime_object.h: Moved RuntimeObject into Bindings namespace, matching other
        related classes.

        * bridge/jni/jni_jsobject.mm:
        (JavaJSObject::toString): Pass rootObject to convertValueToJValue(). It's not needed when
        constructing a string, but this function now takes it for the sake of Object.
        (JavaJSObject::convertValueToJObject): Check that object class is JavaRuntimeObject, not
        just RuntimeObject.

        * bridge/jni/jsc/JNIBridgeJSC.cpp:
        (JavaField::setValueToInstance): Pass rootObject to convertValueToJValue().
        (JavaArray::setValueAt): Ditto.

        * bridge/jni/jsc/JNIUtilityPrivate.h: convertValueToJValue() now takes a RootObject argument,
        because one is needed to gcProtect an object ghtat is wrapped into JSObject.

        * bridge/jni/jsc/JNIUtilityPrivate.cpp: (JSC::Bindings::convertValueToJValue): Convert
        JavaScript objects to Java JSObject ones. This was already happening in other code paths,
        which we should change to use common code.

        * bridge/jni/jsc/JavaInstanceJSC.cpp:
        (JavaInstance::newRuntimeObject): Create an appropriate RuntimeObject subclass,
        which is JavaRuntimeObject for Java.
        (JavaInstance::invokeMethod): Unwrap returned JavaObjects that contain JS objects.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/WebScriptObject.mm:
        (+[WebScriptObject _convertValueToObjcValue:originRootObject:rootObject:]):
        * bridge/c/CRuntimeObject.cpp: Added.
        (JSC::Bindings::CRuntimeObject::CRuntimeObject):
        (JSC::Bindings::CRuntimeObject::~CRuntimeObject):
        (JSC::Bindings::CRuntimeObject::getInternalCInstance):
        * bridge/c/CRuntimeObject.h: Added.
        (JSC::Bindings::CRuntimeObject::classInfo):
        * bridge/c/c_instance.cpp:
        (JSC::Bindings::CInstance::newRuntimeObject):
        * bridge/c/c_instance.h:
        * bridge/c/c_utility.cpp:
        (JSC::Bindings::convertValueToNPVariant):
        * bridge/jni/jsc/JavaInstanceJSC.h:
        * bridge/jni/jsc/JavaRuntimeObject.cpp: Added.
        (JSC::Bindings::):
        (JSC::Bindings::JavaRuntimeObject::JavaRuntimeObject):
        (JSC::Bindings::JavaRuntimeObject::~JavaRuntimeObject):
        (JSC::Bindings::JavaRuntimeObject::getInternalJavaInstance):
        * bridge/jni/jsc/JavaRuntimeObject.h: Added.
        (JSC::Bindings::JavaRuntimeObject::classInfo):
        * bridge/jsc/BridgeJSC.h:
        * bridge/objc/ObjCRuntimeObject.h: Added.
        (JSC::Bindings::ObjCRuntimeObject::classInfo):
        * bridge/objc/ObjCRuntimeObject.mm: Added.
        (JSC::Bindings::):
        (JSC::Bindings::ObjCRuntimeObject::ObjCRuntimeObject):
        (JSC::Bindings::ObjCRuntimeObject::~ObjCRuntimeObject):
        (JSC::Bindings::ObjCRuntimeObject::getInternalObjCInstance):
        * bridge/objc/objc_instance.h:
        * bridge/objc/objc_instance.mm:
        (ObjcInstance::newRuntimeObject):
        * bridge/objc/objc_runtime.mm:
        (JSC::Bindings::callObjCFallbackObject):
        * bridge/runtime_root.h:
        Added RuntimeObject subclasses for each instance type, and use them for type casting.

2010-02-25  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Rubber-stamped by Xan Lopez.

        Adopt the same string as the one that is expected by
        fast/parser/fragment-parser.html for the description used by the
        <isindex> element.

        * platform/gtk/LocalizedStringsGtk.cpp:
        (WebCore::searchableIndexIntroduction):

2010-02-25  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: evaluate-on-hover does not work on HTML files.

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

        * inspector/front-end/SourceCSSTokenizer.re2js:
        * inspector/front-end/SourceHTMLTokenizer.js:
        (WebInspector.SourceHTMLTokenizer):
        (WebInspector.SourceHTMLTokenizer.prototype.set line):
        (WebInspector.SourceHTMLTokenizer.prototype._isExpectingAttribute):
        (WebInspector.SourceHTMLTokenizer.prototype._isExpectingAttributeValue):
        (WebInspector.SourceHTMLTokenizer.prototype._setExpectingAttribute):
        (WebInspector.SourceHTMLTokenizer.prototype._setExpectingAttributeValue):
        (WebInspector.SourceHTMLTokenizer.prototype._attrValueTokenType):
        (WebInspector.SourceHTMLTokenizer.prototype.nextToken):
        * inspector/front-end/SourceHTMLTokenizer.re2js:
        * inspector/front-end/SourceJavaScriptTokenizer.js:
        (WebInspector.SourceJavaScriptTokenizer):
        * inspector/front-end/SourceJavaScriptTokenizer.re2js:
        * inspector/front-end/SourceTokenizer.js:
        (WebInspector.SourceTokenizer.prototype.set condition):
        (WebInspector.SourceTokenizer.prototype.get condition):
        (WebInspector.SourceTokenizer.prototype.get subTokenizer):
        (WebInspector.SourceTokenizer.prototype.getLexCondition):
        (WebInspector.SourceTokenizer.prototype.setLexCondition):
        * inspector/front-end/TextEditorHighlighter.js:
        (WebInspector.TextEditorHighlighter):
        (WebInspector.TextEditorHighlighter.prototype.set mimeType):
        (WebInspector.TextEditorHighlighter.prototype.highlight):
        (WebInspector.TextEditorHighlighter.prototype._highlightInChunks):
        (WebInspector.TextEditorHighlighter.prototype._highlightLines):
        (WebInspector.TextEditorHighlighter.prototype._highlightLine):
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer.prototype._paintLine):

2010-02-25  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Simple style cleanups.

        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::plugRemovedCallback):
        (WebCore::plugAddedCallback):
        (WebCore::PluginView::platformStart):

2010-02-25  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Darin Adler.

        Optimize decoding of Latin-1 text by exploiting the fact that most of it will
        be ASCII-only data.

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

        * platform/text/TextCodecLatin1.cpp:
        (WebCore::TextCodecLatin1::decode):

2010-02-25  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Dimitri Glazkov.

        Web Inspector: make script lines count calculation lazy.

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

        * inspector/front-end/Script.js:
        (WebInspector.Script):
        (WebInspector.Script.prototype.get linesCount):
        * inspector/front-end/ScriptsPanel.js:
        * inspector/front-end/SourceView.js:
        (WebInspector.SourceView.prototype._addBreakpoint):

2010-02-25  James Choi  <jchoi42@pha.jhu.edu>

        Reviewed by David Levin.

        Change hardcoded gcc paths to be Solaris friendly
        https://bugs.webkit.org/show_bug.cgi?id=35213

        * bindings/scripts/CodeGeneratorObjC.pm:
        * bindings/scripts/IDLParser.pm:
        * css/make-css-file-arrays.pl:
        * dom/make_names.pl:

2010-02-25  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Workaround Java plugins not drawing themselves properly on first
        expose by doing a late size-allocate after 'plug-added' has been
        emitted on the embedding GtkSocket. It's unclear to me if this is
        a bug in our side or theirs, but this should be pretty safe and
        fixes the annoyance while we investigate it further.

        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::plugAddedCallback):
        (WebCore::PluginView::platformStart):

2010-02-23  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Tor Arne Vestbø.

        Add missing include guards

        * loader/CrossOriginPreflightResultCache.h:
        * loader/MainResourceLoader.h:

2010-02-25  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Restrict the optimization flags for Symbian to release builds.

        * WebCore.pro:

2010-02-25  Jarkko Sakkinen  <jarkko.sakkinen@tieto.com>

        Reviewed by Kenneth Rohde Christiansen.

        Qt WebGL support

        Adds GraphicsContext3D QtWebKit implementation.
        https://bugs.webkit.org/show_bug.cgi?id=35153

        * WebCore.pri:
        * WebCore.pro:
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/qt/GraphicsContext3DQt.cpp: Added.
        (WebCore::GraphicsContext3DInternal::isValid):
        (WebCore::GraphicsContext3DInternal::GraphicsContext3DInternal):
        (WebCore::GraphicsContext3DInternal::~GraphicsContext3DInternal):
        (WebCore::GraphicsContext3DInternal::getProcAddress):
        (WebCore::GraphicsContext3D::create):
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        (WebCore::GraphicsContext3D::~GraphicsContext3D):
        (WebCore::GraphicsContext3D::platformGraphicsContext3D):
        (WebCore::GraphicsContext3D::platformTexture):
        (WebCore::GraphicsContext3D::makeContextCurrent):
        (WebCore::GraphicsContext3D::beginPaint):
        (WebCore::GraphicsContext3D::endPaint):
        (WebCore::GraphicsContext3D::reshape):
        (WebCore::GraphicsContext3D::activeTexture):
        (WebCore::GraphicsContext3D::attachShader):
        (WebCore::GraphicsContext3D::bindAttribLocation):
        (WebCore::GraphicsContext3D::bindBuffer):
        (WebCore::GraphicsContext3D::bindFramebuffer):
        (WebCore::GraphicsContext3D::bindRenderbuffer):
        (WebCore::GraphicsContext3D::bindTexture):
        (WebCore::GraphicsContext3D::blendColor):
        (WebCore::GraphicsContext3D::blendEquation):
        (WebCore::GraphicsContext3D::blendEquationSeparate):
        (WebCore::GraphicsContext3D::blendFunc):
        (WebCore::GraphicsContext3D::blendFuncSeparate):
        (WebCore::GraphicsContext3D::bufferData):
        (WebCore::GraphicsContext3D::bufferSubData):
        (WebCore::GraphicsContext3D::checkFramebufferStatus):
        (WebCore::GraphicsContext3D::clearColor):
        (WebCore::GraphicsContext3D::clear):
        (WebCore::GraphicsContext3D::clearDepth):
        (WebCore::GraphicsContext3D::clearStencil):
        (WebCore::GraphicsContext3D::colorMask):
        (WebCore::GraphicsContext3D::compileShader):
        (WebCore::GraphicsContext3D::copyTexImage2D):
        (WebCore::GraphicsContext3D::copyTexSubImage2D):
        (WebCore::GraphicsContext3D::cullFace):
        (WebCore::GraphicsContext3D::depthFunc):
        (WebCore::GraphicsContext3D::depthMask):
        (WebCore::GraphicsContext3D::depthRange):
        (WebCore::GraphicsContext3D::detachShader):
        (WebCore::GraphicsContext3D::disable):
        (WebCore::GraphicsContext3D::disableVertexAttribArray):
        (WebCore::GraphicsContext3D::drawArrays):
        (WebCore::GraphicsContext3D::drawElements):
        (WebCore::GraphicsContext3D::enable):
        (WebCore::GraphicsContext3D::enableVertexAttribArray):
        (WebCore::GraphicsContext3D::finish):
        (WebCore::GraphicsContext3D::flush):
        (WebCore::GraphicsContext3D::framebufferRenderbuffer):
        (WebCore::GraphicsContext3D::framebufferTexture2D):
        (WebCore::GraphicsContext3D::frontFace):
        (WebCore::GraphicsContext3D::generateMipmap):
        (WebCore::GraphicsContext3D::getActiveAttrib):
        (WebCore::GraphicsContext3D::getActiveUniform):
        (WebCore::GraphicsContext3D::getAttribLocation):
        (WebCore::GraphicsContext3D::getContextAttributes):
        (WebCore::GraphicsContext3D::getError):
        (WebCore::GraphicsContext3D::getString):
        (WebCore::GraphicsContext3D::hint):
        (WebCore::GraphicsContext3D::isBuffer):
        (WebCore::GraphicsContext3D::isEnabled):
        (WebCore::GraphicsContext3D::isFramebuffer):
        (WebCore::GraphicsContext3D::isProgram):
        (WebCore::GraphicsContext3D::isRenderbuffer):
        (WebCore::GraphicsContext3D::isShader):
        (WebCore::GraphicsContext3D::isTexture):
        (WebCore::GraphicsContext3D::lineWidth):
        (WebCore::GraphicsContext3D::linkProgram):
        (WebCore::GraphicsContext3D::pixelStorei):
        (WebCore::GraphicsContext3D::polygonOffset):
        (WebCore::GraphicsContext3D::readPixels):
        (WebCore::GraphicsContext3D::releaseShaderCompiler):
        (WebCore::GraphicsContext3D::renderbufferStorage):
        (WebCore::GraphicsContext3D::sampleCoverage):
        (WebCore::GraphicsContext3D::scissor):
        (WebCore::GraphicsContext3D::shaderSource):
        (WebCore::GraphicsContext3D::stencilFunc):
        (WebCore::GraphicsContext3D::stencilFuncSeparate):
        (WebCore::GraphicsContext3D::stencilMask):
        (WebCore::GraphicsContext3D::stencilMaskSeparate):
        (WebCore::GraphicsContext3D::stencilOp):
        (WebCore::GraphicsContext3D::stencilOpSeparate):
        (WebCore::GraphicsContext3D::texParameterf):
        (WebCore::GraphicsContext3D::texParameteri):
        (WebCore::GraphicsContext3D::uniform1f):
        (WebCore::GraphicsContext3D::uniform1fv):
        (WebCore::GraphicsContext3D::uniform2f):
        (WebCore::GraphicsContext3D::uniform2fv):
        (WebCore::GraphicsContext3D::uniform3f):
        (WebCore::GraphicsContext3D::uniform3fv):
        (WebCore::GraphicsContext3D::uniform4f):
        (WebCore::GraphicsContext3D::uniform4fv):
        (WebCore::GraphicsContext3D::uniform1i):
        (WebCore::GraphicsContext3D::uniform1iv):
        (WebCore::GraphicsContext3D::uniform2i):
        (WebCore::GraphicsContext3D::uniform2iv):
        (WebCore::GraphicsContext3D::uniform3i):
        (WebCore::GraphicsContext3D::uniform3iv):
        (WebCore::GraphicsContext3D::uniform4i):
        (WebCore::GraphicsContext3D::uniform4iv):
        (WebCore::GraphicsContext3D::uniformMatrix2fv):
        (WebCore::GraphicsContext3D::uniformMatrix3fv):
        (WebCore::GraphicsContext3D::uniformMatrix4fv):
        (WebCore::GraphicsContext3D::useProgram):
        (WebCore::GraphicsContext3D::validateProgram):
        (WebCore::GraphicsContext3D::vertexAttrib1f):
        (WebCore::GraphicsContext3D::vertexAttrib1fv):
        (WebCore::GraphicsContext3D::vertexAttrib2f):
        (WebCore::GraphicsContext3D::vertexAttrib2fv):
        (WebCore::GraphicsContext3D::vertexAttrib3f):
        (WebCore::GraphicsContext3D::vertexAttrib3fv):
        (WebCore::GraphicsContext3D::vertexAttrib4f):
        (WebCore::GraphicsContext3D::vertexAttrib4fv):
        (WebCore::GraphicsContext3D::vertexAttribPointer):
        (WebCore::GraphicsContext3D::viewport):
        (WebCore::GraphicsContext3D::getBooleanv):
        (WebCore::GraphicsContext3D::getBufferParameteriv):
        (WebCore::GraphicsContext3D::getFloatv):
        (WebCore::GraphicsContext3D::getFramebufferAttachmentParameteriv):
        (WebCore::GraphicsContext3D::getIntegerv):
        (WebCore::GraphicsContext3D::getProgramiv):
        (WebCore::GraphicsContext3D::getProgramInfoLog):
        (WebCore::GraphicsContext3D::getRenderbufferParameteriv):
        (WebCore::GraphicsContext3D::getShaderiv):
        (WebCore::GraphicsContext3D::getShaderInfoLog):
        (WebCore::GraphicsContext3D::getShaderSource):
        (WebCore::GraphicsContext3D::getTexParameterfv):
        (WebCore::GraphicsContext3D::getTexParameteriv):
        (WebCore::GraphicsContext3D::getUniformfv):
        (WebCore::GraphicsContext3D::getUniformiv):
        (WebCore::GraphicsContext3D::getUniformLocation):
        (WebCore::GraphicsContext3D::getVertexAttribfv):
        (WebCore::GraphicsContext3D::getVertexAttribiv):
        (WebCore::GraphicsContext3D::getVertexAttribOffset):
        (WebCore::GraphicsContext3D::texImage2D):
        (WebCore::GraphicsContext3D::texSubImage2D):
        (WebCore::GraphicsContext3D::createBuffer):
        (WebCore::GraphicsContext3D::createFramebuffer):
        (WebCore::GraphicsContext3D::createProgram):
        (WebCore::GraphicsContext3D::createRenderbuffer):
        (WebCore::GraphicsContext3D::createShader):
        (WebCore::GraphicsContext3D::createTexture):
        (WebCore::GraphicsContext3D::deleteBuffer):
        (WebCore::GraphicsContext3D::deleteFramebuffer):
        (WebCore::GraphicsContext3D::deleteProgram):
        (WebCore::GraphicsContext3D::deleteRenderbuffer):
        (WebCore::GraphicsContext3D::deleteShader):
        (WebCore::GraphicsContext3D::deleteTexture):
        (WebCore::GraphicsContext3D::sizeInBytes):
        (WebCore::GraphicsContext3D::synthesizeGLError):
        (WebCore::GraphicsContext3D::getImageData):

2010-02-25  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Swap images for activate and deactivate breakpoints.

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

        * WebCore.gypi:
        * inspector/front-end/Images/breakpointsActivateButtonGlyph.png: Renamed from WebCore/inspector/front-end/Images/deactivateBreakpointsButtonGlyph.png.
        * inspector/front-end/Images/breakpointsDeactivateButtonGlyph.png: Renamed from WebCore/inspector/front-end/Images/deactivateBreakpointsDisabledButtonGlyph.png.
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.css:

2010-02-25  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        Go back on symlink resolution if we are loading the flash plugin,
        and the path contains /netscape/, following what Chromium does.

        Thanks to Evan Martin for the help on this!

        * plugins/gtk/PluginPackageGtk.cpp:
        (WebCore::PluginPackage::load):

2010-02-25  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Scripts panel shows blank source when stopping on a breakpoint on refresh.

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

        * inspector/front-end/Panel.js:
        (WebInspector.Panel.prototype.canShowSourceLine):
        (WebInspector.Panel.prototype.showSourceLine):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.canShowSourceLine):
        (WebInspector.ResourcesPanel.prototype.showSourceLine):
        * inspector/front-end/Script.js:
        (WebInspector.Script):
        * inspector/front-end/ScriptView.js:
        (WebInspector.ScriptView.prototype.setupSourceFrameIfNeeded):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.show):
        (WebInspector.ScriptsPanel.prototype.get searchableViews):
        (WebInspector.ScriptsPanel.prototype.addScript):
        (WebInspector.ScriptsPanel.prototype._resourceLoadingFinished):
        (WebInspector.ScriptsPanel.prototype.addBreakpoint):
        (WebInspector.ScriptsPanel.prototype.removeBreakpoint):
        (WebInspector.ScriptsPanel.prototype.reset):
        (WebInspector.ScriptsPanel.prototype.canShowSourceLine):
        (WebInspector.ScriptsPanel.prototype.showSourceLine):
        (WebInspector.ScriptsPanel.prototype._scriptOrResourceForURLAndLine):
        (WebInspector.ScriptsPanel.prototype.showView):
        (WebInspector.ScriptsPanel.prototype._sourceFrameForScriptOrResource):
        (WebInspector.ScriptsPanel.prototype._showScriptOrResource):
        (WebInspector.ScriptsPanel.prototype._addScriptToFilesMenu.optionCompare):
        (WebInspector.ScriptsPanel.prototype._addScriptToFilesMenu):
        * inspector/front-end/SourceView.js:
        (WebInspector.SourceView.prototype._addBreakpoint):
        * inspector/front-end/inspector.js:
        (WebInspector.documentClick.followLink):
        (WebInspector.documentClick):
        (WebInspector._choosePanelToShowSourceLine):
        (WebInspector.canShowSourceLine):
        (WebInspector.showSourceLine):

2010-02-25  Ben Murdoch  <benm@google.com>

        Reviewed by Kenneth Rohde Christiansen.

        The target element of a Touch should be the target where that touch originated, not where it is now.
        https://bugs.webkit.org/show_bug.cgi?id=34585

        Currently the target of a touch is set to the resulting node of the hit test where the touch currently
        is. This does not match the behavior of iPhone or Android. This patch uses a hashmap on the EventHandler
        to keep track of the target element when a touch is first started. This target is then used as the target
        for subsequent touches with the same id. This matches observed behavior on iPhone and Android.

        Tests:
        fast/events/touch/touch-target.html: Added.
        fast/events/touch/basic-single-touch-events.html: Updated.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleTouchEvent): Store the originating target element of a touch in a hashmap
            so that we can reuse that target for future events caused by that touch. This matches observed behavior
            on iPhone and Android.
        * page/EventHandler.h: Add hashmap as a member.
        * platform/PlatformTouchPoint.h:
        (WebCore::PlatformTouchPoint::id): Store the touch point id as unsigned.
        * platform/qt/PlatformTouchPointQt.cpp: 
        (WebCore::PlatformTouchPoint::PlatformTouchPoint): Cast platform touch id from signed to unsigned. Qt API
            docs state that it will always be >= 0.

2010-02-24  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Simon Fraser.
        Patch by Antonio Gomes <tonikitoo@webkit.org>

        Add a convenient center() method to IntRect
        https://bugs.webkit.org/show_bug.cgi?id=35346

        As it is a convenience method, and implemention is
        based on FloatRect's one, patch does not provide a
        layout test.

        * platform/graphics/IntRect.h:
        (WebCore::IntRect::center):

2010-02-25  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Pavel Feldman.

        Fake workers implementation that simulates workers using iframe and timer,
        needed to support workers debugging. Also, a facility to inject scripts into
        inspected page upon load.
        https://bugs.webkit.org/show_bug.cgi?id=35148

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::addScriptToEvaluateOnLoad):
        (WebCore::InspectorBackend::removeAllScriptsToEvaluateOnLoad):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::didCommitLoad):
        (WebCore::InspectorController::addScriptToEvaluateOnLoad):
        (WebCore::InspectorController::removeAllScriptsToEvaluateOnLoad):
        * inspector/InspectorController.h:
        * inspector/front-end/InjectedFakeWorker.js: Added.
        (InjectedFakeWorker.Worker):
        (InjectedFakeWorker.FakeWorker):
        (InjectedFakeWorker.FakeWorker.prototype.postMessage):
        (InjectedFakeWorker.FakeWorker.prototype.terminate):
        (InjectedFakeWorker.FakeWorker.prototype._onmessageWrapper):
        (InjectedFakeWorker.FakeWorker.prototype._dispatchMessage):
        (InjectedFakeWorker.FakeWorker.prototype._handleException):
        (InjectedFakeWorker.FakeWorker.prototype._buildWorker):
        (InjectedFakeWorker.FakeWorker.prototype._setupWorkerContext.handler):
        (InjectedFakeWorker.FakeWorker.prototype._setupWorkerContext):
        (InjectedFakeWorker.FakeWorker.prototype._importScripts):
        (InjectedFakeWorker.FakeWorker.prototype._loadScript):
        (InjectedFakeWorker.URL):
        (InjectedFakeWorker.URL.prototype.urlRegEx.split):
        (InjectedFakeWorker.URL.prototype.mockLocation):
        (InjectedFakeWorker.URL.prototype.completeWith):
        (InjectedFakeWorker.URL.prototype.sameOrigin):
        (InjectedFakeWorker.DOMCoreException.formatError):
        (InjectedFakeWorker.DOMCoreException):
        (InjectedFakeWorker.noop):
        * inspector/front-end/InspectorBackendStub.js:
        (.WebInspector.InspectorBackendStub.prototype.setInjectedScriptSource):
        (.WebInspector.InspectorBackendStub.prototype.addScriptToEvaluateOnLoad):
        (.WebInspector.InspectorBackendStub.prototype.removeAllScriptsToEvaluateOnLoad):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:

2010-02-24  Nicholas Young  <nicholas.young@nokia.com>

        Reviewed by Eric Carlson.

        Add mediaPlayerOwningDocument() to MediaPlayerClient.
        https://bugs.webkit.org/show_bug.cgi?id=35374

        No new tests. These are interface changes only.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerOwningDocument): Implementation for media element.
        * html/HTMLMediaElement.h:
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerClient::mediaPlayerOwningDocument): New virtual method.

2010-02-24  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Optimized Font::normalizeSpaces() by caching the String::characters()
        instead of repeatedly calling operator[]

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

        * platform/graphics/Font.cpp:
        (WebCore::Font::normalizeSpaces):

2010-02-24  Jungshik Shin  <jshin@chromium.org>

        Reviewed by David Levin.

        [Chromium] Traditional Chinese Chrome on Windows should use PMingLiu instead of Simsun for Han characters
        https://bugs.webkit.org/show_bug.cgi?id=35319

        No visible change in the layout test.

        * platform/graphics/chromium/FontUtilsChromiumWin.cpp:
        (WebCore::):

2010-02-24  Anthony Ricaud  <rik@webkit.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Reduce the timer to show the eval popover
        https://bugs.webkit.org/show_bug.cgi?id=35344

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._mouseMove):

2010-02-24  Jay Campan  <jcampan@google.com>

        Reviewed by David Levin.

        Don't show the autofill popup when the input text is disabled or read only.

        Test: manual-tests/chromium/no-autofill-on-readonly.html

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

        * src/EditorClientImpl.cpp:
        (WebKit::EditorClientImpl::autofill):
        *  manual-tests/chromium/no-autofill-on-readonly.html: Added.

2010-02-24  Dominic Mazzoni  <dmazzoni@chromium.org>

        Reviewed by Jeremy Orlow.

        Wraps includes of SVG headers so that it's possible to
        compile the V8 bindings with SVG disabled, e.g. 'enable_svg=0'.
        https://bugs.webkit.org/show_bug.cgi?id=35345

        No new tests.

        * bindings/v8/V8DOMWrapper.cpp:
        * bindings/v8/V8Proxy.cpp:
        * bindings/v8/custom/V8CSSValueCustom.cpp:
        * bindings/v8/custom/V8DocumentCustom.cpp:
        * bindings/v8/custom/V8ElementCustom.cpp:
        * bindings/v8/custom/V8EventCustom.cpp:
        * bindings/v8/custom/V8SVGElementCustom.cpp:

2010-02-24  Maciej Stachowiak  <mjs@apple.com>

        Unreviewed build fix.

        Fix gtk build.

        Include JSC headers as runtime/ instead of JavaScriptCore/

        * bindings/js/JSDOMWrapper.h:
        * bindings/js/ScriptWrappable.h:

2010-02-24  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver Hunt.

        Cache JavaScript wrappers inline in DOM nodes
        https://bugs.webkit.org/show_bug.cgi?id=35226

        <rdar://problem/7664202>
        
        7.4% speedup on Dromaeo DOM Core tests.
        2.3% speedup on Hixie DOM Core tests.

        This fixes the following things from the last attempt:
        - Now builds in both debug and release and passes all tests
        - Properly use a WeakGCPtr, not just a raw pointer, in ScriptWrappable
        - Properly look in the appropriate per-document or per-world map
        - Added an assert that would have caught any of the problems I found
        - Handle clearing the inline cache properly in all cases
        
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::cacheDOMObjectWrapper): Adjust for name changes.
        (WebCore::forgetDOMNode): Clear wrapper pointer.
        (WebCore::cacheDOMNodeWrapper): Cache inline too if caching for normal world.
        * bindings/js/JSDOMBinding.h:
        (WebCore::Document::getWrapperCache): Inlined.
        (WebCore::domObjectWrapperMapFor): Renamed to start with lowercase. Moved to header to inline.
        * bindings/js/JSDOMWrapper.h: Added.
        (WebCore::DOMObject::DOMObject): Factored this out of JSDOMBinding.h to avoid include
        cycle. I think the class should be renamed, I picked a forward-looking header name because
        we already have a DOMObject.h
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::createWrapperInline): Renamed version of original createWrapper.
        (WebCore::createWrapper): Call createWrapperInline. Out-of-line version.
        (WebCore::toJSNewlyCreated): Call createWrapperInline instead of createWrapper.
        * bindings/js/JSNodeCustom.h: Added.
        (WebCore::getCachedDOMNodeWrapper): Moved from JSDOMBinding.cpp and moved here,
        so it could inline everywhere without creating an include cycle. Consider inline
        cache.
        (WebCore::toJS): Moved to header to inline.
        * bindings/js/ScriptWrappable.h:
        (WebCore::ScriptWrappable::ScriptWrappable): Implement this in the obvious
        way for JavaScriptCore. (Using a WeakGCPtr).
        (WebCore::ScriptWrappable::wrapper):
        (WebCore::ScriptWrappable::setWrapper):
        (WebCore::ScriptWrappable::clearWrapper):
        * bindings/scripts/CodeGeneratorJS.pm: Include CustomHeader heaaders
        in the header, not just the impl file, so they can add inlining.
        * dom/Node.idl: Add CustomHeader directive.
        
        Add new files to build.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:


2010-02-24  Jochen Eisinger  <jochen@chromium.org>

        Reviewed by Jeremy Orlow.

        Expose Database object of currently active task on the database thread
        https://bugs.webkit.org/show_bug.cgi?id=35341

        * storage/DatabaseThread.cpp:
        (WebCore::DatabaseThread::DatabaseThread):
        (WebCore::DatabaseThread::databaseThread):
        * storage/DatabaseThread.h:
        (WebCore::DatabaseThread::getDatabaseOfCurrentTask):

2010-02-24  Nicholas Young  <nicholas.young@nokia.com>

        Reviewed by Eric Carlson.

        supportsMuting() should be an internal interface between MediaPlayer and MediaPlayerPrivate.
        https://bugs.webkit.org/show_bug.cgi?id=35327

        No new tests. Refactoring Only.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setMuted): Do not check supportsMuting()
        (WebCore::HTMLMediaElement::updateVolume): Set volume and muted
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::setVolume): Check supportsMuting()
        (WebCore::MediaPlayer::setMuted): Check supportsMuting()
        * platform/graphics/MediaPlayer.h: Remove supportsMuting()

2010-02-24  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Fisher.

        [Chromium API] Disambiguate allowJavaScript from didNotAllowScript
        https://bugs.webkit.org/show_bug.cgi?id=35205

        For clients that want to show a user interface element when JavaScript
        was blocked on a page, we need to disambiguate between querying the
        client for whether JavaScript is enabled from actually failing to
        execute some script.

        This patch adds a new FrameLoaderClient callback for when WebCore would
        like to execute JavaScript but fails to because JavaScript is disabled.

        This patch also touches every client of canExecuteScripts so they can
        indicate whether we should make this callback.  I was hoping there was
        a better choke point, but my first two attempts were wrong in subtle
        ways.  pkasting points out that this will be easy to screw up in the
        future, so it's better to make all the clients be explicit.

        * WebCore.PluginHostProcess.exp:
        * bindings/ScriptControllerBase.cpp:
        (WebCore::ScriptController::canExecuteScripts):
        (WebCore::ScriptController::executeScript):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent):
        * bindings/js/JSLazyEventListener.cpp:
        (WebCore::JSLazyEventListener::initializeJSFunction):
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::execute):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::bindingRootObject):
        (WebCore::ScriptController::windowScriptNPObject):
        (WebCore::ScriptController::jsObjectForPluginElement):
        (WebCore::ScriptController::executeScriptInWorld):
        * bindings/js/ScriptController.h:
        (WebCore::):
        * bindings/js/ScriptControllerMac.mm:
        (WebCore::ScriptController::windowScriptObject):
        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::setJavaScriptPaused):
        * bindings/js/ScriptEventListener.cpp:
        (WebCore::createAttributeEventListener):
        * bindings/js/ScriptState.cpp:
        (WebCore::scriptStateFromNode):
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::windowScriptNPObject):
        (WebCore::ScriptController::createScriptObjectForPluginElement):
        * bindings/v8/ScriptController.h:
        (WebCore::):
        * bindings/v8/ScriptEventListener.cpp:
        (WebCore::createAttributeEventListener):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::retrieve):
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElementData::evaluateScript):
        * dom/XMLTokenizerLibxml2.cpp:
        (WebCore::XMLTokenizer::startElementNs):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::controls):
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::parseTag):
        (WebCore::HTMLTokenizer::processToken):
        * inspector/InspectorController.cpp:
        (WebCore::canPassNodeToJavaScript):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::isProcessingUserGesture):
        (WebCore::FrameLoader::open):
        (WebCore::FrameLoader::dispatchDidClearWindowObjectsInAllWorlds):
        (WebCore::FrameLoader::dispatchDidClearWindowObjectInWorld):
        * loader/FrameLoaderClient.h:
        (WebCore::FrameLoaderClient::didNotAllowScript):

2010-02-24  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Fisher.

        Add call to FrameLoaderClient::allowPlugins everywhere arePluginsEnabled is called
        https://bugs.webkit.org/show_bug.cgi?id=34997

        If we want to let the FrameLoaderClient override arePluginsEnabled,
        then we need to call out to the FrameLoaderClient every time we read
        the setting.

        We don't have testing infrustructure for these changes, which is lame.
        I'm supposed to fix that in Bug 33991.

        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument):
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::substituteMIMETypeFromPluginDatabase):
        * loader/PluginDocument.cpp:
        (WebCore::PluginTokenizer::writeRawData):
        * page/Page.cpp:
        (WebCore::Page::pluginData):
        * plugins/MimeType.cpp:
        (WebCore::MimeType::enabledPlugin):

2010-02-24  James Robinson  <jamesr@chromium.org>

        Reviewed by Dmitry Titov.

        Do not fire focus events while a modal dialog is up.
        https://bugs.webkit.org/show_bug.cgi?id=33962

        Modifies the FocusController to check the frame's page's defersLoading() flag before firing blur/focus events.
        This flag is set while a modal dialog (like a window.alert or window.confirm) is up.  Firing the events causes
        assertion failures, since when the dialog is dismissed the PageGroupLoadDeferrer assumes that no script has run.

        Manual tests only as DumpRenderTree does not support modal dialogs

        * manual-tests/modal-dialog-blur-selfclose.html: Added.
        * manual-tests/modal-dialog-blur.html: Added.
        * page/FocusController.cpp:
        (WebCore::dispatchEventsOnWindowAndFocusedNode):

2010-02-24  Dan Bernstein  <mitz@apple.com>

        Reviewed by Anders Carlsson.

        <rdar://problem/7018611> innerHTML applies meta/link/title tags from a detached html element

        Test: fast/parser/fragment-parser.html

        Ensure that fragment parsing has no side effects on the fragment’s owner
        document.

        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::insertNode): Don’t call
        dispatchDocumentElementAvailable() for fragments.
        (WebCore::HTMLParser::handleError): Don’t copy attributes to the owner
        document’s <html> and <body> elements when a redundant <html> or <body>
        is encountered while parsing a fragment.
        (WebCore::HTMLParser::framesetCreateErrorCheck): Don’t change the owner
        document’s <body> element’s style when parsing a fragment.
        (WebCore::HTMLParser::createHead): Don’t attach the new <head> to the
        ownder document of a fragment.

2010-02-24  David Levin  <levin@chromium.org>

        Reviewed by Darin Adler.

        Need to create a CanvasSurface base class for HTMLCanvasElement.
        https://bugs.webkit.org/show_bug.cgi?id=35322

        This is an initial step in making the OffscreenCanvas object.

        No new functionality so no new tests.

        * GNUmakefile.am: Added CanvasSurface to the build.
        * WebCore.gypi: ditto
        * WebCore.pro: ditto
        * WebCore.vcproj/WebCore.vcproj: ditto
        * WebCore.xcodeproj/project.pbxproj: ditto
        * dom/CanvasSurface.cpp: Added.
        * dom/CanvasSurface.h: Added.
        * html/HTMLCanvasElement.h: Made HTMLCanvasElement inherit from CanvasSurface.

2010-02-24  Peter Kasting  <pkasting@google.com>

        Reviewed by Adam Barth.

        Fix regression in calculating an animated image's start time.
        https://bugs.webkit.org/show_bug.cgi?id=35115

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::startAnimation):

2010-02-24  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/7682827> Text with :first-letter lingers after being removed

        Test: fast/css/first-letter-set-text.html

        * rendering/RenderTextFragment.cpp:
        (WebCore::RenderTextFragment::setTextInternal): Set this back as the
        text node’s renderer, as removing the first letter has resets the node’s
        renderer.

2010-02-24  Ariya Hidayat  <ariya.hidayat@gmail.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Faster cut-off for rectangle fill without shadow.
        https://bugs.webkit.org/show_bug.cgi?id=35337

        * platform/graphics/qt/GraphicsContextQt.cpp:

2010-02-24  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by nobody, build fix.

        [Qt] Corrects build break of QtLauncher on Windows.
        The VERSION variable was not set anymore while building in trunk.

        * WebCore.pro:

2010-02-24  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Activate/Deactivate breaks does not look consistent with rest of the toolbar.

        Fix style and add the new images to the related file sets.
        https://bugs.webkit.org/show_bug.cgi?id=35307

        * WebCore.gypi:
        * inspector/front-end/Images/deactivateBreakpointsButtonGlyph.png:
        * inspector/front-end/Images/deactivateBreakpointsDisabledButtonGlyph.png:
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.css:

2010-02-24  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Get rid of an extra call to
        setNPWindowIfNeeded. updatePluginWidget already calls this for us
        if needed.

        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::platformStart):

2010-02-24  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Try to sanitize a bit the geometry management of plugins.

        Stop doing contradictory things in updatePluginWidget (we were at
        the same time pretending the geometry setting was delayed until
        ::paint and setting the geometry not once but twice) and just set
        it any time the windowRect or clipRect for the plugin has changed.

        This is closer to what the Mac port does, and fixes instances of
        the plugins not being drawn until the window is resized or
        scrolled. Other than that all manual and layout tests seems to
        still work.

        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::updatePluginWidget):
        (WebCore::PluginView::setNPWindowIfNeeded):

2010-02-23  Geoff Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Simplify animation lifetime handling.  Previously we manually
        determined whether our base element was safe when we unregistered
        our listener, now we simply ensure that the base element itself
        registers and unregisters the animation listener.

        * svg/animation/SVGSMILElement.cpp:
        (WebCore::ConditionEventListener::create):
        (WebCore::ConditionEventListener::disconnectAnimation):
        (WebCore::ConditionEventListener::ConditionEventListener):
        (WebCore::ConditionEventListener::operator==):
        (WebCore::ConditionEventListener::handleEvent):
        (WebCore::SVGSMILElement::eventBaseFor):
        (WebCore::SVGSMILElement::connectConditions):
        (WebCore::SVGSMILElement::disconnectConditions):
        * svg/animation/SVGSMILElement.h:

2010-02-23  Dmitry Titov  <dimich@chromium.org>

        Reviewed by David Levin.

        Chromium: Use V8::TerminateExecution to actually terminate workers.
        https://bugs.webkit.org/show_bug.cgi?id=35137

        Test: existing fast/workers/stress-js-execution.html which is currently failing
        on Mac and Linux bots for Chromium.

        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::evaluate):
        * bindings/v8/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::forbidExecution):

2010-02-23  Enrica Casucci  <enrica@apple.com>

        Reviewed by Simon Fraser.

        REGRESSION: WebKit crashes when deleting images on blogger.com (34957)
        <rdar://problem/7651935>
        https://bugs.webkit.org/show_bug.cgi?id=34957

        Fixing a regression introduced with revision 53085. Anchor elements should not be considered
        in editable content when calculating the position in the parent before the node.
        
        Test: editing/execCommand/delete-image-in-anchor.html

        * dom/Position.cpp:
        (WebCore::Position::getInlineBoxAndOffset):

2010-02-23  Tony Chang  <tony@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=34634
        Pasting a list into the middle of another list item should split the target
        list item into two separate list items.  This matches the behavior in other
        browsers.

        Test: editing/pasteboard/paste-list-004.html

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::insertAsListItems):

2010-02-23  Brady Eidson  <beidson@apple.com>

        Reviewed by Tim Hatcher and Pavel Feldman.

        Regression (r55107) - WebInspector docking is busted.
        https://bugs.webkit.org/show_bug.cgi?id=35274

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::canAttachWindow): Use the minimum height for this calculation,
          not the preferred height.
        (WebCore::InspectorController::attachWindow): attachWindow() shouldn't decide the policy, as it is
          often called partway through the show or dock procedure after some of the initial conditions have
          changed. Let the front-end itself and the InspectorClient's make the policy decision at the start
          of the show/dock operation.

        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::canAttachWindow):
        * inspector/InspectorFrontendHost.h:
        * inspector/InspectorFrontendHost.idl:

        * inspector/front-end/inspector.js:
        (WebInspector.toggleAttach): Before attaching, ask the front-end-host if attaching is allowed.

2010-02-23  Mark Rowe  <mrowe@apple.com>

        Reviewed by Geoff Garen.

        <http://webkit.org/b/35287> ImageSourceCG::frameIsCompleteAtIndex returns false for all frames until image has completed loading

        CGImageSourceGetStatusAtIndex claims that all frames of a multi-frame image are incomplete when we've not yet received the
        complete data for an image that is using an incremental data source (<rdar://problem/7679174>). We work around this by
        special-casing all frames except the last in an image and treating them as complete if they are present and reported as
        being incomplete. We do this on the assumption that loading new data can only modify the existing last frame or append new
        frames. The last frame is only treated as being complete if the image source reports it as such. This ensures that it is
        truly the last frame of the image rather than just the last that we currently have data for.

        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::frameIsCompleteAtIndex):

2010-02-23  Enrica Casucci  <enrica@apple.com>

        Reviewed by Darin Adler.

        Crash in createContextualFragment when inserting a list in a non HTML document.
        <rdar://problem/7666670>
        https://bugs.webkit.org/show_bug.cgi?id=35305
        
        createFragmentFromMarkup did not handle correctly the case where documentElement is
        not an HTMLElement. The static cast to HTMLElement was causing createContextualFragment to
        crash.
        
        Test: editing/execCommand/insert-list-xml.xhtml

        * dom/Element.cpp:
        (WebCore::Element::createContextualFragment): Added.
        * dom/Element.h: Added createContextualFragment virtual function.
        * editing/markup.cpp:
        (WebCore::createFragmentFromMarkup): Removed static cast to HTMLElement.
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::createContextualFragment): Modified to perform only checks
        that are specific for an HTMLElement object. The rest of the logic has been moved to the
        corresponding method in the Element class.

2010-02-23  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        WebCore should stop throwing away the CGImageSourceRef on Windows to improve GIF performance
        https://bugs.webkit.org/show_bug.cgi?id=35309

        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::clear):

2010-02-23  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Gustavo Noronha Silva.

        Changes references of GOwnPtr to reflect their new place.
        http://webkit.org/b/35084

        * WebCore/platform/KURL.cpp
        * WebCore/platform/TextEncoding.cpp:
        * WebCore/platform/text/gtk/TextBreakIteratorGtk.cpp: 
        * WebCore/platform/text/gtk/TextCodecGtk.cpp:

2010-02-23  Brady Eidson  <beidson@apple.com>

        Reviewed by Alexey Proskuryakov.

        HTTP 307 after a 303 after a POST re-sends POST data from the original request.
        <rdar://problem/7390251> and https://bugs.webkit.org/show_bug.cgi?id=31410

        Test: http/tests/loading/307-after-303-after-post.html

        Remember the last HTTP method send out during a redirect chain for a resource handle:
        * platform/network/ResourceHandle.cpp:
        (WebCore::ResourceHandle::lastHTTPMethod):
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):

        Refer to the last HTTP method used instead of the original method:
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::willSendRequest):
        (WebCore::ResourceHandle::willSendRequest):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::willSendRequest):
        (-[WebCoreResourceHandleAsDelegate connection:willSendRequest:redirectResponse:]):

2010-02-23  Crystal Zhang  <haizhang@rim.com>

        Unreviewed build fix.

        Fix build error when enable plugin proxy: 'toRenderEmbeddedObject' identifier not found.
        As RenderEmbeddedObject inherits RenderPartObject and 'toRenderEmbeddedObject' belongs
        to former one.

        * html/HTMLMediaElement.cpp:

2010-02-23  Evan Martin  <evan@chromium.org>

        Reviewed by Jeremy Orlow.

        [chromium] fix previous SVG-disabling patch
        https://bugs.webkit.org/show_bug.cgi?id=35298

        * WebCore.gypi: rename variable
        * WebCore.gyp/WebCore.gyp: actually use the variable

2010-02-23  Michael Lotz <mmlr@mlotz.ch>

        Reviewed by David Levin.

        [Haiku] Fix conversion from BString to String
        https://bugs.webkit.org/show_bug.cgi?id=35082

        The previous patch to this file was broken (sorry). First of all,
        the conversion from UTF8 was accidentally removed. Second, for
        empty strings, we need to point the implementation at StringImpl::empty().

        Covered by existing tests.

        * platform/text/haiku/StringHaiku.cpp:
        (WebCore::String::String):

2010-02-23  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Eric Carlson.

        [Qt] Prevent the media backend from handling non-audio or -video mime types

        * platform/graphics/qt/MediaPlayerPrivateQt.cpp:

2010-02-23  Evan Martin  <evan@chromium.org>

        Reviewed by Jeremy Orlow.

        [chromium] Allow building without SVG
        https://bugs.webkit.org/show_bug.cgi?id=31522

        * WebCore.gyp/WebCore.gyp, WebCore.gypi: test enable_svg flag.
        * bindings/v8/custom/V8SVGDocumentCustom.cpp,
          bindings/v8/custom/V8SVGPathSegCustom.cpp: test ENABLE(SVG).

2010-02-23  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Gustavo Noronha Silva.

        Fixes references to GOwnPtr and GRefPtr so the GTK+ port builds
        again.
        http://webkit.org/b/35084

        * WebCore/platform/gtk/DataObjectGtk.h:
        * WebCore/platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:

2010-02-23  Ariya Hidayat  <ariya.hidayat@gmail.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Faster cut-off for rectangle drawing without shadow.
        https://bugs.webkit.org/show_bug.cgi?id=35267

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::drawRect):

2010-02-23  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        Removes redundant Settings::setGeolocationEnabled and Settings::geolocationEnabled
        https://bugs.webkit.org/show_bug.cgi?id=35242

        No new tests, removing dead code only.

        * page/Settings.cpp:
        * page/Settings.h:

2010-02-23  Ben Murdoch  <benm@google.com>

        Reviewed by Eric Seidel.

        pageX/Y co-ordinates of TouchEvent should be 0,0
        https://bugs.webkit.org/show_bug.cgi?id=35239

        The co-ordinates attached to a touch event are not used for tracking touch motion, rather the co-ordinates attached to Touches within the touch event should be used. Set the co-ordinates on the event itself to 0 to avoid confusion and match observed iPhone behavior.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleTouchEvent): Set the pageX/Y and screenX/Y co-ordinates attached to the touch event to 0,0 to match observed behavior on the iPhone.
        * page/EventHandler.h: Remove now unused members m_firstTouchScreenPos and m_firstTouchPagePos.

2010-02-23  Stephan Aßmus  <superstippi@gmx.de>

        Reviewed by Eric Seidel.

        [Haiku] Various improvements to EventHandlerHaiku.
        https://bugs.webkit.org/show_bug.cgi?id=34685

        Covered by existing tests.

        Fix the build by not including PlatformScrollBar.h.

        * page/haiku/EventHandlerHaiku.cpp:
        (WebCore::isKeyboardOptionTab):
            Use the correct keycode for tab keys.
        (WebCore::EventHandler::focusDocumentView):
            Use proper locking. In any case, Haiku doesn't append platform
            widgets to WebCore widgets. But if it did, this implementation
            would be correct.
        (WebCore::EventHandler::passWidgetMouseDownEventToWidget):
            Implemented.
        (WebCore::EventHandler::eventActivatedView):
            Removed notImplemented() and added note.
        (WebCore::EventHandler::passMousePressEventToSubframe):
            Implemented.
        (WebCore::EventHandler::passMouseMoveEventToSubframe):
            Implemented.
        (WebCore::EventHandler::passMouseReleaseEventToSubframe):
            Implemented.
        (WebCore::EventHandler::accessKeyModifiers):
            Added note.

2010-02-23  Tony Chang  <tony@chromium.org>

        Not reviewed.
        Revert r55135 because the layout test is failing on all the bots.
        https://bugs.webkit.org/show_bug.cgi?id=34634

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::insertAsListItems):

2010-02-17  Steve Block  <steveblock@google.com>

        Reviewed by Ariya Hidayat.

        Adds cache to store Geolocation positions between browser sessions.
        https://bugs.webkit.org/show_bug.cgi?id=34084

        This is required to fully implement the Geolocation maximumAge property.
        See Bug 30676.

        No new tests, will add tests for maximumAge once complete.

        * Android.mk: Modified. Added GeolocationPositionCache.cpp
        * GNUmakefile.am: Modified. Added GeolocationPositionCache.[cpp|h]
        * WebCore.gypi: Modified. Added GeolocationPositionCache.[cpp|h]
        * WebCore.pro: Modified. Added GeolocationPositionCache.[cpp|h]
        * WebCore.vcproj/WebCore.vcproj: Modified. Added GeolocationPositionCache.[cpp|h]
        * WebCore.xcodeproj/project.pbxproj: Modified. Added GeolocationPositionCache.[cpp|h]
        * page/GeolocationPositionCache.cpp: Added.
        (WebCore::GeolocationPositionCache::GeolocationPositionCache):
        (WebCore::GeolocationPositionCache::~GeolocationPositionCache):
        (WebCore::GeolocationPositionCache::setCachedPosition):
        (WebCore::GeolocationPositionCache::cachedPosition):
        (WebCore::GeolocationPositionCache::setDatabasePath):
        (WebCore::GeolocationPositionCache::readFromDB):
        (WebCore::GeolocationPositionCache::writeToDB):
        * page/GeolocationPositionCache.h: Added.

2010-02-23  Yuta Kitamura  <yutak@chromium.org>

        Reviewed by Dan Bernstein.

        Fix alignment of vertical-align: text-bottom inside an inline-block.
        
        This patch is based on a fix provided by Takahito Hirano.

        display: inline-block + vertical-align: text-bottom causes misalignment.
        https://bugs.webkit.org/show_bug.cgi?id=30846

        Test: fast/inline-block/inline-block-vertical-align-2.html

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::verticalPosition): Fixed vpos calculation.
        We cannot cut corners for inline blocks, since they may have their own
        text metrics.

2010-02-23  Steve Block  <steveblock@google.com>

        Reviewed by David Levin.

        Sets default values of V8 runtime enabler flags to match behavior with JSC
        https://bugs.webkit.org/show_bug.cgi?id=35095

        No new tests, modifies a Chromium feature only.

        * bindings/generic/RuntimeEnabledFeatures.cpp: Modified. Sets appcache and geolocation flag defaults to 'on'
        * storage/Database.cpp: Modified. Sets database flag default to 'on'.

2010-02-23  Stephan Aßmus  <superstippi@gmx.de>

        Reviewed by Eric Seidel.

        [Haiku] Fix various issues in keyboard event generation.
        https://bugs.webkit.org/show_bug.cgi?id=34685

        Covered by existing tests.

        Fixed backspace keycode.
        Fixed using the appropriate fields from the Haiku event for mapping
        to the VK_* codes and added mapping a great deal more codes.
        Added extraction of modifier key flags.
        Completed implementation of disambiguateKeyDownEvent()
        Implemented currentCapsLockState().

        * platform/haiku/PlatformKeyboardEventHaiku.cpp:
        (WebCore::keyIdentifierForHaikuKeyCode):
        (WebCore::windowsKeyCodeForKeyEvent):
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        (WebCore::PlatformKeyboardEvent::disambiguateKeyDownEvent):
        (WebCore::PlatformKeyboardEvent::currentCapsLockState):

2010-02-23  Steve Block  <steveblock@google.com>

        Reviewed by Darin Adler.

        Adds Client::cancelGeolocationPermissionRequestForFrame and ChromeClient::cancelGeolocationPermissionRequestForFrame
        https://bugs.webkit.org/show_bug.cgi?id=34962

        These methods are required so that a Geolocation object can cancel an
        asynchronous permission request. This allows the chrome client to cancel
        any UI it is showing for the permission request.

        No new tests, as this is for the purposes of browser UI only.

        * loader/EmptyClients.h: Modified
        (WebCore::EmptyChromeClient::cancelGeolocationPermissionRequestForFrame): Added
        * page/Chrome.cpp: Modified.
        (WebCore::Chrome::cancelGeolocationPermissionRequestForFrame): Added
        * page/Chrome.h: Modified.
        * page/ChromeClient.h: Modified.
        (WebCore::ChromeClient::cancelGeolocationPermissionRequestForFrame): Added
        * page/Geolocation.cpp: Modified.
        (WebCore::Geolocation::disconnectFrame): Modified. Call cancelGeolocationPermissionRequestForFrame

2010-02-23  Tony Chang  <tony@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=34634
        Pasting a list into the middle of another list item should split the target
        list item into two separate list items.  This matches the behavior in other
        browsers.

        Test: editing/pasteboard/paste-list-004.html

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::insertAsListItems):

2010-02-23  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] Correct build problems while building QtWebKit inside Qt.
        https://bugs.webkit.org/show_bug.cgi?id=34975

        * WebCore.pro: Change the condition !standalone_package to !QTDIR_build

2010-02-23  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Ariya Hidayat.

        [Qt] Connect video with accelerated compositing
        https://bugs.webkit.org/show_bug.cgi?id=35276

        MediaControlPrivate and GraphicsLayer are patched together via
        a shared PlatformLayer (QGraphicsItem). This patch makes sure that the
        QGraphicsVideoItem from MediaControl becomes part of the scene 
        associsated with GraphicsLayer

        Test: http://double.co.nz/video_test/test1.html with AC turned on

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::GraphicsLayerQtImpl::): mediaLayer member
        (WebCore::GraphicsLayerQtImpl::opaqueArea): video is opaque
        (WebCore::GraphicsLayerQtImpl::paint): don't paint video
        (WebCore::GraphicsLayerQtImpl::flushChanges): flush mediaLayer
        (WebCore::GraphicsLayerQt::setContentsToMedia): notify
        * platform/graphics/qt/GraphicsLayerQt.h: reimp setContentsToMedia
        * platform/graphics/qt/MediaPlayerPrivateQt.cpp:
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate): m_compositing
        (WebCore::MediaPlayerPrivate::paint): don't paint if compositing
        (WebCore::MediaPlayerPrivate::acceleratedRenderingStateChanged):
        reimp from MediaPlayerPrivateInterface to support AC
        (WebCore::MediaPlayerPrivate::platformLayer): ditto
        * platform/graphics/qt/MediaPlayerPrivateQt.h: 
        (WebCore::MediaPlayerPrivate::supportsAcceleratedRendering): ditto

2010-02-23  Stephan Aßmus  <superstippi@gmx.de>

        Reviewed by Eric Seidel.

        Fix various issues in PlatformWheelEventHaiku.
        https://bugs.webkit.org/show_bug.cgi?id=34685

        Covered by existing tests.
        
        Fixed coding style violations.
        Synced extracting the correct coordinates with Haiku WebKit implementation.
        Added extracting modifier key flags.

        * platform/haiku/PlatformWheelEventHaiku.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):

2010-02-23  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Eric Seidel.

        Build fix for PluginView
        https://bugs.webkit.org/show_bug.cgi?id=35230

        No new tests, build fix only.

        * plugins/PluginView.cpp:
        * plugins/PluginView.h:
        * plugins/PluginViewNone.cpp:

2010-02-23  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Eric Seidel.

        [BREWMP] Port ScriptController::createScriptInstanceForWidget
        https://bugs.webkit.org/show_bug.cgi?id=34413

        * bindings/js/ScriptControllerBrew.cpp: Added.
        (WebCore::ScriptController::createScriptInstanceForWidget):

2010-02-23  José Millán Soto  <jmillan@igalia.com>

        Reviewed by Eric Seidel.

        [Gtk] Webkit crashes when using orca
        https://bugs.webkit.org/show_bug.cgi?id=35169

        Made webkit_accessible_text_get_caret_offset check if end selection
        node is null.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (webkit_accessible_text_get_caret_offset):

2010-02-22  Stephan Aßmus  <superstippi@gmx.de>

        Reviewed by Eric Seidel.

        [Haiku] Implemented PopupMenu support.
        https://bugs.webkit.org/show_bug.cgi?id=35078

        Covered by existing tests.

        The implementation is currently very simple: Added a PopupMenuHaiku
        class that derives from a native BPopUpMenu. It attaches a BHandler
        derivative to the BApplication (WebCore main thread) which receives
        the item invokation and menu hidden events and informs the PopupMenuClient
        accordingly.

        * platform/PopupMenu.h:
            Changed type of m_menu for Haiku.
        * platform/haiku/PopupMenuHaiku.cpp:
        (WebCore::PopupMenuHandler::PopupMenuHandler):
        (WebCore::PopupMenuHandler::MessageReceived):
        (WebCore::PopupMenuHaiku::PopupMenuHaiku):
        (WebCore::PopupMenuHaiku::~PopupMenuHaiku):
        (WebCore::PopupMenuHaiku::show):
        (WebCore::PopupMenuHaiku::hide):
        (WebCore::PopupMenuHaiku::Hide):
        (WebCore::PopupMenu::PopupMenu):
        (WebCore::PopupMenu::~PopupMenu):
            Removed bogus code.
        (WebCore::PopupMenu::show):
            Implemented using new PopupMenuHaiku class.
        (WebCore::PopupMenu::hide):
            Implemented using new PopupMenuHaiku class.
        (WebCore::PopupMenu::updateFromElement):
            Implemented.
        (WebCore::PopupMenu::itemWritingDirectionIsNatural):
            Implemented according to Gtk port.

2010-02-22  Stephan Aßmus  <superstippi@gmx.de>

        Reviewed by Eric Seidel.

        Fix various issues in PlatformMouseEventHaiku.
        https://bugs.webkit.org/show_bug.cgi?id=34685

        Covered by existing tests.
        
        Mapping Haiku button constants (bit field) to WebCore buttons was broken.
        Extracting event time was broken (supposed to be in seconds).
        Wrong coordinate was being extracted, needs to be content local.
        Added extracting modifier key flags.

        * platform/haiku/PlatformMouseEventHaiku.cpp:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):

2010-02-22  Stephan Aßmus  <superstippi@gmx.de>

        Reviewed by Eric Seidel.

        [Haiku] Implement creating and filling platform gradients.
        https://bugs.webkit.org/show_bug.cgi?id=34683

        Covered by existing tests.

        * platform/graphics/Gradient.h:
            Typedef PlatformGradient to BGradient
        * platform/graphics/haiku/GradientHaiku.cpp:
        (WebCore::Gradient::platformDestroy):
            Delete the cached BGradient object.
        (WebCore::Gradient::platformGradient):
            Create a BGradient object according to the type of Gradient.
            Return the cached object.
        (WebCore::Gradient::fill):
            use BView API to fill with the platform gradient.

2010-02-22  Stephan Aßmus  <superstippi@gmx.de>

        Reviewed by Eric Seidel.

        Build fix for debug builds of GlyphPageTreeNode.cpp
        https://bugs.webkit.org/show_bug.cgi?id=34528

        Covered by existing tests.

        * platform/graphics/GlyphPageTreeNode.cpp:
            include <stdio.h> since printf() is used if NDEBUG is not defined.

2010-02-22  Nate Chapin  <japhet@chromium.org>

        Unreviewed, Chromium build fix.

        Add special case in CodeGeneratorV8.pm for named getters for html plugin-related elements.

        CodeGeneratorV8.pm was relying on HasOverridingNameGetter to hint
        that a custom named getter was needed. That hint was removed in
        http://trac.webkit.org/changeset/55104.

        * bindings/scripts/CodeGeneratorV8.pm:

2010-02-22  Alexey Proskuryakov  <ap@apple.com>

        Rubber-stamped by Geoff Garen.

        Rename RuntimeObjectImp to RuntimeObject.

        * WebCore.PluginHostProcess.exp:
        * bindings/js/JSPluginElementFunctions.cpp:
        (WebCore::getRuntimeObject):
        (WebCore::runtimeObjectPropertyGetter):
        (WebCore::runtimeObjectCustomGetOwnPropertySlot):
        (WebCore::runtimeObjectCustomGetOwnPropertyDescriptor):
        (WebCore::runtimeObjectCustomPut):
        * bindings/objc/WebScriptObject.mm:
        (+[WebScriptObject _convertValueToObjcValue:originRootObject:rootObject:]):
        * bridge/c/c_utility.cpp:
        (JSC::Bindings::convertValueToNPVariant):
        * bridge/jni/jni_jsobject.mm:
        (JavaJSObject::convertValueToJObject):
        * bridge/jni/jsc/JNIUtilityPrivate.cpp:
        (JSC::Bindings::convertValueToJValue):
        * bridge/jsc/BridgeJSC.cpp:
        (JSC::Bindings::Instance::createRuntimeObject):
        (JSC::Bindings::Instance::newRuntimeObject):
        * bridge/jsc/BridgeJSC.h:
        * bridge/objc/objc_runtime.mm:
        (JSC::Bindings::callObjCFallbackObject):
        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtRuntimeObject::markChildren):
        (JSC::Bindings::):
        (JSC::Bindings::QtRuntimeObject::QtRuntimeObject):
        (JSC::Bindings::QtInstance::getInstance):
        (JSC::Bindings::QtInstance::newRuntimeObject):
        * bridge/qt/qt_instance.h:
        * bridge/qt/qt_pixmapruntime.cpp:
        (JSC::Bindings::QtPixmapRuntimeObject::QtPixmapRuntimeObject):
        (JSC::Bindings::):
        (JSC::Bindings::QtPixmapInstance::variantFromObject):
        (JSC::Bindings::QtPixmapInstance::createRuntimeObject):
        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::valueRealType):
        * bridge/runtime_method.cpp:
        (JSC::callRuntimeMethod):
        * bridge/runtime_object.cpp:
        (JSC::RuntimeObject::RuntimeObject):
        (JSC::RuntimeObject::~RuntimeObject):
        (JSC::RuntimeObject::invalidate):
        (JSC::RuntimeObject::fallbackObjectGetter):
        (JSC::RuntimeObject::fieldGetter):
        (JSC::RuntimeObject::methodGetter):
        (JSC::RuntimeObject::getOwnPropertySlot):
        (JSC::RuntimeObject::getOwnPropertyDescriptor):
        (JSC::RuntimeObject::put):
        (JSC::RuntimeObject::deleteProperty):
        (JSC::RuntimeObject::defaultValue):
        (JSC::callRuntimeObject):
        (JSC::RuntimeObject::getCallData):
        (JSC::callRuntimeConstructor):
        (JSC::RuntimeObject::getConstructData):
        (JSC::RuntimeObject::getOwnPropertyNames):
        (JSC::RuntimeObject::throwInvalidAccessError):
        * bridge/runtime_object.h:
        * bridge/runtime_root.cpp:
        (JSC::Bindings::RootObject::invalidate):
        (JSC::Bindings::RootObject::addRuntimeObject):
        (JSC::Bindings::RootObject::removeRuntimeObject):
        * bridge/runtime_root.h:

2010-02-19  Peter Kasting  <pkasting@google.com>

        Reviewed by Eric Seidel.

        Avoid recursion when trying to get the size of a PNG; it's unnecessary
        and in the worst case can lead to heap corruption.
        https://bugs.webkit.org/show_bug.cgi?id=35167

        Test: fast/images/bad-png.html

        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageReader::decode):

2010-02-22  Brady Eidson  <beidson@apple.com>

        Reviewed by Tim Hatcher.

        Disable WebView docking to views that are too small.
        <rdar://problem/7248409> and https://bugs.webkit.org/show_bug.cgi?id=35254

        * WebCore.base.exp:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::canAttachWindow): Provide a utility for WebKits to make a showWindow()
          decision based on if attachment would be allowed or not.
        (WebCore::InspectorController::attachWindow): Don't attach if the view is too small to attach to.
        * inspector/InspectorController.h:

2010-02-22  Alexey Proskuryakov  <ap@apple.com>

        Build fix.

        * WebCore.base.exp: Export Instance::newRuntimeObject, it's virtual!

2010-02-22  Alexey Proskuryakov  <ap@apple.com>

        Undo a small part of the previous commit.

        * bridge/runtime_method.cpp: (JSC::callRuntimeMethod): Let's keep the instance local
        variable as RefPtr for safety.

2010-02-22  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=35260
        Eliminate __apple_runtime_object

        No change in functionality, so no tests.

        * WebCore.base.exp: Don't export Instance::newRuntimeObject, WebKit doesn't need it.

        * bindings/js/JSHTMLAppletElementCustom.cpp:
        * bindings/js/JSHTMLEmbedElementCustom.cpp:
        * bindings/js/JSHTMLObjectElementCustom.cpp:
        * html/HTMLAppletElement.idl:
        * html/HTMLEmbedElement.idl:
        * html/HTMLObjectElement.idl:
        These objects no longer need overriding name getters, as they no longer intercept the
        __apple_runtime_object property.

        * bindings/js/JSPluginElementFunctions.cpp:
        (WebCore::pluginInstance): This is no longer static. It was used for callPlugin() in
        this file, and now it's also used elsewhere when calling plug-in methods.
        (WebCore::runtimeObjectGetter): Removed. This function was only used by the intercepting
        name getters.

        * bindings/js/JSPluginElementFunctions.h: Export pluginInstance().

        * bindings/objc/WebScriptObject.mm:
        (+[WebScriptObject _convertValueToObjcValue:originRootObject:rootObject:]):
        * bridge/runtime_method.cpp:
        (JSC::callRuntimeMethod):
        Take plug-in element's instance directly, without relying on fake attribute lookup.
        One change resulting from this is that RuntimeObjectImp may not be created in some cases -
        this code only needs an instance, but the old code had to pass the instance wrapped into
        RuntimeObjectImp.

2010-02-22  John Sullivan  <sullivan@apple.com>
        
        Reviewed by Tim Hatcher.

        https://bugs.webkit.org/show_bug.cgi?id=35256
        HTMLSelectElement::setSelectedIndexByUser() can trigger unnecessary JS when there is no change to the selected index

        No new tests because this code path is not used for JS-initiated changes.

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::setSelectedIndexByUser):
        Bail out if the to-be-selected index matches the already-selected index.

2010-02-22  Enrica Casucci  <enrica@apple.com>

        Reviewed by Dan Bernstein.

        Reproducible crash in WebCore::nextLinePosition on Tweeteorites.com
        <rdar://problem/7615758>
        https://bugs.webkit.org/show_bug.cgi?id=35060

        Test: editing/selection/extend-byline-withfloat.html

        * editing/visible_units.cpp:
        (WebCore::previousLinePosition): Skip elements with zero height.
        (WebCore::nextLinePosition): Skip elements with zero height.

2010-02-22  Nate Chapin  <japhet@chromium.org>

        Unreviewed, Chromium build fix.

        * bindings/scripts/CodeGeneratorV8.pm: Compile break due to bad patch merge.

2010-02-22  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Streamline V8 event listener code. Merge all the variants of
        V8DOMWrapper::getEventListner() into a single version and generate
        addEventListener() and removeEventListener() bindings for all objects 
        except DOMWindow.

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

        * Android.v8bindings.mk:
        * WebCore.gypi:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::getEventListener):
        * bindings/v8/V8DOMWrapper.h:
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        * bindings/v8/WorkerContextExecutionProxy.h:
        * bindings/v8/custom/V8AbstractWorkerCustom.cpp: Removed.
        * bindings/v8/custom/V8DOMApplicationCacheCustom.cpp: Removed.
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8DOMWindow::addEventListenerCallback):
        (WebCore::V8DOMWindow::removeEventListenerCallback):
        * bindings/v8/custom/V8EventSourceCustom.cpp: Removed.
        * bindings/v8/custom/V8MessagePortCustom.cpp:
        * bindings/v8/custom/V8NodeCustom.cpp:
        * bindings/v8/custom/V8NotificationCenterCustom.cpp:
        * bindings/v8/custom/V8SVGElementInstanceCustom.cpp: Removed.
        * bindings/v8/custom/V8WebSocketCustom.cpp:
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        * bindings/v8/custom/V8XMLHttpRequestUploadCustom.cpp:
        * dom/MessagePort.idl:
        * dom/Node.idl:
        * loader/appcache/DOMApplicationCache.idl:
        * notifications/Notification.idl:
        * page/EventSource.idl:
        * svg/SVGElementInstance.idl:
        * websockets/WebSocket.idl:
        * workers/AbstractWorker.idl:
        * workers/WorkerContext.idl:
        * xml/XMLHttpRequest.idl:
        * xml/XMLHttpRequestUpload.idl:

2010-02-22  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        AX: AXFocused is not writable like it should be on nodes
        https://bugs.webkit.org/show_bug.cgi?id=35186

        Test: platform/mac/accessibility/element-focus.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::canSetFocusAttribute):

2010-02-22  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein, Darin Adler.

        Remove addScrolledContentOffset/subtractScrolledContentOffset
        https://bugs.webkit.org/show_bug.cgi?id=35225

        Remove RenderLayer's addScrolledContentOffset() and subtractScrolledContentOffset()
        methods, and instead use the existing scrolledContentOffset(), and use
        IntSize and IntPoint instead of lots of x, y variables.
        
        Added new IntPoint toPoint(const IntSize&) method as a convenience to convert a size to a point,
        which is needed in a few places.
        
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleDrag): Use the new toPoint() convenience.
        * platform/graphics/IntPoint.h:
        (WebCore::toPoint): New convenience method to convert an IntSize to an IntPoint.
        * rendering/LayoutState.cpp:
        (WebCore::LayoutState::LayoutState):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::paintObject):
        (WebCore::RenderBlock::selectionGapRectsForRepaint):
        (WebCore::RenderBlock::nodeAtPoint):
        (WebCore::RenderBlock::offsetForContents):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::clippedOverflowRectForRepaint):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPosition):
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::size):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::computeRectForRepaint):
        * rendering/TextControlInnerElements.cpp:
        (WebCore::RenderTextControlInnerBlock::positionForPoint):

2009-02-22  Adam Langley  <agl@google.com>

        Reviewed by Darin Fisher.

        fontconfig on Linux can change the render preferences on a per strike
        basis (a strike a combination of face and size). Because of this, we
        need to query fontconfig each time a new FontPlatformData is created
        for a new size.

        This patch adds support for querying this via ChromiumBridge.

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

        * platform/chromium/ChromiumBridge.h: add getRenderStyleForStrike
        * platform/graphics/chromium/FontCacheLinux.cpp:
        (WebCore::FontCache::createFontPlatformData):
        * platform/graphics/chromium/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/chromium/FontPlatformDataLinux.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::operator=):
        (WebCore::FontPlatformData::setupPaint):
        (WebCore::FontPlatformData::queryStyle):
          add code to query fontconfig via ChromiumBridge
        * platform/graphics/chromium/FontPlatformDataLinux.h:

2010-02-22  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Build fix for make distcheck.

        * GNUmakefile.am:

2010-02-22  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Fix compiler warning "suggest parentheses around"
        https://bugs.webkit.org/show_bug.cgi?id=35197

        No new tests as there is no new functionality.

        * wml/WMLVariables.cpp:
        (WebCore::substituteVariableReferences):

2010-02-22  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Xan Lopez.

        [Soup] loses information related to message flags when converting from/to Resource{Request,Response}
        https://bugs.webkit.org/show_bug.cgi?id=35093

        Store message flags in WebCore objects, and set them on the
        SoupMessage, when creating one from them.

        No behaviour change.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::fillResponseFromMessage):
        * platform/network/soup/ResourceRequest.h:
        (WebCore::ResourceRequest::soupMessageFlags):
        (WebCore::ResourceRequest::setSoupMessageFlags):
        * platform/network/soup/ResourceRequestSoup.cpp:
        (WebCore::ResourceRequest::toSoupMessage):
        (WebCore::ResourceRequest::updateFromSoupMessage):
        * platform/network/soup/ResourceResponse.h:
        (WebCore::ResourceResponse::soupMessageFlags):
        (WebCore::ResourceResponse::setSoupMessageFlags):
        * platform/network/soup/ResourceResponseSoup.cpp:
        (WebCore::ResourceResponse::toSoupMessage):
        (WebCore::ResourceResponse::updateFromSoupMessage):

2010-02-22  Steve Block  <steveblock@google.com>

        Reviewed by Nate Chapin.

        Shared worker types used in globalObjectPrototypeIsDOMWindow are not properly guarded
        https://bugs.webkit.org/show_bug.cgi?id=35238

        No new tests, build fix only.

        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::globalObjectPrototypeIsDOMWindow):

2010-02-22  Steve Block  <steveblock@google.com>

        Reviewed by Simon Fraser.

        Simplifies calculation of the transform in RenderLayer::paintLayer
        https://bugs.webkit.org/show_bug.cgi?id=35101

        No new tests, optimization only.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayer):

2010-02-22  Nicholas Young  <nicholas.young@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Switching from Phonon to QtMultimedia Backend for Qt 4.7

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

        No new tests. This patch only affects multimedia backend.

        * WebCore.pro: Build depends on Qt version.
        * css/mediaControlsQt.css: Updated media controls.
        * platform/graphics/MediaPlayer.cpp: Different backend included depending on Qt version.
        * platform/graphics/qt/MediaPlayerPrivateQt.cpp: Added new QtMultimedia Backend.
        (WebCore::MediaPlayerPrivate::create):
        (WebCore::MediaPlayerPrivate::registerMediaEngine):
        (WebCore::MediaPlayerPrivate::getSupportedTypes):
        (WebCore::MediaPlayerPrivate::supportsType):
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::~MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::hasVideo):
        (WebCore::MediaPlayerPrivate::hasAudio):
        (WebCore::MediaPlayerPrivate::load):
        (WebCore::MediaPlayerPrivate::cancelLoad):
        (WebCore::MediaPlayerPrivate::play):
        (WebCore::MediaPlayerPrivate::pause):
        (WebCore::MediaPlayerPrivate::paused):
        (WebCore::MediaPlayerPrivate::seek):
        (WebCore::MediaPlayerPrivate::seeking):
        (WebCore::MediaPlayerPrivate::duration):
        (WebCore::MediaPlayerPrivate::currentTime):
        (WebCore::MediaPlayerPrivate::buffered):
        (WebCore::MediaPlayerPrivate::maxTimeSeekable):
        (WebCore::MediaPlayerPrivate::bytesLoaded):
        (WebCore::MediaPlayerPrivate::totalBytes):
        (WebCore::MediaPlayerPrivate::setRate):
        (WebCore::MediaPlayerPrivate::setVolume):
        (WebCore::MediaPlayerPrivate::supportsMuting):
        (WebCore::MediaPlayerPrivate::setMuted):
        (WebCore::MediaPlayerPrivate::networkState):
        (WebCore::MediaPlayerPrivate::readyState):
        (WebCore::MediaPlayerPrivate::setVisible):
        (WebCore::MediaPlayerPrivate::mediaStatusChanged):
        (WebCore::MediaPlayerPrivate::handleError):
        (WebCore::MediaPlayerPrivate::stateChanged):
        (WebCore::MediaPlayerPrivate::nativeSizeChanged):
        (WebCore::MediaPlayerPrivate::queuedSeekTimeout):
        (WebCore::MediaPlayerPrivate::seekTimeout):
        (WebCore::MediaPlayerPrivate::positionChanged):
        (WebCore::MediaPlayerPrivate::durationChanged):
        (WebCore::MediaPlayerPrivate::volumeChanged):
        (WebCore::MediaPlayerPrivate::mutedChanged):
        (WebCore::MediaPlayerPrivate::updateStates):
        (WebCore::MediaPlayerPrivate::setSize):
        (WebCore::MediaPlayerPrivate::naturalSize):
        (WebCore::MediaPlayerPrivate::paint):
        (WebCore::MediaPlayerPrivate::repaint):
        * platform/graphics/qt/MediaPlayerPrivateQt.h: Added new QtMultimedia Backend.
        (WebCore::MediaPlayerPrivate::isAvailable):
        (WebCore::MediaPlayerPrivate::supportsFullscreen):
        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::mediaControlsBaselineOpacity): New method.
        (WebCore::RenderThemeQt::paintMediaBackground): Background depends on baseline opacity.
        (WebCore::RenderThemeQt::paintMediaMuteButton): Changed styling.
        (WebCore::RenderThemeQt::paintMediaCurrentTime): Added current time display.
        (WebCore::RenderThemeQt::formatMediaControlsCurrentTime): Added time formatting.
        (WebCore::RenderThemeQt::formatMediaControlsRemainingTime): Added time formatting.
        (WebCore::RenderThemeQt::paintMediaVolumeSliderTrack): Volume slider added.
        (WebCore::RenderThemeQt::paintMediaVolumeSliderThumb): Volume slider added.
        (WebCore::RenderThemeQt::paintMediaSliderTrack): Updated for QtMultimedia.
        (WebCore::RenderThemeQt::paintMediaSliderThumb): Dropped an unnecessary check.
        (WebCore::RenderThemeQt::adjustSliderThumbSize): Handle a missing case.
        * platform/qt/RenderThemeQt.h: Reimplemented a few more methods.

2010-02-22  Alexander Pavlov  <apavlov@chromium.org>

        Not reviewed: mac build fix

        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::ScriptDebugServer):

2010-02-22  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: there should be a way to "deactivate" or "skip" all breakpoints while debugging.
        https://bugs.webkit.org/show_bug.cgi?id=33217

        * English.lproj/localizedStrings.js:
        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::ScriptDebugServer):
        (WebCore::ScriptDebugServer::hasBreakpoint):
        (WebCore::ScriptDebugServer::setBreakpointsActivated):
        * bindings/js/ScriptDebugServer.h:
        * bindings/v8/ScriptDebugServer.h:
        (WebCore::ScriptDebugServer::setBreakpointsActivated):
        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::activateBreakpoints):
        (WebCore::InspectorBackend::deactivateBreakpoints):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/front-end/Images/deactivateBreakpointsButtonGlyph.png: Added.
        * inspector/front-end/Images/deactivateBreakpointsDisabledButtonGlyph.png: Added.
        * inspector/front-end/InspectorBackendStub.js:
        (.WebInspector.InspectorBackendStub.prototype.activateBreakpoints):
        (.WebInspector.InspectorBackendStub.prototype.deactivateBreakpoints):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype.get breakpointsActivated):
        (WebInspector.ScriptsPanel.prototype.addBreakpoint):
        (WebInspector.ScriptsPanel.prototype._stepOutClicked):
        (WebInspector.ScriptsPanel.prototype._toggleBreakpointsClicked):
        * inspector/front-end/inspector.css:
        * inspector/front-end/textViewer.css:

2010-02-22  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Sam Weinig and Maciej Stachowiak.

        REGRESSION (r55039): Animation starts from near end when loaded over slow network
        <http://webkit.org/b/35222> / <rdar://problem/7673523>

        Roll out r55039 (related to <http://webkit.org/b/35115>) as it causes animated GIFs
        to skip intermediate frames when loading over a slower network.

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::startAnimation):

2010-02-22  Maciej Stachowiak  <mjs@apple.com>

        Not reviewed, build fix.
        
        Revert the previous change.
        
2010-02-21  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin Adler.

        Cache JavaScript wrappers inline in DOM nodes
        https://bugs.webkit.org/show_bug.cgi?id=35226
        <rdar://problem/7664202>

        8.8% speedup on Dromaeo DOM Core tests.
        3.3% speedup on Hixie DOM Core tests.
        
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::forgetDOMNode): Clear wrapper pointer.
        (WebCore::cacheDOMNodeWrapper): Cache inline too if caching for normal world.
        * bindings/js/JSDOMBinding.h:
        (WebCore::DOMObjectWrapperMapFor): 
        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::toJS): Remove unneeded argument from getCachedDOMNodeWrapper.
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::createWrapperInline): Renamed version of original createWrapper.
        (WebCore::createWrapper): Call createWrapperInline. Out-of-line version.
        (WebCore::toJSNewlyCreated): Call createWrapperInline instead of createWrapper.
        * bindings/js/JSNodeCustom.h: Added.
        (WebCore::getCachedDOMNodeWrapper): Moved here so it can be inlined.
        (WebCore::toJS): Moved here so it can be inlined.
        * bindings/js/ScriptWrappable.h:
        (WebCore::ScriptWrappable::ScriptWrappable): Implement this in the obvious
        way for JavaScriptCore.
        (WebCore::ScriptWrappable::wrapper):
        (WebCore::ScriptWrappable::setWrapper):
        (WebCore::ScriptWrappable::clearWrapper):
        * bindings/scripts/CodeGeneratorJS.pm: Include CustomHeader heaaders
        in the header, not just the impl file, so they can add inlining.
        * dom/Node.idl: Add CustomHeader directive.
        
        Add new files to build.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:

2010-02-22  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: windows build fix.

2010-02-21  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: stop on inline breakpoints on reload.
        - ScriptBreakpoint struct has been introduced and reused in InspectorController
          and debug server.
        - JavaScriptDebugServer was moved to bindings/js and renamed to ScriptDebugServer
          There were no changes to semantics, only some mechanical changes:
            - addBreakpoint and updateBreakpoint were merged into setBreakpoint
            - ScriptDebugServer now operates ScriptBreakpoint instances instead of
              BreakpointInfo.
            - It no longer allocates maps and breakpoint info in heap - all done on stack.
            - JavaScriptDebugListener is now ScriptDebugServer::Listener
            - Listener methods no longer have ExecState (was unused).
            - addListener/removeListener pair wuth no page argument removed (was unused).
        - InspectorController now binds sourceID to url and maintains a map of 'sticky'
          breakpoints. Whenever script is loaded and there is a sticky breakpoint url matching,
          breakpoint is being 'restored' synchronously in debug server and pushed to frontend.
          Front-end no longer stores map of sticky breakpoints.
            - setBreakpoint/removeBreakpoint/didParseSource trio handle this logic.
        - A bunch of if(USE_JSC/V8/other) forks removed.
        - InspectorFrontend now operates primitive types only, got rid of USE_JSC as well.

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

        * GNUmakefile.am:
        * WebCore.base.exp:
        * WebCore.gypi:
        * WebCore.order:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::JSInjectedScriptHost::currentCallFrame):
        (WebCore::JSInjectedScriptHost::isActivation):
        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::shared):
        (WebCore::ScriptDebugServer::ScriptDebugServer):
        (WebCore::ScriptDebugServer::~ScriptDebugServer):
        (WebCore::ScriptDebugServer::addListener):
        (WebCore::ScriptDebugServer::removeListener):
        (WebCore::ScriptDebugServer::pageCreated):
        (WebCore::ScriptDebugServer::hasListenersInterestedInPage):
        (WebCore::ScriptDebugServer::setBreakpoint):
        (WebCore::ScriptDebugServer::removeBreakpoint):
        (WebCore::ScriptDebugServer::hasBreakpoint):
        (WebCore::ScriptDebugServer::clearBreakpoints):
        (WebCore::ScriptDebugServer::setPauseOnExceptionsState):
        (WebCore::ScriptDebugServer::pauseProgram):
        (WebCore::ScriptDebugServer::continueProgram):
        (WebCore::ScriptDebugServer::stepIntoStatement):
        (WebCore::ScriptDebugServer::stepOverStatement):
        (WebCore::ScriptDebugServer::stepOutOfFunction):
        (WebCore::ScriptDebugServer::currentCallFrame):
        (WebCore::ScriptDebugServer::currentCallFrameState):
        (WebCore::ScriptDebugServer::dispatchDidParseSource):
        (WebCore::ScriptDebugServer::dispatchFailedToParseSource):
        (WebCore::toPage):
        (WebCore::ScriptDebugServer::detach):
        (WebCore::ScriptDebugServer::sourceParsed):
        (WebCore::ScriptDebugServer::dispatchFunctionToListeners):
        (WebCore::ScriptDebugServer::setJavaScriptPaused):
        (WebCore::ScriptDebugServer::pauseIfNeeded):
        (WebCore::ScriptDebugServer::callEvent):
        (WebCore::ScriptDebugServer::atStatement):
        (WebCore::ScriptDebugServer::returnEvent):
        (WebCore::ScriptDebugServer::exception):
        (WebCore::ScriptDebugServer::willExecuteProgram):
        (WebCore::ScriptDebugServer::didExecuteProgram):
        (WebCore::ScriptDebugServer::didReachBreakpoint):
        (WebCore::ScriptDebugServer::recompileAllJSFunctionsSoon):
        (WebCore::ScriptDebugServer::recompileAllJSFunctions):
        (WebCore::ScriptDebugServer::didAddListener):
        (WebCore::ScriptDebugServer::didRemoveListener):
        (WebCore::ScriptDebugServer::didRemoveLastListener):
        * bindings/js/ScriptDebugServer.h:
        (WebCore::ScriptDebugServer::Listener::~Listener):
        (WebCore::ScriptDebugServer::):
        (WebCore::ScriptDebugServer::pauseOnExceptionsState):
        (WebCore::ScriptDebugServer::hasListeners):
        (WebCore::ScriptDebugServer::hasGlobalListeners):
        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::shared):
        * bindings/v8/ScriptDebugServer.h:
        (WebCore::ScriptDebugServer::Listener::~Listener):
        (WebCore::ScriptDebugServer::addListener):
        (WebCore::ScriptDebugServer::removeListener):
        (WebCore::ScriptDebugServer::setBreakpoint):
        (WebCore::ScriptDebugServer::removeBreakpoint):
        (WebCore::ScriptDebugServer::clearBreakpoints):
        (WebCore::ScriptDebugServer::):
        (WebCore::ScriptDebugServer::pauseOnExceptionsState):
        (WebCore::ScriptDebugServer::setPauseOnExceptionsState):
        (WebCore::ScriptDebugServer::pauseProgram):
        (WebCore::ScriptDebugServer::continueProgram):
        (WebCore::ScriptDebugServer::stepIntoStatement):
        (WebCore::ScriptDebugServer::stepOverStatement):
        (WebCore::ScriptDebugServer::stepOutOfFunction):
        (WebCore::ScriptDebugServer::recompileAllJSFunctionsSoon):
        (WebCore::ScriptDebugServer::recompileAllJSFunctions):
        (WebCore::ScriptDebugServer::currentCallFrameState):
        (WebCore::ScriptDebugServer::pageCreated):
        (WebCore::ScriptDebugServer::ScriptDebugServer):
        (WebCore::ScriptDebugServer::~ScriptDebugServer):
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::V8InjectedScriptHost::currentCallFrameCallback):
        (WebCore::V8InjectedScriptHost::isActivationCallback):
        * inspector/InjectedScriptHost.cpp:
        * inspector/InjectedScriptHost.h:
        * inspector/InjectedScriptHost.idl:
        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::setBreakpoint):
        (WebCore::InspectorBackend::removeBreakpoint):
        (WebCore::InspectorBackend::pauseInDebugger):
        (WebCore::InspectorBackend::stepOverStatementInDebugger):
        (WebCore::InspectorBackend::stepIntoStatementInDebugger):
        (WebCore::InspectorBackend::stepOutOfFunctionInDebugger):
        (WebCore::InspectorBackend::pauseOnExceptionsState):
        (WebCore::InspectorBackend::setPauseOnExceptionsState):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/ScriptBreakpoint.h: Added.
        (WebCore::InspectorBreakpoint::InspectorBreakpoint):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::setWindowVisible):
        (WebCore::InspectorController::scriptObjectReady):
        (WebCore::InspectorController::close):
        (WebCore::InspectorController::didCommitLoad):
        (WebCore::InspectorController::addProfile):
        (WebCore::InspectorController::startUserInitiatedProfiling):
        (WebCore::InspectorController::stopUserInitiatedProfiling):
        (WebCore::InspectorController::enableProfiler):
        (WebCore::InspectorController::disableProfiler):
        (WebCore::InspectorController::enableDebuggerFromFrontend):
        (WebCore::InspectorController::disableDebugger):
        (WebCore::InspectorController::resumeDebugger):
        (WebCore::InspectorController::setBreakpoint):
        (WebCore::InspectorController::removeBreakpoint):
        (WebCore::InspectorController::didParseSource):
        (WebCore::InspectorController::failedToParseSource):
        (WebCore::InspectorController::didPause):
        * inspector/InspectorController.h:
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::parsedScriptSource):
        (WebCore::InspectorFrontend::restoredBreakpoint):
        (WebCore::InspectorFrontend::failedToParseScriptSource):
        (WebCore::InspectorFrontend::resumedScript):
        * inspector/InspectorFrontend.h:
        * inspector/JavaScriptDebugListener.h: Removed.
        * inspector/JavaScriptDebugServer.cpp: Removed.
        * inspector/JavaScriptDebugServer.h: Removed.
        * inspector/front-end/Breakpoint.js:
        (WebInspector.Breakpoint.prototype.set condition):
        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.BreakpointsSidebarPane.prototype.addBreakpoint):
        (WebInspector.BreakpointsSidebarPane.prototype._breakpointEnableChanged):
        * inspector/front-end/InspectorBackendStub.js:
        (.WebInspector.InspectorBackendStub.prototype.addBreakpoint):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.sourceFrameForResource):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype.addScript):
        (WebInspector.ScriptsPanel.prototype.addBreakpoint):
        (WebInspector.ScriptsPanel.prototype.removeBreakpoint):
        (WebInspector.ScriptsPanel.prototype._showScriptOrResource):
        * inspector/front-end/inspector.js:
        (WebInspector.restoredBreakpoint):
        * page/Page.cpp:
        (WebCore::Page::Page):
        * platform/android/TemporaryLinkStubs.cpp:

2010-02-21  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        Make the UChar owned/ref-counted by StringImpl::CrossThreadRefCounted be const.

        * platform/text/StringImpl.cpp:
        (WebCore::StringImpl::sharedBuffer):
        * platform/text/StringImpl.h:

2010-02-07  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by Eric Seidel.

        When page-break-{after,before} is set to always, force page breaks even for overflow-specified elements.
        RenderBlock::inRootBlockContext() was introduced by Changeset 5611. Although it is a reasonable criteria for choosing an optional page break location, it is not for a mandatory page break as specified by http://dev.w3.org/csswg/css3-page/#forced-pg-brk. The method is removed because it is not used anywhere else.
        Note: this patch makes page break work for overflow-specified elements. For tables and floated elements, more work is needed.
        https://bugs.webkit.org/show_bug.cgi?id=9526

        Test: printing/page-break-always-for-overflow.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintChildren):
        * rendering/RenderBlock.h:

2010-02-21  Julien Chaffraix  <jchaffraix@webkit.org>

        Reviewed by Eric Seidel.

        Remove auto_ptr usage in WebCore.
        https://bugs.webkit.org/show_bug.cgi?id=35157

        The changes consists of:

        - Changing auto_ptr arguments or return types to PassOwnPtr.

        - Replacing local auto_ptr by OwnPtr.

        - Removing now unneeded <memory> inclusion.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::addProperty):
        * loader/WorkerThreadableLoader.cpp:
        (WebCore::WorkerThreadableLoader::MainThreadBridge::mainThreadCreateLoader):
        (WebCore::workerContextDidReceiveResponse):
        (WebCore::workerContextDidReceiveData):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didReceiveData):
        (WebCore::workerContextDidReceiveAuthenticationCancellation):
        * loader/WorkerThreadableLoader.h:
        * loader/icon/IconLoader.cpp:
        (WebCore::IconLoader::create):
        * loader/icon/IconLoader.h:
        * platform/ContextMenu.cpp:
        (WebCore::separatorItem):
        * platform/CrossThreadCopier.h:
        (WebCore::):
        * platform/network/HTTPHeaderMap.cpp:
        (WebCore::HTTPHeaderMap::copyData):
        (WebCore::HTTPHeaderMap::adopt):
        * platform/network/HTTPHeaderMap.h:
        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::adopt):
        (WebCore::ResourceRequestBase::copyData):
        * platform/network/ResourceRequestBase.h:
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::adopt):
        (WebCore::ResourceResponseBase::copyData):
        * platform/network/ResourceResponseBase.h:
        * svg/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::removePendingResource):
        * svg/SVGDocumentExtensions.h:
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::insertedIntoDocument):
        * workers/GenericWorkerTask.h:
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThreadStartupData::create):

2010-02-21  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=22215
        Avoid calling absoluteClippedOverflowRect() so many times

        RenderLayer::updateLayerPositions() computes the clipped overflow rect
        and the outline bounds for repaint, and then calls repaintAfterLayoutIfNeeded()
        which can compute the same rects all over again. Avoid this by passing
        these two rects into repaintAfterLayoutIfNeeded() if known. This measurably
        reduces the time spent in updateLayerPositions() for some content.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositions):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::repaintAfterLayoutIfNeeded):
        * rendering/RenderObject.h:

2010-02-20  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Maciej Stachowiak.

        https://bugs.webkit.org/show_bug.cgi?id=35202
        <rdar://problem/4856597> Calling Java method which accepts Object always passes a null argument

        * bridge/jni/jsc/JNIUtilityPrivate.cpp: (JSC::Bindings::convertValueToJValue): Add cases for
        other JS types.

2010-02-20  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Darin Adler.

        Fix compiler warning "suggest parentheses around"
        https://bugs.webkit.org/show_bug.cgi?id=35197

        No new tests as there is no new functionality.

        * html/DateComponents.cpp:
        (WebCore::beforeGregorianStartDate):
        * plugins/PluginDatabase.cpp:
        (WebCore::PluginDatabase::findPlugin):

2010-02-20  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] ENABLE_3D_RENDERING should be optional
        https://bugs.webkit.org/show_bug.cgi?id=35100

        No new tests: this is a build fix.

        * WebCore.pri: ENABLE_3D_RENDERING is now a proper feature test

2010-02-20  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Maciej Stachowiak.

        https://bugs.webkit.org/show_bug.cgi?id=23742
        Applet methods can not return arrays to JS

        * bridge/jni/jsc/JNIBridgeJSC.cpp: (JavaArray::JavaArray): Don't accidentally zero out
        m_rootObject (that's how PassRefPtr works). Without m_rootObject, we crash quickly.

        * bridge/jni/jsc/JavaInstanceJSC.cpp: (JavaInstance::invokeMethod): Do handle returned arrays.
        Also, added an ifdef around  code that's only needed on Tiger, and removed a comment saying
        it can be removed when "new" plugin ships. I doubt that anyone can remember what "new"
        could refer to back then.

2010-02-20  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: re-creating view in ResourcesPanel confuses ScriptsPanel's visibleView logic.

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

        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.recreateViewForResourceIfNeeded):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.show):
        (WebInspector.ScriptsPanel.prototype.viewRecreated):

2010-02-20  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: need to highlight the evaluated expression used for popovers.

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

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._mouseMove):
        (WebInspector.SourceFrame.prototype._hidePopup):
        (WebInspector.SourceFrame.prototype._mouseHover):
        (WebInspector.SourceFrame.prototype._showPopup.showObjectPopup):
        (WebInspector.SourceFrame.prototype._showPopup):
        * inspector/front-end/inspector.css:

2010-02-20  Gustavo Noronha Silva  <gns@gnome.org>

        Roll out 55047 because it causes layout, and API tests to fail

2010-02-19  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        [Soup] loses information related to message flags when converting from/to Resource{Request,Response}
        https://bugs.webkit.org/show_bug.cgi?id=35093

        Refactor updating of ResourceResponse objects from soup message
        objects, to avoid code duplication.

        No behaviour change.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::fillResponseFromMessage):
        * platform/network/soup/ResourceResponseSoup.cpp:
        (WebCore::ResourceResponse::updateFromSoupMessage):

2010-02-20  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Maciej Stachowiak.

        https://bugs.webkit.org/show_bug.cgi?id=35190
        Don't use system malloc in Java bindings

        * bridge/jni/jsc/JavaInstanceJSC.cpp: (JavaInstance::invokeMethod): Switched to WTF::Vector.

2010-02-20  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Maciej Stachowiak.

        https://bugs.webkit.org/show_bug.cgi?id=9761
        LiveConnect string conversion fails for java.lang.Object

        Can't test Java in DRT (I wonder why).

        * bridge/jni/jsc/JNIUtilityPrivate.cpp: (JSC::Bindings::convertValueToJValue):
        Added the necessary conversion. Also, removed CONVERT_NULL_TO_EMPTY_STRING dead code.

2010-02-19  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by David Levin.

        Add an ENABLE flag for sandboxed iframes to make it possible to disable it in releases
        https://bugs.webkit.org/show_bug.cgi?id=35147

        I made ENABLE(SANDBOX) only control the sandbox attribute itself;
        I did not ifdef the infrastructure to make sandboxing
        switchable. This is because the likely concerns about sandboxing
        are not stability of the infrastructure code, but rather the fact
        that the security model exposed to authors is still evolving.

        * Configurations/FeatureDefines.xcconfig:
        * GNUmakefile.am:
        * WebCore.pri:
        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::parseMappedAttribute):

2010-02-19  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Maciej Stachowiak.

        https://bugs.webkit.org/show_bug.cgi?id=35132
        <rdar://problem/7664353> Mouse cursor sometimes flickers over Flash content (35132)

        * page/EventHandler.cpp: (WebCore::EventHandler::handleMouseMoveEvent): Don't set mouse
        pointer when above a plug-in or applet to prevent flicker.

2010-02-18  Peter Kasting  <pkasting@google.com>

        Reviewed by Adam Barth.

        Fix regression in calculating an animated image's start time.
        https://bugs.webkit.org/show_bug.cgi?id=35115

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::startAnimation):

2010-02-19  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Geoffrey Garen.

        https://bugs.webkit.org/show_bug.cgi?id=35178
        LiveConnect code uses hand-rolled fprintf logging

        Changed to use LOG, LOG_ERROR and ASSERT.

        * platform/Logging.cpp:
        (WebCore::getChannelFromName):
        * platform/Logging.h:
        * platform/mac/LoggingMac.mm:
        (WebCore::InitializeLoggingChannelsIfNecessary):
        * platform/win/LoggingWin.cpp:
        (WebCore::InitializeLoggingChannelsIfNecessary):
        TextConversion channel was (almost) unused, renamed to LiveConnect.

        * platform/text/gtk/TextCodecGtk.cpp: (WebCore::TextCodecGtk::registerEncodingNames):
        The only use of this channel was in platform specific code, commandeered it for cross-platform
        needs.

        * bridge/jni/JNIBridge.cpp:
        * bridge/jni/JNIUtility.cpp:
        (JSC::Bindings::getJavaVM):
        (JSC::Bindings::getJNIEnv):
        (JSC::Bindings::getJNIField):
        * bridge/jni/JNIUtility.h:
        (JSC::Bindings::callJNIMethodV):
        (JSC::Bindings::callJNIStaticMethod):
        * bridge/jni/jni_jsobject.mm:
        (completedJavaScriptAccess):
        (dispatchToJavaScriptThread):
        (performJavaScriptAccess):
        (JavaJSObject::invoke):
        (JavaJSObject::call):
        (JavaJSObject::eval):
        (JavaJSObject::getMember):
        (JavaJSObject::setMember):
        (JavaJSObject::removeMember):
        (JavaJSObject::getSlot):
        (JavaJSObject::setSlot):
        (JavaJSObject::toString):
        (JavaJSObject::createNative):
        * bridge/jni/jsc/JNIBridgeJSC.cpp:
        (JavaField::valueFromInstance):
        (JavaField::setValueToInstance):
        * bridge/jni/jsc/JavaClassJSC.cpp:
        (JavaClass::JavaClass):
        * bridge/jni/jsc/JavaInstanceJSC.cpp:
        (JavaInstance::invokeMethod):
        (JObjectWrapper::JObjectWrapper):
        (JObjectWrapper::~JObjectWrapper):

2010-02-19  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        RenderSVGResourceMasker causes an Assert on Wind builds during DRT
        https://bugs.webkit.org/show_bug.cgi?id=35182

        We remove the Assert for now and return earlier, if the HashMap of the Masker
        does not contain the RenderObject. The RenderObject is an identifiert to get
        a already calculated mask.
        A race condition during parsing can cause the invalidation call, before the mask
        got calculated (only during DRT on Win build bots).
        The real bug will be fixed with: https://bugs.webkit.org/show_bug.cgi?id=35181

        * rendering/RenderSVGResourceMasker.cpp:
        (WebCore::RenderSVGResourceMasker::invalidateClient):

2010-02-18  Peter Kasting  <pkasting@google.com>

        Reviewed by Darin Fisher.

        Make Pasteboard::writeImage() safe against NULL cachedImages, and clean
        up some code.
        https://bugs.webkit.org/show_bug.cgi?id=35136

        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::updateRenderer): Shorten some code.
        * page/DragController.cpp:
        (WebCore::getImage): Shorten some code.
        * platform/chromium/PasteboardChromium.cpp:
        (WebCore::Pasteboard::writeImage): NULL-check cachedImage().
        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::Pasteboard::writeImage): NULL-check cachedImage().
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::writeImage): NULL-check cachedImage().
        * platform/qt/PasteboardQt.cpp:
        (WebCore::Pasteboard::writeImage): NULL-check cachedImage().
        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::writeImage): NULL-check cachedImage().

2010-02-19  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Rubberstamped by Noam Rosenthal, who wrote the original code.

        Make mouse wheel scrolling work when using the GraphicsLayer.

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::GraphicsLayerQtImpl::GraphicsLayerQtImpl):

2010-02-19  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Fix Worker crash regression in r54972

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

        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::instantiateV8Object): Properly unwrap global objects when inside a WorkerContext.

2010-02-19  Steve Block  <steveblock@google.com>

        Not reviewed. Reverts r55020 which causes crashes in Chromium LayoutTests

        * bindings/generic/RuntimeEnabledFeatures.cpp:
        * storage/Database.cpp:

2010-02-19  Steve Block  <steveblock@google.com>

        Reviewed by David Levin.

        Sets default values of V8 runtime enabler flags to match behavior with JSC
        https://bugs.webkit.org/show_bug.cgi?id=35095

        No new tests, modifies a Chromium feature only.

        * bindings/generic/RuntimeEnabledFeatures.cpp: Modified. Sets appcache and geolocation flag defaults to 'on'
        * storage/Database.cpp: Modified. Sets database flag default to 'on'.

2010-02-19  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        WebInspector: Elements panel: Correctly show empty elements' ending tags
        for XML and HTML documents.
        https://bugs.webkit.org/show_bug.cgi?id=26315

        Test: inspector/elements-panel-xhtml-structure.xhtml

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::populateScriptObjects):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeOutline.prototype.set rootDOMNode):
        (WebInspector.ElementsTreeOutline.prototype.get isXMLMimeType):
        (WebInspector.ElementsTreeOutline.prototype._contextMenuEventFired):
        (WebInspector.ElementsTreeElement.prototype.onexpand):
        (WebInspector.ElementsTreeElement.prototype.oncollapse):
        (WebInspector.ElementsTreeElement.prototype.updateTitle.callback):
        (WebInspector.ElementsTreeElement.prototype.updateTitle):
        (WebInspector.ElementsTreeElement.prototype._nodeTitleInfo):

2010-02-19  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed. Chromium build fix: reverting r54997 and r54998.

        * bindings/v8/custom/V8LocationCustom.cpp:
        (WebCore::V8Location::protocolAccessorSetter):
        * platform/KURLGoogle.cpp:
        (WebCore::KURL::setProtocol):
        (WebCore::KURL::isHierarchical):

2010-02-17  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Eric Seidel.

        [GTK] RTP/RTSP streams playback support
        https://bugs.webkit.org/show_bug.cgi?id=33662

        Added live pipelines support in updateStates().

        * manual-tests/video-rtsp.html: Added.
        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::seek):
        (WebCore::MediaPlayerPrivate::updateStates):

2010-02-18  Yaar Schnitman  <yaar@chromium.org>

        Reviewed by Darin Adler.

        Normalize custom ctors for Image, Option, Audio
        https://bugs.webkit.org/show_bug.cgi?id=34782

        Test: fast/js/custom-constructors.html

        * bindings/js/JSAudioConstructor.cpp:
        (WebCore::JSAudioConstructor::JSAudioConstructor):
        (WebCore::constructAudio):
        * bindings/js/JSImageConstructor.cpp:
        (WebCore::constructImage):
        * bindings/js/JSOptionConstructor.cpp:
        (WebCore::constructHTMLOptionElement):
        * bindings/v8/custom/V8HTMLAudioElementConstructor.cpp:
        (WebCore::v8HTMLAudioElementConstructorCallback):
        * bindings/v8/custom/V8HTMLImageElementConstructor.cpp:
        (WebCore::v8HTMLImageElementConstructorCallback):
        * bindings/v8/custom/V8HTMLOptionElementConstructor.cpp:
        (WebCore::v8HTMLOptionElementConstructorCallback):
        * html/HTMLAudioElement.cpp:
        (WebCore::HTMLAudioElement::HTMLAudioElement):
        (WebCore::HTMLAudioElement::createForJSConstructor):
        * html/HTMLAudioElement.h:
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::createForJSConstructor):
        (WebCore::HTMLImageElement::mapToEntry):
        (WebCore::HTMLImageElement::createRenderer):
        (WebCore::HTMLImageElement::attach):
        (WebCore::HTMLImageElement::width):
        (WebCore::HTMLImageElement::height):
        (WebCore::HTMLImageElement::naturalHeight):
        * html/HTMLImageElement.h:
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::HTMLOptionElement):
        (WebCore::HTMLOptionElement::createForJSConstructor):
        (WebCore::HTMLOptionElement::ownerSelectElement):
        (WebCore::HTMLOptionElement::nonRendererRenderStyle):
        (WebCore::HTMLOptionElement::disabled):
        (WebCore::HTMLOptionElement::insertedIntoTree):
        * html/HTMLOptionElement.h:

2010-02-18  Simon Fraser  <simon.fraser@apple.com>

        No Review.

        Remove a couple of extraneous spaces that got added to the project file
        by hand-ending.

        * WebCore.xcodeproj/project.pbxproj:

2010-02-18  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/7535894> Page contents missing from snapshot on Newsweek.com article
        
        Add logic to determine when painting via the software rendering path will give an equivalent
        result to the accelerated compositing presentation. This tests for the presence of 3D transforms
        via the existing RenderLayerCompositor::has3DContent() method.
        
        * WebCore.base.exp: Export FrameView's isSoftwareRenderable(), paintBehavior() and setPaintBehavior().
        * page/FrameView.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::isSoftwareRenderable): New method.
        (WebCore::FrameView::paintBehavior): Make this non-inline so that we can reliably export it.

2010-02-18  Dan Bernstein  <mitz@apple.com>

        Reviewed by John Sullivan.

        <rdar://problem/7658811> Multiple style recalcs due to getComputedStyle() on “display: none;” element
        when there are pending style sheets

        Test: fast/css/getComputedStyle/pending-stylesheet.html

        When querying a property of a computed style declaration for a non-rendered element,
        CSSStyleSelector::styleForElement() was called, and if there were pending style sheet, it
        would behave as if the lack of renderer is due to FOUC suppression, and set a flag on
        the document causing it to recalculate style. On the next computed style property access,
        style would be recalculated for the document, but then the flag would get set again if the
        element did not have a renderer.

        * dom/Document.cpp:
        (WebCore::Document::styleForElementIgnoringPendingStylesheets): Added. Temporarily sets
        m_ignorePendingStylesheets around the call to CSSStyleSelector::styleForElement().
        * dom/Document.h:
        * dom/Element.cpp:
        (WebCore::Element::computedStyle): Use Document::styleForElementIgnoringPendingStylesheets().

2010-02-18  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        Move SVGResources to Renderers, starting with Masker
        https://bugs.webkit.org/show_bug.cgi?id=35020

        We have rendering specific code in WebCore/svg/graphics. The goal is to move
        this code into suitable Renderers. This helps us to clean up the code and makes
        maintenance easier. It also makes it possible to remove rendering specific code
        from SVG*Elements into this renderers. So the Renderer contains everything that
        is needed to use the resource.
        RenderSVGResource will be the base class for all new resource render classes like
        RenderSVGResourceMasker, RenderSVGResourceClipper and the other resources.

        This patch starts moving SVGResourceMasker to RenderSVGResourceMasker.
        Another benefit is the much more useful result in DRT on using masker.

        * Android.mk:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::toRenderSVGResource): Conversion to RenderSVGResource base class.
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isSVGResource): Check if renderer is a resource.
        * rendering/RenderPath.cpp:
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::destroy): Renderer gets destroyed, unregister it from it's resources.
        * rendering/RenderSVGImage.h: Some code clean up according to the webkit style.
        (WebCore::RenderSVGImage::toSVGRenderBase):
        (WebCore::RenderSVGImage::renderName):
        (WebCore::RenderSVGImage::isSVGImage):
        (WebCore::RenderSVGImage::localToParentTransform):
        (WebCore::RenderSVGImage::strokeBoundingBox):
        (WebCore::RenderSVGImage::requiresLayer):
        (WebCore::RenderSVGImage::localTransform):
        * rendering/RenderSVGInlineText.h:
        (WebCore::RenderSVGInlineText::objectBoundingBox): Needed for SVGRenderTreeAsText
        * rendering/RenderSVGModelObject.cpp:
        (WebCore::RenderSVGModelObject::destroy): Renderer gets destroyed, unregister it from it's resources.
        * rendering/RenderSVGModelObject.h:
        * rendering/RenderSVGResource.h: Added.
        (WebCore::): Base class for all Resource renderers like masker, clipper and others.
        (WebCore::RenderSVGResource::RenderSVGResource):
        (WebCore::RenderSVGResource::cast):
        (WebCore::RenderSVGResource::toRenderSVGResource):
        (WebCore::RenderSVGResource::isSVGResource): 
        (WebCore::RenderSVGResource::drawsContents):
        (WebCore::getRenderSVGResourceById):
        * rendering/RenderSVGResourceMasker.cpp: Added.
        (WebCore::RenderSVGResourceMasker::RenderSVGResourceMasker):
        (WebCore::RenderSVGResourceMasker::~RenderSVGResourceMasker):
        (WebCore::RenderSVGResourceMasker::invalidateClients): Status of masker changed, remove all clients.
        (WebCore::RenderSVGResourceMasker::invalidateClient): Status of an object changed, remove pending client.
        (WebCore::RenderSVGResourceMasker::applyResource): Apply masker to object.
        (WebCore::RenderSVGResourceMasker::resourceBoundingBox): boundingBox of the resource, depending on the object.
        (WebCore::RenderSVGResourceMasker::createMaskImage): Creates the mask image, the context gets clipped with.
        * rendering/RenderSVGResourceMasker.h: Added.
        (WebCore::MaskerData::MaskerData):
        (WebCore::RenderSVGResourceMasker::renderName):
        (WebCore::RenderSVGResourceMasker::maskUnits): Unit of mask for DRT.
        (WebCore::RenderSVGResourceMasker::maskContentUnits): Unit of childs from mask for DRT.
        (WebCore::RenderSVGResourceMasker::resourceType):
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::destroy): Renderer gets destroyed, unregister it from it's resources.
        * rendering/RenderSVGRoot.h:
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::destroy): dito.
        * rendering/RenderSVGText.h:
        * rendering/RenderTreeAsText.cpp:
        (WebCore::write):
        * rendering/SVGRenderSupport.cpp:
        (WebCore::SVGRenderBase::prepareToRenderSVGContent):
        (WebCore::SVGRenderBase::maskerBoundingBoxForRenderer):
        (WebCore::SVGRenderBase::deregisterFromResources): Unregister object from all it's resources after status changed.
        * rendering/SVGRenderSupport.h:
        (WebCore::SVGRenderBase::toSVGRenderBase):
        (WebCore::SVGRenderBase::strokeBoundingBox):
        (WebCore::SVGRenderBase::markerBoundingBox):
        * rendering/SVGRenderTreeAsText.cpp: Update TreeAsText to dump maskers correctly.
        (WebCore::operator<<):
        (WebCore::writeSVGResource):
        (WebCore::writeSVGContainer):
        (WebCore::writeSVGText):
        (WebCore::writeSVGInlineText):
        (WebCore::writeSVGImage):
        (WebCore::write):
        (WebCore::writeResourcesToObject):
        * rendering/SVGRenderTreeAsText.h:
        * svg/SVGMaskElement.cpp: Update Masker to use the new renderer.
        (WebCore::SVGMaskElement::svgAttributeChanged):
        (WebCore::SVGMaskElement::childrenChanged):
        (WebCore::SVGMaskElement::maskBoundingBox):
        (WebCore::SVGMaskElement::createRenderer):
        * svg/SVGMaskElement.h:
        * svg/SVGStyledElement.cpp: We need to tell the renderer to unregister object, after the status changed.
        (WebCore::SVGStyledElement::invalidateResources):
        (WebCore::SVGStyledElement::invalidateResourcesInAncestorChain):
        * svg/SVGUnitTypes.h: Conversion of integer to SVGUnitType.
        (WebCore::toUnitType):
        * svg/graphics/SVGResource.h:
        (WebCore::):
        (WebCore::SVGResource::isMarker):
        * svg/graphics/SVGResourceMasker.cpp: Removed.
        * svg/graphics/SVGResourceMasker.h: Removed.

2010-02-18  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Dimitri Glazkov.

        Allow creating/dropping virtual tables when the module is FTS2.

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

        * storage/DatabaseAuthorizer.cpp:
        (WebCore::DatabaseAuthorizer::createVTable):
        (WebCore::DatabaseAuthorizer::dropVTable):

2010-02-18  Peter Kasting  <pkasting@google.com>

        Not reviewed, Chromium build fix.

        r54963 had a typo in the WebCore.gypi change.
        https://bugs.webkit.org/show_bug.cgi?id=35003

        * WebCore.gypi:

2010-02-18  Vangelis Kokkevis  <vangelis@chromium.org>

        Reviewed by Simon Fraser.

        Changing forward declaration of TimingFunction in GraphicsLayer.h from
        class to struct to match its actual definition in TimingFunction.h

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


        * platform/graphics/GraphicsLayer.h:
           Change forward declaration from: class TimingFunction to:
           struct TimingFunction

2010-02-18  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Minor improvement to hybrid QPixmap
        https://bugs.webkit.org/show_bug.cgi?id=34507
        Instead of having toHTMLImageElement which creates a new element,
        assignToHTMLImageElement would set an existing HTML <img/> element to
        contain the native QPixmap/QImge.
        Also made some style fixes.

        Additions to existing tests: see WebKit/qt/tests

        * bridge/qt/qt_pixmapruntime.cpp:
        (JSC::Bindings::QtPixmapWidthField::valueFromInstance): style
        (JSC::Bindings::QtPixmapHeightField::valueFromInstance): style
        (JSC::Bindings::QtPixmapAssignToElementMethod::name): assignTo
        (JSC::Bindings::QtPixmapAssignToElementMethod::invoke): new function
        (JSC::Bindings::QtPixmapAssignToElementMethod::numParameters): 1
        (JSC::Bindings::QtPixmapToDataUrlMethod::invoke): style
        (JSC::Bindings::QtPixmapToStringMethod::invoke): style
        (JSC::Bindings::QtPixmapInstance::invokeMethod): style
        (JSC::Bindings::QtPixmapClass::methodsNamed): new func, removed old
        (JSC::Bindings::QtPixmapInstance::getPropertyNames): ditto
        (JSC::Bindings::QtPixmapInstance::defaultValue): style
        (JSC::Bindings::QtPixmapInstance::valueOf): style
        (JSC::Bindings::QtPixmapInstance::toPixmap): style
        (JSC::Bindings::QtPixmapInstance::variantFromObject): style

2010-02-18  Peter Kasting  <pkasting@google.com>

        Not reviewed, bustage fix.

        An extraneous line in r54839 broke GIF animation.

        * platform/image-decoders/gif/GIFImageReader.cpp:
        (GIFImageReader::read):

2010-02-18  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/7650652> REGRESSION: Selection painting issue in bug review textbox
        https://bugs.webkit.org/show_bug.cgi?id=34946

        Test: fast/repaint/selection-gap-overflow-scroll-2.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintSelection): localToContainerQuad() adjusts for
        overflow scroll, but RenderLayer::addBlockSelectionGapsBounds() takes
        non-scrolled coordinates, so account for that.

2010-02-17  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Darin Adler.

        Change the V8 and JSC SQLStatementErrorCallback to interpret
        'undefined' return values as 'true', as required by the spec.

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

        * bindings/js/JSCustomSQLStatementErrorCallback.cpp:
        (WebCore::JSCustomSQLStatementErrorCallback::handleEvent):
        * bindings/v8/custom/V8CustomSQLStatementErrorCallback.cpp:
        (WebCore::V8CustomSQLStatementErrorCallback::handleEvent):
        * bindings/v8/custom/V8CustomVoidCallback.cpp:
        (WebCore::invokeCallbackHelper):
        (WebCore::invokeCallback):
        (WebCore::invokeCallbackTreatUndefinedAsTrue):
        * bindings/v8/custom/V8CustomVoidCallback.h:

2010-02-17  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Adam Barth.

        keyboard selection sometimes moves the wrong end of the selection for Win/Linux
        https://bugs.webkit.org/show_bug.cgi?id=35066

        On Windows/Linux keyboard based selections should always move the same
        end of the seleciton. On Mac, lineboundary and documentboundary changes
        move different ends of the selection depending on which direction your
        extending.

        Test: editing/selection/extend-after-mouse-selection.html

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::positionForPlatform):
        (WebCore::SelectionController::startForPlatform):
        (WebCore::SelectionController::endForPlatform):
        (WebCore::SelectionController::modifyExtendingRight):
        (WebCore::SelectionController::modifyExtendingForward):
        (WebCore::SelectionController::modifyMovingForward):
        (WebCore::SelectionController::modifyExtendingBackward):
        (WebCore::SelectionController::modifyMovingBackward):
        * editing/SelectionController.h:

2010-02-18  Timothy Hatcher  <timothy@apple.com>

        Add "with" to the list of keywords to syntax highlight.

        http://webkit.org/b/35123

        Reviewed by Pavel Feldman.

        * inspector/front-end/SourceJavaScriptTokenizer.js:
        (WebInspector.SourceJavaScriptTokenizer): Add "width" to _keywords.
        * inspector/front-end/SourceJavaScriptTokenizer.re2js:
        (WebInspector.SourceJavaScriptTokenizer): Ditto.

2010-02-17  Peter Kasting  <pkasting@google.com>

        Reviewed by Adam Barth.

        Rework PNG-in-ICO decoding to copy the decoded framebuffer into the ICO
        decoder, making the logic less crazy and more like the other decoders.
        https://bugs.webkit.org/show_bug.cgi?id=28751

        * platform/image-decoders/ImageDecoder.cpp:
        (WebCore::RGBA32Buffer::operator=):
        * platform/image-decoders/ImageDecoder.h:
        (WebCore::RGBA32Buffer::RGBA32Buffer):
        * platform/image-decoders/ico/ICOImageDecoder.cpp:
        (WebCore::ICOImageDecoder::frameBufferAtIndex):
        (WebCore::ICOImageDecoder::decodeAtIndex):
        * platform/image-decoders/ico/ICOImageDecoder.h:
        * platform/image-decoders/qt/RGBA32BufferQt.cpp:
        (WebCore::RGBA32Buffer::operator=):
        * platform/image-decoders/skia/ImageDecoderSkia.cpp:
        (WebCore::RGBA32Buffer::operator=):

2010-02-18  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: multiple popovers on screen at the same time.

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

        * inspector/front-end/Popover.js:
        (WebInspector.Popover.prototype.show):
        (WebInspector.Popover.prototype.hide):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._showPopup):

2010-02-18  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Expand Object.__proto__ properly.

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

        * inspector/front-end/EventListenersSidebarPane.js:
        * inspector/front-end/InjectedScript.js:
        (injectedScriptConstructor):
        * inspector/front-end/ObjectProxy.js:
        (WebInspector.ObjectProxy):
        * inspector/front-end/PropertiesSidebarPane.js:
        (WebInspector.PropertiesSidebarPane.prototype.update.callback):
        * inspector/front-end/inspector.js:
        (WebInspector.log.logMessage):
        (WebInspector.log):

2010-02-18  Nate Chapin  <japhet@chromium.org>

        Reviewed by Adam Barth.

        [V8] Merge the DOMWindow and WorkerContext object wrapping code paths,
        and use a faster method of disambiguating between the types of contexts.

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

        * bindings/scripts/CodeGeneratorV8.pm: Remove logic determining whether we need to
            handle the WorkerContext case.
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::globalObjectPrototypeIsDOMWindow):
        (WebCore::V8DOMWrapper::instantiateV8Object): Merge instantiateV8Object paths.
        * bindings/v8/V8DOMWrapper.h:

2010-02-12  Brett Wilson  <brettw@chromium.org>

        Reviewed by Adam Barth.

        Update the Google-URL version of KURL and the V8 bindings to the new
        behavior of KURL.IsStandard.

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

        This is covered by fast/dom/Window/invalid-protocol.html

        * bindings/v8/custom/V8LocationCustom.cpp:
        (WebCore::V8Location::protocolAccessorSetter):
        * platform/KURLGoogle.cpp:
        (WebCore::KURL::setProtocol):
        (WebCore::KURL::isHierarchical):

2010-02-18  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Remove some duplication between PluginView and Widget methods, and
        move the setSelfVisible calls to the parent class.

        * platform/gtk/WidgetGtk.cpp:
        (WebCore::Widget::show):
        (WebCore::Widget::hide):
        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::setFocus):
        (WebCore::PluginView::show):
        (WebCore::PluginView::hide):

2010-02-18  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/7655195> Switch Leopard back to using CGShading to avoid CGGradient leaks

        Define USE_CG_SHADING on for Tiger and Leopard, and use it to toggle the methods
        used for Core Graphics gradient drawing.

        * platform/graphics/Gradient.h:
        * platform/graphics/cg/GradientCG.cpp:
        (WebCore::Gradient::platformDestroy):
        (WebCore::Gradient::paint):

2010-02-18  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: on-hover evaluation renders nodes and arrays as strings.

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

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._showPopup.showObjectPopup):

2010-02-18  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        Particularly constructed WebFrames can try to access a null HistoryItem
        <rdar://problem/7638892> and https://bugs.webkit.org/show_bug.cgi?id=35063

        Test: fast/loader/api-test-new-window-data-load-base-url.html

        * loader/HistoryController.cpp:
        (WebCore::HistoryController::updateBackForwardListForFragmentScroll): We have a known case where a fragment scroll
          might take place with a null m_currentItem. updateBackForwardListClippedAtTarget() will either move m_currentItem 
          to m_previousItem then create a new m_currentItem...  or it will do nothing. So we either have both an m_currentItem 
          and m_previousItem, or we have neither.  In the case where we have no m_previousItem, return early.

2010-02-18  Nate Chapin  <japhet@chromium.org>

        Reviewed by Eric Seidel.

        [V8] Correctly handle the case where the event field on the
        global object is a v8::Object, but not a DOM wrapper.

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

        Test: fast/dom/Window/window-event-override-no-crash.html

        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::processingUserGesture):
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::isValidDOMObject):
        (WebCore::V8DOMWrapper::isWrapperOfType):
        * bindings/v8/V8DOMWrapper.h:

2010-02-18  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed, Qt build fix.

        * inspector/front-end/WebKit.qrc:

2010-02-18  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Implement evaluate-on-hover for scripts panel.

        https://bugs.webkit.org/show_bug.cgi?id=35003
 
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/Images/gearButtonGlyph.png: Added.
        * inspector/front-end/Images/popoverArrows.png: Added.
        * inspector/front-end/Images/popoverBackground.png: Added.
        * inspector/front-end/Images/thumbActiveHoriz.png: Added.
        * inspector/front-end/Images/thumbActiveVert.png: Added.
        * inspector/front-end/Images/thumbHoriz.png: Added.
        * inspector/front-end/Images/thumbHoverHoriz.png: Added.
        * inspector/front-end/Images/thumbHoverVert.png: Added.
        * inspector/front-end/Images/thumbVert.png: Added.
        * inspector/front-end/Images/trackHoriz.png: Added.
        * inspector/front-end/Images/trackVert.png: Added.
        * inspector/front-end/Popup.js:
        (WebInspector.Popup):
        (WebInspector.Popup.prototype.show):
        (WebInspector.Popup.prototype.hide):
        (WebInspector.Popup.prototype._positionElement):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._createViewerIfNeeded):
        (WebInspector.SourceFrame.prototype._scroll):
        (WebInspector.SourceFrame.prototype._mouseDown):
        (WebInspector.SourceFrame.prototype._mouseUp):
        (WebInspector.SourceFrame.prototype._mouseMove):
        (WebInspector.SourceFrame.prototype._mouseOut):
        (WebInspector.SourceFrame.prototype._resetHoverTimer):
        (WebInspector.SourceFrame.prototype._hidePopup):
        (WebInspector.SourceFrame.prototype._mouseHover):
        (WebInspector.SourceFrame.prototype._showPopup.showTextPopup):
        (WebInspector.SourceFrame.prototype._showPopup.showObjectPopup):
        (WebInspector.SourceFrame.prototype._showPopup.evaluateCallback):
        (WebInspector.SourceFrame.prototype._showPopup):
        (WebInspector.HoverPropertiesSection):
        (WebInspector.HoverPropertiesSection.prototype.update):
        * inspector/front-end/TextEditorHighlighter.js:
        (WebInspector.TextEditorHighlighter):
        (WebInspector.TextEditorHighlighter.prototype._lex):
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer.prototype._paintLine):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.css:
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspectorSyntaxHighlight.css:
        * inspector/front-end/popover.css: Added.

2010-02-18  Ben Murdoch  <benm@google.com>

        Reviewed by Jeremy Orlow.

        [v8] Complete upstreaming of V8 Touch Event bindings
        https://bugs.webkit.org/show_bug.cgi?id=35094

        No new tests required.

        * bindings/v8/V8Index.cpp: Add generated touch event headers.

2010-02-18  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        Updates Android V8 build to use DerivedSourcesAllInOne.cpp
        https://bugs.webkit.org/show_bug.cgi?id=35083

        No new tests, build fix only.

        * Android.derived.v8bindings.mk:
        * Android.v8bindings.mk:

2010-02-18  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        fast/frames/iframe-reparenting.html crashing on GTK Debug bots
        https://bugs.webkit.org/show_bug.cgi?id=35081

        Check that the client is alive after every call to it, since any
        of them could cause the load to be cancelled, and the client to go
        away.

        This is much better than protecting a specific subclass of
        ResourceHandleClient (ResourceLoader), which makes us fail when
        any other client is used.

        Test: fast/frames/iframe-reparenting.html

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::parseDataUrl):

2010-02-18  Ben Murdoch  <benm@google.com>

        Reviewed by Nate Chapin.

        [v8] [Android] V8 bindings for touch events are missing.
        https://bugs.webkit.org/show_bug.cgi?id=33795

        No new tests as this just enables touch events in V8. Existing touch tests suffice.

        * WebCore.gypi: Add Touch idl files.
        * bindings/scripts/CodeGeneratorV8.pm: Add TouchList to typeCanFailConversion map.
        * bindings/v8/DOMObjectsInclude.h: Add touch headers.
        * bindings/v8/DerivedSourcesAllInOne.cpp: Add touch generated bindings.
        * bindings/v8/V8Index.h: Add touch DOM object types.
        * bindings/v8/custom/V8EventCustom.cpp: Add conversion of event to touch event.
        * Android.derived.jscbindings.mk: Add the touch derived sources to the makefile.
        * Android.derived.v8bindings.mk: Add the touch derived sources to the makefile.

2010-02-18  William Chan  <willchan@chromium.org>

        Reviewed by Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=35071
        Disable loader limiting of requests per host for the chromium port.

        No tests because we're only changing a constant.

        * platform/network/chromium/ResourceRequest.cpp:
        (WebCore::initializeMaximumHTTPConnectionCountPerHost):

2010-02-18  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Eric Seidel.

        [Linux] Webkit incompatible with Java plugins
        https://bugs.webkit.org/show_bug.cgi?id=24912

        The NP Version supported by WebKit is at the moment hardcoded in
        PluginPackage.cpp (to 24), but not all backends actually implement
        the methods needed to claim this. Introduce a new method to be
        implemented by each backend where the maximum supported version
        can be specified, and set the GTK+ port NPVersion to 19. This
        fixes an instantaneous crasher in the Sun Java NPAPI plugin.

        * plugins/PluginPackage.cpp:
        (WebCore::PluginPackage::initializeBrowserFuncs):
        * plugins/PluginPackage.h:
        * plugins/gtk/PluginPackageGtk.cpp:
        (WebCore::PluginPackage::NPVersion):
        * plugins/mac/PluginPackageMac.cpp:
        (WebCore::PluginPackage::NPVersion):
        * plugins/qt/PluginPackageQt.cpp:
        (WebCore::PluginPackage::NPVersion):
        * plugins/symbian/PluginPackageSymbian.cpp:
        (WebCore::PluginPackage::NPVersion):
        * plugins/win/PluginPackageWin.cpp:
        (WebCore::PluginPackage::NPVersion):

2010-02-17  Dmitry Titov  <dimich@chromium.org>

        Reviewed by David Levin, Darin Fisher, Simon Hausmann.

        When a live iframe element is moved between pages, it still depends on the old page.
        https://bugs.webkit.org/show_bug.cgi?id=34382

        Test: fast/frames/iframe-reparenting-new-page.html

        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::setName):
        Move the code setting the frame name into a separate function.

        (WebCore::HTMLFrameElementBase::setNameAndOpenURL):
        (WebCore::HTMLFrameElementBase::updateOnReparenting):
        Called on the frame that was just re-parented and inserted into another Document.
        Simply invoke Frame::transferChildFrameToNewDocument(...);

        (WebCore::HTMLFrameElementBase::insertedIntoDocument):
        * html/HTMLFrameElementBase.h:
        * html/HTMLFrameOwnerElement.h:
        (WebCore::HTMLFrameOwnerElement::setName):
        Make this a virtual function, to be able to reach it via Frame::m_ownerElement.

        * loader/EmptyClients.h:
        (WebCore::EmptyFrameLoaderClient::adoptFrame):
        * loader/FrameLoaderClient.h:
        Add a new method, didTransferChildFrameToNewDocument().
        It compliments createFrame() in that a frame which was re-parented
        in DOM and potentially changes Page, should notify the WebKit
        implementation about potential ownership change.
        Many embedders assume that Page owns all the Frames, or at least
        all Frames are destroyed before 'their' Page is destroyed. Obviously, if Frame
        can be transferred to another Page, the embedders should be notified.

        * page/Frame.cpp:
        (WebCore::Frame::transferChildFrameToNewDocument):
        Added, makes actual adjustments for Frame - resets the Page,
        updates the frame tree and frame name, calls to FrameLoaderClient
        to update external objects and recurses into children.
        Can only be used on child frames.

        * page/Frame.h:

2010-02-17  Tony Chang  <tony@chromium.org>

        Reviewed by Eric Seidel.

        Copying and pasting into a contenteditable area can create <div>s surrounded by <span>s
        https://bugs.webkit.org/show_bug.cgi?id=26937

        This happens because of a span added when we copy that is used to
        preserve styles.  To avoid this, when we paste, make sure to apply
        the styles to the span's children and then remove the style span.

        This change is covered by existing layout tests.

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::handleStyleSpans):
        (WebCore::ReplaceSelectionCommand::copyStyleToChildren):
        * editing/ReplaceSelectionCommand.h:

2010-02-17  Tony Chang  <tony@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=34914
        When pasting absolute font sizes into a content editable area with
        page zoom, adjust the font sizes to be the same after page zoom is
        applied.

        Test: editing/pasteboard/page-zoom.html

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::negateStyleRulesThatAffectAppearance):

2010-02-17  Tony Chang  <tony@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=34737
        Copying styled list items then pasting into a list
        should work the same as copying unstyle list items:
        it shouldn't indent an extra level, but styles should
        be copied.

        Small cleanups to insertAsListItems to make variable names
        more descriptive.

        Test: editing/pasteboard/paste-list-003.html

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply):
        (WebCore::ReplaceSelectionCommand::insertAsListItems):

2010-02-17  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Eric Seidel.

        [BREWMP] Port PlatformKeyboardEvent
        https://bugs.webkit.org/show_bug.cgi?id=34794

        Retrieve the type, key code, text and modifiers from BREW's keyboard event.

        * platform/PlatformKeyboardEvent.h:
        * platform/brew/PlatformKeyboardEventBrew.cpp: Added.
        (WebCore::keyIdentifierForBrewKeyCode):
        (WebCore::windowsKeyCodeForKeyEvent):
        (WebCore::singleCharacterString):
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        (WebCore::PlatformKeyboardEvent::disambiguateKeyDownEvent):
        (WebCore::PlatformKeyboardEvent::currentCapsLockState):

2010-02-17  Hayato Ito  <hayato@chromium.org>

        Reviewed by Eric Seidel.

        Support CSS page-break-inside with a value of 'avoid'.

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

        Test: printing/page-break-inside.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintChildren):

2010-02-17  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Alexey Proskuryakov.

        WebSocket bufferedAmount should not be 0 when send after close.
        https://bugs.webkit.org/show_bug.cgi?id=34633

        Fixed bug in webkit r54694.  check m_client after it calls user
        callback, because user callback may call close(), which would
        call onclose event handler.
        
        Test: websocket/tests/bufferedAmount-after-close.html

        * websockets/ThreadableWebSocketChannelClientWrapper.h:
        (WebCore::ThreadableWebSocketChannelClientWrapper::didClose):
        * websockets/WebSocket.cpp:
        (WebCore::WebSocket::WebSocket):
        (WebCore::WebSocket::send):
        (WebCore::WebSocket::close):
        (WebCore::WebSocket::bufferedAmount):
        (WebCore::WebSocket::didConnect):
        (WebCore::WebSocket::didClose):
        * websockets/WebSocket.h:
        * websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::WebSocketChannel):
        (WebCore::WebSocketChannel::send):
        (WebCore::WebSocketChannel::bufferedAmount):
        (WebCore::WebSocketChannel::didClose):
        (WebCore::WebSocketChannel::didReceiveData):
        * websockets/WebSocketChannel.h:
        * websockets/WebSocketChannelClient.h:
        (WebCore::WebSocketChannelClient::didClose):
        * websockets/WorkerThreadableWebSocketChannel.cpp:
        (WebCore::workerContextDidClose):
        (WebCore::WorkerThreadableWebSocketChannel::Peer::didClose):
        * websockets/WorkerThreadableWebSocketChannel.h:

2010-02-17  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by Eric Seidel.

        In diffing render styles, consider all pseudo style changes.
        Without this patch, only :before and :after are considered. This is the cause of the following bug.
        https://bugs.webkit.org/show_bug.cgi?id=32187

        Test: fast/css/first-letter-first-line-hover.html

        * dom/Node.cpp:
        (WebCore::Node::diff):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::hasAnyPublicPseudoStyles):
        * rendering/style/RenderStyle.h:
        * rendering/style/RenderStyleConstants.h:
        (WebCore::):

2010-02-17  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Eric Seidel.

        [BREWMP] Add WebCore::prefetchDNS
        https://bugs.webkit.org/show_bug.cgi?id=34873

        DNS prefetching is not implemented because the maximum number
        of UDP sockets is quite small in most BREW devices.

        * platform/network/brew/DNSBrew.cpp: Added.
        (WebCore::prefetchDNS):

2010-02-17  Kent Tamura  <tkent@chromium.org>

        Reviewed by Eric Seidel.

        Introduces new Icon loading interface in order to support
        asynchronous loading.
        https://bugs.webkit.org/show_bug.cgi?id=32054

        It's hard for Chromium port to load an icon inside
        Icon::createIconForFiles() because of sanbox and multi-process
        architecture. So this change adds a method to request an icon to
        Chrome class, and makes FileChooser receives an Icon instance
        asynchronously.  Synchronous loading also works with the new interface.

        Because all ports don't have implementations of Chrome::iconForFiles()
        yet, FileChooser tries to load an Icon synchronously with
        Icon::createIconForFiles(), then tries to load an Icon asynchronously
        with Chrome::iconForFiles() if Icon::createIconForFiles() returns 0.

        The existing Icon::createIconForFiles() implementations should be
        moved to Chrome::iconForFiles(). We're going to remove
        Icon::createIconForFiles().

        * loader/EmptyClients.h:
        (WebCore::EmptyChromeClient::iconForFiles): Add an empty implementation.
        * page/Chrome.cpp:
        (WebCore::Chrome::iconForFiles): Delegate to ChromeClient::iconForFiles().
        * page/Chrome.h:
        * page/ChromeClient.h:
        (WebCore::ChromeClient::iconForFiles): Add a declaration as a pure virtual method.
        * platform/FileChooser.cpp:
        (WebCore::FileChooser::FileChooser): Use loadIcon().
        (WebCore::FileChooser::chooseFiles): ditto.
        (WebCore::FileChooser::loadIcon): Added.
        (WebCore::FileChooser::iconLoaded): Added.
        * platform/FileChooser.h: Add two methods to FileChooserClient; repaint() and iconForFiles().
        * platform/graphics/Icon.h: Add a FIXME comment.
        * platform/graphics/gtk/IconGtk.cpp: ditto.
        * platform/graphics/mac/IconMac.mm: ditto.
        * platform/graphics/qt/IconQt.cpp: ditto.
        * platform/graphics/win/IconWin.cpp: ditto.
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::iconForFiles): Delegate to Chrome::iconForFiles().
        (WebCore::RenderFileUploadControl::click): Use chrome().
        (WebCore::RenderFileUploadControl::chrome):
        * rendering/RenderFileUploadControl.h:
        (WebCore::RenderFileUploadControl::repaint):

2010-02-17  Mark Rowe  <mrowe@apple.com>

        Reviewed by Darin Adler.

        Bug 35065: Delay between page loading and animated GIF playing
        <http://webkit.org/b/35065> / <rdar://problem/7109548>

        BitmapImage::startAnimation was adding the current frame duration to the desired start time
        of the frame for every time it was called.  If the function then bailed out due to not having
        sufficient data to render the frame, this would lead to the desired start time of the frame
        being pushed out multiple times.  On an animated GIF that took mulitple seconds to load this
        could happen many times for a single frame, resulting in the start time of the second frame
        of the animation being pushed out by as much as five seconds.

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::startAnimation): Change the order of the code slightly so that the
        desired start time is only updated after determining that we have sufficient data to handle
        the next frame.

2010-02-17  Stephan Aßmus  <superstippi@gmx.de>

        Reviewed by Eric Seidel.

        Implemented homeDirectoryPath() and listDirectory() on the Haiku platform.
        https://bugs.webkit.org/show_bug.cgi?id=34687

        Covered by existing tests.

        * platform/haiku/FileSystemHaiku.cpp:
        (WebCore::homeDirectoryPath): Implemented
        (WebCore::listDirectory): Implemented

2010-02-17  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Eric Seidel.

        [BREWMP] Port userIdleTime
        https://bugs.webkit.org/show_bug.cgi?id=34259

        Return an arbitrarily high userIdleTime so that releasing pages from the page
        cache isn't postponed.

        * platform/brew/SystemTimeBrew.cpp: Added.
        (WebCore::userIdleTime):

2010-02-17  Dirk Schulze  <krit@webkit.org>

        Rolling out r54909. Breaks SL and Win.

2010-02-17  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Dimitri Glazkov.

        Fix Chromium's bindings for Database.transaction(): a 'null'
        callback should be treated as no callback.

        Test: storage/null-callbacks.html

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

        * bindings/v8/custom/V8DatabaseCustom.cpp:
        (WebCore::createTransaction):

2010-02-17  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        Move SVGResources to Renderers, starting with Masker
        https://bugs.webkit.org/show_bug.cgi?id=35020

        We have rendering specific code in WebCore/svg/graphics. The goal is to move
        this code into suitable Renderers. This helps us to clean up the code and makes
        maintenance easier. It also makes it possible to remove rendering specific code
        from SVG*Elements into this renderers. So the Renderer contains everything that
        is needed to use the resource.
        RenderSVGResource will be the base class for all new resource render classes like
        RenderSVGResourceMasker, RenderSVGResourceClipper and the other resources.

        This patch starts moving SVGResourceMasker to RenderSVGResourceMasker.
        Another benefit is the much more useful result in DRT on using masker.

        * Android.mk:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::toRenderSVGResource): Conversion to RenderSVGResource base class.
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isSVGResource): Check if renderer is a resource.
        * rendering/RenderPath.cpp:
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::destroy): Renderer gets destroyed, unregister it from it's resources.
        * rendering/RenderSVGImage.h: Some code clean up according to the webkit style.
        (WebCore::RenderSVGImage::toSVGRenderBase):
        (WebCore::RenderSVGImage::renderName):
        (WebCore::RenderSVGImage::isSVGImage):
        (WebCore::RenderSVGImage::localToParentTransform):
        (WebCore::RenderSVGImage::strokeBoundingBox):
        (WebCore::RenderSVGImage::requiresLayer):
        (WebCore::RenderSVGImage::localTransform):
        * rendering/RenderSVGInlineText.h:
        (WebCore::RenderSVGInlineText::objectBoundingBox): Needed for SVGRenderTreeAsText
        * rendering/RenderSVGModelObject.cpp:
        (WebCore::RenderSVGModelObject::destroy): Renderer gets destroyed, unregister it from it's resources.
        * rendering/RenderSVGModelObject.h:
        * rendering/RenderSVGResource.h: Added.
        (WebCore::): Base class for all Resource renderers like masker, clipper and others.
        (WebCore::RenderSVGResource::RenderSVGResource):
        (WebCore::RenderSVGResource::cast):
        (WebCore::RenderSVGResource::toRenderSVGResource):
        (WebCore::RenderSVGResource::isSVGResource): 
        (WebCore::RenderSVGResource::drawsContents):
        (WebCore::getRenderSVGResourceById):
        * rendering/RenderSVGResourceMasker.cpp: Added.
        (WebCore::RenderSVGResourceMasker::RenderSVGResourceMasker):
        (WebCore::RenderSVGResourceMasker::~RenderSVGResourceMasker):
        (WebCore::RenderSVGResourceMasker::invalidateClients): Status of masker changed, remove all clients.
        (WebCore::RenderSVGResourceMasker::invalidateClient): Status of an object changed, remove pending client.
        (WebCore::RenderSVGResourceMasker::applyResource): Apply masker to object.
        (WebCore::RenderSVGResourceMasker::resourceBoundingBox): boundingBox of the resource, depending on the object.
        (WebCore::RenderSVGResourceMasker::createMaskImage): Creates the mask image, the context gets clipped with.
        * rendering/RenderSVGResourceMasker.h: Added.
        (WebCore::MaskerData::MaskerData):
        (WebCore::RenderSVGResourceMasker::renderName):
        (WebCore::RenderSVGResourceMasker::maskUnits): Unit of mask for DRT.
        (WebCore::RenderSVGResourceMasker::maskContentUnits): Unit of childs from mask for DRT.
        (WebCore::RenderSVGResourceMasker::resourceType):
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::destroy): Renderer gets destroyed, unregister it from it's resources.
        * rendering/RenderSVGRoot.h:
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::destroy): dito.
        * rendering/RenderSVGText.h:
        * rendering/RenderTreeAsText.cpp:
        (WebCore::write):
        * rendering/SVGRenderSupport.cpp:
        (WebCore::SVGRenderBase::prepareToRenderSVGContent):
        (WebCore::SVGRenderBase::maskerBoundingBoxForRenderer):
        (WebCore::SVGRenderBase::deregisterFromResources): Unregister object from all it's resources after status changed.
        * rendering/SVGRenderSupport.h:
        (WebCore::SVGRenderBase::toSVGRenderBase):
        (WebCore::SVGRenderBase::strokeBoundingBox):
        (WebCore::SVGRenderBase::markerBoundingBox):
        * rendering/SVGRenderTreeAsText.cpp: Update TreeAsText to dump maskers correctly.
        (WebCore::operator<<):
        (WebCore::writeSVGResource):
        (WebCore::writeSVGContainer):
        (WebCore::writeSVGText):
        (WebCore::writeSVGInlineText):
        (WebCore::writeSVGImage):
        (WebCore::write):
        (WebCore::writeResourcesToObject):
        * rendering/SVGRenderTreeAsText.h:
        * svg/SVGMaskElement.cpp: Update Masker to use the new renderer.
        (WebCore::SVGMaskElement::svgAttributeChanged):
        (WebCore::SVGMaskElement::childrenChanged):
        (WebCore::SVGMaskElement::maskBoundingBox):
        (WebCore::SVGMaskElement::createRenderer):
        * svg/SVGMaskElement.h:
        * svg/SVGStyledElement.cpp: We need to tell the renderer to unregister object, after the status changed.
        (WebCore::SVGStyledElement::invalidateResources):
        (WebCore::SVGStyledElement::invalidateResourcesInAncestorChain):
        * svg/SVGUnitTypes.h: Conversion of integer to SVGUnitType.
        (WebCore::toUnitType):
        * svg/graphics/SVGResource.h:
        (WebCore::):
        (WebCore::SVGResource::isMarker):
        * svg/graphics/SVGResourceMasker.cpp: Removed.
        * svg/graphics/SVGResourceMasker.h: Removed.

2010-02-17  Kenneth Russell  <kbr@google.com>

        Reviewed by Oliver Hunt.

        Refactor texImage2D and texSubImage2D taking Image to use common code
        https://bugs.webkit.org/show_bug.cgi?id=34458

        Merged the Safari and Chromium code which extracts the data from
        Image objects into common entry points on GraphicsContext3D. This
        immediately fixes the following three problems:
          - Chromium not implementing texSubImage2D taking Image.
          - Safari not obeying the flipY parameter to texImage2D or
            texSubImage2D taking Image.
          - Safari not obeying the premultipyAlpha parameter to texImage2D
            or texSubImage2D taking Image.
        Added new test verifying the behavior of texImage2D and
        texSubImage2D and the flipY parameter. The premultiplyAlpha
        parameter can not be tested yet as the implementation is not yet
        spec compliant. This will be fixed in a follow-on bug.

        Ran all WebGL demos in demo repository on Safari and Chromium;
        textures are now the right way up in both browsers, and
        transparent textures in Particles demo now look correct in Safari.

        Test: fast/canvas/webgl/tex-image-and-sub-image-2d-with-image.html

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/GraphicsContext3D.cpp: Added.
        (WebCore::GraphicsContext3D::extractImageData):
        (WebCore::GraphicsContext3D::processImageData):
        (WebCore::GraphicsContext3D::premultiplyAlpha):
        (WebCore::GraphicsContext3D::unmultiplyAlpha):
        * platform/graphics/GraphicsContext3D.h:
        (WebCore::GraphicsContext3D::):
        * platform/graphics/cg/GraphicsContext3DCG.cpp: Added.
        (WebCore::GraphicsContext3D::getImageData):
        * platform/graphics/mac/GraphicsContext3DMac.cpp:
        (WebCore::GraphicsContext3D::texImage2D):
        (WebCore::GraphicsContext3D::texSubImage2D):
        * platform/graphics/skia/GraphicsContext3DSkia.cpp: Added.
        (WebCore::GraphicsContext3D::getImageData):

2010-02-17  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Ariya Hidayat.

        [Qt] GraphicsLayer: support perspective and 3D transforms
        https://bugs.webkit.org/show_bug.cgi?id=34960

        New tests: http://webkit.org/blog-files/3d-transforms/perspective-by-example.html

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::GraphicsLayerQtImpl::updateTransform):
        (WebCore::GraphicsLayerQtImpl::setBaseTransform):
        (WebCore::GraphicsLayerQtImpl::computeTransform):
        (WebCore::GraphicsLayerQtImpl::flushChanges):
        (WebCore::TransformAnimationQt::~TransformAnimationQt):

2010-02-17  Peter Kasting  <pkasting@google.com>

        Unreviewed, build fix.

        Fix crashes due to an omitted line in r54839.

        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::decodingFailed):

2010-02-17  Alok Priyadarshi  <alokp@chromium.org>

        Reviewed by Ariya Hidayat.

        Bug 34900: Implement accelerated compositing for chromium.
        https://bugs.webkit.org/show_bug.cgi?id=34900

        Do not exclude files needed for accelerated compositing. In fact there is no need to exclude these files.
        These files are already guarded with WTF_USE_ACCELERATED_COMPOSITING flag.

        * WebCore.gyp/WebCore.gyp: Removed GraphicsLayer.cpp, RenderLayerBacking.cpp,
        and RenderLayerCompositor.cpp from excluded list.

2010-02-17  Jian Li  <jianli@chromium.org>

        Reviewed by Darin Fisher.

        [chromium] Remove the obsolete chromium interface for handling DownloadURL.
        https://bugs.webkit.org/show_bug.cgi?id=34982

        * platform/chromium/ChromiumDataObject.cpp:
        (WebCore::ChromiumDataObject::clear):
        (WebCore::ChromiumDataObject::hasData):
        (WebCore::ChromiumDataObject::ChromiumDataObject):
        * platform/chromium/ChromiumDataObject.h:
        * platform/chromium/ClipboardChromium.cpp:
        (WebCore::ClipboardChromium::setData):

2010-02-17  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/7645569> REGRESSION (r51324): Incorrect marker rects for blocks that span multiple columns

        * manual-tests/match-marker-rects.html: Added.
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintTextMatchMarker): Use the text renderer rather
        than its ancestor block for the local-to-absolute transformation.
        (WebCore::InlineTextBox::computeRectForReplacementMarker): Ditto.

2010-02-17 Gustavo Noronha Silva <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        Does not send an Accept header for subresources, causing some sites to break
        https://bugs.webkit.org/show_bug.cgi?id=33242

        Set */* as the Accept header when downloading resources
        that did not set an Accept header. This behaviour is similar to
        the one adopted by Chromium.

        Test: http/tests/misc/image-checks-for-accept.html

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::startHttp):

2010-02-17  Marcus Bulach  <bulach@chromium.org>

        Reviewed by Jeremy Orlow.

        Fixes initialization order of members for GeolocationServiceChromium.
        https://bugs.webkit.org/show_bug.cgi?id=35034

        * platform/chromium/GeolocationServiceChromium.cpp:

2010-02-17  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        [Linux] Webkit incompatible with Java plugins
        https://bugs.webkit.org/show_bug.cgi?id=24912

        Resolve symlinks before trying to load plugins as modules, since
        GModule won't do it.

        Based on original work by Gustavo Noronha.

        * plugins/gtk/PluginPackageGtk.cpp:
        (WebCore::PluginPackage::load):

2010-02-17  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        Protect the resource loader object from disappearing during
        parseDataUrl.

        Tested by testdownload API test.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::parseDataUrl):

2010-02-17  Marcus Bulach  <bulach@chromium.org>

        Reviewed by Jeremy Orlow.

        Implements GeolocationServices for Chromium.
        https://bugs.webkit.org/show_bug.cgi?id=32068

        This is part of implementing Geolocation framework for Chromium. Existing layout tests should pass.

        * WebCore.gypi:
        * page/Geolocation.h:
        * platform/GeolocationService.h:

2010-02-17  Steve Block  <steveblock@google.com>

        Reviewed by Ariya Hidayat.

        Adds missing platform and feature guards to V8 bindings
        https://bugs.webkit.org/show_bug.cgi?id=34987

        No new tests, build fix only.

        * bindings/v8/V8Proxy.cpp: Modified. Adds CHROMIUM guards and uses PlatformBridge in place of ChromiumBridge
        * bindings/v8/V8Proxy.h: Modified. Adds CHROMIUM guards and uses PlatformBridge in place of ChromiumBridge
        * bindings/v8/custom/V8DocumentCustom.cpp: Modified. Adds XPATH guards

2010-02-17  Steve Block  <steveblock@google.com>

        Reviewed by Ariya Hidayat.

        Include WebCore's npruntime.h for Android in V8 bindings
        https://bugs.webkit.org/show_bug.cgi?id=35002

        Currently, the V8 bindings include bindings/npruntime.h, which is a
        Chromium-specific file outside of the WebKit tree.

        No new tests, build fix only.

        * bindings/v8/NPV8Object.cpp:
        * bindings/v8/NPV8Object.h:
        * bindings/v8/V8NPObject.h:
        * bindings/v8/V8NPUtils.h:
        * bindings/v8/npruntime_impl.h:
        * bindings/v8/npruntime_priv.h:

2010-01-07  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GStreamer] Should handle BUFFERING messages
        https://bugs.webkit.org/show_bug.cgi?id=30004

        Initial support for on-disk buffering of videos. This works only
        for Quicktime and flv though.

        * css/mediaControlsGtk.css:
        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::paintMediaSliderTrack): Draw the
        buffering status in the media controls.
        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::mediaPlayerPrivateMessageCallback): Defer buffering
        messages handling to processBufferingStats().
        (WebCore::bufferingTimeoutCallback): Closure called periodically
        during the on-disk buffering process.
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate): New instance
        variables and create playbin2 here instead of doing it in load().
        (WebCore::MediaPlayerPrivate::~MediaPlayerPrivate): New instance
        variables.
        (WebCore::MediaPlayerPrivate::load): Simply set uri on playbin2
        instead of creating the pipeline and setting uri all together.
        (WebCore::MediaPlayerPrivate::processBufferingStats): Start a new
        timeout source if the player is starting on-disk buffering.
        (WebCore::MediaPlayerPrivate::queryBufferingStats): Method called
        200ms during on-disk buffering to update the maxTimeLoaded and few
        other private variables.
        (WebCore::MediaPlayerPrivate::maxTimeSeekable):
        (WebCore::MediaPlayerPrivate::maxTimeLoaded):
        (WebCore::MediaPlayerPrivate::bytesLoaded): Fixed implementations
        regarding buffering.
        (WebCore::MediaPlayerPrivate::totalBytes): Improved logging.
        (WebCore::MediaPlayerPrivate::updateStates): Start playback if it
        was internally paused at beginning of on-disk buffering and set
        ready/network states depending on the state of the on-disk
        buffering process.
        (WebCore::MediaPlayerPrivate::didEnd): Emit durationChanged.
        (WebCore::MediaPlayerPrivate::setAutobuffer): Edit playbin2 flags
        property depending on autoBuffer value.
        (WebCore::MediaPlayerPrivate::createGSTPlayBin): Don't set uri
        there, it is now done in load().
        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.h: New methods
        and instance variables.

2010-02-16  Chris Evans  <cevans@chromium.org>

        Reviewed by Adam Barth.

        Add a new setting which gives the option of assigning every file:///
        to its own unique domain.

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

        Test: Pending in forthcoming separate change due to non-trivial
        dependencies.

        * dom/Document.cpp:
        (WebCore::Document::initSecurityContext): Place file:/// URI documents
        into their own unique domains if the new setting requires it.
        * page/Settings.h:
        * page/Settings.cpp:
        (WebCore::Settings::setAllowFileAccessFromFileURLs): Simple setter.
        * page/SecurityOrigin.h:
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::makeUnique): Add simple ability to force an
        origin to be considered unique.

2010-02-16  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: drosera/demo.js not syntax highlighted correctly.

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

        * inspector/front-end/SourceTokenizer.js:
        (WebInspector.SourceTokenizer.Registry):
        (WebInspector.SourceTokenizer.Registry.prototype.getTokenizer):

2010-02-16  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: prefer smooth scrolling to instant highlight.

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

        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer):
        (WebInspector.TextViewer.prototype._scroll):
        (WebInspector.TextChunk):
        (WebInspector.TextChunk.prototype._createRow):
        * inspector/front-end/textViewer.css:

2010-02-16  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Nikolas Zimmermann.

        SVG not rendered as background-image from data URI
        https://bugs.webkit.org/show_bug.cgi?id=33630

        When the background image is an SVG image, and it is smaller than the area
        it is supposed to fill, we were using renderSubTreeToImage to draw it.
        That call was not going through all the drawing phases, and so the SVG itself
        would not be drawn.

        Test: svg/css/background-image-svg.html

        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::nativeImageForCurrentFrame):

2010-02-16  Bryan Yeung  <bryeung@chromium.org>

        Reviewed by Nikolas Zimmermann.

        Remove the bounds on stroke width and miter for the skia platform.
        https://bugs.webkit.org/show_bug.cgi?id=34954

        Test: svg/custom/stroke-width-large.svg

        * platform/graphics/skia/PlatformContextSkia.cpp:
        (PlatformContextSkia::setupPaintForStroking):

2010-02-16  MORITA Hajime  <morrita@gmail.com>

        Reviewed by Nikolas Zimmermann.

        REGRESSION: SVG text disappaears after double click
        https://bugs.webkit.org/show_bug.cgi?id=34880

        Tests: svg/text/selection-doubleclick.svg
               svg/text/selection-tripleclick.svg

        * rendering/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBoxPaintWalker::mayHaveSelection):
        Use InlineTextBox::selectionStartEnd() instead of
        RenderObject::selectionStartEnd() because latter may span multiple
        comparing startPos and endPos is irrelevant in some cases.
        former selectionStartEnd() is for single line and comparing
        startPos and endPos will make sense.

2010-02-16  Jessie Berlin  <jberlin@webkit.org>

        Reviewed by Timothy Hatcher.

        Inspector should display Array lengths in the property lists.
        https://bugs.webkit.org/show_bug.cgi?id=20695

        * inspector/front-end/InjectedScript.js:
        (injectedScriptConstructor):
        For objects of type 'array' (which includes Arrays, NodeLists, and HTMLCollections), make the length of the object available via propertyLength on the proxy object.
        * inspector/front-end/ObjectPropertiesSection.js:
        (WebInspector.ObjectPropertyTreeElement.prototype.update):
        For properties that have propertyLength defined, append it to the displayed description.

2010-02-16  Yusuke Sato  <yusukes@chromium.org>

        Reviewed by Dimitri Glazkov.

        [Chromium] OpenType font with CFF glyphs is not handled correctly on Windows XP
        https://bugs.webkit.org/show_bug.cgi?id=34735

        Use 0xFFFF as invalidGlyph when fontData is a OpenType font with CFF glyphs.
        
        Test: fast/css/font-face-opentype.html

        * platform/graphics/chromium/GlyphPageTreeNodeChromiumWin.cpp:
        (WebCore::fillBMPGlyphs):

2010-02-16  Darin Adler  <darin@apple.com>

        * page/MediaCanStartListener.h: Fixed license.

2010-02-16  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Generalize delayed plug-in start for background tabs for use for other media
        https://bugs.webkit.org/show_bug.cgi?id=34981

        Also did some simple cleanup of HTMLMediaElement to get ready to make it
        a client of the same mechanism.

        * WebCore.base.exp: Added Page::setCanStartMedia and resorted.
        * WebCore.xcodeproj/project.pbxproj: Added MediaCanStartListener.h.

        * html/HTMLAudioElement.h: Added an implementation of isVideo since that
        is now a pure virtual function in HTMLMediaElement. Also made tagPriority
        private.

        * html/HTMLMediaElement.h: Made it clearer that HTMLMediaElement is an
        abstract base class by making its constructor protected and making the
        isVideo function a pure virtual function.

        * page/Page.cpp:
        (WebCore::Page::Page): Updated for name change from m_canStartPlugins
        to m_canStartMedia.
        (WebCore::Page::addMediaCanStartListener): Renamed and added an assertion.
        (WebCore::Page::removeUnstartedMedia): Ditto.
        (WebCore::Page::setCanStartMedia): Renamed plugin to media and moved
        the code here from PageWin.cpp. The main change from the one in PageWin.cpp
        is that this function calls mediaCanStart rather than explicitly calling a
        combination of start and dispatchDidFailToStartPlugin on a PluginView.

        * page/Page.h: Re-sorted forward class declarations. Renamed the plugin
        starting functions to media starting names and changed types from
        PluginView to MediaCanStartListener.

        * page/MediaCanStartListener.h: Added.

        * page/win/PageWin.cpp: Moved setCanStartPlugins to the platform-independent
        Page.cpp file so it can be used for more than just Windows plug-ins.

        * plugins/PluginView.cpp: Sorted includes.
        (WebCore::PluginView::startOrAddToUnstartedList): Use addMediaCanStartListener.
        (WebCore::PluginView::mediaCanStart): Added. Called when the page decides that
        media can start. Contains the code that used to be in Page::setCanStartPlugins.
        (WebCore::PluginView::removeFromUnstartedListIfNecessary): Use
        removeMediaCanStartListener.

        * plugins/PluginView.h: Adopted MediaCanStartListener.

2010-02-16  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=34999
        Compositing layers inside overflow:scroll divs are not always updated on scrolling
        
        When RenderLayer::scrollToOffset() updates compositing layer positions, it needs
        to start updating at its stacking context rather than just its compositing ancestor.
        The stacking context is guaranteed to contain all descendants of the overflow
        layer, including those that are not direct descendants of the overflow layer in stacking
        (and therefore compositing) order.

        Test: compositing/overflow/scroll-ancestor-update.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollToOffset):

2010-02-16  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        Allow FloatRect::center() to return fractional coordinates. It was
        mistakenly converting to integers.

        * platform/graphics/FloatRect.h:
        (WebCore::FloatRect::center):

2010-02-16  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=34964
        Leaks tool reports false memory leaks due to Rope implementation.

        Renamed cUStringImpl::size() to UStringImpl::size()UStringImpl::length()
        (matches WebCore::StringImpl).

        * bridge/jni/jsc/JavaStringJSC.h:
        (JSC::Bindings::JavaStringImpl::length):
        * platform/text/AtomicString.cpp:
        (WebCore::AtomicString::add):
        (WebCore::AtomicString::find):

2010-02-15  Jon Honeycutt  <jhoneycutt@apple.com>

        <rdar://problem/7288853> Message about missing plugin does not specify
        the type or download link for download

        Reviewed by Mark Rowe.

        * plugins/PluginDatabase.cpp:
        (WebCore::PluginDatabase::findPlugin):
        Only update the mimeType out param if we find a plug-in for the file
        extension.

2010-02-16  Simon Fraser  <simon.fraser@apple.com>

        Build fix for Tiger.

        Add #if USE(ACCELERATED_COMPOSITING) around the call to mediaPlayerRenderingModeChanged().
        
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::setUpVideoRendering):

2010-02-16  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Eric Carlson.

        Buildfix for r54826.

        HTMLMediaElement class defined by HTMLMediaElement.h in #if ENABLE(VIDEO) block,
        it should be in #if ENABLE(VIDEO) block in rendering/RenderLayerBacking.cpp too.

        * rendering/RenderLayerBacking.cpp: Missing #if ENABLE(VIDEO) guard added.
        (WebCore::RenderLayerBacking::updateGraphicsLayerConfiguration):

2010-02-16  Julie Parent  <jparent@chromium.org>

        Unreviewed: Chromium build fix.

        http://trac.webkit.org/changeset/54823 introduced an unused variable.  Remove it.

        * platform/image-decoders/ImageDecoder.cpp:
        (WebCore::ImageDecoder::create):

2010-02-16  Mark Rowe  <mrowe@apple.com>

        Reviewed by Alexey Proskuryakov.

        Bug 34974: Leak of ScheduledAction during layout tests
        <https://bugs.webkit.org/show_bug.cgi?id=34974>

        ScheduledAction::create was returning a raw pointer which was threaded down through to an OwnPtr in DOMTimer.
        If any of the code paths in between hit an error case and returned early the raw pointer would be leaked.  We
        can avoid this by passing it as a PassOwnPtr.  This will ensure that the ScheduledAction is cleaned up should
        an error case be hit.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::setTimeout): Store the newly-created ScheduledAction in an OwnPtr and then hand it off
        as the function argument.
        (WebCore::JSDOMWindow::setInterval): Ditto.
        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::setTimeout): Ditto.
        (WebCore::JSWorkerContext::setInterval): Ditto.
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::create): Return a PassOwnPtr.
        * bindings/js/ScheduledAction.h:
        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::DOMTimer): Update argument type.
        (WebCore::DOMTimer::install): Ditto.
        * page/DOMTimer.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::setTimeout): Ditto.
        (WebCore::DOMWindow::setInterval): Ditto.
        * page/DOMWindow.h:

2010-02-16  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by David Hyatt.

        SVG units don't stay consistently sized on zoom
        https://bugs.webkit.org/show_bug.cgi?id=14004

        Large step towards making WebKit an usable SVG viewer.

        Make zooming into SVG documents work as expected, in both standalone and XHTML/SVG compound documents.
        SVG applies a global scale to the document, whereas CSS zooms all individual length units (on full-page-zoom).
        Scaling has to be avoided for all SVG specific CSS properties (already works) and for some selected CSS
        properties shared between CSS & SVG that explicitely need a different treatment in the context of SVG.
        To name a few: font-size, letter-spacing, etc. should stay invariant under zoom in SVG document fragments.

        Some new rules regarding zooming:
        - "Zoom text only" should never affect SVG documents, neither text nor content should zoom.
          This option doesn't make much sense for SVG, so it's wise to avoid side-effects and disable it.
          In compound documents the SVG would stay as-is and only text of surrounding XHTML content would zoom.

        - "Full page zoom" is the only zoom mode affecting SVG. (Panning only works in standalone documents.)

        Cover all mentioned cases above by a new set of layout tests.

        Tests: svg/zoom/page/absolute-sized-document-no-scrollbars.svg
               svg/zoom/page/absolute-sized-document-scrollbars.svg
               svg/zoom/page/relative-sized-document-scrollbars.svg
               svg/zoom/page/zoom-coords-viewattr-01-b.svg
               svg/zoom/page/zoom-foreignObject.svg
               svg/zoom/page/zoom-hixie-mixed-008.xml
               svg/zoom/page/zoom-hixie-mixed-009.xml
               svg/zoom/page/zoom-hixie-rendering-model-004.xhtml
               svg/zoom/page/zoom-svg-float-border-padding.xml
               svg/zoom/text/absolute-sized-document-no-scrollbars.svg
               svg/zoom/text/absolute-sized-document-scrollbars.svg
               svg/zoom/text/relative-sized-document-scrollbars.svg
               svg/zoom/text/zoom-coords-viewattr-01-b.svg
               svg/zoom/text/zoom-foreignObject.svg
               svg/zoom/text/zoom-hixie-mixed-008.xml
               svg/zoom/text/zoom-hixie-mixed-009.xml
               svg/zoom/text/zoom-hixie-rendering-model-004.xhtml
               svg/zoom/text/zoom-svg-float-border-padding.xml

        * css/CSSStyleSelector.cpp: Blacklist certain properties not to be zoomed for SVG elements.
        (WebCore::CSSStyleSelector::styleForDocument): Don't zoom font-sizes.
        (WebCore::CSSStyleSelector::applyProperty): Ditto (+ letter/word-spacing).
        (WebCore::CSSStyleSelector::setFontSize): Ditto.
        (WebCore::CSSStyleSelector::getComputedSizeFromSpecifiedSize): Never apply text zoom to SVG.
        * css/CSSStyleSelector.h:
        * css/SVGCSSStyleSelector.cpp: -webkit-shadow + SVG was incorrectly respecting zoom factor.
        (WebCore::CSSStyleSelector::applySVGProperty):
        * page/Frame.cpp:
        (WebCore::Frame::shouldApplyTextZoom): Remove SVG special cases.
        (WebCore::Frame::shouldApplyPageZoom): Ditto.
        (WebCore::Frame::setZoomFactor): Don't force setZoomsTextOnly() - SVG now uses FPZ as well.
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::calcReplacedWidth): CSSPropertyWidth is explicitely not scaled by CSSStyleSelector, fix that for outermost <svg> elements.
        (WebCore::RenderSVGRoot::calcReplacedHeight): Ditto for CSSPropertyHeight.
        (WebCore::RenderSVGRoot::layout): Simplify & cleanup code, take advantage of new calcWidth/Height functionality, no need to scale anything here.
        (WebCore::RenderSVGRoot::paint): Use parentOriginToBorderBox() instead of duplicating code.
        (WebCore::RenderSVGRoot::calcViewport): Simplify code.
        (WebCore::RenderSVGRoot::localToBorderBoxTransform): Calculate viewBoxToViewTransformation() against unscaled width()/height() values.
        * rendering/RenderSVGRoot.h:
        * svg/SVGLength.cpp:
        (WebCore::SVGLength::PercentageOfViewport): Cleanup & document function.
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::currentScale): Return pageZoomFactor(), not just the zoomFactor() - as we want to ignore text-only zoom.
        (WebCore::SVGSVGElement::setCurrentScale): Pass isTextOnly=false to setZoomFactor().

2010-02-16  Julie Parent  <jparent@chromium.org>

        Unreviewed: Chromium build fix.

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

        Move include of JavaScriptProfile.h behind if (USE_JSC).

        * inspector/InspectorController.cpp:

2010-02-16  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Geoffrey Garen and Kevin Decker.

        https://bugs.webkit.org/show_bug.cgi?id=34989
        <rdar://problem/7417965> Cursor disappears on scroll bars that are over plugin content

        * html/HTMLPlugInElement.cpp: (WebCore::HTMLPlugInElement::defaultEventHandler): Added some
        comments about the way we pass events down to plug-ins.

2010-02-16  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Eric Carlson.

        With hardware acceleration turned off, video frames never display if poster
        image is specified
        https://bugs.webkit.org/show_bug.cgi?id=34965
        
        HTMLVideoElement's m_shouldDisplayPosterImage was never updated after
        the movie supplied its first video frame, so the poster would continue to show.
        
        Fixed by calling updatePosterImage() from mediaPlayerRepaint(), which is called
        each time a new frame is available. updatePosterImage() is cheap.
        
        Also made updatePosterImage() virtual on HTMLMediaElement to avoid a number of
        ugly casts.

        Test: manual-tests/media-elements/video-replaces-poster.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::noneSupported): Call updatePosterImage() without video check.
        (WebCore::HTMLMediaElement::setNetworkState): Ditto.
        (WebCore::HTMLMediaElement::setReadyState): Ditto.
        (WebCore::HTMLMediaElement::mediaPlayerRepaint): Call udpatePosterImage().
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::updatePosterImage): Make this an empty virtual
        method on the base class.
        * html/HTMLVideoElement.h: Override updatePosterImage().

2010-02-16  Simon Fraser  <simon.fraser@apple.com>

        Build fix for platforms without ACCELERATED_COMPOSITING defined.

        mediaPlayerRenderingModeChanged() is only available when ACCELERATED_COMPOSITING is defined.
        
        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp:
        (WebCore::MediaPlayerPrivate::setUpVideoRendering):

2010-02-16  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Eric Carlson.

        Autoplaying video with poster doesn't reliably show up
        https://bugs.webkit.org/show_bug.cgi?id=34966
        
        A timing issue with compositing updates when replacing the poster image
        with the video could cause the video to not display.
        
        Fix by making video layer hook up more similar to WebGL etc, by having the
        video kick off a recalcStyle() via a SyntheticStyleChange. This requires
        vending a PlaformLayer* from the media player, up through the element.

        Test: media/video-replaces-poster.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerRenderingModeChanged): Use setNeedsStyleRecalc()
        to kick off a compositing update.

        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::platformLayer): Export the media engine's layer.

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::NullMediaPlayerPrivate::platformLayer): Method to vend the media layer.
        (WebCore::MediaPlayer::platformLayer):

        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerClient::mediaPlayerRenderingModeChanged): New client callback
        to indicate that the rendering mode changed. The element uses this to kick off a
        recalcStyle.

        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::platformLayer): Method to vend the media layer.
        * platform/graphics/mac/MediaPlayerPrivateQTKit.h: Ditto
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::createQTMovieLayer): No longer parent the layer directly
        via setContentsToMedia().
        (WebCore::MediaPlayerPrivate::acceleratedRenderingStateChanged): Ditto.
        (WebCore::MediaPlayerPrivate::setUpVideoRendering): Tell the client that the
        rendering mode changed.
        (WebCore::MediaPlayerPrivate::platformLayer): Method to vend the media layer.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerConfiguration): Call setContentsToMedia()
        here.

        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.h: Add platformLayer().
        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp:
        (WebCore::MediaPlayerPrivate::platformLayer): Method to vend the media layer.
        (WebCore::MediaPlayerPrivate::setUpVideoRendering): Call mediaPlayerRenderingModeChanged()
        (WebCore::MediaPlayerPrivate::createLayerForMovie): Don't parent the layer ourselves any more.

        * rendering/RenderVideo.h: videoGraphicsLayer() is no longer needed.
        * rendering/RenderVideo.cpp: Ditto.

2010-02-12  Peter Kasting  <pkasting@google.com>

        Reviewed by Adam Barth.

        Code cleanup in ImageDecoders; no functional change.
        https://bugs.webkit.org/show_bug.cgi?id=28751

        * Make code mostly comply with the style guide (switch indenting, use of
          "!" vs. "== 0", don't unnecessarily wrap lines, etc.)
        * Eliminate m_allDataReceived in ICO/BMP decoders since it's in the
          base ImageDecoder class
        * Remove some useless or wrong comments, add others
        * Wrap comments at 80 columns (most already were) for
          consistency/readability
        * Avoid casts by using correct variable types
        * Consistent naming of decode() function/args
        * Shorter code in some places
        * Make declaration and definition order match

        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::frameCount):
        (WebCore::ImageDecoderQt::frameBufferAtIndex):
        (WebCore::ImageDecoderQt::forceLoadEverything):
        * platform/image-decoders/ImageDecoder.cpp:
        (WebCore::ImageDecoder::create):
        (WebCore::RGBA32Buffer::clear):
        (WebCore::RGBA32Buffer::setSize):
        * platform/image-decoders/ImageDecoder.h:
        (WebCore::RGBA32Buffer::):
        (WebCore::ImageDecoder::ImageDecoder):
        * platform/image-decoders/bmp/BMPImageDecoder.cpp:
        (WebCore::BMPImageDecoder::BMPImageDecoder):
        (WebCore::BMPImageDecoder::setData):
        (WebCore::BMPImageDecoder::isSizeAvailable):
        (WebCore::BMPImageDecoder::frameBufferAtIndex):
        (WebCore::BMPImageDecoder::decode):
        (WebCore::BMPImageDecoder::decodeHelper):
        (WebCore::BMPImageDecoder::processFileHeader):
        * platform/image-decoders/bmp/BMPImageDecoder.h:
        (WebCore::BMPImageDecoder::readUint32):
        * platform/image-decoders/bmp/BMPImageReader.cpp:
        (WebCore::BMPImageReader::BMPImageReader):
        (WebCore::BMPImageReader::decodeBMP):
        (WebCore::BMPImageReader::readInfoHeaderSize):
        (WebCore::BMPImageReader::processInfoHeader):
        (WebCore::BMPImageReader::readInfoHeader):
        (WebCore::BMPImageReader::isInfoHeaderValid):
        (WebCore::BMPImageReader::processBitmasks):
        (WebCore::BMPImageReader::processColorTable):
        (WebCore::BMPImageReader::processRLEData):
        (WebCore::BMPImageReader::processNonRLEData):
        * platform/image-decoders/bmp/BMPImageReader.h:
        (WebCore::BMPImageReader::readUint32):
        (WebCore::BMPImageReader::pastEndOfImage):
        (WebCore::BMPImageReader::readCurrentPixel):
        (WebCore::BMPImageReader::getComponent):
        (WebCore::BMPImageReader::getAlpha):
        (WebCore::BMPImageReader::setI):
        (WebCore::BMPImageReader::setRGBA):
        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::GIFImageDecoder):
        (WebCore::GIFImageDecoder::setData):
        (WebCore::GIFImageDecoder::isSizeAvailable):
        (WebCore::GIFImageDecoder::frameCount):
        (WebCore::GIFImageDecoder::frameBufferAtIndex):
        (WebCore::GIFImageDecoder::clearFrameBufferCache):
        (WebCore::GIFImageDecoder::sizeNowAvailable):
        (WebCore::GIFImageDecoder::haveDecodedRow):
        (WebCore::GIFImageDecoder::frameComplete):
        (WebCore::GIFImageDecoder::decode):
        (WebCore::GIFImageDecoder::initFrameBuffer):
        * platform/image-decoders/gif/GIFImageDecoder.h:
        (WebCore::GIFImageDecoder::):
        (WebCore::GIFImageDecoder::filenameExtension):
        * platform/image-decoders/gif/GIFImageReader.cpp:
        (GIFImageReader::do_lzw):
        (GIFImageReader::read):
        * platform/image-decoders/gif/GIFImageReader.h:
        (GIFImageReader::~GIFImageReader):
        * platform/image-decoders/ico/ICOImageDecoder.cpp:
        (WebCore::ICOImageDecoder::ICOImageDecoder):
        (WebCore::ICOImageDecoder::~ICOImageDecoder):
        (WebCore::ICOImageDecoder::setData):
        (WebCore::ICOImageDecoder::isSizeAvailable):
        (WebCore::ICOImageDecoder::frameSizeAtIndex):
        (WebCore::ICOImageDecoder::frameCount):
        (WebCore::ICOImageDecoder::frameBufferAtIndex):
        (WebCore::ICOImageDecoder::compareEntries):
        (WebCore::ICOImageDecoder::setDataForPNGDecoderAtIndex):
        (WebCore::ICOImageDecoder::decode):
        (WebCore::ICOImageDecoder::decodeDirectory):
        (WebCore::ICOImageDecoder::decodeAtIndex):
        (WebCore::ICOImageDecoder::processDirectoryEntries):
        (WebCore::ICOImageDecoder::readDirectoryEntry):
        * platform/image-decoders/ico/ICOImageDecoder.h:
        (WebCore::ICOImageDecoder::readUint16):
        (WebCore::ICOImageDecoder::readUint32):
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::):
        (WebCore::JPEGImageReader::JPEGImageReader):
        (WebCore::JPEGImageReader::skipBytes):
        (WebCore::JPEGImageReader::decode):
        (WebCore::error_exit):
        (WebCore::fill_input_buffer):
        (WebCore::term_source):
        (WebCore::JPEGImageDecoder::setData):
        (WebCore::JPEGImageDecoder::setSize):
        (WebCore::JPEGImageDecoder::frameBufferAtIndex):
        (WebCore::JPEGImageDecoder::jpegComplete):
        (WebCore::JPEGImageDecoder::decode):
        * platform/image-decoders/jpeg/JPEGImageDecoder.h:
        (WebCore::JPEGImageDecoder::filenameExtension):
        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::decodingFailed):
        (WebCore::decodingWarning):
        (WebCore::headerAvailable):
        (WebCore::rowAvailable):
        (WebCore::pngComplete):
        (WebCore::PNGImageReader::PNGImageReader):
        (WebCore::PNGImageReader::close):
        (WebCore::PNGImageReader::decode):
        (WebCore::PNGImageReader::createInterlaceBuffer):
        (WebCore::PNGImageDecoder::setData):
        (WebCore::PNGImageDecoder::frameBufferAtIndex):
        (WebCore::PNGImageDecoder::headerAvailable):
        (WebCore::PNGImageDecoder::rowAvailable):
        (WebCore::PNGImageDecoder::pngComplete):
        (WebCore::PNGImageDecoder::decode):
        * platform/image-decoders/png/PNGImageDecoder.h:
        (WebCore::PNGImageDecoder::filenameExtension):
        * platform/image-decoders/qt/RGBA32BufferQt.cpp:
        (WebCore::RGBA32Buffer::setDecodedImage):

2010-02-16  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Unreviewed buildfix.

        * WebCore.pro: Missing backslash added.

2010-02-16  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Move JSC-specific wrappers for Profile and ProfileNode to bindings/js.

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

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JavaScriptProfile.cpp: Added.
        (WebCore::profileCache):
        (WebCore::getTitleCallback):
        (WebCore::getHeadCallback):
        (WebCore::getUniqueIdCallback):
        (WebCore::focus):
        (WebCore::exclude):
        (WebCore::restoreAll):
        (WebCore::finalize):
        (WebCore::ProfileClass):
        (WebCore::toJS):
        * bindings/js/JavaScriptProfile.h: Added.
        * bindings/js/JavaScriptProfileNode.cpp: Added.
        (WebCore::profileNodeCache):
        (WebCore::getFunctionName):
        (WebCore::getURL):
        (WebCore::getLineNumber):
        (WebCore::getTotalTime):
        (WebCore::getSelfTime):
        (WebCore::getNumberOfCalls):
        (WebCore::getChildren):
        (WebCore::getVisible):
        (WebCore::getCallUID):
        (WebCore::finalize):
        (WebCore::ProfileNodeClass):
        (WebCore::toJS):
        * bindings/js/JavaScriptProfileNode.h: Added.
        * inspector/JavaScriptProfile.cpp: Removed.
        * inspector/JavaScriptProfile.h: Removed.
        * inspector/JavaScriptProfileNode.cpp: Removed.
        * inspector/JavaScriptProfileNode.h: Removed.

2010-02-16  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Elements Panel: Limit the number of initially loaded element children
        https://bugs.webkit.org/show_bug.cgi?id=34421

        Test: inspector/elements-panel-limited-children.html

        * English.lproj/localizedStrings.js:
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMNode.prototype._insertChild):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.updateModifiedNodes):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeOutline.prototype.createTreeElementFor):
        (WebInspector.ElementsTreeOutline.prototype.revealAndSelectNode):
        (WebInspector.ElementsTreeElement):
        (WebInspector.ElementsTreeElement.prototype.get expandedChildrenLimit):
        (WebInspector.ElementsTreeElement.prototype.set expandedChildrenLimit):
        (WebInspector.ElementsTreeElement.prototype.get expandedChildCount):
        (WebInspector.ElementsTreeElement.prototype.showChild):
        (WebInspector.ElementsTreeElement.prototype.insertChildElement):
        (WebInspector.ElementsTreeElement.prototype.moveChild):
        (WebInspector.ElementsTreeElement.prototype._updateChildren.updateChildrenOfNode):
        (WebInspector.ElementsTreeElement.prototype._updateChildren):
        (WebInspector.ElementsTreeElement.prototype.adjustCollapsedRange):
        (WebInspector.ElementsTreeElement.prototype.handleLoadAllChildren):
        ():
        * inspector/front-end/inspector.css:

2010-02-16  Ismail Donmez  <ismail@namtrac.org>

        Reviewed by Pavel Feldman.

        Fix compilation with inspector disabled.
        https://bugs.webkit.org/show_bug.cgi?id=32724

        * rendering/RenderLayerBacking.cpp:
        (WebCore::inspectorTimelineAgent):

2010-02-16  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: turn off line wrapping in source view.

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

        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer.prototype.markAndRevealRange):
        (WebInspector.TextViewer.prototype._paintLine):
        * inspector/front-end/textViewer.css:
        * inspector/front-end/utilities.js:

2010-02-16  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: let search iterate over views in Resources
        and keep the view in Scripts.

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

        * inspector/front-end/Panel.js:
        (WebInspector.Panel.prototype.jumpToNextSearchResult):
        (WebInspector.Panel.prototype.jumpToPreviousSearchResult):
        (WebInspector.Panel.prototype.showSourceLineForURL):
        (WebInspector.Panel.prototype.searchIteratesOverViews):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.get _resources):
        (WebInspector.ResourcesPanel.prototype.searchIteratesOverViews):
        * inspector/front-end/SourceView.js:
        (WebInspector.SourceView.prototype.showingLastSearchResult):
        * inspector/front-end/inspector.js:
        (WebInspector.documentKeyDown):
        (WebInspector.focusSearchField):

2010-02-16  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Ariya Hidayat.

        [Qt] canvas clipping is buggy
        https://bugs.webkit.org/show_bug.cgi?id=32405

        Apparently the bug was in GraphicsContext::roundToDevicePixels, we
        didn't take unto accounts rotation, so the device pixels were rounded
        incorrectly. The new formula is a 1:1 copy from GraphicsContextCG so
        it should be rather safe

        Test: http://glimr.rubyforge.org/cake/canvas.html#Polaroids now looks right

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::roundToDevicePixels): Copy the formula from
        GraphicsContextCG

2010-02-16  Yury Semikhatsky  <yurys@chromium.org>

        Not Reviewed, build fix.

        * platform/graphics/FloatRect.h:
        (WebCore::FloatRect::center): make conversion from float to int explicit so that compiler
        doesn't complain about that.

2010-02-15  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/7645609> [webView selectionRect] API is broken for multicolumn layout

        Refine the fix for https://bugs.webkit.org/show_bug.cgi?id=34923 by using the center of
        a quad’s bounding box, rather than its top left, as the reference point passed to
        offsetFromContainer(). This ensures that if a sliver off the top of the selection rect is in
        one column, but most of it is on another column, the single rect we return will be for the
        second column.

        * platform/graphics/FloatRect.h:
        (WebCore::FloatRect::center): Added.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::localToContainerQuad): Use the center instead of the top left.

2010-02-15  MORITA Hajime  <morrita@gmail.com>

        Reviewed by Nikolas Zimmermann.

        SVG text refactor: reduce paint specific callbacks on SVGTextChunkWalker

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

        No new tests, no change of functionality.

        * rendering/SVGCharacterLayoutInfo.h:
        (WebCore::SVGTextChunkWalker::SVGTextChunkWalker):
        Removed setupBackground(), setupFill(), setupFillSelection(),
        setupStroke(), setupStrokeSelection(), setupForeground()
        and associated member variables.
        
        * rendering/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBoxPaintWalker::setupBackground):
        renamed from chunkSetupBackgroundCallback.
        (WebCore::SVGRootInlineBoxPaintWalker::setupFill):
        renamed from chunkSetupFillCallback.
        (WebCore::SVGRootInlineBoxPaintWalker::setupFillSelection):
        renamed from chunkSetupFillSelectionCallback.
        (WebCore::SVGRootInlineBoxPaintWalker::setupStroke):
        renamed from chunkSetupStrokeCallback.
        (WebCore::SVGRootInlineBoxPaintWalker::setupStrokeSelection):
        renamed from chunkSetupStrokeSelectionCallback.
        (WebCore::SVGRootInlineBoxPaintWalker::setupForeground):
        renamed from chunkSetupForegroundCallback.
        (WebCore::SVGRootInlineBoxPaintWalker::paintChunk):
        renamed from chunkPortionCallback.
        (WebCore::SVGRootInlineBoxPaintWalker::chunkPortionCallback):
        extracted from walkTextChunks.
        (WebCore::SVGRootInlineBox::paint):
        follow SVGTextChunkWalker change.
        (WebCore::SVGRootInlineBox::walkTextChunks):
        moved paint some specific code to SVGRootInlineBoxPaintWalker::chunkPortionCallback().
        
2010-02-15  Dan Bernstein  <mitz@apple.com>

        Try to fix the Chromium build.

        * rendering/RenderThemeChromiumMac.mm:
        (WebCore::RenderThemeChromiumMac::convertToPaintingRect):

2010-02-14  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=33731
        Many false leaks in release builds due to PtrAndFlags

        PtrAndFlags has now been removed; remove forwarding header.

        * ForwardingHeaders/wtf/PtrAndFlags.h: Removed.

2010-02-15  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Geoff Garen.

        Bug 34952 - String lengths in UString should be unsigned.
        This matches WebCore::StringImpl, and better unifies behaviour throughout JSC.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::atob):
        (WebCore::JSDOMWindow::btoa):

2010-02-15  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        [GTK] Crashes when going back to a page that has data: URIs, with page cache enabled
        https://bugs.webkit.org/show_bug.cgi?id=34944

        Set the URL in the newly created response, when parsing data:
        URIs.

        Test: fast/harness/page-cache-crash-on-data-urls.html

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::parseDataUrl):

2010-02-15  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/7647300> Incorrect client rects for blocks the span multiple columns and their descendants
        https://bugs.webkit.org/show_bug.cgi?id=34923

        Test: fast/multicol/client-rects.html

        In column layout, a different transform applies to different points in
        the block and its descendants, depending on their y coordinate within the
        block. offsetFromContainer() used to return the offset that applied to
        the origin. With this change, it returns the offset that applies to a
        given reference point. When mapping a quad from local to absolute
        coordinates, the top left of the quad’s bounding box is used as that
        reference point.

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::layout): Pass the caret’s origin as the
        reference point to offsetFromContainer().
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::adjustForColumns): Adds the offset between the
        given point and its image under the column paint-time transform to the
        given offset. Used by offsetFromContainer() where it had previously used
        adjustRectForColumns(), which takes a rect and operates less efficiently.
        * rendering/RenderBlock.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::mapLocalToContainer): Pass the transformed point as
        the reference point to offsetFromContainer().
        (WebCore::RenderBox::mapAbsoluteToLocalPoint): Pass a point to
        offsetFromContainer().
        (WebCore::RenderBox::offsetFromContainer): Use adjustForColumns() instead
        of adjustRectForColumns(), and use the reference point to get the right
        adjustment for the point of interest, instead of the origin, in case this
        box spans multiple columns.
        * rendering/RenderBox.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::offsetFromContainer): Ditto. Actually apply the
        column offset to the computation, which previously this function didn’t
        do.
        (WebCore::RenderInline::mapLocalToContainer): Pass the transformed point
        as the reference point to offsetFromContainer().
        (WebCore::RenderInline::mapAbsoluteToLocalPoint): Pass a point to
        offsetFromContainer().
        * rendering/RenderInline.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::mapLocalToContainer): Apply column adjustment,
        based on the reference point, to the transform if needed.
        (WebCore::RenderObject::localToContainerQuad): Initialize the
        TransformState with the top left corner of the quad’s bounding box. It
        is later used as the reference point when deciding on which column to
        base the calculations.
        (WebCore::RenderObject::offsetFromContainer): Adjust for columns.
        (WebCore::RenderObject::offsetFromAncestorContainer): Pass the origin
        as the reference point to offsetFromContainer().
        * rendering/RenderObject.h:
        (WebCore::RenderObject::adjustForColumns): Added.
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::offsetFromContainer): Pass the reference
        point through.
        * rendering/RenderTableCell.h:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::absoluteRectsForRange): Map (the origin of) each
        rect to absolute coordinates individually.
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::convertToPaintingRect): Pass a point to
        offsetFromContainer().

2010-02-12  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Kevin Decker.

        <rdar://problem/7130641> Browser objects identity is not preserved by Safari

        Test: plugins/netscape-browser-object-identity.html

        * bridge/runtime_root.h: (JSC::Bindings::RootObject::addInvalidationCallback):
        RootObject can now call out during invalidation, making it possible for other code to know
        when this happens.

        * bridge/runtime_root.cpp:
        (JSC::Bindings::RootObject::InvalidationCallback::~InvalidationCallback): Empty destructor,
        in cpp file since it's virtual.
        (JSC::Bindings::RootObject::invalidate): Invoke invalidation callbacks.

        * bridge/NP_jsobject.cpp:
        (ObjectMap): Keep a JSObject->NPObject map for each RootObject. It somewhat cleaner to
        keep it outside RootObject, because (1) it is agnostic of what kinds of objects can wrap
        JSObject, and (2) out of process NPAPI implementation also keeps its corresponding map
        separately, due to supporting per-instance granularity (as opposed to per-RootObject here).
        (jsDeallocate): Remove the corresponding map entry.
        (_NPN_CreateScriptObject): Try to fetch existing object from the map, incrementing refcount.

2010-02-15  Philippe Normand  <pnormand@igalia.com>

        Rubber-stamped by Gustavo Noronha Silva.

        Removed redefine of LOG_VERBOSE. This should not have commited in
        the first place.

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:

2010-02-15  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: incorrect syntax highlighting as HTML in a script tag.
        We were preserving initial lexer state upon entering other tags while in <script>
        but were not doing it for <script tag itself. As a result, nested script
        tags were failing to highlight.

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

        * inspector/front-end/SourceHTMLTokenizer.js:
        (WebInspector.SourceHTMLTokenizer.prototype.nextToken):
        * inspector/front-end/SourceHTMLTokenizer.re2js:

2010-02-15  Brady Eidson  <beidson@apple.com>

        Reviewed by Dan Bernstein.

        Add a progress-indicator logging channel to WebCore, and convert the old WebKit Logging
        messages over to WebCore-style.

        No new tests. (Logging changes only)

        * loader/ProgressTracker.cpp:
        (WebCore::ProgressTracker::progressStarted):
        (WebCore::ProgressTracker::progressCompleted):
        (WebCore::ProgressTracker::finalProgressComplete):
        (WebCore::ProgressTracker::incrementProgress):

        * platform/Logging.cpp:
        (WebCore::):
        (WebCore::getChannelFromName):
        * platform/Logging.h:

2010-02-15  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] QtWebkit bridge: enable passing a QWebElement to a signal/slot/property
        https://bugs.webkit.org/show_bug.cgi?id=34901

        When a signal/slot/property is of type QWebElement, it can seamlessly
        connect with JS objects that hold a WebCore element.

        New tests, see WebKit/qt/ChangeLog

        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::QtWebElementRuntime::create): A proxy to QWebElement
        constructor
        (JSC::Bindings::QtWebElementRuntime::get): A proxy to
        QWebElement::element
        (JSC::Bindings::convertValueToQVariant): handle QWebElement
        (JSC::Bindings::convertQVariantToValue): handle QWebElement

2010-02-15  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed, Chromium build fix (force conversion of property names to
        strings in Web Inspector's injected script).

        * inspector/front-end/InjectedScript.js:
        (injectedScriptConstructor):

2010-02-15  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: touch InspectorController in order to kick win bot tests
        with new injected script contents.

        * inspector/InspectorController.cpp:

2010-02-14  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: highlight actual search match in elements panel.

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

        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.searchCanceled):
        (WebInspector.ElementsPanel.prototype.performSearch):
        (WebInspector.ElementsPanel.prototype.addNodesToSearchResult):
        (WebInspector.ElementsPanel.prototype.jumpToNextSearchResult):
        (WebInspector.ElementsPanel.prototype.jumpToPreviousSearchResult):
        (WebInspector.ElementsPanel.prototype._highlightCurrentSearchResult):
        (WebInspector.ElementsPanel.prototype._hideSearchHighlights):
        * inspector/front-end/InjectedScript.js:
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.findSearchMatches):
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer.prototype._paintLine):
        * inspector/front-end/textViewer.css:
        * inspector/front-end/utilities.js:

2010-02-14  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: XPathResult objects are not expanded in console.

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

        * inspector/front-end/InjectedScript.js:
        (injectedScriptConstructor):
        * inspector/front-end/ObjectPropertiesSection.js:
        (WebInspector.ObjectPropertiesSection.prototype.updateProperties):
        (WebInspector.ObjectPropertiesSection.CompareProperties):
        (WebInspector.ObjectPropertyTreeElement.prototype.update):
        * inspector/front-end/Section.js:
        (WebInspector.Section):
        * inspector/front-end/inspector.css:

2010-02-10  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [Gtk] wrong video aspect ratio
        https://bugs.webkit.org/show_bug.cgi?id=34790

        Fixed natural size calculation regarding pixel aspect ratio and
        display aspect ratio.

        Test: media/video-display-aspect-ratio.html

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::greatestCommonDivisor):
        (WebCore::MediaPlayerPrivate::naturalSize):

2010-02-14  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        HTML5 iframe sandbox bypass of window.top.location navigation via <form target="_top">
        https://bugs.webkit.org/show_bug.cgi?id=33277

        submitForm wasn't respecting shouldAllowNavigation.  Instead of calling
        the wrapper function, we need to call shouldAllowNavigation because we
        need to handle the "frame not found" case differently than the
        "navigation denied" case.

        Test: http/tests/security/sandboxed-iframe-form-top.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::submitForm):

2010-02-14  Kent Tamura  <tkent@chromium.org>

        No review. Touch RenderRuny*.cpp to fix Chromium/Windows build bot.

        * rendering/RenderRuby.cpp: Add a comment for #endf.
        * rendering/RenderRubyBase.cpp: Add a comment for #endf.
        * rendering/RenderRubyRun.cpp: Add a comment for #endf.
        * rendering/RenderRubyText.cpp: Add a comment for #endf.

2010-02-13  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: cache created row, span and text elements
        in TextView to improve scroller performance on debug build.

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

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.set visible):
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer):
        (WebInspector.TextViewer.prototype.freeCachedElements):
        (WebInspector.TextViewer.prototype._buildChunks):
        (WebInspector.TextViewer.prototype._makeLineAChunk):
        (WebInspector.TextViewer.prototype._paintLine):
        (WebInspector.TextViewer.prototype._releaseLines):
        (WebInspector.TextViewer.prototype._appendSpan):
        (WebInspector.TextViewer.prototype._appendTextNode):
        (WebInspector.TextChunk):
        (WebInspector.TextChunk.prototype.set expanded):
        (WebInspector.TextChunk.prototype._lineNumberText):
        (WebInspector.TextChunk.prototype._createRow):

2010-02-13  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        Refactor parsing/serialization functions in HTMLInputElement.
        https://bugs.webkit.org/show_bug.cgi?id=34852

        - Rename formStringToDouble() to parseToDoubleForNumberType()
        - Rename formStringToDateComponents() to parseToDateComponents()
        - Rename formStringFromDouble() to serializeForNumberType()
        - Add serializeForDateTimeTypes()
          The code is moved from setValueAsDate() and setDateValue().
        - Add serialize()
        
        parseToDouble() is the top-level function to parse a
        type-dependent string and return a double
        value. parseToDoubleForNumber() and parseToDateComponents()
        functions are helper functions for it. serialize() is the
        top-level function to serialize a double value to a type-dependent
        string, and serializeForNumberType() and
        serializeForDateTimeTypes() are helper functions for it.

        No tests because of no functional changes.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::stepMismatch):
        (WebCore::HTMLInputElement::getAllowedValueStep):
        (WebCore::HTMLInputElement::parseToDouble):
        (WebCore::HTMLInputElement::valueAsDate):
        (WebCore::HTMLInputElement::setValueAsDate):
        (WebCore::HTMLInputElement::setValueAsNumber):
        (WebCore::HTMLInputElement::serializeForDateTimeTypes):
        (WebCore::HTMLInputElement::serialize):
        (WebCore::HTMLInputElement::serializeForNumberType):
        (WebCore::HTMLInputElement::parseToDoubleForNumberType):
        (WebCore::HTMLInputElement::parseToDateComponents):
        * html/HTMLInputElement.h:
        * html/ValidityState.cpp:
        (WebCore::ValidityState::typeMismatch):
        * rendering/RenderSlider.cpp:
        (WebCore::SliderRange::valueFromElement):
        (WebCore::RenderSlider::updateFromElement):
        (WebCore::RenderSlider::setValueForPosition):

2010-01-05  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Dan Bernstein.

        Improve text control intrinsic widths.
        https://bugs.webkit.org/show_bug.cgi?id=25566
        https://bugs.webkit.org/show_bug.cgi?id=25581
        https://bugs.webkit.org/show_bug.cgi?id=25958

        For Mac fonts that have invalid avgCharWidth entries in the OS/2 table,
        fallback to the Safari 4- behavior of using the width of a zero. For other
        fonts, make Mac match Windows (and thus IE) metrics.

        Lucida Grande is hard-coded to match MS Shell Dlg for inputs and
        Courier New for textareas in order to match Safari Win, Firefox and, in
        some cases IE (IE uses different default fonts depending on encoding).

        The only case where we still don't match Windows is if no font-size is
        set. The default font-size for form controls on the Mac is smaller and
        thus text-control widths will be slightly smaller.

        No new tests. Covered by existing tests.

        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::platformCharWidthInit):
        * rendering/RenderTextControl.cpp:
        (WebCore::):
        (WebCore::RenderTextControl::hasValidAvgCharWidth):
        (WebCore::RenderTextControl::getAvgCharWidth):
        (WebCore::RenderTextControl::calcPrefWidths):
        * rendering/RenderTextControl.h:
        (WebCore::RenderTextControl::scaleEmToUnits):
        * rendering/RenderTextControlMultiLine.cpp:
        (WebCore::RenderTextControlMultiLine::getAvgCharWidth):
        * rendering/RenderTextControlMultiLine.h:
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::getAvgCharWidth):
        (WebCore::RenderTextControlSingleLine::preferredContentWidth):
        * rendering/RenderTextControlSingleLine.h:

2010-02-11  Ariya Hidayat  <ariya.hidayat@gmail.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Unnecessary QBrush construction for doing a solid color stroke
        https://bugs.webkit.org/show_bug.cgi?id=34874

        Use the similar trick like in r54347, i.e. use the special brush for
        solid color to avoid expensive QBrush constructor.

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::setPlatformStrokeColor):

2010-02-11  Darin Fisher  <darin@chromium.org>

        Reviewed by Jeremy Orlow.

        Pass the Document along to the ChromiumBridge cookie methods.

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

        * platform/chromium/ChromiumBridge.h:
        * platform/network/chromium/CookieJarChromium.cpp:
        (WebCore::setCookies):
        (WebCore::cookies):
        (WebCore::cookiesEnabled):
        (WebCore::getRawCookies):
        (WebCore::deleteCookie):

2010-02-12  Eric Seidel  <eric@webkit.org>

        No review, rolling out r54694.
        http://trac.webkit.org/changeset/54694
        https://bugs.webkit.org/show_bug.cgi?id=34633

        This appears to have caused crashes on the Leopard bot.  See
        bug 34898.

        * websockets/ThreadableWebSocketChannelClientWrapper.h:
        (WebCore::ThreadableWebSocketChannelClientWrapper::didClose):
        * websockets/WebSocket.cpp:
        (WebCore::WebSocket::WebSocket):
        (WebCore::WebSocket::send):
        (WebCore::WebSocket::close):
        (WebCore::WebSocket::bufferedAmount):
        (WebCore::WebSocket::didConnect):
        (WebCore::WebSocket::didClose):
        * websockets/WebSocket.h:
        * websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::WebSocketChannel):
        (WebCore::WebSocketChannel::send):
        (WebCore::WebSocketChannel::bufferedAmount):
        (WebCore::WebSocketChannel::didClose):
        * websockets/WebSocketChannel.h:
        * websockets/WebSocketChannelClient.h:
        (WebCore::WebSocketChannelClient::didClose):
        * websockets/WorkerThreadableWebSocketChannel.cpp:
        (WebCore::workerContextDidClose):
        (WebCore::WorkerThreadableWebSocketChannel::Peer::didClose):
        * websockets/WorkerThreadableWebSocketChannel.h:

2010-02-12  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        Workers' EventListeners should be removed before JSGlobalData is destroyed
        https://bugs.webkit.org/show_bug.cgi?id=34903

        (Patch co-developed with Alexey Proskuryakov).

        Since http://trac.webkit.org/changeset/54460 the EventListeners registered by a
        worker thread are not removed until after the thread's JSGlobalData has been
        destroyed.  This is slightly worrisome since the JSEventListener contains
        JSObject*s, which will be dangling once the heap is destroyed.  The
        JSEventListeners may also reference the worker thread's normal world, which
        again it makes no sense to keep around after the JSGlobalData is freed.

        Remove all event listeners immediately prior to tearing down the JSGlobalData.

        https://bugs.webkit.org/show_bug.cgi?id=34728 addressed the symptoms of this
        problem, and it is probably cleaner to make the client data's normal world no
        longer be a member (since it is a ref-counted object), however they should be
        no requirement to 'detatch' – it makes no sense for anyone to be referencing
        the world after the JSGlobalData has gone away (the world's purpose is to hold
        wrapper objects in the JSGlobalData's heap).  Keep the restructuring that makes
        the normal world no longer be a member, but remove the detach mechanism this
        patch added & replace with stronger ASSERTs.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::DOMWrapperWorld::~DOMWrapperWorld):
        * bindings/js/JSDOMBinding.h:
        (WebCore::WebCoreJSClientData::~WebCoreJSClientData):
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThreadShutdownStartTask::performTask):

2010-02-12  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=33731
        Remove uses of PtrAndFlags from WebCore::StringImpl.

        These break the OS X Leaks tool.  Use a bits stolen from the refCount to hold the
        'InTable' and 'HasTerminatingNullCharacter' flags, along with the string type
        (fixes a leak where the string data is allocated at the address (this + 1), and is
        misinterpreted as being an internal buffer).

        * WebCore.base.exp:
        * platform/text/StringImpl.cpp:
        (WebCore::StringImpl::StringImpl):
        (WebCore::StringImpl::~StringImpl):
        (WebCore::StringImpl::create):
        (WebCore::StringImpl::createWithTerminatingNullCharacter):
        (WebCore::StringImpl::crossThreadString):
        (WebCore::StringImpl::sharedBuffer):
        * platform/text/StringImpl.h:
        (WebCore::StringImpl::):
        (WebCore::StringImpl::hasTerminatingNullCharacter):
        (WebCore::StringImpl::inTable):
        (WebCore::StringImpl::setInTable):
        (WebCore::StringImpl::ref):
        (WebCore::StringImpl::deref):
        (WebCore::StringImpl::hasOneRef):
        (WebCore::StringImpl::operator new):
        (WebCore::StringImpl::bufferOwnership):
        * storage/OriginUsageRecord.cpp:
        (WebCore::OriginUsageRecord::addDatabase):
        (WebCore::OriginUsageRecord::markDatabase):

2010-02-12  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Repaint bug on Text selection in foreignObject
        https://bugs.webkit.org/show_bug.cgi?id=16939

        Tests: svg/overflow/overflow-on-foreignObject.svg
               svg/text/foreignObject-text-clipping-bug.xml

        Selecting text contained in <foreignObject> leads to artefacts. Same for zooming/panning.
        RenderForeignObject contained old legacy code returning FloatRect() for repaintRectInLocalCoordinates,
        which is obviously wrong. Fixing that leads to even more problems, as the underlying RenderBlock
        did not reflect the x/y translation set on the <foreignObject>. This is problematic, as laying out
        positioned objects in the XHTML subtree depends on proper size/location values of the frameRect.

        Correctly clip on overflow="hidden". overflow="scroll" & friends are not yet supported, see lengthy
        comment in RenderSVGBlock why we either need RenderLayer for RenderForeignObject or need to rework
        overflow handling to avoid RenderLayer.

        SVGForeignObjectElement uses a hacky custom solution to synchronize CSS width/height properties with
        the SVG width/height attributes. Remove all of that code and just implement calcWidth/calcHeight in
        RenderForeignObject, grabbing the right values from SVGForeignObjectElement::width/height upon layout.

        * rendering/RenderForeignObject.cpp:
        (WebCore::RenderForeignObject::paint): Clip properly to the actual bounds of the foreignObject, respecting that x/y translation is handled by RenderBlock now.
        (WebCore::RenderForeignObject::clippedOverflowRectForRepaint): Added missing function, forward to SVGRenderBase just like all other SVG renderers.
        (WebCore::RenderForeignObject::computeRectForRepaint): Remove manual implementation, forward to SVGRenderBase.
        (WebCore::RenderForeignObject::localToParentTransform): Respect x/y translation here _after_ applying localTransform().
        (WebCore::RenderForeignObject::calcWidth): Override RenderBlock::calcWidth to grab width() from SVGForeignObjectElement.
        (WebCore::RenderForeignObject::calcHeight): Override RenderBlock::calcHeight to grab height() from SVGForeignObjectElement.
        (WebCore::RenderForeignObject::layout): Calculate viewport once and cache it. Push x/y location down to RenderBlock - analogous to RenderSVGText.
        (WebCore::RenderForeignObject::nodeAtFloatPoint): Adapt to x/y translation changes (map through localTransform, not localToParentTransform). Respect overflow clipping.
        (WebCore::RenderForeignObject::mapLocalToContainer): Set useTransforms=true, to avoid assertions when selecting text in foreign objects.
        * rendering/RenderForeignObject.h:
        (WebCore::RenderForeignObject::objectBoundingBox): Return cached m_viewport.
        (WebCore::RenderForeignObject::strokeBoundingBox): Ditto.
        (WebCore::RenderForeignObject::repaintRectInLocalCoordinates): Ditto.
        * rendering/RenderSVGBlock.cpp:
        (WebCore::RenderSVGBlock::setStyle): Cleanup code, move setHasOverflowClip() overrides in updateBoxModelInfoFromStyle where it belongs.
        (WebCore::RenderSVGBlock::updateBoxModelInfoFromStyle): Added to force setting setHasOverflowClip(false).
        * rendering/RenderSVGBlock.h:
        * svg/SVGForeignObjectElement.cpp: Kill a lot of custom code - it was just plain wrong to utilize CSS to push width/height information down to RenderBlock.
        (WebCore::SVGForeignObjectElement::svgAttributeChanged):

2010-02-12  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/7609268> REGRESSION (r50301): Problem selecting text in a Devanagari website
        https://bugs.webkit.org/show_bug.cgi?id=34865

        Test: fast/text/glyph-reordering.html

        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::ComplexTextController::ComplexTextRun::ComplexTextRun):
        (WebCore::ComplexTextController::ComplexTextRun::setIsNonMonotonic): Added. Sets m_isMonotonic
        and populates m_glyphEndOffsets with the end offsets of each glyph’s corresponding character range.
        (WebCore::ComplexTextController::advance): For non-monotonic runs, use endOffsetAt() to get
        glyphs’ end offsets.
        (WebCore::ComplexTextController::adjustGlyphsAndAdvances): Check for monotonicity and call
        setIsNonMonotonic() if needed.
        * platform/graphics/mac/ComplexTextController.h:
        (WebCore::ComplexTextController::ComplexTextRun::lastIndexAt): Added this getter.
        (WebCore::ComplexTextController::ComplexTextRun::isMonotonic): Ditto.
        * platform/graphics/mac/ComplexTextControllerATSUI.cpp:
        (WebCore::ComplexTextController::ComplexTextRun::ComplexTextRun): Initialize m_isMonotonic.
        * platform/graphics/mac/ComplexTextControllerCoreText.cpp:
        (WebCore::ComplexTextController::ComplexTextRun::ComplexTextRun): Ditto.

2010-02-12  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by David Levin.

        https://bugs.webkit.org/show_bug.cgi?id=34866
        Leopard Debug Bot crashed on fast/forms/old-names.html

        * html/HTMLFormCollection.cpp: (WebCore::HTMLFormCollection::formCollectionInfo): Removed
        a misplaced checkConsistency() call. We are not looking at cache content at this point, and
        caches will be reset on next access.

2010-02-12  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: restore highlighting animation, bring back
        keyboard navigation, beautify search results.

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

        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer):
        (WebInspector.TextViewer.prototype.highlightLine):
        * inspector/front-end/textViewer.css:

2010-02-12  Anton Muhin  <antonm@chromium.org>

        Reviewed by Adam Barth.

        [v8] handle to the document can only own Objects, not Values
        https://bugs.webkit.org/show_bug.cgi?id=34854

        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::updateDocumentWrapper):
        (WebCore::V8DOMWindowShell::updateDocumentWrapperCache):
        * bindings/v8/V8DOMWindowShell.h:
        * bindings/v8/custom/V8DocumentCustom.cpp:
        (WebCore::toV8):

2010-02-12  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Holger Freyther.

        Replaced stray CRLF with LF.

        * wml/WMLInputElement.cpp:
        (WebCore::WMLInputElement::suggestedValue):
        * wml/WMLInputElement.h:

2010-02-10  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Make qtlauncher and qgvlauncher use the generated headers
        path to make sure they are correctly generated.

        * WebCore.pro:

2010-02-10  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Ensure relative paths in generated .pri files to ensure that
        a source package with pre-generated derived sources can be compiled.

        - Re-add a separate headers.pri file for WEBKIT_API_HEADERS
        - Rename the generated headers.pri to classheaders.pri to avoid
        confusion with the one generated by synqt since they don't have the
        same content.
        - Remove private headers list variable from classheaders.pri
        - Use $$PWD in classheaders.pri
        - Remove classheaders.pri from the installed files

        * WebCore.pro:

2010-02-10  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Manually add support for the install target on Symbian.

        This is required to copy the headers over the ones in Qt.

        * WebCore.pro:

2010-02-10  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Minor fixes on QtWebKit headers generation.

        - Adds QtWebKit to the generated headers destination path
        - Improve compatibility with MinGW

        * WebCore.pro:

2010-02-11  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Alexey Proskuryakov.

        WebSocket ignores HttpOnly cookies, but should use in Handshake.
        https://bugs.webkit.org/show_bug.cgi?id=34289

        Test: websocket/tests/cookies/httponly-cookie.pl

        * platform/CookieJar.h: add cookieRequestHeaderFieldValue()
        * platform/chromium/ChromiumBridge.h:
        * platform/haiku/CookieJarHaiku.cpp:
        (WebCore::cookieRequestHeaderFieldValue):
        * platform/mac/CookieJar.mm:
        (WebCore::cookies):
        (WebCore::cookieRequestHeaderFieldValue):
        * platform/network/android/CookieJarAndroid.cpp:
        (WebCore::cookieRequestHeaderFieldValue):
        * platform/network/chromium/CookieJarChromium.cpp:
        (WebCore::cookieRequestHeaderFieldValue):
        * platform/network/curl/CookieJarCurl.cpp:
        (WebCore::cookieRequestHeaderFieldValue):
        * platform/network/soup/CookieJarSoup.cpp:
        (WebCore::cookieRequestHeaderFieldValue):
        * platform/network/win/CookieJarCFNetWin.cpp:
        (WebCore::cookieRequestHeaderFieldValue):
        * platform/network/win/CookieJarWin.cpp:
        (WebCore::cookieRequestHeaderFieldValue):
        * platform/qt/CookieJarQt.cpp:
        (WebCore::cookieRequestHeaderFieldValue):
        * websockets/WebSocketHandshake.cpp:
        (WebCore::WebSocketHandshake::clientHandshakeMessage): use cookieRequestHeaderFieldValue() instead of cookies() to include HttpOnly cookies.

2010-02-16  Sebastian Dröge  <sebastian.droege@collabora.co.uk>

        Reviewed by Gustavo Noronha Silva.

        Notify about size changes in the WebKit GStreamer source.
        
        https://bugs.webkit.org/show_bug.cgi?id=34881

        * platform/graphics/gtk/WebKitWebSourceGStreamer.cpp:
        (webkit_web_src_init):
        (StreamingClient::didReceiveResponse):
        * platform/graphics/gtk/WebKitWebSourceGStreamer.h:
        This makes sure that other GStreamer elements know about the
        size and on-disk buffering actually works.
        Only notify about size changes if gst-plugins-base before
        0.10.27 is used, because from that version onwards this is
        automatically handled.
        
        If appsrc 0.10.27 or later is used, set the min-percent property
        to 20% to allow more time to pass between the need-data signal
        and starvation of the pipeline.
        
        Also reset the size when stopping the source and send EOS
        on seeking failures. 

2010-02-11  Ariya Hidayat  <ariya.hidayat@gmail.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Use clipRegion instead of clipPath to save lots of CPU cycles.

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

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::clipOut):
        (WebCore::GraphicsContext::clipOutEllipseInRect):

2010-02-11  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by Shinichiro Hamaji.

        Rename underscored identifiers in WebCore/css/CSSParser.cpp.
        https://bugs.webkit.org/show_bug.cgi?id=34877
        Also fix whitespace erros that surface due to the above fix.

        This doesn't change the code logic. Hence no new tests are required.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):

2010-02-11  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Focusing a resource in the inspector should default to content not header
        https://bugs.webkit.org/show_bug.cgi?id=34861

        * inspector/front-end/Settings.js:
        (WebInspector.Settings.prototype._load): changed initial default to content tab

2010-02-11  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Editing Styles Cannot Tab Backwards from a New Style Item
        https://bugs.webkit.org/show_bug.cgi?id=34872

        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertiesSection.prototype.update): triggers afterUpdate
        (WebInspector.StylePropertiesSection.prototype.afterUpdate): factored out _afterUpdate handling

2010-02-11  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Eric Seidel.

        Add roundedIntSize() convenience method converting FloatSize to IntSize, just like roundedIntPoint() converting FloatPoint to IntPoint.

        * platform/graphics/FloatSize.h:
        (WebCore::roundedIntSize):

2010-02-11  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        Fix two issues on maxLength.
        https://bugs.webkit.org/show_bug.cgi?id=34783

        - ValidityState.tooLong behavior was inconsistent with UIs of
        <input> and <textarea>. tooLong checked Unicode code point length
        though the UIs checks grapheme cluster length.

        - Setting HTMLTextAreaElement::value didn't update the dirty flag.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::tooLong): Use numGraphemeClusters() instead of length().
        * html/HTMLTextAreaElement.cpp:
          Rename setValue() to setNonDirtyValue(), and introduce setValue()
          which calls setNonDirtyValue() and sets the dirty flag.
        (WebCore::HTMLTextAreaElement::childrenChanged):
        (WebCore::HTMLTextAreaElement::reset):
        (WebCore::HTMLTextAreaElement::setValue):
        (WebCore::HTMLTextAreaElement::setNonDirtyValue):
        (WebCore::HTMLTextAreaElement::setDefaultValue):
        (WebCore::HTMLTextAreaElement::tooLong): Use numGraphemeClusters() instead of length().
        * html/HTMLTextAreaElement.h:

2010-02-11  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Alexey Proskuryakov.

        WebSocket bufferedAmount should not be 0 when send after close.
        https://bugs.webkit.org/show_bug.cgi?id=34633

        Test: websocket/tests/bufferedAmount-after-close.html

        * websockets/ThreadableWebSocketChannelClientWrapper.h:
        (WebCore::ThreadableWebSocketChannelClientWrapper::didClose):
        * websockets/WebSocket.cpp:
        (WebCore::WebSocket::WebSocket):
        (WebCore::WebSocket::send):
        (WebCore::WebSocket::close):
        (WebCore::WebSocket::bufferedAmount):
        (WebCore::WebSocket::didConnect):
        (WebCore::WebSocket::didClose):
        * websockets/WebSocket.h:
        * websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::WebSocketChannel):
        (WebCore::WebSocketChannel::send):
        (WebCore::WebSocketChannel::bufferedAmount):
        (WebCore::WebSocketChannel::didClose):
        * websockets/WebSocketChannel.h:
        * websockets/WebSocketChannelClient.h:
        (WebCore::WebSocketChannelClient::didClose):
        * websockets/WorkerThreadableWebSocketChannel.cpp:
        (WebCore::workerContextDidClose):
        (WebCore::WorkerThreadableWebSocketChannel::Peer::didClose):
        * websockets/WorkerThreadableWebSocketChannel.h:

2010-02-11  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Alexey Proskuryakov.

        WebSocket in Worker failed to close
        https://bugs.webkit.org/show_bug.cgi?id=34785

        Tests: websocket/tests/workers/close-in-shared-worker.html
               websocket/tests/workers/close-in-worker.html

        * websockets/WorkerThreadableWebSocketChannel.cpp:
        (WebCore::WorkerThreadableWebSocketChannel::close):

2010-02-11  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Eric Seidel.

        [BREWMP] Add dummy Cursor
        https://bugs.webkit.org/show_bug.cgi?id=34672

        * platform/brew/CursorBrew.cpp: Added.
        (WebCore::Cursor::Cursor):
        (WebCore::Cursor::~Cursor):
        (WebCore::Cursor::operator=):
        (WebCore::dummyCursor):
        (WebCore::pointerCursor):
        (WebCore::crossCursor):
        (WebCore::handCursor):
        (WebCore::moveCursor):
        (WebCore::iBeamCursor):
        (WebCore::waitCursor):
        (WebCore::helpCursor):
        (WebCore::eastResizeCursor):
        (WebCore::northResizeCursor):
        (WebCore::northEastResizeCursor):
        (WebCore::northWestResizeCursor):
        (WebCore::southResizeCursor):
        (WebCore::southEastResizeCursor):
        (WebCore::southWestResizeCursor):
        (WebCore::westResizeCursor):
        (WebCore::northSouthResizeCursor):
        (WebCore::eastWestResizeCursor):
        (WebCore::northEastSouthWestResizeCursor):
        (WebCore::northWestSouthEastResizeCursor):
        (WebCore::columnResizeCursor):
        (WebCore::rowResizeCursor):
        (WebCore::verticalTextCursor):
        (WebCore::cellCursor):
        (WebCore::contextMenuCursor):
        (WebCore::noDropCursor):
        (WebCore::copyCursor):
        (WebCore::progressCursor):
        (WebCore::aliasCursor):
        (WebCore::noneCursor):
        (WebCore::notAllowedCursor):
        (WebCore::zoomInCursor):
        (WebCore::zoomOutCursor):
        (WebCore::middlePanningCursor):
        (WebCore::eastPanningCursor):
        (WebCore::northPanningCursor):
        (WebCore::northEastPanningCursor):
        (WebCore::northWestPanningCursor):
        (WebCore::southPanningCursor):
        (WebCore::southEastPanningCursor):
        (WebCore::southWestPanningCursor):
        (WebCore::westPanningCursor):
        (WebCore::grabCursor):
        (WebCore::grabbingCursor):

2010-02-11  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Add back in a fast path for v8 object wrapping
        when it's not possible we're in a WorkerContext (the fast
        path is important for performance).

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

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::instantiateV8ObjectInWorkerContext):
        (WebCore::V8DOMWrapper::instantiateV8Object):
        * bindings/v8/V8DOMWrapper.h:

2010-02-11  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Small cleanups in SVG render tree code.
        Centralize calls to inflateShadow(), in SVGRenderSupport::computeRectForRepaint,
        instead of spreading them around the subclasses. All classes should inherit
        protected from SVGRenderBase, made it consistent.
        
        Doesn't affect layout tests.

        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::computeRectForRepaint):
        * rendering/RenderSVGImage.h:
        * rendering/RenderSVGModelObject.cpp:
        (WebCore::RenderSVGModelObject::computeRectForRepaint):
        * rendering/RenderSVGRoot.h:
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::computeRectForRepaint):
        (WebCore::RenderSVGText::layout):
        * rendering/SVGRenderSupport.cpp:
        (WebCore::SVGRenderBase::computeRectForRepaint):
        * rendering/SVGRootInlineBox.h:

2010-02-11  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=34857
        Move InlineIterator and BidiRun into new files so subclasses can access them.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/BidiRun.cpp: Added.
        (WebCore::BidiRun::destroy):
        (WebCore::throw):
        (WebCore::BidiRun::operator delete):
        * rendering/BidiRun.h: Added.
        (WebCore::BidiRun::BidiRun):
        (WebCore::BidiRun::next):
        * rendering/InlineIterator.h: Added.
        (WebCore::InlineIterator::InlineIterator):
        (WebCore::operator==):
        (WebCore::operator!=):
        (WebCore::bidiNext):
        (WebCore::bidiFirst):
        (WebCore::InlineIterator::increment):
        (WebCore::InlineIterator::atEnd):
        (WebCore::InlineIterator::current):
        (WebCore::InlineIterator::direction):
        (WebCore::InlineBidiResolver::increment):
        (WebCore::InlineBidiResolver::appendRun):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::appendRunsForObject):
        (WebCore::RenderBlock::requiresLineBox):

2010-02-11  Steve Block  <steveblock@google.com>

        Reviewed by Dimitri Glazkov.

        Fixes CodeGeneratorV8.pm to include the header for the indexer type when using setCollectionIndexedGetter()
        https://bugs.webkit.org/show_bug.cgi?id=34836

        setCollectionIndexedGetter() uses getIndexedPropertyOfCollection(),
        which in turn uses toV8() with the indexer type, which is declared in
        the header for the indexer type.

        No new tests, build fix only.

        * bindings/scripts/CodeGeneratorV8.pm:

2010-02-11  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: split source code into chunks in order to improve text
        viewer performance on large files.

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

        This change brings back SourceFrame's canvas+style magic, restores line
        wrapping and makes things a lot like they used to be.
        It removes TextEditor for now and renames NativeTextViewer into TextViewer.
        TextViewer is no longer derived from TextEditor.
        This TextViewer is still based on TextEditorModel, no iframes are involved.

        Instead of creating div per line, TextViewer splits source code into 50 line
        chunks. Upon scroll event, visible chunks are sharded into lines and individual
        lines are highlighted. Whenever highlighted region gets outside of the visible
        area, highlight spans are thrown away and region is replaced with the original
        plain text chunk.

        Complex stuff:
        - Whenever there is a need to manipulate individual lines (add message bubble /
        set breakpoint / reveal / etc.), individual chunks for such lines are created.
        - There is also an implicit machinery that is maintaining selection when it
        goes beyond the visible area.
        - Search occurrences are implemented as artificial spans interweaving
        highlighting markup.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/NativeTextViewer.js: Removed.
        * inspector/front-end/ScriptView.js:
        (WebInspector.ScriptView):
        * inspector/front-end/Settings.js:
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame):
        (WebInspector.SourceFrame.prototype.set visible):
        (WebInspector.SourceFrame.prototype.set executionLine):
        (WebInspector.SourceFrame.prototype.revealLine):
        (WebInspector.SourceFrame.prototype.addBreakpoint):
        (WebInspector.SourceFrame.prototype.removeBreakpoint):
        (WebInspector.SourceFrame.prototype.addMessage):
        (WebInspector.SourceFrame.prototype.clearMessages):
        (WebInspector.SourceFrame.prototype.sizeToFitContentHeight):
        (WebInspector.SourceFrame.prototype.setContent):
        (WebInspector.SourceFrame.prototype.highlightLine):
        (WebInspector.SourceFrame.prototype._createViewerIfNeeded):
        (WebInspector.SourceFrame.prototype.markAndRevealRange):
        (WebInspector.SourceFrame.prototype.clearMarkedRange):
        (WebInspector.SourceFrame.prototype._breakpointChanged):
        (WebInspector.SourceFrame.prototype._updateExecutionLine):
        (WebInspector.SourceFrame.prototype._addMessageToSource):
        (WebInspector.SourceFrame.prototype._addExistingBreakpointsToSource):
        (WebInspector.SourceFrame.prototype._addBreakpointToSource):
        (WebInspector.SourceFrame.prototype._removeBreakpointFromSource):
        (WebInspector.SourceFrame.prototype._mouseDown):
        (WebInspector.SourceFrame.prototype._editBreakpointCondition.committed):
        (WebInspector.SourceFrame.prototype._editBreakpointCondition.dismissed):
        (WebInspector.SourceFrame.prototype._editBreakpointCondition):
        (WebInspector.SourceFrame.prototype._showBreakpointConditionPopup):
        (WebInspector.SourceFrame.prototype._createConditionElement):
        (WebInspector.SourceFrame.prototype._keyDown):
        (WebInspector.SourceFrame.prototype.resize):
        (WebInspector.SourceFrame.prototype._drawProgramCounterInContext):
        (WebInspector.SourceFrame.prototype._drawProgramCounterImageIfNeeded):
        (WebInspector.SourceFrame.prototype._drawBreakpointImagesIfNeeded.drawBreakpoint):
        (WebInspector.SourceFrame.prototype._drawBreakpointImagesIfNeeded):
        * inspector/front-end/SourceView.js:
        (WebInspector.SourceView):
        (WebInspector.SourceView.prototype._removeBreakpoint):
        (WebInspector.SourceView.prototype.searchCanceled):
        (WebInspector.SourceView.prototype._jumpToSearchResult):
        * inspector/front-end/TextEditor.js: Removed.
        * inspector/front-end/TextViewer.js: Added.
        (WebInspector.TextViewer):
        (WebInspector.TextViewer.prototype.set mimeType):
        (WebInspector.TextViewer.prototype.get textModel):
        (WebInspector.TextViewer.prototype.revealLine):
        (WebInspector.TextViewer.prototype.addDecoration):
        (WebInspector.TextViewer.prototype.removeDecoration):
        (WebInspector.TextViewer.prototype.markAndRevealRange):
        (WebInspector.TextViewer.prototype.highlightLine):
        (WebInspector.TextViewer.prototype._textChanged):
        (WebInspector.TextViewer.prototype._createChunkRow):
        (WebInspector.TextViewer.prototype._makeLineAChunk):
        (WebInspector.TextViewer.prototype._indexChunks):
        (WebInspector.TextViewer.prototype._highlightChanged):
        (WebInspector.TextViewer.prototype._scroll):
        (WebInspector.TextViewer.prototype.setCoalescingUpdate):
        (WebInspector.TextViewer.prototype._repaintAll):
        (WebInspector.TextViewer.prototype._chunkForOffset):
        (WebInspector.TextViewer.prototype._chunkNumberForLine):
        (WebInspector.TextViewer.prototype._chunkStartLine):
        (WebInspector.TextViewer.prototype._restoreChunks):
        (WebInspector.TextViewer.prototype._repaint):
        (WebInspector.TextViewer.prototype._getSelection):
        (WebInspector.TextViewer.prototype._restoreSelection):
        (WebInspector.TextViewer.prototype._selectionToPosition):
        (WebInspector.TextViewer.prototype._createLineRow):
        (WebInspector.TextViewer.prototype._paintLine):
        (WebInspector.TextViewer.prototype._createSpan):
        (WebInspector.TextViewer.prototype._createLink):
        (WebInspector.TextViewer.prototype._rewriteHref):
        (WebInspector.TextViewer.prototype._markRange):
        (WebInspector.TextViewer.prototype._decimalDigits):
        (WebInspector.TextViewer.prototype.resize):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.css:
        * inspector/front-end/inspector.html:
        * inspector/front-end/textEditor.css: Removed.
        * inspector/front-end/textViewer.css: Added.
        * inspector/front-end/utilities.js:
        (Node.prototype.traverseNextTextNode):
        (Node.prototype.rangeBoundaryForOffset):

2010-02-11  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Tor Arne Vestbø.

        [Qt] ENABLE_RUBY flag was restored by r54649, but default value wasn't added for Qt port.
        https://bugs.webkit.org/show_bug.cgi?id=34698

        * WebCore.pri: Add ENABLE_RUBY=1 as default setting.

2010-02-11  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        Updates Android V8 Makefile to generate Notifications and WebSockets headers required by V8DOMWrapper.cpp
        https://bugs.webkit.org/show_bug.cgi?id=34815

        No new tests, build fix only.

        * Android.derived.v8bindings.mk:

2010-02-11  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        Updates Android V8 Makefile to generate XPath header required by V8Proxy.cpp
        https://bugs.webkit.org/show_bug.cgi?id=34814

        No new tests, build fix only.

        * Android.derived.v8bindings.mk:

2010-02-11  Steve Block  <steveblock@google.com>

        Reviewed by Nate Chapin.

        Update Android V8 Makefile to generate Inspector headers required by V8 ScriptObject.cpp
        https://bugs.webkit.org/show_bug.cgi?id=34806

        No new tests, build fix only.

        * Android.derived.v8bindings.mk:

2010-02-11  Steve Block  <steveblock@google.com>

        Reviewed by David Levin.

        Guards SVG code in V8 bindings with ENABLE(SVG)
        https://bugs.webkit.org/show_bug.cgi?id=34812

        Also updates Android V8 Makefile to generate required SVG headers.

        No new tests, build fix only.

        * Android.derived.v8bindings.mk:
        * bindings/v8/custom/V8CSSValueCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8DocumentCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8ElementCustom.cpp:
        (WebCore::toV8):

2010-02-08  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Cameron Zwarich.

        Restore ENABLE_RUBY flag so vendors can ship with Ruby disabled if they choose.
        https://bugs.webkit.org/show_bug.cgi?id=34698

        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.make:
        * GNUmakefile.am:
        * html/HTMLTagNames.in: Make the ruby-related tag names conditional.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::createObject): ifdef the code that would create ruby elements.
        * rendering/RenderObject.h: ditto above
        * rendering/RenderRuby.cpp: ifdef this whole file
        * rendering/RenderRuby.h: ditto
        * rendering/RenderRubyBase.cpp: ditto
        * rendering/RenderRubyBase.h: ditto
        * rendering/RenderRubyRun.cpp: ditto
        * rendering/RenderRubyRun.h: ditto
        * rendering/RenderRubyText.cpp: ditto
        * rendering/RenderRubyText.h: ditto

2010-02-11  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        Step attribute support for date&time types.
        https://bugs.webkit.org/show_bug.cgi?id=30847

        - Add implementation for ValidityState.stepMismatch, stepUp() and
          stepDown() for date, datetime, datetime-local, month, time, week types.
        - Fix string representation of DateComponents.

        Tests: fast/forms/ValidityState-stepMismatch.html
               fast/forms/input-stepup-stepdown.html

        * html/HTMLInputElement.cpp:
          - Change monthDefaultMaximum so that DateComponents::m_year doesn't overflow.
        (WebCore::HTMLInputElement::stepBase):
        (WebCore::HTMLInputElement::stepMismatch):
        (WebCore::HTMLInputElement::getStepParameters):
        (WebCore::HTMLInputElement::getAllowedValueStep):
        (WebCore::HTMLInputElement::applyStep):
          Renamed from applyStepForNumberOrRange(), and add support for other types.
        (WebCore::HTMLInputElement::stepUp): Rename applyStepForNumberOrRange().
        (WebCore::HTMLInputElement::stepDown): Rename applyStepForNumberOrRange().
        (WebCore::HTMLInputElement::setValueAsDate): Use setDateValue().
        (WebCore::HTMLInputElement::setDateValue):
          A helper function to make the best representation of DateComponents.
        (WebCore::HTMLInputElement::setValueAsNumber):  Use setDateValue().
        * html/HTMLInputElement.h:

2010-02-10  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        postMessage does not send ImageData
        https://bugs.webkit.org/show_bug.cgi?id=34825

        Implement serialisation of ImageData, and for testing reasons
        expose the ImageData constructor (which should already have
        been exposed).

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::SerializedImageData::create):
        (WebCore::SerializedImageData::width):
        (WebCore::SerializedImageData::height):
        (WebCore::SerializedImageData::data):
        (WebCore::SerializedImageData::SerializedImageData):
        (WebCore::SerializedScriptValueData::SerializedScriptValueData):
        (WebCore::SharedSerializedData::asImageData):
        (WebCore::SerializingTreeWalker::convertIfTerminal):
        (WebCore::DeserializingTreeWalker::convertIfTerminal):
        (WebCore::TeardownTreeWalker::convertIfTerminal):
        * bindings/js/SerializedScriptValue.h:
        (WebCore::SerializedScriptValueData::):
        (WebCore::SerializedScriptValueData::asImageData):
        * html/canvas/CanvasPixelArray.h:
        (WebCore::CanvasPixelArray::data):
        * page/DOMWindow.idl:

2010-02-10  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        Address last round of review comments on r53607
        https://bugs.webkit.org/show_bug.cgi?id=33940

        Mostly renaming and cleaning up.

        * css/CSSImportRule.cpp:
        (WebCore::CSSImportRule::insertedIntoParent):
        * css/CSSStyleSheet.h:
        (WebCore::CSSStyleSheet::create):
        (WebCore::CSSStyleSheet::createInline):
        * css/StyleBase.cpp:
        (WebCore::StyleBase::baseURL):
        * css/StyleSheet.cpp:
        (WebCore::StyleSheet::StyleSheet):
        * css/StyleSheet.h:
        (WebCore::StyleSheet::href):
        (WebCore::StyleSheet::setFinalURL):
        (WebCore::StyleSheet::finalURL):
        * dom/Document.cpp:
        (WebCore::Document::updateBaseURL):
        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::checkStyleSheet):
        * xml/XSLImportRule.cpp:
        (WebCore::XSLImportRule::loadSheet):
        * xml/XSLStyleSheet.h:
        (WebCore::XSLStyleSheet::create):
        (WebCore::XSLStyleSheet::createInline):
        * xml/XSLStyleSheetLibxslt.cpp:
        (WebCore::XSLStyleSheet::XSLStyleSheet):
        (WebCore::XSLStyleSheet::parseString):
        (WebCore::XSLStyleSheet::loadChildSheets):
        * xml/XSLStyleSheetQt.cpp:
        (WebCore::XSLStyleSheet::XSLStyleSheet):

2010-02-10  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Ariya Hidayat.

        [Qt] GraphicsLayer: somtimes the item flickers at the end of an animation
        This is because we try to delete the animation when finished: that is
        unnecessary. WebCore manages the animation's lifecycle and makes sure
        to call the right function when the animation can be deleted.

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

        No new tests.

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::GraphicsLayerQt::addAnimation): No need to delete here
        (WebCore::GraphicsLayerQt::removeAnimationsForProperty): deleteLater

2010-02-10  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix for wxMac/Cocoa.

        * platform/wx/wxcode/mac/carbon/fontprops.cpp: Removed.
        * platform/wx/wxcode/mac/carbon/fontprops.mm: Copied from WebCore/platform/wx/wxcode/mac/carbon/fontprops.cpp.
        * wscript:

2010-02-10  Jon Honeycutt  <jhoneycutt@apple.com>

        REGRESSION(24929): PDF page doesn't load in background tab

        Reviewed by Dan Bernstein.

        * plugins/PluginView.cpp:
        (WebCore::PluginView::startOrAddToUnstartedList):
        Only delay loading of the plug-in if we'll kick off our own load of the
        plug-in data later, in start().

2010-02-10  Enrica Casucci  <enrica@apple.com>

        Reviewed by Simon Fraser.

        Crash in WebKit!WebCore::RenderTextControlSingleLine::createInnerTextStyle doing anything in Safari after sitting on a page with 3D site        
        <rdar://problem/7557201>
        https://bugs.webkit.org/show_bug.cgi?id=34823
        
        No tests added because the code is exercised by the existing tests.
        
        The root cause was the fact that we were not releasing a reference that was held by CA.
        In debug builds we had an assert in the destructor of WKCACFLayer.
        
        * platform/graphics/win/GraphicsLayerCACF.cpp:
        (WebCore::GraphicsLayerCACF::~GraphicsLayerCACF):

2010-02-10  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Eric Seidel.

        [BREWMP] Typedef DragImageRef
        https://bugs.webkit.org/show_bug.cgi?id=34791

        Use IImage* as it is the BREW's image type.

        * platform/DragImage.h:

2010-02-10  Beth Dakin  <bdakin@apple.com>

        Reviewed by Simon Fraser and Darin Adler.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=34185 REGRESSION: 
        Mask not invalidating

        SVGMaskElement is the only class that keeps a HashMap of canvas 
        resources rather than just a pointer to a resource. This 
        patch makes SVGMaskElement invalidate all of its resources in the 
        HashMap instead of just one.

        * svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::svgAttributeChanged):
        (WebCore::SVGMaskElement::childrenChanged):
        (WebCore::SVGMaskElement::invalidateCanvasResources):
        * svg/SVGMaskElement.h:
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::invalidateResourcesInAncestorChain):
        (WebCore::SVGStyledElement::invalidateCanvasResources):
        * svg/SVGStyledElement.h:

2010-02-10  Stephan Aßmus  <superstippi@gmx.de>

        Reviewed by David Levin.

        Fixes to rect conversion and image rendering on Haiku
        https://bugs.webkit.org/show_bug.cgi?id=34684

        Covered by existing tests.

        The changes to the rect conversions are indeed correct. In Haiku (to stay
        compatibly with BeOS), a BRect specifies the left/top and bottom/right pixel
        *indices*, even though the values are floating point. So a rectangle covering
        just one pixel would be specified as BRect(0, 0, 0, 0). In WebCore and other
        frame works, such rectangles would be expressed as 0, 0, 1, 1. In WebCore, the
        width and height of rectangles refer to the distance between pixels, while on
        Haiku, a one pixel rect has indeed a width and height of 0, as confusing as
        that may be.

        The part of the patch that affects
        WebCore/platform/graphics/haiku/ImageHaiku.cpp also implements the drawing
        methods more correctly. Image observers are notified, and pattern drawing takes
        the "phase" into account which makes scrolled backgrounds render correctly.
        Transformations are still not supported, since the Haiku drawing backend itself
        does not yet support them.

        Use OwnPtr when creating the BBitmap to avoid future leaks with early returns.

        Convert the bitmap data to non pre-multiplied until Haiku supports drawing
        pre-multiplied bitmaps.

        * platform/graphics/haiku/FloatRectHaiku.cpp: Fixed conversion
        * platform/graphics/haiku/ImageHaiku.cpp:
        (WebCore::BitmapImage::draw): Fixed placement, notify observers
        (WebCore::Image::drawPattern): Implemented using "phase" to fix scrolling, notify observers
        * platform/graphics/haiku/IntRectHaiku.cpp: Fixed conversion
        * platform/image-decoders/haiku/ImageDecoderHaiku.cpp: Fixed conversion

2010-02-10  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by David Levin.

        Clean up unused member var and initialization in Document
        https://bugs.webkit.org/show_bug.cgi?id=34820

        Remove unused m_secureForms member variable in Document.
        
        * dom/Document.cpp:
        (WebCore::Document::Document):
        * dom/Document.h:

2010-02-10  Kevin Watters  <kevinwatters@gmail.com>

        Reviewed by Kevin Ollivier.

        [wx] Add Windows complex text support and Mac support for containsCharacters.
        
        https://bugs.webkit.org/show_bug.cgi?id=34759
        
        * platform/graphics/SimpleFontData.h:
        * platform/graphics/wx/FontPlatformData.h:
        (WebCore::FontPlatformData::roundsGlyphAdvances):
        * platform/graphics/wx/FontPlatformDataWx.cpp:
        (WebCore::FontPlatformData::useGDI):
        (WebCore::FontPlatformData::hfont):
        * platform/graphics/wx/FontWx.cpp:
        (WebCore::Font::canReturnFallbackFontsForComplexText):
        (WebCore::Font::selectionRectForComplexText):
        (WebCore::Font::drawComplexText):
        (WebCore::Font::floatWidthForComplexText):
        (WebCore::Font::offsetForPositionForComplexText):
        * platform/graphics/wx/SimpleFontDataWx.cpp:
        (WebCore::SimpleFontData::platformInit):
        (WebCore::SimpleFontData::platformDestroy):
        (WebCore::SimpleFontData::containsCharacters):
        (WebCore::SimpleFontData::platformWidthForGlyph):
        (WebCore::SimpleFontData::scriptFontProperties):
        (WebCore::SimpleFontData::initGDIFont):
        (WebCore::SimpleFontData::platformCommonDestroy):
        (WebCore::SimpleFontData::widthForGDIGlyph):
        * platform/wx/wxcode/fontprops.h:
        * platform/wx/wxcode/gtk/fontprops.cpp:
        (wxFontContainsCharacters):
        * platform/wx/wxcode/mac/carbon/fontprops.cpp:
        (wxFontContainsCharacters):
        * platform/wx/wxcode/win/fontprops.cpp:
        (wxFontContainsCharacters):
        * platform/wx/wxcode/win/non-kerned-drawing.cpp:
        (WebCore::drawTextWithSpacing):
        * wscript:

2010-02-10  Kwang Yul Seo  <skyul@company100.net>
        Reviewed by Eric Seidel.

        [BREWMP] Add dummy Frame::dragImageForSelection
        https://bugs.webkit.org/show_bug.cgi?id=34792

        Add FrameBrew.cpp which contains a dummy implementation of
        Frame::dragImageForSelection.

        * page/brew/FrameBrew.cpp: Added.
        (WebCore::Frame::dragImageForSelection):

2010-02-10  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix. Switch drawPattern to Image class like other platforms.

        * platform/graphics/BitmapImage.h:
        * platform/graphics/wx/ImageWx.cpp:
        (WebCore::Image::drawPattern):

2010-02-10  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Darin Adler.

        Added CA_PRINT_TREE functionality to WKCACFLayer implementation
        https://bugs.webkit.org/show_bug.cgi?id=34779
        
        I've tried to duplicate the look of the output on Mac, but
        it's not quite the same. It shows all the useful information though.
        It is enabled by setting the environment variable CA_PRINT_TREE=1
        
        * platform/graphics/win/WKCACFLayer.cpp:Implementation of printTree
        (WebCore::WKCACFLayer::isTransformLayer):
            Moved function to cpp file because it needs to use the function form
            of kCACFTransformLayer because the DLL is delay loaded, and that function
            can only be called from the cpp file.
        (WebCore::WKCACFLayer::sublayerAtIndex):
        (WebCore::printIndent):
        (WebCore::printTransform):
        (WebCore::WKCACFLayer::printTree):Prints from this layer down
        (WebCore::WKCACFLayer::printLayer):Prints this layer and recursively calls sublayers
        * platform/graphics/win/WKCACFLayer.h:
        * platform/graphics/win/WKCACFLayerRenderer.cpp:
        (WebCore::WKCACFLayerRenderer::WKCACFLayerRenderer):
        (WebCore::WKCACFLayerRenderer::createRenderer):Adds a name to the root layers
        (WebCore::WKCACFLayerRenderer::render):Calls printTree when CA_PRINT_TREE is 1
        * platform/graphics/win/WKCACFLayerRenderer.h:
        
2010-02-10  Nate Chapin  <japhet@chromium.org>

        Reviewed by Adam Barth.

        Change V8DOMWrapper::lookupDOMWrapper() and configureTemplate()
        to not use V8ClassIndex.

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

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/V8Binding.cpp:
        * bindings/v8/V8Binding.h:
        * bindings/v8/V8DOMWindowShell.cpp:
        * bindings/v8/V8DOMWrapper.cpp:
        * bindings/v8/V8DOMWrapper.h:
        * bindings/v8/V8Proxy.cpp:
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        * bindings/v8/custom/V8LocationCustom.cpp:
        * bindings/v8/custom/V8MessageEventCustom.cpp:

2010-02-10  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Handle the possibility that ScheduledAction::execute() may
        retrieve a null V8Proxy* even if not in a WorkerContext (e.g., if
        JS was disallowed).

        * bindings/v8/ScheduledAction.cpp:
        (WebCore::ScheduledAction::execute):

2010-02-10  Kenneth Russell  <kbr@google.com>

        Reviewed by Oliver Hunt.

        Remove automatic viewport resizing
        https://bugs.webkit.org/show_bug.cgi?id=34766

        Removed automatic viewport resizing per conclusions on the WebGL
        mailing list. Added test verifying new behavior and updated a
        couple of previous tests failing after this change.

        Test: fast/canvas/webgl/viewport-unchanged-upon-resize.html

        * platform/graphics/mac/GraphicsContext3DMac.cpp:
        (WebCore::GraphicsContext3D::reshape):

2010-02-10  Ariya Hidayat  <ariya.hidayat@gmail.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Implement image interpolation quality.

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

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate):
        (WebCore::GraphicsContext::setImageInterpolationQuality):
        (WebCore::GraphicsContext::imageInterpolationQuality):

2010-02-10  Eric Seidel  <eric@webkit.org>

        No review, Mac build fix.

        Crash in Flash at http://www.cctv.com/
        https://bugs.webkit.org/show_bug.cgi?id=34673

        * plugins/PluginViewNone.cpp:
        (WebCore::PluginView::getValueStatic):

2010-02-10  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Xan Lopez.

        [GTK] Hits assertion on history back, with page cache enabled, in specific conditions
        https://bugs.webkit.org/show_bug.cgi?id=34773

        When unsetting the adjustments from a ScrollView, also disconnect
        them from the Scrollbars.

        Test: fast/frames/frame-crash-with-page-cache.html

        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::setGtkAdjustments):
        * platform/gtk/ScrollbarGtk.cpp:
        (ScrollbarGtk::~ScrollbarGtk):
        (ScrollbarGtk::detachAdjustment):
        * platform/gtk/ScrollbarGtk.h:

2010-02-09  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Geoffrey Garen.

        https://bugs.webkit.org/show_bug.cgi?id=34490
        WebCore::ImageEventSender::dispatchPendingEvents() crashes in certain conditions

        Test: fast/images/destroyed-image-load-event.html

        * ForwardingHeaders/wtf/ValueCheck.h: Added.

        * loader/ImageLoader.cpp:
        (WTF::ValueCheck): Special case value check for ImageLoader - it's allocated inside elements,
        so check the owner instead.
        (WebCore::ImageEventSender::hasPendingEvents): Added a debugging aid for ImageLoader destructor.
        (WebCore::ImageLoader::~ImageLoader): Assert that we're not going to leave dangling pointers
        in ImageEventSender.
        (WebCore::ImageLoader::setImage): Cancel events that could be dispatched for the previous
        image. The only client using this method that I could find was DeleteButton, which doesn't
        care about load events for the new image, so I didn't add any code for firing those.
        (WebCore::ImageLoader::setLoadingImage): This method only existed to confuse readers -
        there wasn't any meaningful code shared (callers just undid most assignments made there).
        Merged the logic into callers.
        (WebCore::ImageLoader::updateFromElement): We're forgetting the old image, so forget its
        old events, too.
        (WebCore::ImageLoader::notifyFinished): This can be called from setImage(), in which case
        no one is going to dispatch the event "soon". So, don't queue it.
        (WebCore::ImageEventSender::dispatchPendingEvents): Call checkConsistency(). This didn't
        help catch this particuar bug, but seems like a useful check anyway.

        * loader/ImageLoader.h: Removed setLoadingImage().

2010-02-10  Jon Honeycutt  <jhoneycutt@apple.com>

        Mac build fix. Unreviewed.

        * WebCore.xcodeproj/project.pbxproj:
        Add PluginViewNone.cpp to the Mac project.

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

        Optimize ImageBuffer::toDataURL's CG implementation

        There was some unused code that could have been removed in r31830 when
        this function was changed not to flip the CG image anymore.

        Fixes <http://webkit.org/b/34808> ImageBuffer::toDataURL allocates
        unnecessary memory under CoreGraphics

        Reviewed by Sam Weinig.

        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::toDataURL): Don't allocate an unused CGImageRef
        and buffer, and switch to the new overload of base64Encode that
        doesn't require us to copy all the image data into a Vector first.

        * platform/text/Base64.cpp:
        (WebCore::base64Encode):
        * platform/text/Base64.h:
        Added an overload that takes a raw data pointer and length, just like
        we have for base64Decode. The overload that takes a Vector as input
        just calls through to the new overload.

2010-02-10  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        Complete the fix for <rdar://problem/7577604> Drag and Drop: background elements are bleeding through
        https://bugs.webkit.org/show_bug.cgi?id=34546

        * manual-tests/drag-image-table-part-decorations.html:
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::paint): Don’t paint collapsed borders if this object shouldn’t
        paint within the current painting root.

2010-02-08  Jon Honeycutt  <jhoneycutt@apple.com>

        <rdar://problem/7436875> Crash in Flash when visiting
        http://www.cctv.com/default.shtml (WER ID 819298200) [watson 2502260]

        Reviewed by Darin Adler.

        Test: platform/win/plugins/plugin-delayed-destroy.html

        * bridge/NP_jsobject.cpp:
        (_NPN_Evaluate):
        If Flash calls this to evaluate a script that destroys the PluginView,
        we crash when returning to Flash code. Before evaluating the script,
        call PluginView::keepAlive() to hold a ref to this instance (and release
        it asynchronously).

        * plugins/PluginView.cpp:
        (WebCore::instanceMap):
        Return a map from the NPP to the PluginView.
        (WebCore::PluginView::~PluginView):
        Assert that the keep alive timer is not running; remove ourselves from
        the instance map.
        (WebCore::PluginView::performRequest):
        The parent Frame is now a RefPtr; use .get().
        (WebCore::PluginView::status):
        Ditto.
        (WebCore::PluginView::didReceiveResponse):
        Ditto.
        (WebCore::PluginView::PluginView):
        Add the view to the instance map.
        (WebCore::PluginView::lifeSupportTimerFired):
        Deref the PluginView.
        (WebCore::PluginView::keepAlive):
        Ref the PluginView, then start a time to release the reference
        asynchronously.
        (WebCore::PluginView::keepAlive):
        Find the PluginView in the map, and call its keepAlive() function.

        * plugins/PluginView.h:
        Made m_parentFrame a RefPtr, so that it will remain valid when the
        keep alive timer fires.
        (WebCore::PluginView::parentFrame):
        Use .get().

        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::updatePluginWidget):
        Use .get().
        (WebCore::PluginView::handleKeyboardEvent):
        Use .get().
        (WebCore::PluginView::handleMouseEvent):
        Use .get().

        * plugins/PluginViewNone.cpp:
        (WebCore::PluginView::keepAlive):
        Stubbed.

2010-02-10  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        Support frameset flattening
        https://bugs.webkit.org/show_bug.cgi?id=32717

        Add support for enabling/disabling FrameSet Flattening on the Mac port.

        * WebCore.base.exp:

2010-02-10  Jeremy Orlow  <jorlow@chromium.org>

        Revert 54599 because it breaks a lot of tests on Windows Chrome

        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMNode.prototype._insertChild):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.updateModifiedNodes):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeOutline.prototype.revealAndSelectNode):
        (WebInspector.ElementsTreeElement):
        (WebInspector.ElementsTreeElement.prototype._updateChildren.updateChildrenOfNode):
        (WebInspector.ElementsTreeElement.prototype._updateChildren):
        ():
        * inspector/front-end/inspector.css:

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

        Fix bad paths in WebCore.vcproj

        These were harmless in VS2005, but cause project conversion errors in
        VS2010 RC.

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

        Reviewed by Dan Bernstein.

        * WebCore.vcproj/WebCore.vcproj: Removed leading "." from paths to
        JSHTMLFrameSetElement.{cpp,h}.

2010-02-10  Julien Chaffraix  <jchaffraix@webkit.org>

        Not reviewed (build fix).

        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::FontCache::getLastResortFallbackFont): Return a
        SimpleFontData here.

2010-02-10 Julien Chaffraix  <jchaffraix@pleyo.com>

        Reviewed by Eric Seidel.

        Bug 23287 -  Avoid using FontPlatformData outside the FontCache

        No functional change, only refactored the code using FontPlatformData to use SimpleFontData.

        This change leaves the class FontCached as it needs some thoughts and more refactoring.

        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::getFontData): Call getCachedFontData with the 2 parameters directly.
        * css/CSSFontSelector.cpp:
        (WebCore::fontDataForGenericFamily): Ditto.
        * platform/graphics/FontCache.cpp:
        (WebCore::FontCache::getCachedFontData): This method is meant to replace getCachedFontPlatformData
        that was moved in the private section of the class. It calls getCachedFontPlatformData and cache
        the returned FontPlatformData if it is not null.
        (WebCore::FontCache::getFontData): Updated to use the new getCachedFontData.
        * platform/graphics/FontCache.h: Updated several methods to return a SimpleFontData in lieu of a
        FontPlatformData. Moved some method in the private sections.

        * platform/graphics/chromium/FontCacheChromiumWin.cpp:
        (WebCore::FontCache::getSimilarFontPlatformData):
        (WebCore::FontCache::getLastResortFallbackFont):
        * platform/graphics/chromium/FontCacheLinux.cpp:
        (WebCore::FontCache::getSimilarFontPlatformData):
        (WebCore::FontCache::getLastResortFallbackFont):
        * platform/graphics/gtk/FontCacheGtk.cpp:
        (WebCore::FontCache::getSimilarFontPlatformData):
        (WebCore::FontCache::getLastResortFallbackFont):
        * platform/graphics/haiku/FontCacheHaiku.cpp:
        (WebCore::FontCache::getSimilarFontPlatformData):
        (WebCore::FontCache::getLastResortFallbackFont):
        * platform/graphics/qt/FontCacheQt.cpp:
        (WebCore::FontCache::getLastResortFallbackFont):
        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::FontCache::getSimilarFontPlatformData):
        (WebCore::FontCache::getLastResortFallbackFont):
        * platform/graphics/wince/FontCacheWince.cpp:
        * platform/graphics/wx/FontCacheWx.cpp:
        (WebCore::FontCache::getSimilarFontPlatformData):
        (WebCore::FontCache::getLastResortFallbackFont):
        Updated all the previous platform methods to return a SimpleFontData.

        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::FontCache::getSimilarFontPlatformData): Updated to return a SimpleFontData.
        (WebCore::FontCache::getLastResortFallbackFont): Ditto. Also refactored the code
        and moved a DEFINE_STATIC_LOCAL where it is needed.

2010-02-10  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Elements Panel: Limit the number of initially loaded element children
        https://bugs.webkit.org/show_bug.cgi?id=34421

        Test: inspector/elements-panel-limited-children.html

        * English.lproj/localizedStrings.js:
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMNode.prototype._insertChild):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.updateModifiedNodes):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeOutline.prototype.createTreeElementFor):
        (WebInspector.ElementsTreeOutline.prototype.revealAndSelectNode):
        (WebInspector.ElementsTreeElement):
        (WebInspector.ElementsTreeElement.prototype.get expandedChildrenLimit):
        (WebInspector.ElementsTreeElement.prototype.set expandedChildrenLimit):
        (WebInspector.ElementsTreeElement.prototype.get expandedChildCount):
        (WebInspector.ElementsTreeElement.prototype.showChild):
        (WebInspector.ElementsTreeElement.prototype.insertChildElement):
        (WebInspector.ElementsTreeElement.prototype.moveChild):
        (WebInspector.ElementsTreeElement.prototype._updateChildren.updateChildrenOfNode):
        (WebInspector.ElementsTreeElement.prototype._updateChildren):
        (WebInspector.ElementsTreeElement.prototype.adjustCollapsedRange):
        (WebInspector.ElementsTreeElement.prototype.handleLoadAllChildren):
        ():
        * inspector/front-end/inspector.css:

2010-02-10  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Remove several #if USE(JSC) branches. Introduce ScriptDebugServer class for
        making JavaScriptDebugServer engine-agnostic.

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

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/ScriptDebugServer.cpp: Added.
        (WebCore::ScriptDebugServer::recompileAllJSFunctions):
        (WebCore::ScriptDebugServer::recompileAllJSFunctionsSoon):
        * bindings/js/ScriptDebugServer.h: Added.
        * bindings/v8/ScriptDebugServer.cpp: Added.
        (WebCore::ScriptDebugServer::recompileAllJSFunctions):
        (WebCore::ScriptDebugServer::recompileAllJSFunctionsSoon):
        * bindings/v8/ScriptDebugServer.h: Added.
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::startUserInitiatedProfiling):
        (WebCore::InspectorController::enableProfiler):
        (WebCore::InspectorController::disableProfiler):
        * page/Console.cpp:
        (WebCore::Console::profile):
        (WebCore::Console::profileEnd):

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

        Reviewed by Simon Hausmann.

        Make JObjectWrapper::ref() and deref() public accessible to derefIfNull().

        Will be reverted when the following winscw compiler bug is fixed.
        https://xdabug001.ext.nokia.com/bugzilla/show_bug.cgi?id=9812

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

        * bridge/jni/jsc/JavaInstanceJSC.h:
        * bridge/jni/v8/JavaInstanceV8.h:

2010-02-10  Yaar Schnitman  <yaar@chromium.org>

        Reviewed by Adam Barth.

        Simplified RuntimeEnabledFeatures and corresponding v8 generated code
        https://bugs.webkit.org/show_bug.cgi?id=34667

        * WebCore.gypi:
        * bindings/generic/RuntimeEnabledFeatures.cpp: Added.
        (WebCore::RuntimeEnabledFeatures::audioEnabled):
        (WebCore::RuntimeEnabledFeatures::htmlMediaElementEnabled):
        (WebCore::RuntimeEnabledFeatures::htmlAudioElementEnabled):
        (WebCore::RuntimeEnabledFeatures::htmlVideoElementEnabled):
        (WebCore::RuntimeEnabledFeatures::mediaErrorEnabled):
        (WebCore::RuntimeEnabledFeatures::sharedWorkerEnabled):
        (WebCore::RuntimeEnabledFeatures::webSocketEnabled):
        (WebCore::RuntimeEnabledFeatures::openDatabaseEnabled):
        * bindings/generic/RuntimeEnabledFeatures.h: Added.
        (WebCore::RuntimeEnabledFeatures::setLocalStorageEnabled):
        (WebCore::RuntimeEnabledFeatures::localStorageEnabled):
        (WebCore::RuntimeEnabledFeatures::setSessionStorageEnabled):
        (WebCore::RuntimeEnabledFeatures::sessionStorageEnabled):
        (WebCore::RuntimeEnabledFeatures::setWebkitNotificationsEnabled):
        (WebCore::RuntimeEnabledFeatures::webkitNotificationsEnabled):
        (WebCore::RuntimeEnabledFeatures::setApplicationCacheEnabled):
        (WebCore::RuntimeEnabledFeatures::applicationCacheEnabled):
        (WebCore::RuntimeEnabledFeatures::setGeolocationEnabled):
        (WebCore::RuntimeEnabledFeatures::geolocationEnabled):
        (WebCore::RuntimeEnabledFeatures::setIndexedDBEnabled):
        (WebCore::RuntimeEnabledFeatures::indexedDBEnabled):
        (WebCore::RuntimeEnabledFeatures::RuntimeEnabledFeatures):
        * bindings/scripts/CodeGenerator.pm:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/RuntimeEnabledFeatures.cpp: Removed.
        * bindings/v8/RuntimeEnabledFeatures.h: Removed.
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        * bindings/v8/custom/V8NavigatorCustom.cpp:
        * bindings/v8/custom/V8WorkerContextCustom.cpp:

2010-02-09  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Add two basic categories for the Audits panel
        https://bugs.webkit.org/show_bug.cgi?id=32930

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/AuditCategories.js: Added.
        (WebInspector.AuditCategories.PagePerformance):
        (WebInspector.AuditCategories.PagePerformance.prototype.initialize):
        (WebInspector.AuditCategories.NetworkUtilization):
        (WebInspector.AuditCategories.NetworkUtilization.prototype.initialize):
        * inspector/front-end/AuditLauncherView.js:
        (WebInspector.AuditLauncherView.prototype.updateResourceTrackingState):
        (WebInspector.AuditLauncherView.prototype._createLauncherUI):
        (WebInspector.AuditLauncherView.prototype.show):
        * inspector/front-end/AuditRules.js: Added.
        (WebInspector.AuditRules.arrayAsUL):
        (WebInspector.AuditRules.getDomainToResourcesMap):
        (WebInspector.AuditRules.evaluateInTargetWindow):
        (WebInspector.AuditRules.GzipRule):
        (WebInspector.AuditRules.GzipRule.prototype.doRun):
        (WebInspector.AuditRules.GzipRule.prototype._isCompressed):
        (WebInspector.AuditRules.GzipRule.prototype._shouldCompress):
        (WebInspector.AuditRules.CombineExternalResourcesRule):
        (WebInspector.AuditRules.CombineExternalResourcesRule.prototype.doRun):
        (WebInspector.AuditRules.CombineJsResourcesRule):
        (WebInspector.AuditRules.CombineCssResourcesRule):
        (WebInspector.AuditRules.MinimizeDnsLookupsRule):
        (WebInspector.AuditRules.MinimizeDnsLookupsRule.prototype.doRun):
        (WebInspector.AuditRules.ParallelizeDownloadRule):
        (WebInspector.AuditRules.ParallelizeDownloadRule.prototype.doRun):
        (WebInspector.AuditRules.UnusedCssRule):
        (WebInspector.AuditRules.UnusedCssRule.prototype._getUnusedStylesheetRatioMessage):
        (WebInspector.AuditRules.UnusedCssRule.prototype._getUnusedTotalRatioMessage):
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun.evalCallback):
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun.routine):
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun):
        (WebInspector.AuditRules.CacheControlRule):
        (WebInspector.AuditRules.CacheControlRule.prototype.InfoCheck.1.FailCheck.0.WarningCheck.1.SevereCheck.2.doRun):
        (WebInspector.AuditRules.CacheControlRule.prototype.handleNonCacheableResources):
        (WebInspector.AuditRules.CacheControlRule.prototype._cacheableAndNonCacheableResources):
        (WebInspector.AuditRules.CacheControlRule.prototype.execCheck):
        (WebInspector.AuditRules.CacheControlRule.prototype.freshnessLifetimeGreaterThan):
        (WebInspector.AuditRules.CacheControlRule.prototype.responseHeader):
        (WebInspector.AuditRules.CacheControlRule.prototype.hasResponseHeader):
        (WebInspector.AuditRules.CacheControlRule.prototype.isCompressible):
        (WebInspector.AuditRules.CacheControlRule.prototype.isPubliclyCacheable):
        (WebInspector.AuditRules.CacheControlRule.prototype.responseHeaderMatch):
        (WebInspector.AuditRules.CacheControlRule.prototype.hasExplicitExpiration):
        (WebInspector.AuditRules.CacheControlRule.prototype._isExplicitlyNonCacheable):
        (WebInspector.AuditRules.CacheControlRule.prototype.isCacheableResource):
        (WebInspector.AuditRules.BrowserCacheControlRule):
        (WebInspector.AuditRules.BrowserCacheControlRule.prototype.handleNonCacheableResources):
        (WebInspector.AuditRules.BrowserCacheControlRule.prototype.runChecks):
        (WebInspector.AuditRules.BrowserCacheControlRule.prototype._missingExpirationCheck):
        (WebInspector.AuditRules.BrowserCacheControlRule.prototype._varyCheck):
        (WebInspector.AuditRules.BrowserCacheControlRule.prototype._oneMonthExpirationCheck):
        (WebInspector.AuditRules.BrowserCacheControlRule.prototype._oneYearExpirationCheck):
        (WebInspector.AuditRules.ProxyCacheControlRule):
        (WebInspector.AuditRules.ProxyCacheControlRule.prototype.runChecks):
        (WebInspector.AuditRules.ProxyCacheControlRule.prototype._questionMarkCheck):
        (WebInspector.AuditRules.ProxyCacheControlRule.prototype._publicCachingCheck):
        (WebInspector.AuditRules.ProxyCacheControlRule.prototype._setCookieCacheableCheck):
        (WebInspector.AuditRules.ImageDimensionsRule):
        (WebInspector.AuditRules.ImageDimensionsRule.prototype.doRun):
        (WebInspector.AuditRules.ImageDimensionsRule.prototype.doRun.routine.hasDimension):
        (WebInspector.AuditRules.ImageDimensionsRule.prototype.doRun.routine.hasWidth):
        (WebInspector.AuditRules.ImageDimensionsRule.prototype.doRun.routine.hasHeight):
        (WebInspector.AuditRules.ImageDimensionsRule.prototype.doRun.routine):
        (WebInspector.AuditRules.CssInHeadRule):
        (WebInspector.AuditRules.CssInHeadRule.prototype.doRun):
        (WebInspector.AuditRules.CssInHeadRule.prototype.doRun.routine.allViews):
        (WebInspector.AuditRules.CssInHeadRule.prototype.doRun.routine):
        (WebInspector.AuditRules.StylesScriptsOrderRule):
        (WebInspector.AuditRules.StylesScriptsOrderRule.prototype.doRun):
        (WebInspector.AuditRules.StylesScriptsOrderRule.prototype.doRun.routine):
        (WebInspector.AuditRules.CookieRuleBase):
        (WebInspector.AuditRules.CookieRuleBase.prototype.doRun.resultCallback):
        (WebInspector.AuditRules.CookieRuleBase.prototype.doRun):
        (WebInspector.AuditRules.CookieRuleBase.prototype.mapResourceCookies):
        (WebInspector.AuditRules.CookieRuleBase.prototype._callbackForResourceCookiePairs):
        (WebInspector.AuditRules.CookieSizeRule):
        (WebInspector.AuditRules.CookieSizeRule.prototype._average):
        (WebInspector.AuditRules.CookieSizeRule.prototype._max):
        (WebInspector.AuditRules.CookieSizeRule.prototype.processCookies):
        (WebInspector.AuditRules.CookieSizeRule.prototype.processCookies.avgSizeSorter):
        (WebInspector.AuditRules.StaticCookielessRule):
        (WebInspector.AuditRules.StaticCookielessRule.prototype.processCookies):
        (WebInspector.AuditRules.StaticCookielessRule.prototype._collectorCallback):
        * inspector/front-end/AuditsPanel.js:
        (WebInspector.AuditsPanel.prototype._constructCategories):
        (WebInspector.AuditsPanel.prototype._reloadResources):
        (WebInspector.AuditsPanel.prototype.show):
        (WebInspector.AuditsPanel.prototype._updateLauncherViewControls):
        (WebInspector.AuditCategory):
        (WebInspector.AuditCategory.prototype.get id):
        (WebInspector.AuditCategory.prototype.get ruleCount):
        (WebInspector.AuditCategory.prototype.runRules):
        (WebInspector.AuditCategory.prototype._ensureInitialized):
        (WebInspector.AuditCategoryResult):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/audits.css:
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:
        (WebInspector.loaded):
        (WebInspector.addPanelToolbarIcon):
        (WebInspector.documentKeyDown):

2010-02-10  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        Freeze sandbox attributes on creation
        https://bugs.webkit.org/show_bug.cgi?id=34184

        This is how the spec works now.

        Test: fast/frames/sandboxed-iframe-forms-dynamic.html

        * bindings/ScriptControllerBase.cpp:
        (WebCore::ScriptController::canExecuteScripts):
        * bindings/generic/BindingDOMWindow.h:
        (WebCore::::createWindow):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::createWindow):
        * dom/Document.cpp:
        * dom/Document.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::submitForm):
        (WebCore::FrameLoader::requestObject):
        (WebCore::FrameLoader::shouldAllowNavigation):
        (WebCore::FrameLoader::updateSandboxFlags):
        * page/SecurityOrigin.cpp:
        * page/SecurityOrigin.h:

2010-02-09  Ariya Hidayat  <ariya.hidayat@gmail.com>

        Rubber-stamped by Kenneth Rohde Christiansen.

        [Qt] Remove old, outdated unused code block.

        * platform/graphics/qt/GraphicsContextQt.cpp:

2010-02-09  Chris Guillory  <ctguil@google.com>

        Reviewed by Darin Fisher.

        [Chromium] Notify ChromeClientChromium of state change notifications.
        
        https://bugs.webkit.org/show_bug.cgi?id=34464

        * accessibility/chromium/AXObjectCacheChromium.cpp:
        (WebCore::toChromeClientChromium):
        (WebCore::AXObjectCache::postPlatformNotification):
        * page/chromium/ChromeClientChromium.h:

2010-02-09  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Adam Barth.

        [BREWMP] Port PlatformMouseEvent
        https://bugs.webkit.org/show_bug.cgi?id=34600

        Retrieve the event type, position, key modifiers, time stamp
        and click count from AEEEvent.

        * platform/PlatformMouseEvent.h:
        * platform/brew/PlatformMouseEventBrew.cpp: Added.
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):

2010-02-09  Avi Drissman  <avi@chromium.org>

        Reviewed by Timothy Hatcher.

        [Chromium] RenderTheme does not draw focus rings on SL for checkboxes, radio buttons
        https://bugs.webkit.org/show_bug.cgi?id=34544

        Covered by layout tests when run on SL.

        * platform/chromium/ThemeChromiumMac.mm:
        (-[TCMVisibleView _focusRingVisibleRect]):
        (-[TCMVisibleView _focusRingClipAncestor]):
        (FocusIndicationFix::currentOSHasSetFocusRingStyleInBitmapBug):
        (FocusIndicationFix::swizzleFocusView):
        (FocusIndicationFix::ScopedFixer::ScopedFixer):
        (FocusIndicationFix::ScopedFixer::~ScopedFixer):
        (+[NSView TCMInterposing_focusView]):
        (WebCore::paintCheckbox):
        (WebCore::paintRadio):
        (WebCore::paintButton):

2010-02-09  Anton Muhin  <antonm@chromium.org>

        Reviewed by Nate Chapin.

        [v8] Check if returned wrapper is empty before operating on it.
        https://bugs.webkit.org/show_bug.cgi?id=34746

        * bindings/v8/custom/V8DocumentCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8HTMLDocumentCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8SVGDocumentCustom.cpp:
        (WebCore::toV8):

2010-02-09  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Continuing debugger and profiler unforking: narrow scope of JSC-specific ifdefs.
        Also, enable JAVASCRIPT_DEBUGGER explicitly in features, it appears to be required
        for really enabling it in V8 bindings generation.

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

        * inspector/InjectedScriptHost.idl:
        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::currentCallFrame):
        (WebCore::InspectorBackend::getProfile):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::addProfile):
        (WebCore::InspectorController::getProfile):
        (WebCore::InspectorController::startUserInitiatedProfiling):
        (WebCore::InspectorController::stopUserInitiatedProfiling):
        (WebCore::InspectorController::enableProfiler):
        (WebCore::InspectorController::disableProfiler):
        * inspector/InspectorController.h:
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::pausedScript):
        (WebCore::InspectorFrontend::resumedScript):
        (WebCore::InspectorFrontend::profilerWasEnabled):
        (WebCore::InspectorFrontend::profilerWasDisabled):
        (WebCore::InspectorFrontend::didGetProfile):
        * inspector/InspectorFrontend.h:
        * page/Console.idl:

2010-02-09  Gavin Barraclough  <barraclough@apple.com>

        Rubber Stamped by Geoff Garen.

        Rename StringBuilder::release && JSStringBuilder::releaseJSString
        to 'build()'.

        * bindings/js/ScriptString.h:
        (WebCore::ScriptString::operator+=):

2010-02-09  Dan Bernstein  <mitz@apple.com>

        Reviewed by Anders Carlsson.

        <rdar://problem/7400160> Netscape plug-ins are not instantiated on property access if there are pending stylesheets
        https://bugs.webkit.org/show_bug.cgi?id=34776

        Tests: plugins/instance-available-before-stylesheets-loaded-object.html
               plugins/instance-available-before-stylesheets-loaded.html

        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::renderWidgetForJSBindings): Call
        updateLayoutIgnorePendingStylesheets() before checking for a renderer. 
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::renderWidgetForJSBindings): Ditto.

2010-02-09  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Darin Adler.

        Problems navigating by caret in links whose text wraps onto
        subsequent lines.
        https://bugs.webkit.org/show_bug.cgi?id=25676

        We should not search ahead if we are not in the last element.

        * dom/Position.cpp:

2010-02-09  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        More optimization for AffineTransform with SVG
        https://bugs.webkit.org/show_bug.cgi?id=34774

        Some optimizations to safe unnecessary summations and multiplications.
        Optimize AffineTransform to handle an identity or translation matrix
        more efficient.
        Added translationRight to avoid multiplications of matrices as much as
        possible.

        No tests added, no change of functionality.   

        * platform/graphics/transforms/AffineTransform.cpp:
        (WebCore::AffineTransform::inverse):
        (WebCore::AffineTransform::translate):
        (WebCore::AffineTransform::translateRight):
        * platform/graphics/transforms/AffineTransform.h:
        * rendering/RenderForeignObject.cpp:
        (WebCore::RenderForeignObject::translationForAttributes):
        (WebCore::RenderForeignObject::localToParentTransform):
        * rendering/RenderForeignObject.h:
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::localToBorderBoxTransform):
        (WebCore::RenderSVGRoot::localToRepaintContainerTransform):
        (WebCore::RenderSVGRoot::localToParentTransform):
        * rendering/RenderSVGViewportContainer.cpp:
        (WebCore::RenderSVGViewportContainer::localToParentTransform):
        * rendering/SVGRootInlineBox.cpp:
        (WebCore::applyTextLengthCorrectionToTextChunk):

2010-02-09  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        SVG patterns with some scale patternTransform are not displayed correctly for small elements
        https://bugs.webkit.org/show_bug.cgi?id=25484

        SVG Pattern size was clipped to the size of the target, if the pattern is bigger than the target. This
        causes problems, if the patternTransform scales the pattern. This patch deletes the clipping.

        Tests: svg/custom/pattern-excessive-malloc.svg
               svg/custom/pattern-size-bigger-than-target-size.svg
               svg/custom/pattern-skew-transformed.svg

        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::buildPattern):

2010-02-09  Darin Adler  <darin@apple.com>

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::styleDidChange): Fixed typo in comment.

2010-02-09  MORITA Hajime  <morrita@gmail.com>

        Reviewed by Nikolas Zimmermann.

        SVG selection text foreground colour does not respect user settings
        https://bugs.webkit.org/show_bug.cgi?id=15997

        Add two subphases SVGTextPaintSubphaseGlyphFillSelection and
        SVGTextPaintSubphaseGlyphStrokeSelection for painting selected
        text on SVG. Selected texts are painted with style from
        getCachedPseudoStyle() instead of style().
        
        Tests: svg/text/selection-styles.xhtml

        * rendering/SVGCharacterLayoutInfo.h:
        (WebCore::SVGTextChunkWalker::SVGTextChunkWalker):
        (WebCore::SVGTextChunkWalker::setupFillSelection):
        (WebCore::SVGTextChunkWalker::setupStrokeSelection):
        * rendering/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBoxPaintWalker::mayHaveSelection):
        (WebCore::SVGRootInlineBoxPaintWalker::chunkSetupFillSelectionCallback):
        (WebCore::SVGRootInlineBoxPaintWalker::chunkSetupStrokeSelectionCallback):
        (WebCore::SVGRootInlineBoxPaintWalker::activePaintServer):
        (WebCore::SVGRootInlineBox::paint):
        (WebCore::SVGRootInlineBox::walkTextChunks):
        * rendering/SVGInlineTextBox.h:
        (WebCore::):        
        Add callback hooks and its implementation for handle new
        subphases.
        
        * rendering/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::chunkSelectionStartEnd):
        (WebCore::SVGInlineTextBox::paintCharacters):
        Split box text into selected part and non-selected part, and use
        separate subphases to paint them.
        
        * svg/SVGFont.cpp:
        (WebCore::SVGTextRunWalker::walk):
        Relax ASSERT() condition to accept a part of text.
        
        * svg/graphics/SVGPaintServer.cpp:
        (WebCore::applyStrokeStyleToContext):
        (WebCore::SVGPaintServer::setup):
        * svg/graphics/SVGPaintServer.h:
        * svg/graphics/SVGPaintServerGradient.cpp:
        (WebCore::SVGPaintServerGradient::setup):
        * svg/graphics/SVGPaintServerGradient.h:
        * svg/graphics/SVGPaintServerPattern.cpp:
        (WebCore::SVGPaintServerPattern::setup):
        * svg/graphics/SVGPaintServerPattern.h:
        * svg/graphics/SVGPaintServerSolid.cpp:
        (WebCore::SVGPaintServerSolid::setup):
        * svg/graphics/SVGPaintServerSolid.h:
        Change setup() signature to accept RenderStyle instead of always
        using RenderObject::style().

2010-02-09  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        No scroll bars are displayed for standalone SVG image
        https://bugs.webkit.org/show_bug.cgi?id=11225

        Height and width defined for svg element are not honored
        https://bugs.webkit.org/show_bug.cgi?id=24033

        SVG file does not pan and has no scroll bars
        https://bugs.webkit.org/show_bug.cgi?id=24448

        Adapt to SVG 1.1 errata to change the overflow handling:
        Replace "svg { overflow: hidden }"  by "svg:not(:root) { overflow: hidden }" to allow standalone SVG documents to contain scrolllbars.
        Agreed by SVG WG to make this the default behaviour, already implemented by Opera & FireFox (partial support).

        Add new tests in svg/overflow covering all special SVG css overflow handling rules on inner/outer svg elements.

        Tests: svg/overflow/overflow-on-inner-svg-element-defaults.svg
               svg/overflow/overflow-on-inner-svg-element.svg
               svg/overflow/overflow-on-outermost-svg-element-defaults.svg
               svg/overflow/overflow-on-outermost-svg-element-ignore-attribute-1.svg
               svg/overflow/overflow-on-outermost-svg-element-ignore-attribute-2.svg
               svg/overflow/overflow-on-outermost-svg-element-ignore-attribute-3.svg
               svg/overflow/overflow-on-outermost-svg-element-in-xhtml-auto.xhtml
               svg/overflow/overflow-on-outermost-svg-element-in-xhtml-defaults.xhtml
               svg/overflow/overflow-on-outermost-svg-element-in-xhtml-hidden.xhtml
               svg/overflow/overflow-on-outermost-svg-element-in-xhtml-scroll.xhtml
               svg/overflow/overflow-on-outermost-svg-element-in-xhtml-visible.xhtml

        * css/svg.css: Change default <svg> overflow rule to only apply to inner <svg> elements.
        * page/FrameView.cpp: 
        (WebCore::FrameView::layout): Only apply overflow rules for non-standalone SVG documents.
        * rendering/RenderSVGRoot.cpp: Remove all calls to isOverflowHidden - it's always the case for the outermost SVG element, see spec + errata.
        (WebCore::RenderSVGRoot::paint): Always clip to initial viewport size.
        (WebCore::RenderSVGRoot::computeRectForRepaint): Ditto.
        (WebCore::RenderSVGRoot::nodeAtPoint): Simplify.
        * rendering/RenderSVGViewportContainer.cpp:
        (WebCore::RenderSVGViewportContainer::applyViewportClip): Use isOverflowHidden() instead of a manual oveflow query and clip in float precision.
        * rendering/SVGRenderSupport.cpp:
        (WebCore::SVGRenderBase::isOverflowHidden): Simplify implementation, assure the function is not called anymore for RenderSVGRoot objects.

2010-02-09  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Eric Seidel.

        [BREWMP] Port KURL::fileSystemPath
        https://bugs.webkit.org/show_bug.cgi?id=34516

        Convert a file URL to a file path by prefixing
        AEEFS_HOME_DIR to access files relative to the current
        module directory in a case-sensitive manner.

        As IWeb "file:" engine opens files in BREW's application-relative
        file namespace, we follow the same policy here.

        * platform/brew/KURLBrew.cpp: Added.
        (WebCore::KURL::fileSystemPath):

2010-02-09  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] the above website does not render properly when in compositing mode
        https://bugs.webkit.org/show_bug.cgi?id=34681

        http://media.24ways.org/2009/15/spinner-alt.html now renders correctly

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::MaskEffectQt::MaskEffectQt): implement mask as
        QGraphicsEffect
        (WebCore::MaskEffectQt::draw): reimp
        (WebCore::GraphicsLayerQtImpl::GraphicsLayerQtImpl): init the effect
        (WebCore::GraphicsLayerQtImpl::paint): no need for drawContents
        (WebCore::GraphicsLayerQtImpl::flushChanges): make sure to update the
        mask layer, not just the actual children

2010-02-09  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Laszlo Gombos.

        [BREWMP] Fix macro redefinition error in BREWMP simulator build.
        https://bugs.webkit.org/show_bug.cgi?id=34738

        Remove warning: 'FAR' macro redefinition.

        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:

2010-02-07  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by Dan Bernstein.

        Fix the following bugs:
        https://bugs.webkit.org/show_bug.cgi?id=18926 - dt:after generate a line break. Boost documentation page renders poorly
        https://bugs.webkit.org/show_bug.cgi?id=7276 - Most W3C padding related tests fail

        Tests: fast/css/inline-element-line-break.html
               fast/css/pseudo-element-line-break.html

        findNextLineBreak() unconditionally allowed lines to break between elements when no other line breaking opportunity had been found,
        but that was unnecessary and led to incorrect layout. Disallow that kind of line breaks.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::findNextLineBreak):

2010-02-09  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Darin Adler.

        Provide a way to get total number of pages to be printed
        https://bugs.webkit.org/show_bug.cgi?id=34699

        Test: printing/numberOfPages.html

        * WebCore.base.exp:
        * page/PrintContext.cpp:
        (WebCore::PrintContext::pageNumberForElement):
        (WebCore::PrintContext::numberOfPages):
        * page/PrintContext.h:
        (WebCore::PrintContext::pageRects):

2010-02-08  Dominic Cooney  <dominicc@google.com>

        Reviewed by Adam Barth.

        [V8] Move Element custom methods into generic bindings

        This patch moves the security checks in setAttribute,
        setAttributeNode, setAttributeNS and setAttributeNodeNS from
        V8ElementCustom into the generic bindings so that they can be
        reused in other bindings. This is in a similar vein to
        <https://bugs.webkit.org/attachment.cgi?id=45872>.

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

        LayoutTests: None

        * WebCore.gypi:
        * bindings/generic/BindingElement.h: Added.
        (WebCore::::setAttribute):
        (WebCore::::setAttributeNode):
        (WebCore::::setAttributeNS):
        (WebCore::::setAttributeNodeNS):
        * bindings/v8/V8Binding.h:
        * bindings/v8/custom/V8ElementCustom.cpp:
        (WebCore::V8Element::setAttributeCallback):
        (WebCore::V8Element::setAttributeNodeCallback):
        (WebCore::V8Element::setAttributeNSCallback):
        (WebCore::V8Element::setAttributeNodeNSCallback):

2010-02-08  Hayato Ito  <hayato@chromium.org>

        Reviewed by Darin Adler.

        Schedule a loading request when there are many in-flight requests beyond
        the limit to avoid forever page loading.

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

        Test: http/tests/loading/load-javascript-after-many-xhrs.html

        * loader/loader.cpp:
        (WebCore::Loader::Host::servePendingRequests):

2010-02-08  David Levin  <levin@chromium.org>

        Reviewed by Gavin Barraclough.

        REGRESSION (before r54472): Various tests in fast/workers are crashing on the buildbot.
        https://bugs.webkit.org/show_bug.cgi?id=34728

        The core part of the fix is to change WebCoreJSClientData::m_normalWorld
        from DOMWrapperWorld to RefPtr<DOMWrapperWorld> so that the DOMWrapperWorld
        is really ref counted.

        No new tests because current tests sufficiently cover this as evidenced as
        the buildbot crashes.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::DOMWrapperWorld::~DOMWrapperWorld): Made this robust to m_globalData
        being 0.
        * bindings/js/JSDOMBinding.h:
        (WebCore::DOMWrapperWorld::create): Made this class follow the standard
        create pattern for RefCounted classes.
        (WebCore::DOMWrapperWorld::detachFromGlobalData): Since this class can
        now outlive JSGlobalData, this method tells it to stop using its JSGlobalData.
        (WebCore::WebCoreJSClientData::WebCoreJSClientData): Adjusted due to
        m_normalWorld being a RefPtr.
        (WebCore::WebCoreJSClientData::~WebCoreJSClientData): Ditto (and added
        asserts for the FIXME).
        (WebCore::WebCoreJSClientData::normalWorld): Ditto.
        * bindings/js/ScriptController.cpp:
        (WebCore::IsolatedWorld::create): Made the constructor protected.
        (WebCore::IsolatedWorld::IsolatedWorld): Made the constructor protected, so
        that code would have to use the create method.

2010-02-08  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by David Levin.

        Remove special utf-8 tag from Chromium cilpboard code because
        we now have the corresponding code in generic clipboard framework
        code in chromium (since it's needed by other places than in Web
        page rendering) and no longer need the separate workaround code in
        WebKit.
        https://bugs.webkit.org/show_bug.cgi?id=34567

        Test: (for regression) editing/pasteboard

        * platform/chromium/ClipboardChromium.cpp:
        (WebCore::ClipboardChromium::writeRange):
        * platform/chromium/PasteboardChromium.cpp:
        (WebCore::Pasteboard::writeSelection):
        (WebCore::Pasteboard::documentFragment):

2010-02-08  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        Crash due to layout not done in case involving removal of absolute positioning
        https://bugs.webkit.org/show_bug.cgi?id=34734
        rdar://problem/7588280

        Test: fast/dynamic/position-change-layout.html

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::styleDidChange): Call markContainingBlocksForLayout in
        a case where the object already needs layout, but might have a new containing
        block and so needs to mark the new containing block.

2010-02-08  Charlie Reis  <creis@chromium.org>

        Reviewed by Darin Adler.

        onbeforeunload not called at window close + frame or iframe focused
        https://bugs.webkit.org/show_bug.cgi?id=27481
        
        Chromium and WebKit on Windows will now fire beforeunload handlers
        even if an inner frame is focused.  

        Layout tests aren't able to test this bug, since it requires closing
        the actual browser window, not calling window.close().  Instead,
        test with WebCore/manual-tests/onbeforeunload-focused-iframe.html.

        * manual-tests/onbeforeunload-focused-iframe.html: Added.
        * manual-tests/resources/focused-iframe.html: Added.

2010-02-08  Alexey Proskuryakov  <ap@apple.com>

        Addressing review feedback.

        * bridge/c/c_instance.h: Removed argument name.

2010-02-08  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=34727
        Assertion crashes and freezes when plug-in property access results in an exception

        Test: plugins/netscape-plugin-property-access-exception.html

        * bridge/c/c_instance.h: Made moveGlobalExceptionToExecState public, since it also need to
        be called from CField.

        * bridge/c/c_runtime.cpp:
        (JSC::Bindings::CField::valueFromInstance): Call moveGlobalExceptionToExecState(). Without
        this, not only didn't we get exceptions, but we also got an assertion failure because of
        dangling global exception on next call into plug-in.
        (JSC::Bindings::CField::setValueToInstance): Ditto.

2010-02-08  Dirk Schulze  <krit@webkit.org>

        Unreviewed build fix of ChromiumWin.

        * platform/graphics/chromium/TransparencyWin.cpp:
        (WebCore::):
        (WebCore::TransparencyWin::setupLayerForOpaqueCompositeLayer):
        (WebCore::TransparencyWin::setupTransformForKeepTransform):
        * platform/graphics/chromium/TransparencyWin.h:
        * rendering/RenderThemeChromiumWin.cpp:
        (WebCore::):

2010-02-05  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Jeremy Orlow.

        Adding a way to get the set of all open database handles pointing
        to a given database.
        https://bugs.webkit.org/show_bug.cgi?id=34619

        Sometimes we need to be able to close all handles to a database as
        soon as possible (to delete the DB file, for example).

        * storage/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::getOpenDatabases):
        * storage/DatabaseTracker.h:
        * storage/chromium/DatabaseTrackerChromium.cpp:
        (WebCore::DatabaseTracker::addOpenDatabase):
        (WebCore::DatabaseTracker::removeOpenDatabase):
        (WebCore::DatabaseTracker::getOpenDatabases):

2010-02-08  Dirk Schulze  <krit@webkit.org>

        Unreviewed windows build-fix.

        * page/win/FrameCGWin.cpp:
        (WebCore::drawRectIntoContext):

2010-02-08  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        Add back an AffineTransform class for use by SVG
        https://bugs.webkit.org/show_bug.cgi?id=33750

        This adds back AffineTransform. This saves additional 4% memory consumption
        on the 50k rects stress test: https://bugs.webkit.org/attachment.cgi?id=46721
        It also makes it possible to optimize the calculations internally of
        AffineTransform to the needs of 2D transformations (the second benefit for SVG,
        which uses transformations relative often at the moment.
        Everything that is 2D related (like images, patterns, gradients, fonts), uses
        AffineTransform now.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSSVGMatrixCustom.cpp:
        (WebCore::JSSVGMatrix::multiply):
        (WebCore::JSSVGMatrix::inverse):
        (WebCore::JSSVGMatrix::rotateFromVector):
        * bindings/js/JSSVGPODTypeWrapper.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorObjC.pm:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/V8Index.h:
        * bindings/v8/custom/V8SVGMatrixCustom.cpp:
        (WebCore::V8SVGMatrix::multiplyCallback):
        (WebCore::V8SVGMatrix::inverseCallback):
        (WebCore::V8SVGMatrix::rotateFromVectorCallback):
        * html/HTMLCanvasElement.cpp: Changed to AffineTransform now
        (WebCore::HTMLCanvasElement::baseTransform):
        * html/HTMLCanvasElement.h:
        * platform/graphics/FloatPoint.cpp:
        (WebCore::FloatPoint::matrixTransform):
        * platform/graphics/FloatPoint.h:
        * platform/graphics/GeneratedImage.cpp:
        (WebCore::GeneratedImage::drawPattern):
        * platform/graphics/GeneratedImage.h:
        * platform/graphics/Gradient.cpp:
        (WebCore::Gradient::setGradientSpaceTransform):
        (WebCore::Gradient::setPlatformGradientSpaceTransform):
        * platform/graphics/Gradient.h:
        (WebCore::Gradient::gradientSpaceTransform):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/Image.cpp:
        (WebCore::Image::drawTiled):
        * platform/graphics/Image.h:
        * platform/graphics/ImageBuffer.h:
        (WebCore::ImageBuffer::baseTransform):
        * platform/graphics/Path.h:
        * platform/graphics/Pattern.cpp:
        (WebCore::Pattern::setPatternSpaceTransform):
        * platform/graphics/Pattern.h:
        (WebCore::Pattern::create):
        (WebCore::Pattern::tileImage):
        * platform/graphics/cairo/FontCairo.cpp:
        (WebCore::Font::drawGlyphs):
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::setPlatformFill):
        (WebCore::setPlatformStroke):
        (WebCore::GraphicsContext::getCTM):
        * platform/graphics/cairo/ImageCairo.cpp:
        (WebCore::Image::drawPattern):
        * platform/graphics/cairo/PathCairo.cpp:
        * platform/graphics/cairo/PatternCairo.cpp:
        (WebCore::Pattern::createPlatformPattern):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::getCTM):
        * platform/graphics/cg/GraphicsContextPlatformPrivateCG.h:
        (WebCore::GraphicsContextPlatformPrivate::concatCTM):
        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::Image::drawPattern):
        * platform/graphics/cg/PathCG.cpp:
        * platform/graphics/cg/PatternCG.cpp:
        (WebCore::Pattern::createPlatformPattern):
        * platform/graphics/haiku/GraphicsContextHaiku.cpp:
        (WebCore::GraphicsContext::getCTM):
        * platform/graphics/haiku/ImageHaiku.cpp:
        (WebCore::Image::drawPattern):
        * platform/graphics/haiku/PathHaiku.cpp:
        * platform/graphics/qt/FontQt.cpp:
        (WebCore::Font::drawComplexText):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::getCTM):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::fillRect):
        * platform/graphics/qt/ImageQt.cpp:
        (WebCore::Image::drawPattern):
        * platform/graphics/qt/PathQt.cpp:
        * platform/graphics/qt/PatternQt.cpp:
        (WebCore::Pattern::createPlatformPattern):
        * platform/graphics/skia/GradientSkia.cpp:
        (WebCore::Gradient::setPlatformGradientSpaceTransform):
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::getCTM):
        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::Image::drawPattern):
        * platform/graphics/skia/PathSkia.cpp:
        * platform/graphics/skia/PatternSkia.cpp:
        (WebCore::Pattern::platformPattern):
        * platform/graphics/skia/SkiaFontWin.cpp:
        (WebCore::windowsCanHandleTextDrawing):
        * platform/graphics/transforms/AffineTransform.cpp:
        (WebCore::AffineTransform::makeIdentity): needed by some parts of WebCore
        (WebCore::AffineTransform::scale): Didn't scale the complete matrix
        (WebCore::AffineTransform::translate): Didn't respect other transformations
        (WebCore::AffineTransform::shear): direct calculation, no extra multiply of matrices
        (WebCore::AffineTransform::map):
        (WebCore::AffineTransform::mapPoint):
        (WebCore::AffineTransform::mapRect):
        * platform/graphics/transforms/AffineTransform.h:
        (WebCore::AffineTransform::isIdentityOrTranslation):
        * platform/graphics/transforms/TransformationMatrix.cpp:
        (WebCore::TransformationMatrix::toAffineTransform):
        * platform/graphics/transforms/TransformationMatrix.h:
        * platform/graphics/win/FontCGWin.cpp:
        (WebCore::drawGDIGlyphs):
        * platform/graphics/win/GraphicsContextCGWin.cpp:
        * platform/graphics/win/GraphicsContextCairoWin.cpp:
        * platform/graphics/win/GraphicsContextWin.cpp:
        (WebCore::GraphicsContextPlatformPrivate::concatCTM):
        * platform/graphics/wince/FontWince.cpp:
        * platform/graphics/wince/GraphicsContextWince.cpp:
        (WebCore::GraphicsContextPlatformPrivate::concatCTM):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::getCTM):
        (WebCore::GraphicsContext::drawBitmapPattern):
        * platform/graphics/wince/ImageBufferWince.cpp:
        (WebCore::):
        (WebCore::BufferedImage::drawPattern):
        * platform/graphics/wince/PathWince.cpp:
        (WebCore::Path::transform):
        * platform/graphics/wince/PlatformPathWince.cpp:
        (WebCore::drawPolygons):
        (WebCore::PathPolygon::transform):
        (WebCore::PlatformPathElement::transform):
        (WebCore::PlatformPath::strokePath):
        (WebCore::PlatformPath::fillPath):
        (WebCore::PlatformPath::transform):
        * platform/graphics/wince/PlatformPathWince.h:
        (WebCore::):
        * platform/graphics/wx/GraphicsContextWx.cpp:
        (WebCore::GraphicsContext::getCTM):
        * platform/graphics/wx/ImageWx.cpp:
        (WebCore::BitmapImage::drawPattern):
        (WebCore::Image::drawPattern):
        * platform/graphics/wx/PathWx.cpp:
        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::paintMozillaGtkWidget):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::paintWindowedPluginIntoContext):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::localTransform):
        * rendering/RenderBox.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelScaleData::RenderBoxModelScaleData):
        (WebCore::RenderBoxModelScaleData::transform):
        (WebCore::RenderBoxModelScaleData::setTransform):
        (WebCore::RenderBoxModelScaleObserver::shouldPaintBackgroundAtLowQuality):
        (WebCore::RenderBoxModelObject::paintBoxShadow):
        * rendering/RenderForeignObject.cpp:
        (WebCore::RenderForeignObject::translationForAttributes):
        (WebCore::RenderForeignObject::localToParentTransform):
        * rendering/RenderForeignObject.h:
        (WebCore::RenderForeignObject::localTransform):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayer):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::localTransform):
        (WebCore::RenderObject::localToParentTransform):
        (WebCore::RenderObject::absoluteTransform):
        * rendering/RenderObject.h:
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::localToParentTransform):
        (WebCore::RenderPath::localTransform):
        * rendering/RenderPath.h:
        * rendering/RenderSVGHiddenContainer.h:
        (WebCore::RenderSVGHiddenContainer::absoluteTransform):
        * rendering/RenderSVGImage.h:
        (WebCore::RenderSVGImage::localToParentTransform):
        (WebCore::RenderSVGImage::localTransform):
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::localToBorderBoxTransform):
        (WebCore::RenderSVGRoot::localToRepaintContainerTransform):
        (WebCore::RenderSVGRoot::localToParentTransform):
        (WebCore::RenderSVGRoot::absoluteTransform):
        (WebCore::RenderSVGRoot::localTransform):
        * rendering/RenderSVGRoot.h:
        * rendering/RenderSVGText.h:
        (WebCore::RenderSVGText::localToParentTransform):
        (WebCore::RenderSVGText::localTransform):
        * rendering/RenderSVGTransformableContainer.cpp:
        (WebCore::RenderSVGTransformableContainer::localToParentTransform):
        (WebCore::RenderSVGTransformableContainer::localTransform):
        (WebCore::RenderSVGTransformableContainer::calculateLocalTransform):
        * rendering/RenderSVGTransformableContainer.h:
        * rendering/RenderSVGViewportContainer.cpp:
        (WebCore::RenderSVGViewportContainer::markerBoundaries):
        (WebCore::RenderSVGViewportContainer::markerContentTransformation):
        (WebCore::RenderSVGViewportContainer::viewportTransform):
        (WebCore::RenderSVGViewportContainer::localToParentTransform):
        (WebCore::RenderSVGViewportContainer::absoluteTransform):
        * rendering/RenderSVGViewportContainer.h:
        * rendering/SVGCharacterLayoutInfo.cpp:
        (WebCore::SVGChar::characterTransform):
        * rendering/SVGCharacterLayoutInfo.h:
        (WebCore::SVGTextChunkWalker::operator()):
        * rendering/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::calculateGlyphBoundaries):
        (WebCore::SVGInlineTextBoxClosestCharacterToPositionWalker::chunkPortionCallback):
        (WebCore::SVGInlineTextBoxSelectionRectWalker::chunkPortionCallback):
        (WebCore::SVGInlineTextBox::paintCharacters):
        (WebCore::SVGInlineTextBox::paintDecoration):
        * rendering/SVGMarkerLayoutInfo.h:
        (WebCore::MarkerLayout::MarkerLayout):
        * rendering/SVGRenderSupport.cpp:
        (WebCore::applyTransformToPaintInfo):
        * rendering/SVGRenderSupport.h:
        * rendering/SVGRenderTreeAsText.cpp:
        (WebCore::operator<<):
        * rendering/SVGRenderTreeAsText.h:
        * rendering/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBoxPaintWalker::chunkPortionCallback):
        (WebCore::applyTextLengthCorrectionToTextChunk):
        (WebCore::SVGRootInlineBox::buildLayoutInformation):
        * rendering/TransformState.cpp:
        (WebCore::TransformState::applyTransform):
        * rendering/TransformState.h:
        * svg/GradientAttributes.h:
        (WebCore::GradientAttributes::gradientTransform):
        (WebCore::GradientAttributes::setGradientTransform):
        * svg/PatternAttributes.h:
        (WebCore::PatternAttributes::patternTransform):
        (WebCore::PatternAttributes::setPatternTransform):
        * svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::resetToBaseValue):
        (WebCore::SVGAnimateMotionElement::calculateAnimatedValue):
        (WebCore::SVGAnimateMotionElement::applyResultsToTarget):
        * svg/SVGAnimateMotionElement.h:
        * svg/SVGAnimateTransformElement.cpp:
        * svg/SVGAnimateTransformElement.h:
        * svg/SVGElement.h:
        (WebCore::SVGElement::supplementalTransform):
        * svg/SVGFitToViewBox.cpp:
        (WebCore::SVGFitToViewBox::viewBoxToViewTransform):
        * svg/SVGFitToViewBox.h:
        * svg/SVGLocatable.cpp:
        (WebCore::SVGLocatable::getCTM):
        (WebCore::SVGLocatable::getScreenCTM):
        (WebCore::SVGLocatable::getTransformToElement):
        * svg/SVGLocatable.h:
        * svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::viewBoxToViewTransform):
        * svg/SVGMarkerElement.h:
        * svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::drawMaskerContent):
        * svg/SVGMatrix.idl:
        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::buildPattern):
        * svg/SVGPreserveAspectRatio.cpp:
        (WebCore::SVGPreserveAspectRatio::getCTM):
        * svg/SVGPreserveAspectRatio.h:
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::viewport):
        (WebCore::SVGSVGElement::createSVGMatrix):
        (WebCore::SVGSVGElement::createSVGTransformFromMatrix):
        (WebCore::SVGSVGElement::getCTM):
        (WebCore::SVGSVGElement::getScreenCTM):
        (WebCore::SVGSVGElement::viewBoxToViewTransform):
        * svg/SVGSVGElement.h:
        * svg/SVGStyledLocatableElement.cpp:
        (WebCore::SVGStyledLocatableElement::getCTM):
        (WebCore::SVGStyledLocatableElement::getScreenCTM):
        * svg/SVGStyledLocatableElement.h:
        * svg/SVGStyledTransformableElement.cpp:
        (WebCore::SVGStyledTransformableElement::getCTM):
        (WebCore::SVGStyledTransformableElement::getScreenCTM):
        (WebCore::SVGStyledTransformableElement::animatedLocalTransform):
        (WebCore::SVGStyledTransformableElement::supplementalTransform):
        * svg/SVGStyledTransformableElement.h:
        (WebCore::SVGStyledTransformableElement::isStyledTransformable):
        (WebCore::SVGStyledTransformableElement::toPathData):
        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGInlineTextBoxQueryWalker::chunkPortionCallback):
        * svg/SVGTextElement.cpp:
        (WebCore::SVGTextElement::getScreenCTM):
        (WebCore::SVGTextElement::getCTM):
        (WebCore::SVGTextElement::animatedLocalTransform):
        (WebCore::SVGTextElement::supplementalTransform):
        * svg/SVGTextElement.h:
        * svg/SVGTextPathElement.cpp:
        * svg/SVGTransform.cpp:
        (SVGTransform::SVGTransform):
        (SVGTransform::matrix):
        (SVGTransform::setMatrix):
        * svg/SVGTransform.h:
        * svg/SVGTransformDistance.cpp:
        (WebCore::SVGTransformDistance::SVGTransformDistance):
        (WebCore::SVGTransformDistance::scaledDistance):
        (WebCore::SVGTransformDistance::isZero):
        * svg/SVGTransformDistance.h:
        * svg/SVGTransformList.cpp:
        (SVGTransformList::createSVGTransformFromMatrix):
        (SVGTransformList::concatenate):
        (SVGTransformList::valueAsString):
        * svg/SVGTransformList.h:
        * svg/SVGTransformable.cpp:
        (WebCore::SVGTransformable::getCTM):
        (WebCore::SVGTransformable::getScreenCTM):
        (WebCore::SVGTransformable::parseTransformValue):
        * svg/SVGTransformable.h:
        (WebCore::SVGTransformable::):
        * svg/graphics/SVGPaintServerGradient.cpp:
        (WebCore::SVGPaintServerGradient::gradientTransform):
        (WebCore::SVGPaintServerGradient::setGradientTransform):
        (WebCore::clipToTextMask):
        (WebCore::SVGPaintServerGradient::setup):
        * svg/graphics/SVGPaintServerGradient.h:
        * svg/graphics/SVGPaintServerPattern.cpp:
        (WebCore::SVGPaintServerPattern::patternTransform):
        (WebCore::SVGPaintServerPattern::setPatternTransform):
        (WebCore::SVGPaintServerPattern::setup):
        * svg/graphics/SVGPaintServerPattern.h:
        * svg/graphics/SVGResourceClipper.cpp:
        (WebCore::SVGResourceClipper::applyClip):
        * svg/graphics/SVGResourceMarker.cpp:
        (WebCore::SVGResourceMarker::markerTransformation):
        (WebCore::SVGResourceMarker::draw):
        * svg/graphics/SVGResourceMarker.h:
        * svg/graphics/filters/SVGFEImage.cpp:
        * svg/graphics/filters/SVGFETile.cpp:
        (WebCore::FETile::apply):

2010-02-08  Stephen White  <senorblanco@chromium.org>

        Reviewed by Dimitri Glazkov.

        Make an inline function containing a static var out-of-line.  This is
        a workaround for Xcode 3.1 bug radar 7070016.  We tripped on this in
        deviceRGBColorSpaceRef on the Chromium canaries.  This is a proactive
        fix for the same problem in sRGBColorSpaceRef().

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

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::sRGBColorSpaceRef):
        * platform/graphics/cg/GraphicsContextPlatformPrivateCG.h:

2010-02-08  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Unify the WorkerContext V8 object wrapping code with
        the standard V8 object wrapping code.

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

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::instantiateV8Object):
        (WebCore::V8DOMWrapper::convertEventTargetToV8Object):
        * bindings/v8/V8WorkerContextEventListener.cpp:
        (WebCore::V8WorkerContextEventListener::handleEvent):
        (WebCore::V8WorkerContextEventListener::getReceiverObject):
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        * bindings/v8/WorkerContextExecutionProxy.h:
        * bindings/v8/custom/V8NotificationCenterCustom.cpp:
        (WebCore::V8NotificationCenter::createHTMLNotificationCallback):
        (WebCore::V8NotificationCenter::createNotificationCallback):
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        (WebCore::toV8):

2010-02-08  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Darin Adler.

        Use fastStrDup instead of strdup
        https://bugs.webkit.org/show_bug.cgi?id=33943

        Replace strdup/free with fastStrDup/fastFree.

        * bridge/IdentifierRep.h:
        (WebCore::IdentifierRep::IdentifierRep):
        * bridge/jni/JNIBridge.cpp:
        (JavaMethod::~JavaMethod):
        (appendClassName):
        (JavaMethod::signature):
        * bridge/jni/jsc/JavaClassJSC.cpp:
        (JavaClass::JavaClass):
        (JavaClass::~JavaClass):
        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandleInternal::~ResourceHandleInternal):
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::~ResourceHandleManager):
        (WebCore::ResourceHandleManager::setCookieJarFileName):
        (WebCore::ResourceHandleManager::initializeHandle):
        * plugins/PluginStream.cpp:
        (WebCore::PluginStream::~PluginStream):
        (WebCore::PluginStream::startStream):
        * xml/XSLTProcessorLibxslt.cpp:
        (WebCore::xsltParamArrayFromParameterMap):
        (WebCore::freeXsltParamArray):

2010-02-08  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        Fix Qt build on Windows.

        nmake fails to pick the right cpp file, so we have to
        rename the file to to a unique name.

        * WebCore.pro:
        * platform/graphics/qt/FontCustomPlatformDataQt.cpp: Renamed from WebCore/platform/graphics/qt/FontCustomPlatformData.cpp.

2010-02-08  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        All SVG *-expected.txt files contain wrong results
        https://bugs.webkit.org/show_bug.cgi?id=34703

        Finally dump meaningful information for SVG layout tests.
        Use 'absoluteClippedOverflowRect' which goes through the same code paths used
        to actually calculate repaint rects etc - instead of the legacy CSS-unaware
        code path that mapped 'repaintRectInLocalCoordinates' through 'absoluteTransform'.
        Remove absoluteTransform() - a long standing TODO, finally not needed anymore.

        Despite SVGRenderTreeAsText, SVGPaintServerGradient was also using absoluteTransform().
        Rewrite the code in question, fixing svg/W3C-SVG-1.1/pserver-grad-08-b.svg alignment issues
        when scaling/panning text using gradient on stroke/fill. Affects some other gradient tests as well.

        As we're now dumping clipped overflow rects any problems with repaint rects will become
        immediate visible - it turns out we're not supporting the overflow rules on the outermost <svg>
        element properly (repaint rects and bounding boxes need to take special SVG overflow rules into account).
        Fixing that magically gives pixel-perfect clipped overflow rects for all types of shapes/text/containers.

        Note: This will break any overriden platform-specific SVG results, need to wait for build bots in order to update them.

        * rendering/RenderObject.cpp: Remove absoluteTransform() method, centralize overflow query code in SVGRenderSupport::isOverflowHidden().
        * rendering/RenderObject.h: Remove absoluteTransform() method.
        * rendering/RenderSVGHiddenContainer.h: Ditto.
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::paint): Use SVGRenderSupport::isOverflowHidden() to query SVG overflow mode.
        (WebCore::RenderSVGRoot::computeRectForRepaint): Respect SVG overflow rules here: clip repaintRect against overflow rect _before_ passing
                                                         along to RenderBox. This is the key issue behind wrong absoluteClippedOverflowRect() values.
        (WebCore::RenderSVGRoot::nodeAtPoint): Use SVGRenderSupport::isOverflowHidden() to query SVG overflow mode.
        * rendering/RenderSVGRoot.h: Remove absoluteTransform(). Don't expose viewportSize() anymore.
        * rendering/RenderSVGText.cpp: 
        (WebCore::RenderSVGText::strokeBoundingBox): Fix default stroke width to 1. This was the only wrong place -> fixes repaint rects for stroked text.
        * rendering/RenderSVGViewportContainer.cpp: Remove absoluteTransform() method.
        (WebCore::RenderSVGViewportContainer::pointIsInsideViewportClip): Use SVGRenderSupport::isOverflowHidden() to query SVG overflow mode.
        * rendering/RenderSVGViewportContainer.h: Remove absoluteTransform() method.
        * rendering/SVGRenderSupport.cpp: Refactored overflow queries in one place, centralizing SVG specific assumptions about overflowX/Y.
        (WebCore::SVGRenderBase::isOverflowHidden):
        * rendering/SVGRenderSupport.h:
        * rendering/SVGRenderTreeAsText.cpp: Dump absoluteClippedOverflowRect() instead of absoluteTransform().mapRect(repaintRectInLocalCoordinates()).
        (WebCore::writePositionAndStyle): Affects all layout tests dumping render trees.
        * svg/graphics/SVGPaintServerGradient.cpp: Rewrite Gradient on text fill/stroke support on Cg, to avoid using absoluteTransform().
        (WebCore::absoluteTransformForRenderer):
        (WebCore::createMaskAndSwapContextForTextGradient):
        (WebCore::clipToTextMask):
        (WebCore::SVGPaintServerGradient::setup):

2010-02-07  Daniel Bates  <dbates@webkit.org>

        Reviewed by Darin Adler.

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

        Implements all of the numeric CSS3 list-style-types as per
        section 4.3 of the CSS3 Lists module <http://www.w3.org/TR/css3-lists/#numeric>.

        Test: fast/lists/w3-css3-list-styles-numeric.html

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        * css/CSSValueKeywords.in:
        * inspector/front-end/SourceCSSTokenizer.re2js:
        * platform/text/CharacterNames.h: Added constant hyphenMinus.
        * rendering/RenderListMarker.cpp:
        (WebCore::): Defined enum SequenceType.
        (WebCore::toAlphabeticOrNumeric): Added.
        (WebCore::toAlphabetic): Modified to call WebCore::toAlphabeticOrNumeric.
        (WebCore::toNumeric): Added.
        (WebCore::listMarkerSuffix):
        (WebCore::listMarkerText):
        (WebCore::RenderListMarker::paint):
        (WebCore::RenderListMarker::calcPrefWidths):
        (WebCore::RenderListMarker::getRelativeMarkerRect):
        * rendering/style/RenderStyle.h:
        (WebCore::):
        * rendering/style/RenderStyleConstants.h: Added numeric list style types
        and fixed indent level for the enum values.
        (WebCore::):

2010-02-07  Ismail Donmez  <ismail@namtrac.org>

        Reviewed by Darin Adler.

        Include wtf/StringExtras.h for strdup definition, which
        is needed for WinCE.

        * bridge/IdentifierRep.h:

2010-02-07  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Fragment-held Elements Not Shown in Inspector.

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

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::pushChildNodesToFrontend):
        (WebCore::InspectorDOMAgent::buildObjectForNode):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype._nodeTitleInfo):

2010-02-07  Jian Li  <jianli@chromium.org>

        Reviewed by Darin Fisher.

        [chromium] Change chromium interface to handle DownloadURL format.
        https://bugs.webkit.org/show_bug.cgi?id=34655

        * platform/chromium/ChromiumDataObject.cpp:
        (WebCore::ChromiumDataObject::clear):
        (WebCore::ChromiumDataObject::hasData):
        (WebCore::ChromiumDataObject::ChromiumDataObject):
        * platform/chromium/ChromiumDataObject.h:
        * platform/chromium/ClipboardChromium.cpp:
        (WebCore::ClipboardChromium::setData):

2010-02-06  Dimitri Glazkov  <dglazkov@chromium.org>

        No review, rolling out r54364.
        http://trac.webkit.org/changeset/54364
        https://bugs.webkit.org/show_bug.cgi?id=34464

        Introduced asserts in layout tests, needs more testing
        locally.

        * accessibility/chromium/AXObjectCacheChromium.cpp:
        (WebCore::AXObjectCache::postPlatformNotification):
        * page/chromium/ChromeClientChromium.h:

2010-02-06  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Adam Barth.

        Using inlines and function-level statics don't mix, according to gcc.
        https://bugs.webkit.org/show_bug.cgi?id=34663

        De-inline deviceRGBColorSpaceRef to avoid gcc-bug landmines.

        It appears that the initialization check, generated by gcc doesn't account
        for a possibility that the function may be inlined, resulting in lazy
        initialization failure for more than one inlined instance of the function.

        No behavior change, so no new tests.

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::deviceRGBColorSpaceRef):
        * platform/graphics/cg/GraphicsContextPlatformPrivateCG.h:

2010-02-05  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Dan Bernstein.

        Added an ASSERT to catch an implausible but theoretically possible leak.
        
        In theory, if malloc allocated a UChar buffer directly after a StringImpl,
        the StringImpl might incorrecly assume that the UChar buffer was inline,
        and fail to delete it.
        
        This ASSERT is somewhat academic, since we don't use the same allocator
        in debug builds, but oh well.

        * platform/text/StringImpl.cpp:
        (WebCore::StringImpl::StringImpl):
        (WebCore::StringImpl::createUninitialized):
        * platform/text/StringImpl.h: Separated the inline buffer StringImpl
        constructor from the out-of-line buffer StringImpl constructor. Made
        the former ASSERT that its buffer was indeed inline, and the latter ASSERT
        that its buffer was indeed not inline.

2010-02-05  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Fixed changed virtual function in GraphicsLayerCACF and call order issues
        https://bugs.webkit.org/show_bug.cgi?id=34348
        
        The correct virtual function in GraphicsLayerCACF is now being
        called. We also fixed an issue in QTMovieWin where the size
        of the movie was not being set correctly because the call order
        was changed.
        
        I also changed the order of a couple of calls in QTMovieWin to account
        for changed calling order from the logic above.

        * platform/graphics/win/GraphicsLayerCACF.cpp:Update to new virtual function API
        (WebCore::GraphicsLayerCACF::setContentsToMedia):
        (WebCore::GraphicsLayerCACF::updateContentsMedia):
        * platform/graphics/win/GraphicsLayerCACF.h:Update to new virtual function API
        (WebCore::GraphicsLayerCACF::):
        * platform/graphics/win/QTMovieWin.cpp:
        (QTMovieWinPrivate::cacheMovieScale):Fix a bug where ratio was computed wrong because it was using integer math
        (QTMovieWinPrivate::task):Compute movie scale before computing movie size so values are correct
        (QTMovieWinPrivate::setSize):Move movie size update to updateMovieSize()
        (QTMovieWinPrivate::updateMovieSize):Wrap size update in a new call so it can be used from multiple places

2010-02-05  Enrica Casucci  <enrica@apple.com>

        Reviewed by Simon Fraser.

        Horizontal scrollbar works in reverse at milliondollarcu.be
        <rdar://problem/7556121>
        https://bugs.webkit.org/show_bug.cgi?id=33848
        
        Added a manual test.

        * manual-tests/win: Added.
        * manual-tests/win/horizontal-scroll-composited.html: Added.
        * platform/graphics/win/WKCACFLayerRenderer.cpp:
        (WebCore::WKCACFLayerRenderer::setScrollFrame):
        (WebCore::WKCACFLayerRenderer::setRootChildLayer):

2010-02-05  Ryan Leavengood  <leavengood@gmail.com>

        Reviewed by David Levin.

        Implementation of GlyphPage::fill() for Haiku port.
        https://bugs.webkit.org/show_bug.cgi?id=34527

        Covered by existing tests.

        * platform/graphics/haiku/GlyphPageTreeNodeHaiku.cpp

2010-01-19  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Dave Hyatt.

        Implement flattening of framesets
        https://bugs.webkit.org/show_bug.cgi?id=32717

        The following patch, builds ontop of Antti Koivisto's frameset
        flattening code from the iPhone source, which itself is based on
        the old Nokia Series 60 source.

        Layout tests have been added to test the functionality and the original
        code which has then been fixed to make these pass, as well as support
        frameset grids.

        Tests: fast/frames/flattening/frameset-flattening-advanced.html
               fast/frames/flattening/frameset-flattening-grid.html
               fast/frames/flattening/frameset-flattening-simple.html
               fast/frames/flattening/frameset-flattening-subframe-resize.html
               fast/frames/flattening/frameset-flattening-subframesets.html

        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        (WebCore::FrameView::scheduleRelayout):
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setFrameSetFlatteningEnabled):
        * page/Settings.h:
        (WebCore::Settings::frameSetFlatteningEnabled):
        * rendering/RenderFrame.cpp:
        (WebCore::RenderFrame::layoutWithFlattening):
        * rendering/RenderFrame.h:
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::layout):
        (WebCore::RenderFrameSet::positionFramesWithFlattening):
        (WebCore::RenderFrameSet::flattenFrameSet):
        (WebCore::RenderFrameSet::userResize):
        * rendering/RenderFrameSet.h:

2010-02-05  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Changing display type of parent of input on focus causes input field to not receive key events
        https://bugs.webkit.org/show_bug.cgi?id=34620
        <rdar://problem/7584572>
        
        When layout affects a text input, the RenderTextControl gets destroyed and
        recreated, which in turn makes a new innerTextElement. However, if the text field was
        focused, the VisibleSelection is left pointing to the old innerTextElement, so text
        input no longer works.
        
        The fix is to call updateFocusAppearanceSoon() when attaching the input element,
        which will update the selection if necessary.

        Test: fast/forms/restore-selection-after-layout.html

        * dom/Document.h: Add a paramter to updateFocusAppearanceSoon() and a member variable,
        m_updateFocusAppearanceRestoresSelection, to store its value until the timer fires.
        * dom/Document.cpp:
        (WebCore::Document::Document): Initialize m_updateFocusAppearanceRestoresSelection
        (WebCore::Document::updateFocusAppearanceSoon): New restorePreviousSelection parameter.
        (WebCore::Document::updateFocusAppearanceTimerFired): Pass m_updateFocusAppearanceRestoresSelection down.
        * dom/Element.cpp:
        (WebCore::Element::attach): Call updateFocusAppearanceSoon() with false.
        * dom/Element.h: The updateFocusAppearanceSoonAfterAttach() was undefined.
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::attach): Call document()->updateFocusAppearanceSoon() with true.

2010-02-05  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: simplify cookies view, introduce DataGrid::autoSizeColumns.

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

        * inspector/front-end/CookieItemsView.js:
        (WebInspector.CookieItemsView):
        (WebInspector.CookieItemsView.prototype.show):
        (WebInspector.CookieItemsView.prototype._update):
        (WebInspector.CookieItemsView.prototype._updateWithCookies):
        (WebInspector.CookieItemsView.prototype._filterCookiesForDomain):
        (WebInspector.CookieItemsView.prototype._createDataGrid):
        (WebInspector.CookieItemsView.prototype._populateDataGrid.expiresCompare):
        (WebInspector.CookieItemsView.prototype._populateDataGrid):
        (WebInspector.CookieItemsView.prototype._createSimpleDataGrid):
        (WebInspector.CookieItemsView.prototype._populateSimpleDataGrid):
        (WebInspector.CookieItemsView.prototype._deleteCookieCallback):
        (WebInspector.CookieItemsView.prototype._refreshButtonClicked):
        * inspector/front-end/DOMStorageItemsView.js:
        (WebInspector.DOMStorageItemsView.prototype._showDOMStorageEntries):
        (WebInspector.DOMStorageItemsView.prototype._dataGridForDOMStorageEntries):
        * inspector/front-end/DataGrid.js:
        (WebInspector.DataGrid):
        (WebInspector.DataGrid.prototype.autoSizeColumns):
        * inspector/front-end/DatabaseQueryView.js:
        (WebInspector.DatabaseQueryView.prototype._queryFinished):
        * inspector/front-end/DatabaseTableView.js:
        (WebInspector.DatabaseTableView.prototype._queryFinished):
        * inspector/front-end/StoragePanel.js:
        (WebInspector.StoragePanel.prototype.dataGridForResult):

2010-02-04  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: group cookies by frame, show total
        cookies size, allow sorting cookie table.

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

        * English.lproj/localizedStrings.js:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::deleteCookie):
        * inspector/front-end/CookieItemsView.js:
        (WebInspector.CookieItemsView):
        (WebInspector.CookieItemsView.prototype.update):
        (WebInspector.CookieItemsView.prototype._updateWithCookies):
        (WebInspector.CookieItemsView.prototype._cookiesForDomain):
        (WebInspector.CookieItemsView.prototype.dataGridForCookies):
        (WebInspector.CookieItemsView.prototype._createNodes):
        (WebInspector.CookieItemsView.prototype._sortData.localeCompare):
        (WebInspector.CookieItemsView.prototype._sortData.numberCompare):
        (WebInspector.CookieItemsView.prototype._sortData.expiresCompare):
        (WebInspector.CookieItemsView.prototype._sortData):
        * inspector/front-end/StoragePanel.js:
        (WebInspector.StoragePanel.prototype.showCookies):
        (WebInspector.CookieSidebarTreeElement):
        (WebInspector.CookieSidebarTreeElement.prototype.onselect):
        (WebInspector.CookieSidebarTreeElement.prototype.get subtitle):
        (WebInspector.CookieSidebarTreeElement.prototype.set subtitle):
        * inspector/front-end/inspector.js:
        (WebInspector.updateResource):

2010-02-05  Maxime Simone  <simon.maxime@gmail.com>

        Reviewed by David Levin.

        More robust conversion from BString to String for Haiku port.
        https://bugs.webkit.org/show_bug.cgi?id=34527

        Covered by existing tests.

        * platform/text/haiku/StringHaiku.cpp: Fixed include order, Improved coversion from BString.

2010-02-05  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Windows build fix.

        * WebCore.vcproj/WebCore.make:

2010-02-05  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Dirk Schulze.
        Rubber-stamped by Kenneth Rohde Christiansen.

        [Qt] Modifying SVG path dumping to equal to other ports
        https://bugs.webkit.org/show_bug.cgi?id=33784

        * platform/graphics/qt/PathQt.cpp:
        (WebCore::Path::debugString): Path dumping style is aproached to Mac.

2010-02-05  Sebastian Dröge  <sebastian.droege@collabora.co.uk>

        Reviewed by Gustavo Noronha.

        Add a GStreamer HTTP/HTTPS source, using WebKit infrastructure
        https://bugs.webkit.org/show_bug.cgi?id=34317

        * GNUmakefile.am:
        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::mediaPlayerPrivateSourceChangedCallback):
        (WebCore::doGstInit):
        * platform/graphics/gtk/WebKitWebSourceGStreamer.cpp:
        * platform/graphics/gtk/WebKitWebSourceGStreamer.h:
        Add a GStreamer HTTP/HTTPS source, using the WebKit infrastructure.
        This makes sure that referer, cookies, authentication information
        and all kinds of other context are passed to GStreamer for websites
        like Vimeo or YouTube.

2010-02-05  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Clean up code for getting a v8::FunctionTemplate.
        
        https://bugs.webkit.org/show_bug.cgi?id=34606

        * bindings/scripts/CodeGeneratorV8.pm: Making GetTemplate() public
        * bindings/v8/V8Binding.cpp:
        (WebCore::configureTemplate):
        * bindings/v8/V8DOMWrapper.cpp: Remove getTemplate(), use V8ClassIndex::getTemplate() instead.
        (WebCore::V8DOMWrapper::getConstructor):
        (WebCore::V8DOMWrapper::instantiateV8Object):
        * bindings/v8/V8DOMWrapper.h:
        (WebCore::V8DOMWrapper::lookupDOMWrapper):
        * bindings/v8/V8Index.cpp: Remove duplicate caching of FunctionTemplates.
        (WebCore::V8ClassIndex::getTemplate):
        * bindings/v8/V8Index.h:
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::toV8):
        * bindings/v8/custom/V8HTMLAudioElementConstructor.cpp:
        (WebCore::v8HTMLAudioElementConstructorCallback):
        (WebCore::V8HTMLAudioElementConstructor::GetTemplate):
        * bindings/v8/custom/V8HTMLAudioElementConstructor.h:
        * bindings/v8/custom/V8HTMLImageElementConstructor.cpp:
        (WebCore::v8HTMLImageElementConstructorCallback):
        (WebCore::V8HTMLImageElementConstructor::GetTemplate):
        * bindings/v8/custom/V8HTMLImageElementConstructor.h:
        * bindings/v8/custom/V8HTMLOptionElementConstructor.cpp:
        (WebCore::v8HTMLOptionElementConstructorCallback):
        (WebCore::V8HTMLOptionElementConstructor::GetTemplate):
        * bindings/v8/custom/V8HTMLOptionElementConstructor.h:
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::createInjectedScriptHostV8Wrapper):

2010-02-05  Siddharth Mathur  <siddharth.mathur@nokia.com>

        Reviewed by Ariya Hidayat.

        [Qt] Build break in QtWebkit on Symbian
        https://bugs.webkit.org/show_bug.cgi?id=34597

        * plugins/PluginView.h:

2010-02-05  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        - Use SerializedScriptValue for passing data between injected script and
        inspector frontend.
        - Remove custom JSON implementation from the instpector utility script.
        - Make sure that only objects created in the same ScriptState can be values
        of ScriptObject/Array properties and arguments to ScriptFunctionCall. We don't
        want ScriptObjects to leak between contexts.
        - Use ScriptState of the 'this' object in ScriptFunctionCall instead of passing
        it as additional parameter.

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

        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::JSInjectedScriptHost::reportDidDispatchOnInjectedScript):
        * bindings/js/ScriptArray.cpp:
        (WebCore::ScriptArray::set):
        * bindings/js/ScriptFunctionCall.cpp:
        (WebCore::ScriptFunctionCall::ScriptFunctionCall):
        (WebCore::ScriptFunctionCall::appendArgument):
        * bindings/js/ScriptFunctionCall.h:
        * bindings/js/ScriptObject.cpp:
        (WebCore::ScriptObject::set):
        * bindings/js/ScriptValue.cpp:
        (WebCore::ScriptValue::serialize):
        (WebCore::ScriptValue::deserialize):
        * bindings/js/ScriptValue.h:
        * bindings/v8/ScriptArray.cpp:
        (WebCore::ScriptArray::set):
        * bindings/v8/ScriptFunctionCall.cpp:
        (WebCore::ScriptFunctionCall::ScriptFunctionCall):
        (WebCore::ScriptFunctionCall::appendArgument):
        * bindings/v8/ScriptFunctionCall.h:
        * bindings/v8/ScriptObject.cpp:
        (WebCore::ScriptObject::set):
        * bindings/v8/ScriptState.h:
        * bindings/v8/ScriptValue.cpp:
        (WebCore::ScriptValue::serialize):
        (WebCore::deserialize):
        * bindings/v8/ScriptValue.h:
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::V8InjectedScriptHost::reportDidDispatchOnInjectedScriptCallback):
        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::dispatch):
        (WebCore::InjectedScript::callFrames):
        (WebCore::InjectedScript::wrapForConsole):
        (WebCore::InjectedScript::releaseWrapperObjectGroup):
        * inspector/InjectedScript.h:
        * inspector/InjectedScriptHost.cpp:
        (WebCore::InjectedScriptHost::reportDidDispatchOnInjectedScript):
        * inspector/InjectedScriptHost.h:
        * inspector/InjectedScriptHost.idl:
        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::dispatchOnInjectedScript):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::setFrontendProxyObject):
        (WebCore::InspectorController::didPause):
        (WebCore::InspectorController::didEvaluateForTestInFrontend):
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::InspectorFrontend):
        (WebCore::InspectorFrontend::newScriptArray):
        (WebCore::InspectorFrontend::newScriptObject):
        (WebCore::InspectorFrontend::populateFrontendSettings):
        (WebCore::InspectorFrontend::updateConsoleMessageExpiredCount):
        (WebCore::InspectorFrontend::addConsoleMessage):
        (WebCore::InspectorFrontend::updateConsoleMessageRepeatCount):
        (WebCore::InspectorFrontend::updateResource):
        (WebCore::InspectorFrontend::removeResource):
        (WebCore::InspectorFrontend::didGetResourceContent):
        (WebCore::InspectorFrontend::updateFocusedNode):
        (WebCore::InspectorFrontend::setAttachedWindow):
        (WebCore::InspectorFrontend::addRecordToTimeline):
        (WebCore::InspectorFrontend::parsedScriptSource):
        (WebCore::InspectorFrontend::failedToParseScriptSource):
        (WebCore::InspectorFrontend::addProfileHeader):
        (WebCore::InspectorFrontend::setRecordingProfile):
        (WebCore::InspectorFrontend::didGetProfileHeaders):
        (WebCore::InspectorFrontend::didGetProfile):
        (WebCore::InspectorFrontend::pausedScript):
        (WebCore::InspectorFrontend::setDocument):
        (WebCore::InspectorFrontend::setDetachedRoot):
        (WebCore::InspectorFrontend::setChildNodes):
        (WebCore::InspectorFrontend::childNodeCountUpdated):
        (WebCore::InspectorFrontend::childNodeInserted):
        (WebCore::InspectorFrontend::childNodeRemoved):
        (WebCore::InspectorFrontend::attributesUpdated):
        (WebCore::InspectorFrontend::didRemoveNode):
        (WebCore::InspectorFrontend::didGetChildNodes):
        (WebCore::InspectorFrontend::didApplyDomChange):
        (WebCore::InspectorFrontend::didGetEventListenersForNode):
        (WebCore::InspectorFrontend::didGetCookies):
        (WebCore::InspectorFrontend::didDispatchOnInjectedScript):
        (WebCore::InspectorFrontend::addDatabase):
        (WebCore::InspectorFrontend::selectDatabase):
        (WebCore::InspectorFrontend::didGetDatabaseTableNames):
        (WebCore::InspectorFrontend::addDOMStorage):
        (WebCore::InspectorFrontend::selectDOMStorage):
        (WebCore::InspectorFrontend::didGetDOMStorageEntries):
        (WebCore::InspectorFrontend::didSetDOMStorageItem):
        (WebCore::InspectorFrontend::didRemoveDOMStorageItem):
        (WebCore::InspectorFrontend::updateDOMStorage):
        (WebCore::InspectorFrontend::addNodesToSearchResult):
        (WebCore::InspectorFrontend::contextMenuItemSelected):
        (WebCore::InspectorFrontend::evaluateForTestInFrontend):
        (WebCore::InspectorFrontend::callSimpleFunction):
        * inspector/InspectorFrontend.h:
        (WebCore::InspectorFrontend::scriptState):
        * inspector/front-end/InjectedScript.js:
        (injectedScriptConstructor):
        (injectedScriptConstructor.):
        * inspector/front-end/InjectedScriptAccess.js:
        (InjectedScriptAccess._installHandler.InjectedScriptAccess.prototype.methodName.myCallback):
        (InjectedScriptAccess._installHandler.InjectedScriptAccess.prototype.methodName):
        (InjectedScriptAccess._installHandler):
        * inspector/front-end/inspector.js:
        (WebInspector.pausedScript):
        (WebInspector.addConsoleMessage):

2010-02-05  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Generate convenience headers (QWebView, etc) using qmake

        In Qt this is done using syncqt, but we use a pro-file instead
        that generates makefile-rules for each of the extra headers.

        These extra headers are installed alongside the normal headers.

        * WebCore.pro: Use headers.pri based on DerivedSources instead
        of the one previously checked in in the source tree.

2010-02-05  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Enable JAVASCRIPT_DEBUGGER in chromium port.

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

        * page/Console.cpp:
        * page/Console.h:
        * page/Console.idl:

2010-02-05  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Tab width for javascript source is 8, should be 4

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

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame):
        * inspector/front-end/TextEditorModel.js:
        (WebInspector.TextEditorModel.prototype.set replaceTabsWithSpaces):
        (WebInspector.TextEditorModel.prototype._innerSetText):
        (WebInspector.TextEditorModel.prototype._replaceTabsIfNeeded):

2010-02-05  Tony Chang  <tony@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=24872
        When pasting a list into another list should not indent another level.
        If the cursor is at the beginning of the line, it should insert the
        list items before the current list item.  If the cursor is at the end
        of the line, it should insert the list items after the current list item.

        This matches Firefox and IE and makes the common activity of reordering a list
        work as expected.

        This also adds a small helper method (isListItem) to htmlediting.h.

        Test: editing/pasteboard/paste-list-002.html

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply):
        (WebCore::ReplaceSelectionCommand::insertAsListItems):
        * editing/ReplaceSelectionCommand.h:
        * editing/htmlediting.cpp:
        (WebCore::isListItem):
        (WebCore::appendedSublist):
        * editing/htmlediting.h:

2010-02-04  Mark Rowe  <mrowe@apple.com>

        Reviewed by Timothy Hatcher.

        Build fix.  Remove a symbol corresponding to an inline function from the linker export
        file to prevent a weak external failure.

        * WebCore.base.exp: Remove symbol.
        * WebCore.xcodeproj/project.pbxproj: Accommodate rename of script.

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

        Reviewed by Oliver Hunt.

        Updated to use new WeakGCPtr::clear interface.

        * bindings/js/JSEventListener.cpp:
        * bindings/js/JSEventListener.h:
        (WebCore::JSEventListener::invalidateJSFunction):

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

        Build fix: Added a forwarding header.

        * ForwardingHeaders/runtime/WeakGCPtr.h: Added.

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

        Reviewed by Alexey Proskuryakov and Darin Adler.

        REGRESSION (r52082): Missing event handlers on JQuery demo page (33383)
        https://bugs.webkit.org/show_bug.cgi?id=33383
        <rdar://problem/7559449>
        
        There were two bugs here:
        
        1. A stale wrapper would invalidate a node's event listeners, even if
        the node had a fresh wrapper keeping it alive.
        
        The fix for this is for an event listener to keep a WeakGCPtr back-pointer
        to the wrapper it expects to mark it. The wrapper destructor checks this
        back-pointer, and only invalidates the event listener in the case of a match.

        2. Conversely, a stale wrapper would not invalidate a node's event
        listeners soon enough, if its destructor didn't have a chance to run
        before an event fired on the node. (This can only happen in cases where
        we've made some other error and failed to mark a wrapper that was circuitously
        observable in the DOM. But we know we have edge case bugs like this, and
        we don't want them to be crashes.)
        
        The fix for this is to check the wrapper back-pointer before firing the
        event listener. As long as the the wrapper back-pointer is not null,
        it's safe to fire the listener. 

        * ForwardingHeaders/runtime/WeakGCPtr.h: Added. Appease build gods.

        * bindings/js/JSAbstractWorkerCustom.cpp:
        (WebCore::JSAbstractWorker::addEventListener):
        (WebCore::JSAbstractWorker::removeEventListener):
        * bindings/js/JSDOMApplicationCacheCustom.cpp:
        (WebCore::JSDOMApplicationCache::addEventListener):
        (WebCore::JSDOMApplicationCache::removeEventListener):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::markChildren):
        (WebCore::JSDOMWindow::addEventListener):
        (WebCore::JSDOMWindow::removeEventListener): Updated to pass a wrapper
        to the JSEventListener constructor.

        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::JSEventListener):
        (WebCore::JSEventListener::initializeJSFunction):
        (WebCore::JSEventListener::invalidateJSFunction):
        * bindings/js/JSEventListener.h:
        (WebCore::JSEventListener::create):
        (WebCore::JSEventListener::isolatedWorld):
        (WebCore::JSEventListener::wrapper):
        (WebCore::JSEventListener::setWrapper):
        (WebCore::JSEventListener::jsFunction):
        (WebCore::createJSAttributeEventListener): Implemented the back-pointer
        described above. Refactored the jsFunction() accessor to return 0 if
        the wrapper back-pointer is 0.

        * bindings/js/JSEventSourceCustom.cpp:
        (WebCore::JSEventSource::addEventListener):
        (WebCore::JSEventSource::removeEventListener):
        * bindings/js/JSLazyEventListener.cpp:
        (WebCore::JSLazyEventListener::JSLazyEventListener):
        (WebCore::JSLazyEventListener::initializeJSFunction):
        * bindings/js/JSLazyEventListener.h:
        (WebCore::JSLazyEventListener::create):
        * bindings/js/JSMessagePortCustom.cpp:
        (WebCore::JSMessagePort::markChildren):
        (WebCore::JSMessagePort::addEventListener):
        (WebCore::JSMessagePort::removeEventListener):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNode::addEventListener):
        (WebCore::JSNode::removeEventListener):
        (WebCore::JSNode::markChildren):
        * bindings/js/JSSVGElementInstanceCustom.cpp:
        (WebCore::JSSVGElementInstance::addEventListener):
        (WebCore::JSSVGElementInstance::removeEventListener):
        * bindings/js/JSWebSocketCustom.cpp:
        (WebCore::JSWebSocket::addEventListener):
        (WebCore::JSWebSocket::removeEventListener):
        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::markChildren):
        (WebCore::JSWorkerContext::addEventListener):
        (WebCore::JSWorkerContext::removeEventListener):
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::markChildren):
        (WebCore::JSXMLHttpRequest::addEventListener):
        (WebCore::JSXMLHttpRequest::removeEventListener):
        * bindings/js/JSXMLHttpRequestUploadCustom.cpp:
        (WebCore::JSXMLHttpRequestUpload::markChildren):
        (WebCore::JSXMLHttpRequestUpload::addEventListener):
        (WebCore::JSXMLHttpRequestUpload::removeEventListener): Updated to pass a wrapper
        to the JSEventListener constructor.


        * bindings/js/ScriptEventListener.cpp:
        (WebCore::createAttributeEventListener): Updated to pass a wrapper
        to the JSEventListener constructor.
        (WebCore::getEventListenerHandlerBody): Updated for the fact that jsFunction()
        is no longer a virtual accessor on the EventHandler base class.

        * bindings/scripts/CodeGeneratorJS.pm: Updated for the fact that jsFunction()
        is no longer a virtual accessor on the EventHandler base class. Added a "JS"
        to invalidateEventListeners and markEventListeners to clarify that these
        actions are for JS event listeners only. Added a wrapper parameter to
        invalidateEventListeners for the back-pointer check explained above.

        * dom/EventListener.h:
        (WebCore::EventListener::invalidateJSFunction): ditto

        * dom/EventTarget.h:
        (WebCore::EventTarget::markJSEventListeners):
        (WebCore::EventTarget::invalidateJSEventListeners): ditto

2010-02-04  Tony Chang  <tony@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=25002
        When inserting a new paragraph, avoid nesting empty divs.  When
        pasting near the end of a paragraph, this prevents each paste
        command for getting nested one level deeper.

        Test: editing/inserting/paragraph-outside-nested-divs.html

        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::highestVisuallyEquivalentDiv):
        (WebCore::InsertParagraphSeparatorCommand::doApply):

2010-02-04  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Eric Seidel.

        1. Fix a bug in SQLiteTransaction: do not assume that COMMIT always
        succeeds.
        2. Jump straight to the transaction error callback when a
        statement fails in a way that makes sqlite automatically rollback
        the transaction.
        3. Fix the code that handles the "quota reached" failure, as it is
        one of the failures that lead to an automatic transaction
        rollback.

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

        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::isAutoCommitOn):
        * platform/sql/SQLiteDatabase.h:
        * platform/sql/SQLiteTransaction.cpp:
        (WebCore::SQLiteTransaction::begin):
        (WebCore::SQLiteTransaction::commit):
        (WebCore::SQLiteTransaction::rollback):
        (WebCore::SQLiteTransaction::transactionWasRolledBackBySqlite):
        * platform/sql/SQLiteTransaction.h:
        * storage/SQLTransaction.cpp:
        (WebCore::SQLTransaction::SQLTransaction):
        (WebCore::SQLTransaction::runStatements):
        (WebCore::SQLTransaction::runCurrentStatement):
        (WebCore::SQLTransaction::handleCurrentStatementError):
        (WebCore::SQLTransaction::deliverQuotaIncreaseCallback):

2010-02-04  Peter Kasting  <pkasting@google.com>

        Not reviewed, rollback.

        Rollback r54387, it doesn't fix builds and Chromium doesn't want this behavior.

        * platform/chromium/ScrollbarThemeChromiumMac.h:

2010-02-04  Stephen White  <senorblanco@chromium.org>

        Unreviewed, build fix.

        Fix for Chromium/Mac after palindromic scrollbar change (54345).

        Covered by many layout tests.

        * platform/chromium/ScrollbarThemeChromiumMac.h:
        (WebCore::ScrollbarThemeChromiumMac::maxOverlapBetweenPages):

2010-02-04  Clemmitt Sigler  <cmsigler@gmail.com>

        Reviewed by David Levin.

        WebKitGTK doesn't build GtkLauncher when --enable-mathml is specified.
        Updated WebCore/GNUmakefile.am to include needed files in build.
        
        https://bugs.webkit.org/show_bug.cgi?id=34387

        No new tests.

        * GNUmakefile.am:

2010-02-04  Stephan Aßmus  <superstippi@gmx.de>

        Reviewed by David Levin.

        Misc coding style fixes in Haiku port code.
        https://bugs.webkit.org/show_bug.cgi?id=34527

        No tests needed.

        * platform/haiku/ContextMenuItemHaiku.cpp: Trailing white space, NULL -> 0
        * platform/haiku/DragImageHaiku.cpp: Trailing white space.
        * platform/haiku/FileChooserHaiku.cpp: Sorted headers.
        * platform/haiku/LocalizedStringsHaiku.cpp: Needed to include NotImplemented.h

2010-02-04  Enrica Casucci  <enrica@apple.com>

        Reviewed by Csaba Osztrogonac.

        Fixed crash on QT introduced with the fix for
        https://bugs.webkit.org/show_bug.cgi?id=34609

        The test has been added with the original patch.
        
        * platform/qt/ClipboardQt.cpp:
        (WebCore::ClipboardQt::writePlainText): Added missing allocation of m_writeData.

2010-02-04  Christian Dywan  <christian@twotoasts.de>

        Reviewed by Xan Lopez.

        Conditionalize third party cookie policy for libsoup 2.29.90.

        * platform/network/soup/CookieJarSoup.cpp:
        (WebCore::setCookies):
        * platform/network/soup/DNSSoup.cpp:
        (WebCore::prefetchDNS):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::restartedCallback):
        (WebCore::startHttp):
        * platform/network/soup/ResourceRequestSoup.cpp:
        (WebCore::ResourceRequest::toSoupMessage):
        (WebCore::ResourceRequest::updateFromSoupMessage):

2010-02-04  Christian Dywan  <christian@twotoasts.de>

        Rubber-stamped by Gustavo Noronha Silva.

        Add ENABLE(VIDEO) guards around freeOwnedGPtr<GstElement> implementation.

        * platform/gtk/GOwnPtrGtk.cpp:

2010-02-04  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        Assertion failure in CheckedRadioButtons::removeButton when using jQuery 1.4.1
        https://bugs.webkit.org/show_bug.cgi?id=34520

        Test: fast/dom/HTMLInputElement/cloned-input-checked-state.html

        * dom/Element.cpp: (WebCore::Element::cloneElementWithoutChildren): Copy non-attribute
        properties before attributes. Otherwise, copying "checked" attribute would make the cloned
        node checked, unchecking original (they share a name, and are thus in the same radio group).
        We do want the original to be unchecked, but we also want to know its original state in
        HTMLInputElement::copyNonAttributeProperties().

        * html/HTMLInputElement.cpp: (WebCore::HTMLInputElement::copyNonAttributeProperties):
        Use setChecked instead of plain assignment to prevent m_checked getting out of sync with
        checkedRadioButtons. Also, copy field related to default checked state, so that m_checked
        won't be overridden when copying attributes.

2010-02-04  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix after addition of Clipboard::writePlainText method.

        * platform/wx/ClipboardWx.cpp:
        (WebCore::ClipboardWx::writePlainText):
        * platform/wx/ClipboardWx.h:

2010-02-04  Enrica Casucci  <enrica@apple.com>

        Reviewed by Oliver Hunt.

        REGRESSION: Dragging plain text into a styled text region does not acquire the correct style info.
        <rdar://problem/7595685>
        https://bugs.webkit.org/show_bug.cgi?id=34609

        Test: editing/pasteboard/drop-inputtext-acquires-style.html

        The dragging code did not distinguish the case of dragging the content of an input control
        as a special case. The markup placed in the pasteboard included the style information.
        I've modified the Clipboard class interface adding a new method writePlainText to match the
        behavior of the copy and cut commands and modified the drag code to detect the special case.
        I've modified all the platform specific implementations of the Clipboard class.
        
        * dom/Clipboard.h: Added writePlainText pure virtual function.
        * editing/Editor.cpp:
        (WebCore::Editor::cut): Renamed nodeIsTextFormControl to isNodeInTextFormControl.
        (WebCore::Editor::copy): Renamed nodeIsTextFormControl to isNodeInTextFormControl.
        * editing/htmlediting.cpp:
        (WebCore::isNodeInTextFormControl): Added, after removing the implementation with the old name
        in Editor.cpp
        * editing/htmlediting.h:
        * page/DragController.cpp:
        (WebCore::DragController::startDrag):
        * platform/Pasteboard.h:
        * platform/android/ClipboardAndroid.cpp:
        (WebCore::ClipboardAndroid::writePlainText): Added.
        * platform/android/ClipboardAndroid.h:
        * platform/chromium/ClipboardChromium.cpp:
        (WebCore::ClipboardChromium::writePlainText): Added.
        * platform/chromium/ClipboardChromium.h:
        * platform/gtk/ClipboardGtk.cpp:
        (WebCore::ClipboardGtk::writePlainText): Added.
        * platform/gtk/ClipboardGtk.h:
        * platform/haiku/ClipboardHaiku.cpp:
        (WebCore::ClipboardHaiku::writePlainText): Added.
        * platform/haiku/ClipboardHaiku.h:
        * platform/mac/ClipboardMac.h:
        * platform/mac/ClipboardMac.mm:
        (WebCore::ClipboardMac::writePlainText): Added.
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::writePlainText): Added helper function.
        * platform/qt/ClipboardQt.cpp:
        (WebCore::ClipboardQt::writePlainText): Added.
        * platform/qt/ClipboardQt.h:
        * platform/win/ClipboardWin.cpp:
        (WebCore::ClipboardWin::writePlainText): Added.
        * platform/win/ClipboardWin.h:

2010-02-04  Steve Block  <steveblock@google.com>

        Reviewed by Nate Chapin.

        Fix bug in V8 convertNPVariantToJValue when converting float and double types
        https://bugs.webkit.org/show_bug.cgi?id=34593

        No new tests, build fix only.

        * bridge/jni/v8/JNIUtilityPrivate.cpp: Modified.
        (JSC::Bindings::convertNPVariantToJValue): Modified. Use correct members of 'result' enum.

2010-02-04  Chris Guillory  <chris.guillory@google.com>

        Reviewed by Darin Fisher.

        [Chromium] Notify ChromeClientChromium of AccessibilityObject state
        change notifications.
        
        https://bugs.webkit.org/show_bug.cgi?id=34464

        * accessibility/chromium/AXObjectCacheChromium.cpp:
        (WebCore::toChromeClientChromium):
        (WebCore::AXObjectCache::postPlatformNotification):
        * page/chromium/ChromeClientChromium.h:

2010-02-04  Stephen White  <senorblanco@chromium.org>

        Unreviewed, build fix for Chromium.

        Revert r54341 ("[v8] Remove clear method from DOM object maps"),
        since it causes the worker tests to fail on Chromium.

        * bindings/v8/DOMData.h:
        (WebCore::DOMData::removeObjectsFromWrapperMap):
        * bindings/v8/DOMDataStore.h:
        (WebCore::ChunkedTable::clear):
        (WebCore::ChunkedTable::clearEntries):
        (WebCore::DOMDataStore::IntrusiveDOMWrapperMap::clear):
        (WebCore::DOMDataStore::IntrusiveDOMWrapperMap::ChunkedTableTraits::clear):
        * bindings/v8/V8DOMMap.cpp:
        (WebCore::removeAllDOMObjectsInCurrentThreadHelper):
        (WebCore::removeAllDOMObjectsInCurrentThread):
        * bindings/v8/V8DOMMap.h:
        (WebCore::WeakReferenceMap::clear):
        * bindings/v8/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::~WorkerScriptController):

2010-02-04  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        [GTK] Crashes when an invalid hostname is pre-fetched
        https://bugs.webkit.org/show_bug.cgi?id=34602

        * platform/network/soup/DNSSoup.cpp:
        (WebCore::prefetchDNS): NULL-check the SoupURI that is created
        from the hostname; that will happen for invalid hostnames.

2010-02-04  José Millán Soto  <jmillan@igalia.com>

        Reviewed by Xan Lopez.

        [Gtk] webkitgtk crashed when Orca open
        https://bugs.webkit.org/show_bug.cgi?id=34463

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (textForObject):
        Checking if render objects are texts before calling toRenderText

2010-02-04  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Set first party URI in all SoupMessages. This allows libsoup to
        implement a "no third party cookies" policy in case it wants
        to. Also start a non-JSC-specific, gtk-specific GOwnPtr module and
        use it for SoupURI.

        * platform/network/soup/CookieJarSoup.cpp:
        (WebCore::setCookies):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::restartedCallback):
        (WebCore::startHttp):
        * platform/network/soup/ResourceRequestSoup.cpp:
        (WebCore::ResourceRequest::toSoupMessage):
        (WebCore::ResourceRequest::updateFromSoupMessage):

2010-02-04  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: group cookies by domains, not frame's domains.

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

        * inspector/front-end/CookieItemsView.js:
        (WebInspector.CookieItemsView.prototype._cookiesForDomain):
        * inspector/front-end/inspector.js:
        (WebInspector.updateResource):
        (WebInspector._addCookieDomain):

2010-02-04  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Delete V8CustomBinding.h and all references to V8Custom

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

        * bindings/v8/NPV8Object.cpp:
        * bindings/v8/V8DOMWindowShell.h:
        * bindings/v8/V8NPObject.cpp:
        * bindings/v8/V8Utilities.cpp:
        * bindings/v8/custom/V8AbstractWorkerCustom.cpp:
        * bindings/v8/custom/V8AttrCustom.cpp:
        * bindings/v8/custom/V8CSSStyleDeclarationCustom.cpp:
        * bindings/v8/custom/V8CanvasRenderingContext2DCustom.cpp:
        * bindings/v8/custom/V8ClipboardCustom.cpp:
        * bindings/v8/custom/V8CoordinatesCustom.cpp:
        * bindings/v8/custom/V8CustomBinding.h: Removed.
        * bindings/v8/custom/V8DOMApplicationCacheCustom.cpp:
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        * bindings/v8/custom/V8DataGridColumnListCustom.cpp:
        * bindings/v8/custom/V8DatabaseCustom.cpp:
        * bindings/v8/custom/V8ElementCustom.cpp:
        * bindings/v8/custom/V8EventSourceConstructor.cpp:
        * bindings/v8/custom/V8EventSourceCustom.cpp:
        * bindings/v8/custom/V8GeolocationCustom.cpp:
        * bindings/v8/custom/V8HTMLAllCollectionCustom.cpp:
        * bindings/v8/custom/V8HTMLAudioElementConstructor.cpp:
        (WebCore::v8HTMLAudioElementConstructorCallback):
        (WebCore::V8HTMLAudioElementConstructor::GetTemplate):
        * bindings/v8/custom/V8HTMLCollectionCustom.cpp:
        * bindings/v8/custom/V8HTMLDataGridElementCustom.cpp:
        * bindings/v8/custom/V8HTMLFrameElementCustom.cpp:
        * bindings/v8/custom/V8HTMLIFrameElementCustom.cpp:
        * bindings/v8/custom/V8HTMLImageElementConstructor.cpp:
        (WebCore::v8HTMLImageElementConstructorCallback):
        (WebCore::V8HTMLImageElementConstructor::GetTemplate):
        * bindings/v8/custom/V8HTMLInputElementCustom.cpp:
        * bindings/v8/custom/V8HTMLOptionElementConstructor.cpp:
        (WebCore::v8HTMLOptionElementConstructorCallback):
        (WebCore::V8HTMLOptionElementConstructor::GetTemplate):
        * bindings/v8/custom/V8HTMLPlugInElementCustom.cpp:
        * bindings/v8/custom/V8HistoryCustom.cpp:
        * bindings/v8/custom/V8InspectorFrontendHostCustom.cpp:
        * bindings/v8/custom/V8LocationCustom.cpp:
        * bindings/v8/custom/V8MessagePortCustom.cpp:
        * bindings/v8/custom/V8NodeCustom.cpp:
        * bindings/v8/custom/V8NodeFilterCustom.cpp:
        * bindings/v8/custom/V8SQLResultSetRowListCustom.cpp:
        * bindings/v8/custom/V8SQLTransactionCustom.cpp:
        * bindings/v8/custom/V8SVGElementInstanceCustom.cpp:
        * bindings/v8/custom/V8SVGLengthCustom.cpp:
        * bindings/v8/custom/V8SharedWorkerCustom.cpp:
        * bindings/v8/custom/V8StorageCustom.cpp:
        * bindings/v8/custom/V8WebGLArrayBufferCustom.cpp:
        * bindings/v8/custom/V8WebGLArrayCustom.h:
        * bindings/v8/custom/V8WebGLByteArrayCustom.cpp:
        * bindings/v8/custom/V8WebGLFloatArrayCustom.cpp:
        * bindings/v8/custom/V8WebGLIntArrayCustom.cpp:
        * bindings/v8/custom/V8WebGLShortArrayCustom.cpp:
        * bindings/v8/custom/V8WebGLUnsignedByteArrayCustom.cpp:
        * bindings/v8/custom/V8WebGLUnsignedIntArrayCustom.cpp:
        * bindings/v8/custom/V8WebGLUnsignedShortArrayCustom.cpp:
        * bindings/v8/custom/V8WebKitPointConstructor.cpp:
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        * bindings/v8/custom/V8WorkerCustom.cpp:
        * bindings/v8/custom/V8XMLHttpRequestConstructor.cpp:
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        * bindings/v8/custom/V8XMLHttpRequestUploadCustom.cpp:

2010-02-04  Ariya Hidayat  <ariya.hidayat@gmail.com>

        Reviewed by Simon Hausmann.

        [Qt] Unnecessary QBrush construction for doing a solid fill
        https://bugs.webkit.org/show_bug.cgi?id=34559

        Use the similar trick like r37421, i.e. use the special brush for
        solid color to avoid creating QBrush again and again.

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::setPlatformFillColor):

2010-02-04  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        REGRESSION (r53718): When scrolling a tall window by page, the overlap between pages is too big
        https://bugs.webkit.org/show_bug.cgi?id=34371

        Allow ScrollbarTheme to cap the overlap between pages, and set a cap of
        40 in ScrollbarThemeMac.

        * WebCore.base.exp: Export Scrollbar::maxOverlapBetweenPages().
        * editing/EditorCommand.cpp:
        (WebCore::verticalScrollDistance): Use Scrollbar methods instead of
        constants, and cap the scroll distance if needed.
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::updateScrollbars): Ditto.
        (WebCore::ScrollView::wheelEvent): Ditto.
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::maxOverlapBetweenPages): Added. Returns the
        value from the native scrollbar theme.
        * platform/Scrollbar.h: Replaced scroll amount constants with static methods.
        (WebCore::Scrollbar::pixelsPerLineStep): Replaces cScrollbarPixelsPerLineStep.
        (WebCore::Scrollbar::minFractionToStepWhenPaging): Replaces cFractionToStepWhenPaging.
        * platform/ScrollbarTheme.h:
        (WebCore::ScrollbarTheme::maxOverlapBetweenPages): A base implementation
        that returns the largest int.
        * platform/gtk/WheelEventGtk.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent): Use Scrollbar methods instead of
        constants.
        * platform/haiku/PlatformWheelEventHaiku.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent): Use Scrollbar methods instead of
        constants.
        * platform/mac/ScrollbarThemeMac.h:
        (WebCore::ScrollbarThemeMac::maxOverlapBetweenPages): An override
        that returns 40.
        * platform/mac/WheelEventMac.mm:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent): Use
        Scrollbar::pixelsPerLineStep() instead of cScrollbarPixelsPerLineStep.
        * platform/wx/MouseWheelEventWx.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent): Use Scrollbar methods instead of
        constants.
        * platform/wx/ScrollViewWx.cpp:
        (WebCore::ScrollView::ScrollViewPrivate::OnScrollWinEvents): Use Scrollbar
        methods instead of constants, and cap the scroll distance if needed.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateScrollInfoAfterLayout): Ditto.

2010-02-04  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Ariya Hidayat.

        [Qt] Tuning and optimizations to GraphicsLayerQt. Reduce unnecessary
        recaching, remove QTimer::singleShot and QPixmap::scaled, more
        accurate strategy of handling transform operation blends. Rotating a
        bordered-table, for example, now runs at 50FPS instead of 40FPS on Maemo5.

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

        This is tested by https://bugs.webkit.org/show_bug.cgi?id=34450, fps measurements.

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::GraphicsLayerQtImpl::flushChanges): Fine-tune caching
        (WebCore::TransformAnimationQt::TransformAnimationQt): transform bugs
        (WebCore::OpacityAnimationQt::updateState): style change

2010-02-04  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Cookies for resources are not shown in storage panel.

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

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::getCookies):
        * inspector/InspectorResource.cpp:
        (WebCore::InspectorResource::updateScriptObject):
        (WebCore::InspectorResource::cachedResource):
        * inspector/InspectorResource.h:
        (WebCore::InspectorResource::requestURL):

2010-02-04  Anton Muhin  <antonm@chromium.org>

        Reviewed by Adam Barth.

        [v8] Remove clear method from DOM object maps
        https://bugs.webkit.org/show_bug.cgi?id=34530

        No new tests. Should be covered by existent testing infrastructure.

        * bindings/v8/DOMData.h:
        * bindings/v8/DOMDataStore.h:
        * bindings/v8/V8DOMMap.cpp:
        * bindings/v8/V8DOMMap.h:
        * bindings/v8/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::~WorkerScriptController):

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

        Reviewed by Xan Lopez.

        [Gtk] Check if the renderer() exists in textForObject.

        This is fixing a crash in the textForObject method. It can
        happen when inspecting AtkObjects in the accerciser, then
        navigating to a new page and still inspecting the old tree.

        In this case the AccessibilityObjectWrapperAtk was still
        valid but the included renderer() was returning 0. Add a
        check for the accObject->renderer() before trying to use
        the result.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (textForObject):

2010-02-04  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Provide strongly typed C++ interface for inspector's injected script.

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

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::InjectedScriptHost::injectedScriptFor):
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::InjectedScriptHost::injectedScriptFor):
        * inspector/InjectedScript.cpp: Added.
        (WebCore::InjectedScript::InjectedScript):
        (WebCore::InjectedScript::dispatch):
        (WebCore::InjectedScript::callFrames):
        (WebCore::InjectedScript::wrapAndStringifyForConsole):
        (WebCore::InjectedScript::releaseWrapperObjectGroup):
        * inspector/InjectedScript.h: Added.
        (WebCore::InjectedScript::InjectedScript):
        (WebCore::InjectedScript::~InjectedScript):
        (WebCore::InjectedScript::hasNoValue):
        * inspector/InjectedScriptHost.cpp:
        (WebCore::InjectedScriptHost::injectedScriptForId):
        (WebCore::InjectedScriptHost::releaseWrapperObjectGroup):
        * inspector/InjectedScriptHost.h:
        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::dispatchOnInjectedScript):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::~InspectorController):
        (WebCore::InspectorController::inspectedPageDestroyed):
        (WebCore::InspectorController::windowScriptObjectAvailable):
        (WebCore::InspectorController::scriptObjectReady):
        (WebCore::InspectorController::setFrontendProxyObject):
        (WebCore::InspectorController::close):
        (WebCore::InspectorController::getProfile):
        (WebCore::InspectorController::enableDebugger):
        (WebCore::InspectorController::didPause):
        (WebCore::InspectorController::injectedScriptForNodeId):
        * inspector/InspectorController.h:
        (WebCore::InspectorController::frontendScriptState):
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::addConsoleMessage):
        * inspector/front-end/InjectedScript.js:
        (injectedScriptConstructor):

2010-02-04  Philippe Normand  <pnormand@igalia.com>

        Rubber stamped by Xan Lopez.

        Missing include, build fix after landing of patch from the bug 34435.

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:

2010-02-02  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [Gtk] libsoup critical warning in media player http cookies injection code
        https://bugs.webkit.org/show_bug.cgi?id=34435

        Fixed the critical warning and refactored the
        User-Agent/Referer/cookies injection code, in that order. Previous
        order (cookies first) was wrong because if cookies injection could
        not be done neither the User-Agent nor Referer were injected. Also
        started a non-JSC-specific, gtk-specific GOwnPtr module.

        * GNUmakefile.am:
        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::mediaPlayerPrivateSourceChangedCallback):
        * platform/gtk/GOwnPtrGtk.cpp: Added.
        (WTF::SoupURI):
        (WTF::GstElement):
        * platform/gtk/GOwnPtrGtk.h: Added.

2010-02-04  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Timothy Hatcher.

        Put JSC-specific debugger & profiler code under "USE(JSC)" defines.
        The plan is to enable "JAVASCRIPT_DEBUGGER" in Chromium and then
        make this code engine-agnostic.

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

        * inspector/InjectedScriptHost.cpp:
        * inspector/InjectedScriptHost.h:
        * inspector/InspectorBackend.cpp:
        * inspector/InspectorBackend.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::setWindowVisible):
        (WebCore::InspectorController::scriptObjectReady):
        (WebCore::InspectorController::close):
        (WebCore::InspectorController::didCommitLoad):
        * inspector/InspectorController.h:
        * inspector/InspectorFrontend.cpp:
        * inspector/InspectorFrontend.h:
        * inspector/JavaScriptCallFrame.cpp:
        * inspector/JavaScriptCallFrame.h:
        * inspector/JavaScriptDebugListener.h:
        * inspector/JavaScriptDebugServer.cpp:
        * inspector/JavaScriptDebugServer.h:
        * inspector/JavaScriptProfile.cpp:
        * inspector/JavaScriptProfile.h:
        * inspector/JavaScriptProfileNode.cpp:
        * inspector/JavaScriptProfileNode.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy):
        * page/Page.cpp:
        (WebCore::Page::Page):

2010-02-03  Nicholas Young  <nicholas.young@nokia.com>

        Reviewed by Eric Carlson.

        Defer formatting of times displayed on media controls to the current theme.
        https://bugs.webkit.org/show_bug.cgi?id=34405

        No new tests needed. Refactoring Only.

        * rendering/MediaControlElements.cpp: Removed formatTime()
        (WebCore::MediaControlTimeDisplayElement::setCurrentValue): No longer sets inner text
        * rendering/MediaControlElements.h:
        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::updateTimeDisplay): Asks the theme to format the time display elements
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::formatMediaControlsTime): new virtual method
        (WebCore::RenderTheme::formatMediaControlsCurrentTime): new virtual method
        (WebCore::RenderTheme::formatMediaControlsRemainingTime): new virtual method
        * rendering/RenderTheme.h:

2010-02-03  Steve Falkenburg  <sfalken@apple.com>

        Windows Debug_All build fix.

        * platform/graphics/win/WKCACFLayer.cpp:

2010-02-03  Brady Eidson  <beidson@apple.com>

        Reviewed by Alexey Proskuryakov.

        REGRESSION (r51644): WebCore/manual-tests/linkjump-1.html fails
        <rdar://problem/7595694> and https://bugs.webkit.org/show_bug.cgi?id=34550

        Tests: fast/loader/document-with-fragment-url-1.html
               fast/loader/document-with-fragment-url-2.html
               fast/loader/document-with-fragment-url-3.html
               fast/loader/document-with-fragment-url-4.html

        * platform/KURL.cpp:
        (WebCore::KURL::init): When resolving new URL from an empty reference relative to an absolute URL,
          any fragment identifier from the absolute URL should be removed from the resulting resolution.

2010-02-03  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Eric Seidel.

        [BREWMP] Port TextBreakIteratorInternalICU
        https://bugs.webkit.org/show_bug.cgi?id=34515

        Port TextBreakIteratorInternalICU.

        * platform/text/brew/TextBreakIteratorInternalICUBrew.cpp: Added.
        (WebCore::currentSearchLocaleID):
        (WebCore::currentTextBreakLocaleID):

2010-02-03  Adele Peterson  <adele@apple.com>

        Reviewed by Simon Fraser.

        Fix for <rdar://problem/7594212> 
        https://bugs.webkit.org/show_bug.cgi?id=34549 - CSS counters crash at http://www.w3.org/TR/css3-content/
        CrashTracer: [USER] 20 crashes in Safari at com.apple.WebCore: WebCore::CounterNode::insertAfter + 319

        Test: fast/css/counters/counter-before-selector-crash.html

        * rendering/RenderCounter.cpp: (WebCore::updateCounters): nil check.

2010-02-03  Adele Peterson  <adele@apple.com>

        Reviewed by Brady Eidson.

        Initialize the variable in the last checkin to false.  I didn't realize DRT relies on this being false.  
        So ports that want visited link tracking need to set that flag.

        * page/PageGroup.cpp:

2010-02-03  Adele Peterson  <adele@apple.com>

        Reviewed by Brady Eidson.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=34547
        static shouldTrackVisitedLinks is not initialized

        For ports that don't call into WebKit to initialize this, 
        we should initialize to true so they get the visited link behavior by default.

        * page/PageGroup.cpp:

2010-02-03  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/7577604> Drag and Drop: background elements are bleeding through
        https://bugs.webkit.org/show_bug.cgi?id=34546

        * manual-tests/drag-image-table-part-decorations.html: Added.
        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::paintBoxDecorations): Bail out if this object shouldn’t
        paint within the current painting root.
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::paintBoxDecorations): Ditto.
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::paintBackgroundsBehindCell): Ditto.
        (WebCore::RenderTableCell::paintBoxDecorations): Ditto.

2010-02-03  Nate Chapin  <japhet@chromium.org>

        Unreviewed, Chromium mac build fix.

        [V8] Remove unused V8Proxy* variable from generated wrapping code.

        * bindings/scripts/CodeGeneratorV8.pm:

2010-02-03  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Use toV8() to wrap in the custom bindings, and remove
        the old wrapping code from V8DOMWrapper.
        
        https://bugs.webkit.org/show_bug.cgi?id=32563

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/ScriptController.cpp:
        * bindings/v8/ScriptObject.cpp:
        * bindings/v8/V8AbstractEventListener.cpp:
        * bindings/v8/V8Collection.h:
        * bindings/v8/V8DOMWindowShell.cpp:
        * bindings/v8/V8DOMWrapper.cpp:
        * bindings/v8/V8DOMWrapper.h:
        * bindings/v8/V8NodeFilterCondition.cpp:
        * bindings/v8/V8Proxy.cpp:
        * bindings/v8/WorkerContextExecutionProxy.h
        * bindings/v8/custom/V8CanvasRenderingContext2DCustom.cpp:
        * bindings/v8/custom/V8CustomPositionCallback.cpp:
        * bindings/v8/custom/V8CustomPositionErrorCallback.cpp:
        * bindings/v8/custom/V8CustomSQLStatementCallback.cpp:
        * bindings/v8/custom/V8CustomSQLStatementErrorCallback.cpp:
        * bindings/v8/custom/V8CustomSQLTransactionCallback.cpp:
        * bindings/v8/custom/V8CustomSQLTransactionErrorCallback.cpp:
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        * bindings/v8/custom/V8DataGridColumnListCustom.cpp:
        * bindings/v8/custom/V8DocumentCustom.cpp:
        * bindings/v8/custom/V8DocumentLocationCustom.cpp:
        * bindings/v8/custom/V8ElementCustom.cpp:
        * bindings/v8/custom/V8EventCustom.cpp:
        * bindings/v8/custom/V8HTMLAllCollectionCustom.cpp:
        * bindings/v8/custom/V8HTMLAudioElementConstructor.cpp:
        * bindings/v8/custom/V8HTMLCanvasElementCustom.cpp:
        * bindings/v8/custom/V8HTMLCollectionCustom.cpp:
        * bindings/v8/custom/V8HTMLDocumentCustom.cpp:
        * bindings/v8/custom/V8HTMLFormElementCustom.cpp:
        * bindings/v8/custom/V8HTMLFrameSetElementCustom.cpp:
        * bindings/v8/custom/V8HTMLImageElementConstructor.cpp:
        * bindings/v8/custom/V8HTMLOptionsCollectionCustom.cpp:
        * bindings/v8/custom/V8HTMLSelectElementCustom.cpp:
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        * bindings/v8/custom/V8MessageChannelConstructor.cpp:
        * bindings/v8/custom/V8MessageEventCustom.cpp:
        * bindings/v8/custom/V8NamedNodeMapCustom.cpp:
        * bindings/v8/custom/V8NodeIteratorCustom.cpp:
        * bindings/v8/custom/V8NodeListCustom.cpp:
        * bindings/v8/custom/V8NotificationCenterCustom.cpp:
        * bindings/v8/custom/V8SVGMatrixCustom.cpp:
        * bindings/v8/custom/V8StyleSheetListCustom.cpp:
        * bindings/v8/custom/V8TreeWalkerCustom.cpp:
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        * bindings/v8/custom/V8XSLTProcessorCustom.cpp:

2010-02-03  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Fix drawing buttons in viewless WebKit.

        * platform/mac/ThemeMac.mm:
        (WebCore::paintButton): If there is no view, make sure to flip the
        context so that the button is drawn correctly.

2010-02-03  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] WebSockets : Buffer the data in WebKit instead of QtNetwork
        https://bugs.webkit.org/show_bug.cgi?id=34425

        Reverting r54279, it was a misunderstanding.

        * platform/network/qt/SocketStreamHandlePrivate.h:
        * platform/network/qt/SocketStreamHandleQt.cpp:
        (WebCore::SocketStreamHandlePrivate::SocketStreamHandlePrivate):
        (WebCore::SocketStreamHandlePrivate::send):
        (WebCore::SocketStreamHandlePrivate::close):

2010-02-03  Drew Wilson  <atwilson@chromium.org>

        Reviewed by Alexey Proskuryakov.

        SharedWorkerScriptLoader should not be an ActiveDOMObject
        https://bugs.webkit.org/show_bug.cgi?id=34513

        Test: Existing tests suffice (fixes test downstream in Chrome).

        * workers/DefaultSharedWorkerRepository.cpp:
        (WebCore::SharedWorkerScriptLoader::SharedWorkerScriptLoader):
        Changed to no longer derive from ActiveDOMObject (handles its own refcounting).
        (WebCore::SharedWorkerScriptLoader::load):
        Now increments own refcount when a load is pending.
        (WebCore::SharedWorkerScriptLoader::notifyFinished):
        Changed to decrement refcount when load is complete.
        * workers/WorkerScriptLoaderClient.h:
        Documentation change about reliability of notifyFinished() when used from worker context.

2010-02-03  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Inspector renders blank scripts on reloading the webpage.

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

        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.recreateViewForResourceIfNeeded):

2010-02-03  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Provide strongly typed C++ interface for inspector's injected script.

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

        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::InjectedScriptHost::injectedScriptFor):
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::InjectedScriptHost::injectedScriptFor):
        * inspector/InjectedScript.cpp: Added.
        (WebCore::InjectedScript::InjectedScript):
        (WebCore::InjectedScript::dispatch):
        (WebCore::InjectedScript::callFrames):
        (WebCore::InjectedScript::wrapAndStringify):
        (WebCore::InjectedScript::releaseWrapperObjectGroup):
        * inspector/InjectedScript.h: Added.
        (WebCore::InjectedScript::InjectedScript):
        (WebCore::InjectedScript::~InjectedScript):
        (WebCore::InjectedScript::hasNoValue):
        * inspector/InjectedScriptHost.cpp:
        (WebCore::InjectedScriptHost::injectedScriptForId):
        (WebCore::InjectedScriptHost::releaseWrapperObjectGroup):
        * inspector/InjectedScriptHost.h:
        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::dispatchOnInjectedScript):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::~InspectorController):
        (WebCore::InspectorController::inspectedPageDestroyed):
        (WebCore::InspectorController::windowScriptObjectAvailable):
        (WebCore::InspectorController::scriptObjectReady):
        (WebCore::InspectorController::setFrontendProxyObject):
        (WebCore::InspectorController::close):
        (WebCore::InspectorController::getProfile):
        (WebCore::InspectorController::enableDebugger):
        (WebCore::InspectorController::didPause):
        (WebCore::InspectorController::injectedScriptForNodeId):
        * inspector/InspectorController.h:
        (WebCore::InspectorController::frontendScriptState):
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::addConsoleMessage):

2010-02-03  Andras Becsi  <abecsi@webkit.org>

        Unreviewed build fix.

        [Qt] Roll-out r54281 because it broke the build on the Qt Release bot.

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::GraphicsLayerQtImpl::State::State):
        (WebCore::GraphicsLayerQtImpl::GraphicsLayerQtImpl):
        (WebCore::GraphicsLayerQtImpl::setBaseTransform):
        (WebCore::GraphicsLayerQtImpl::drawContents):
        (WebCore::GraphicsLayerQtImpl::notifyChange):
        (WebCore::GraphicsLayerQtImpl::flushChanges):
        (WebCore::GraphicsLayerQt::setNeedsDisplayInRect):
        (WebCore::applyTimingFunction):
        (WebCore::webkitAnimationToQtAnimationValue):
        (WebCore::AnimationQtBase::updateState):
        (WebCore::AnimationQt::updateCurrentTime):
        (WebCore::TransformAnimationQt::TransformAnimationQt):
        (WebCore::TransformAnimationQt::~TransformAnimationQt):
        (WebCore::TransformAnimationQt::applyFrame):
        (WebCore::TransformAnimationQt::updateState):
        (WebCore::OpacityAnimationQt::updateState):
        (WebCore::GraphicsLayerQt::pauseAnimation):

2010-02-02  Bryan Yeung  <bryeung@google.com>

        Reviewed by Darin Adler.

        Avoid using an invalidated KURL object in baseURI.

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

        This change fixes baseURI for Chromium (where the KURL implementation
        does not allow invalid KURLs to carry relative paths).  This is
        regression tested by
        LayoutTests/svg/W3C-SVG-1.1/struct-image-07-t.svg

        This is a re-application of this patch since it was mistakenly identified as
        the cause of a big chromium test regression and rolled out in r54264.

        * dom/Element.cpp:
        (WebCore::Element::baseURI):

2010-02-02  Joel Stanley  <joel@jms.id.au>

        Reviewed by David Levin.

        [Chromium] Make setCaretBlinkInterval static.
        https://bugs.webkit.org/show_bug.cgi?id=31704

        This is so it can be called from the newly exposed Chromium API setter
        method.

        * rendering/RenderThemeChromiumLinux.cpp:
        * rendering/RenderThemeChromiumLinux.h:

2010-02-02  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] WebSockets : Buffer the data in WebKit instead of QtNetwork
        https://bugs.webkit.org/show_bug.cgi?id=34425

        Buffer the sent data in SocketStreamHandlePrivate instead of relying on
        the network layer to do it. This is more robust and more consistent with how 
        Qt's HTTP stack works.
        Close the socket in SocketStreamHandlePrivate::close() regardless of its state.

        No new tests, since no new functionality is introduced.

        * platform/network/qt/SocketStreamHandlePrivate.h:
        * platform/network/qt/SocketStreamHandleQt.cpp:
        (WebCore::SocketStreamHandlePrivate::SocketStreamHandlePrivate):
        (WebCore::SocketStreamHandlePrivate::send):
        (WebCore::SocketStreamHandlePrivate::close):
        (WebCore::SocketStreamHandlePrivate::socketBytesWritten):

2010-02-03  Shinichiro Hamaji  <hamaji@chromium.org>

        Unreviewed revert of r54259 as it seems to break chromium's unit tests.
        The tests pass with r54257 but fail with r54260.
        As r54258 and r54260 don't touch code, I'm reverting this change.

        [V8] Generate toV8 conversion helpers, a la JSC bindings.
        https://bugs.webkit.org/show_bug.cgi?id=32563

        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::processingUserGesture):
        (WebCore::createScriptObject):
        (WebCore::ScriptController::createScriptObjectForPluginElement):
        * bindings/v8/ScriptObject.cpp:
        (WebCore::ScriptGlobalObject::set):
        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::handleEvent):
        * bindings/v8/V8Collection.h:
        (WebCore::getV8Object):
        (WebCore::toNativeCollection):
        (WebCore::getNamedPropertyOfCollection):
        (WebCore::collectionNamedPropertyGetter):
        (WebCore::getIndexedPropertyOfCollection):
        (WebCore::collectionIndexedPropertyGetter):
        (WebCore::nodeCollectionIndexedPropertyEnumerator):
        (WebCore::collectionIndexedPropertyEnumerator):
        (WebCore::collectionStringOrNullIndexedPropertyGetter):
        (WebCore::collectionStringIndexedPropertyGetter):
        (WebCore::setCollectionIndexedGetter):
        (WebCore::setCollectionNamedGetter):
        (WebCore::setCollectionStringOrNullIndexedGetter):
        (WebCore::setCollectionStringIndexedGetter):
        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::updateDocumentWrapperCache):
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::downcastSVGPathSeg):
        (WebCore::V8DOMWrapper::convertSVGElementInstanceToV8Object):
        (WebCore::V8DOMWrapper::convertSVGObjectWithContextToV8Object):
        (WebCore::V8DOMWrapper::convertToV8Object):
        (WebCore::V8DOMWrapper::instantiateV8Object):
        (WebCore::V8DOMWrapper::isDOMEventWrapper):
        (WebCore::V8DOMWrapper::htmlElementType):
        (WebCore::V8DOMWrapper::svgElementType):
        (WebCore::V8DOMWrapper::convertEventToV8Object):
        (WebCore::):
        (WebCore::V8DOMWrapper::convertDocumentToV8Object):
        (WebCore::V8DOMWrapper::convertNodeToV8Object):
        (WebCore::V8DOMWrapper::convertNewNodeToV8Object):
        (WebCore::V8DOMWrapper::convertEventListenerToV8Object):
        (WebCore::V8DOMWrapper::convertDOMImplementationToV8Object):
        (WebCore::V8DOMWrapper::convertStyleSheetToV8Object):
        (WebCore::V8DOMWrapper::convertCSSValueToV8Object):
        (WebCore::V8DOMWrapper::convertCSSRuleToV8Object):
        (WebCore::V8DOMWrapper::convertWindowToV8Object):
        (WebCore::V8DOMWrapper::convertNamedNodeMapToV8Object):
        * bindings/v8/V8DOMWrapper.h:
        (WebCore::V8DOMWrapper::convertToV8Object):
        (WebCore::V8DOMWrapper::convertNodeToV8Object):
        (WebCore::V8DOMWrapper::convertNewNodeToV8Object):
        (WebCore::V8DOMWrapper::convertEventToV8Object):
        (WebCore::V8DOMWrapper::convertEventListenerToV8Object):
        (WebCore::V8DOMWrapper::instantiateV8Object):
        * bindings/v8/V8NodeFilterCondition.cpp:
        (WebCore::V8NodeFilterCondition::acceptNode):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::setDOMException):
        * bindings/v8/custom/V8CanvasRenderingContext2DCustom.cpp:
        (WebCore::toV8Object):
        (WebCore::V8CanvasRenderingContext2D::createPatternCallback):
        * bindings/v8/custom/V8CustomPositionCallback.cpp:
        (WebCore::V8CustomPositionCallback::handleEvent):
        * bindings/v8/custom/V8CustomPositionErrorCallback.cpp:
        (WebCore::V8CustomPositionErrorCallback::handleEvent):
        * bindings/v8/custom/V8CustomSQLStatementCallback.cpp:
        (WebCore::V8CustomSQLStatementCallback::handleEvent):
        * bindings/v8/custom/V8CustomSQLStatementErrorCallback.cpp:
        (WebCore::V8CustomSQLStatementErrorCallback::handleEvent):
        * bindings/v8/custom/V8CustomSQLTransactionCallback.cpp:
        (WebCore::V8CustomSQLTransactionCallback::handleEvent):
        * bindings/v8/custom/V8CustomSQLTransactionErrorCallback.cpp:
        (WebCore::V8CustomSQLTransactionErrorCallback::handleEvent):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8DOMWindow::openCallback):
        (WebCore::V8DOMWindow::indexedPropertyGetter):
        (WebCore::V8DOMWindow::namedPropertyGetter):
        * bindings/v8/custom/V8DataGridColumnListCustom.cpp:
        (WebCore::NAMED_PROPERTY_GETTER):
        * bindings/v8/custom/V8DocumentCustom.cpp:
        (WebCore::V8Document::evaluateCallback):
        (WebCore::V8Document::getCSSCanvasContextCallback):
        (WebCore::V8Document::implementationAccessorGetter):
        * bindings/v8/custom/V8DocumentLocationCustom.cpp:
        (WebCore::V8Document::locationAccessorGetter):
        * bindings/v8/custom/V8ElementCustom.cpp:
        (WebCore::V8Element::setAttributeNodeCallback):
        (WebCore::V8Element::setAttributeNodeNSCallback):
        * bindings/v8/custom/V8EventCustom.cpp:
        (WebCore::V8Event::dataTransferAccessorGetter):
        (WebCore::V8Event::clipboardDataAccessorGetter):
        * bindings/v8/custom/V8HTMLAllCollectionCustom.cpp:
        (WebCore::getNamedItems):
        (WebCore::getItem):
        (WebCore::V8HTMLAllCollection::callAsFunctionCallback):
        * bindings/v8/custom/V8HTMLAudioElementConstructor.cpp:
        (WebCore::V8Custom::v8HTMLAudioElementConstructorCallback):
        * bindings/v8/custom/V8HTMLCanvasElementCustom.cpp:
        (WebCore::V8HTMLCanvasElement::getContextCallback):
        * bindings/v8/custom/V8HTMLCollectionCustom.cpp:
        (WebCore::getNamedItems):
        (WebCore::getItem):
        (WebCore::V8HTMLCollection::callAsFunctionCallback):
        * bindings/v8/custom/V8HTMLDocumentCustom.cpp:
        (WebCore::V8HTMLDocument::namedPropertyGetter):
        (WebCore::V8HTMLDocument::allAccessorGetter):
        * bindings/v8/custom/V8HTMLFormElementCustom.cpp:
        (WebCore::V8HTMLFormElement::indexedPropertyGetter):
        (WebCore::V8HTMLFormElement::namedPropertyGetter):
        * bindings/v8/custom/V8HTMLFrameSetElementCustom.cpp:
        (WebCore::V8HTMLFrameSetElement::namedPropertyGetter):
        * bindings/v8/custom/V8HTMLImageElementConstructor.cpp:
        (WebCore::V8Custom::v8HTMLImageElementConstructorCallback):
        * bindings/v8/custom/V8HTMLOptionsCollectionCustom.cpp:
        (WebCore::V8HTMLOptionsCollection::indexedPropertyGetter):
        * bindings/v8/custom/V8HTMLSelectElementCustom.cpp:
        (WebCore::V8HTMLSelectElement::namedPropertyGetter):
        (WebCore::V8HTMLSelectElement::indexedPropertyGetter):
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::createInjectedScript):
        (WebCore::V8InjectedScriptHost::nodeForIdCallback):
        (WebCore::V8InjectedScriptHost::databaseForIdCallback):
        * bindings/v8/custom/V8MessageChannelConstructor.cpp:
        (WebCore::V8MessageChannel::constructorCallback):
        * bindings/v8/custom/V8MessageEventCustom.cpp:
        (WebCore::V8MessageEvent::portsAccessorGetter):
        * bindings/v8/custom/V8NamedNodeMapCustom.cpp:
        (WebCore::V8NamedNodeMap::indexedPropertyGetter):
        (WebCore::V8NamedNodeMap::namedPropertyGetter):
        * bindings/v8/custom/V8NodeIteratorCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8NodeListCustom.cpp:
        (WebCore::V8NodeList::namedPropertyGetter):
        (WebCore::V8NodeList::callAsFunctionCallback):
        * bindings/v8/custom/V8NotificationCenterCustom.cpp:
        (WebCore::V8NotificationCenter::createHTMLNotificationCallback):
        (WebCore::V8NotificationCenter::createNotificationCallback):
        * bindings/v8/custom/V8SVGMatrixCustom.cpp:
        (WebCore::V8SVGMatrix::multiplyCallback):
        (WebCore::V8SVGMatrix::inverseCallback):
        (WebCore::V8SVGMatrix::rotateFromVectorCallback):
        * bindings/v8/custom/V8StyleSheetListCustom.cpp:
        (WebCore::V8StyleSheetList::namedPropertyGetter):
        * bindings/v8/custom/V8TreeWalkerCustom.cpp:
        (WebCore::toV8Object):
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        (WebCore::toV8Object):
        * bindings/v8/custom/V8XSLTProcessorCustom.cpp:
        (WebCore::V8XSLTProcessor::transformToFragmentCallback):
        (WebCore::V8XSLTProcessor::transformToDocumentCallback):

2010-02-03  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Start unforking debugger and profiler code.

        Remove custom implementation of Console.
        Add 'ScriptProfiler' and 'ScriptProfile' types.
        Start migration to engine-neutral types in InspectorController.

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

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSConsoleCustom.cpp:
        * bindings/js/ScriptProfile.h: Added.
        * bindings/js/ScriptProfiler.cpp: Added.
        (WebCore::ScriptProfiler::start):
        (WebCore::ScriptProfiler::stop):
        * bindings/js/ScriptProfiler.h: Added.
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/ScriptProfile.h: Added.
        (WebCore::ScriptProfile::create):
        (WebCore::ScriptProfile::~ScriptProfile):
        (WebCore::ScriptProfile::title):
        (WebCore::ScriptProfile::uid):
        (WebCore::ScriptProfile::ScriptProfile):
        * bindings/v8/ScriptProfiler.cpp: Added.
        (WebCore::ScriptProfiler::start):
        (WebCore::ScriptProfiler::stop):
        * bindings/v8/ScriptProfiler.h: Added.
        * bindings/v8/custom/V8ConsoleCustom.cpp: Removed.
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::endGroup):
        (WebCore::InspectorController::show):
        (WebCore::InspectorController::setDOMStorageItem):
        (WebCore::InspectorController::addProfile):
        (WebCore::InspectorController::addProfileFinishedMessageToConsole):
        (WebCore::InspectorController::addStartProfilingMessageToConsole):
        (WebCore::InspectorController::createProfileHeader):
        (WebCore::InspectorController::getCurrentUserInitiatedProfileName):
        (WebCore::InspectorController::startUserInitiatedProfiling):
        (WebCore::InspectorController::stopUserInitiatedProfiling):
        (WebCore::InspectorController::enableDebugger):
        (WebCore::InspectorController::specialPanelForJSName):
        * inspector/InspectorController.h:
        (WebCore::InspectorController::searchingForNodeInPage):
        * page/Console.cpp:
        (WebCore::Console::profile):
        (WebCore::Console::profileEnd):
        * page/Console.h:
        (WebCore::):
        (WebCore::Console::create):
        (WebCore::Console::profiles):
        * page/Console.idl:

2010-02-02  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        Fix a bug that changes for some constraint attributes doesn't
        update validation CSS selectors.
        https://bugs.webkit.org/show_bug.cgi?id=31716

        - Rename HTMLFormControlElement::updateValidity() to setNeedsValidityCheck()
        - Introduce HTMLFormControlElement::setNeedsWillValidate()
        - Introduce HTMLFormControlElement::m_hasName to make willValidate()
          work in parseMappedAttribute().
        - We need to call setNeedsValidityCheck() when HTMLInputElement::step or
          HTMLTextAreaElement::maxLength is changed.

        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::HTMLFormControlElement):
        (WebCore::HTMLFormControlElement::parseMappedAttribute):
        (WebCore::HTMLFormControlElement::insertedIntoTree):
        (WebCore::HTMLFormControlElement::removedFromTree):
        (WebCore::HTMLFormControlElement::formDestroyed):
        (WebCore::HTMLFormControlElement::willValidate): Avoids function calls.
        (WebCore::HTMLFormControlElement::setNeedsWillValidateCheck):
        (WebCore::HTMLFormControlElement::setNeedsValidityCheck):
        * html/HTMLFormControlElement.h:
        (WebCore::HTMLFormControlElement::disabled): Move the code from .cpp.
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setInputType):
        (WebCore::HTMLInputElement::parseMappedAttribute):
        (WebCore::HTMLInputElement::setValue):
        (WebCore::HTMLInputElement::setValueFromRenderer):
        (WebCore::HTMLInputElement::setFileListFromRenderer):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::parseMappedAttribute):
        (WebCore::HTMLTextAreaElement::setValue):
        * rendering/RenderTextControlMultiLine.cpp:
        (WebCore::RenderTextControlMultiLine::subtreeHasChanged):

2010-02-02  Roland Steiner  <rolandsteiner@chromium.org>

        Reviewed by Adele Peterson.

        Bug 34198 -  Ruby text should not inherit line-height
        (https://bugs.webkit.org/show_bug.cgi?id=34198)
        
        Resetting line-height to 'normal' in the default UA style sheet.
        Adding layout-test to check for this.

        Test: fast/ruby/ruby-line-height.html

        * css/html.css:

2010-02-02  James Robinson  <jamesr@chromium.org>

        Reviewed by Dmitry Titov.

        Add a null check for image, which might be NULL if tileSize is empty
        https://bugs.webkit.org/show_bug.cgi?id=34510

        Test: fast/gradients/crash-on-1px-border.html

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelScaleObserver::shouldPaintBackgroundAtLowQuality):

2010-02-02  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        rangeOverflow/rangeUnderflow support for type=datetime, datetime-local,
        month, time and week
        https://bugs.webkit.org/show_bug.cgi?id=34483

        Tests: fast/forms/ValidityState-rangeOverflow.html
               fast/forms/ValidityState-rangeUnderflow.html

        * html/HTMLInputElement.cpp:
          Defines the hard limits for the types as double values.
        (WebCore::HTMLInputElement::rangeUnderflow): Supports the types.
        (WebCore::HTMLInputElement::rangeOverflow): Supports the types.
        (WebCore::HTMLInputElement::minimum): Supports the types.
        (WebCore::HTMLInputElement::maximum): Supports the types.

2010-02-02  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Alexey Proskuryakov.

        WebSocket set pending activity to avoid unexpected GC.
        https://bugs.webkit.org/show_bug.cgi?id=34014

        Test: websocket/tests/websocket-pending-activity.html

        * websockets/WebSocket.cpp:
        (WebCore::WebSocket::connect): set pending activity until it receives didClose. 
        (WebCore::WebSocket::contextDestroyed): check socket is already closed.
        (WebCore::WebSocket::stop): close the connection and unset pending activity when it stops.
        (WebCore::WebSocket::didClose): unset pending activity.
        * websockets/WebSocket.h:
        * websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::didReceiveData): protect this while it processes received data.

2010-02-02  Gustavo Noronha Silva  <gns@gnome.org>

        No review, rolling out r54261.
        http://trac.webkit.org/changeset/54261
        https://bugs.webkit.org/show_bug.cgi?id=34435

        Causes crashes on release builds

        * GNUmakefile.am:
        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::mediaPlayerPrivateSourceChangedCallback):
        * platform/gtk/GOwnPtrGtk.cpp: Removed.
        * platform/gtk/GOwnPtrGtk.h: Removed.

2010-02-02  David Levin  <levin@chromium.org>

        No review, rolling out r54245.
        http://trac.webkit.org/changeset/54245
        https://bugs.webkit.org/show_bug.cgi?id=34492

        This patch seems to have broken thousands of chromium tests on
        Windows (and since it was for chromium, I'm rolling it out).

        * dom/Element.cpp:
        (WebCore::Element::baseURI):

2010-02-02  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Darin Adler.

        Copyright year updating for Windows version resources should be automatic
        https://bugs.webkit.org/show_bug.cgi?id=34503

        * WebCore.vcproj/QTMovieWin.rc:

2010-02-02  Dimitri Glazkov  <dglazkov@chromium.org>

        No review, rolling out r54257.
        http://trac.webkit.org/changeset/54257
        https://bugs.webkit.org/show_bug.cgi?id=34491

        [Chromium] broke thousands of Win tests and a few of Linux tests.

        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::beginTransparencyLayer):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (PlatformContextSkia::applyAntiAliasedClipPaths):
        * platform/graphics/skia/PlatformContextSkia.h:

2010-02-02  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [Gtk] libsoup critical warning in media player http cookies injection code
        https://bugs.webkit.org/show_bug.cgi?id=34435

        Fixed the critical warning and refactored the
        User-Agent/Referer/cookies injection code, in that order. Previous
        order (cookies first) was wrong because if cookies injection could
        not be done neither the User-Agent not Referer were injected. Also
        started a non-JSC-specific, gtk-specific GOwnPtr module.

        * GNUmakefile.am:
        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::mediaPlayerPrivateSourceChangedCallback):
        * platform/gtk/GOwnPtrGtk.cpp: Added.
        (WTF::SoupURI):
        (WTF::GstElement):
        * platform/gtk/GOwnPtrGtk.h: Added.

2010-02-02  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Use toV8() to wrap in the custom bindings, and remove
        the old wrapping code from V8DOMWrapper.
        
        https://bugs.webkit.org/show_bug.cgi?id=32563

        * bindings/v8/ScriptController.cpp:
        * bindings/v8/ScriptObject.cpp:
        * bindings/v8/V8AbstractEventListener.cpp:
        * bindings/v8/V8Collection.h:
        * bindings/v8/V8DOMWindowShell.cpp:
        * bindings/v8/V8DOMWrapper.cpp:
        * bindings/v8/V8DOMWrapper.h:
        * bindings/v8/V8NodeFilterCondition.cpp:
        * bindings/v8/V8Proxy.cpp:
        * bindings/v8/custom/V8CanvasRenderingContext2DCustom.cpp:
        * bindings/v8/custom/V8CustomPositionCallback.cpp:
        * bindings/v8/custom/V8CustomPositionErrorCallback.cpp:
        * bindings/v8/custom/V8CustomSQLStatementCallback.cpp:
        * bindings/v8/custom/V8CustomSQLStatementErrorCallback.cpp:
        * bindings/v8/custom/V8CustomSQLTransactionCallback.cpp:
        * bindings/v8/custom/V8CustomSQLTransactionErrorCallback.cpp:
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        * bindings/v8/custom/V8DataGridColumnListCustom.cpp:
        * bindings/v8/custom/V8DocumentCustom.cpp:
        * bindings/v8/custom/V8DocumentLocationCustom.cpp:
        * bindings/v8/custom/V8ElementCustom.cpp:
        * bindings/v8/custom/V8EventCustom.cpp:
        * bindings/v8/custom/V8HTMLAllCollectionCustom.cpp:
        * bindings/v8/custom/V8HTMLAudioElementConstructor.cpp:
        * bindings/v8/custom/V8HTMLCanvasElementCustom.cpp:
        * bindings/v8/custom/V8HTMLCollectionCustom.cpp:
        * bindings/v8/custom/V8HTMLDocumentCustom.cpp:
        * bindings/v8/custom/V8HTMLFormElementCustom.cpp:
        * bindings/v8/custom/V8HTMLFrameSetElementCustom.cpp:
        * bindings/v8/custom/V8HTMLImageElementConstructor.cpp:
        * bindings/v8/custom/V8HTMLOptionsCollectionCustom.cpp:
        * bindings/v8/custom/V8HTMLSelectElementCustom.cpp:
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        * bindings/v8/custom/V8MessageChannelConstructor.cpp:
        * bindings/v8/custom/V8MessageEventCustom.cpp:
        * bindings/v8/custom/V8NamedNodeMapCustom.cpp:
        * bindings/v8/custom/V8NodeIteratorCustom.cpp:
        * bindings/v8/custom/V8NodeListCustom.cpp:
        * bindings/v8/custom/V8NotificationCenterCustom.cpp:
        * bindings/v8/custom/V8SVGMatrixCustom.cpp:
        * bindings/v8/custom/V8StyleSheetListCustom.cpp:
        * bindings/v8/custom/V8TreeWalkerCustom.cpp:
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        * bindings/v8/custom/V8XSLTProcessorCustom.cpp:

2010-02-02  Garret Kelly  <gdk@chromium.org>

        Reviewed by David Levin.

        When using the Skia graphics context, the beginTransparencyLayer call
        currently creates a new layer, but does not keep the current
        compositing mode for use when merging the created layer back onto the
        rest of the context. This patch fixes that.
        https://bugs.webkit.org/show_bug.cgi?id=34491

        fast/backgrounds/svg-as-mask.html is affected by this change in Chromium,
        but not fixed. This is the first of a series of patches to fix it.

        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::beginTransparencyLayer):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (PlatformContextSkia::beginTransparencyLayer):
        * platform/graphics/skia/PlatformContextSkia.h:

2010-02-02  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Eric Seidel.

        Use WTF::getLocalTime instead of localtime_r in FTPDirectoryDocument
        https://bugs.webkit.org/show_bug.cgi?id=34409

        Platform guards for localtime_r are not needed because we already have
        WTF::getLocalTime which does the same thing.

        * loader/FTPDirectoryDocument.cpp:
        (WebCore::processFileDateString):
        * loader/FTPDirectoryParser.cpp:
        (WebCore::gmtimeQt):

2010-02-02  Adam Roben  <aroben@apple.com>

        Copy WebCore's bindings generation scripts to the PrivateHeaders
        directory on Mac

        This will allow other projects to use these scripts.

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

        Reviewed by Mark Rowe.

        * WebCore.xcodeproj/project.pbxproj: Added the bindings generation
        scripst to the Copy Headers phase, and marked them as Private.

2010-02-02  Adam Roben  <aroben@apple.com>

        Copy WebCore's bindings generation scripts to a more sensible location

        Part of Bug 34496: Clean up WebCore's IDL/script copying
        <https://bugs.webkit.org/show_bug.cgi?id=34496>

        Reviewed by Steve Falkenburg.

        * WebCore.vcproj/WebCore.make:
        * WebCore.vcproj/WebCoreGenerated.vcproj:
        Instead of copying to obj/WebKit/DOMInterfaces, copy to obj/WebCore/scripts.

2010-02-02  Adam Roben  <aroben@apple.com>

        Rename the scripts used to copy WebCore's bindings generation scripts

        Part of Bug 34496: Clean up WebCore's IDL/script copying
        <https://bugs.webkit.org/show_bug.cgi?id=34496>

        Reviewed by Steve Falkenburg.

        * WebCore.vcproj/MigrateScripts: Renamed from WebCore/WebCore.vcproj/MigrateIDLAndScripts.
        * WebCore.vcproj/migrate-scripts.sh: Renamed from WebCore/WebCore.vcproj/migrate-idls.sh.

        * WebCore.vcproj/WebCoreGenerated.vcproj: Updated for renames.

2010-02-02  Adam Roben  <aroben@apple.com>

        Stop copying IDL files into $(WebKitOutputDir)

        No one uses these anymore (as of r52921).

        Part of Bug 34496: Clean up WebCore's IDL/script copying
        <https://bugs.webkit.org/show_bug.cgi?id=34496>

        Reviewed by Steve Falkenburg.

        * WebCore.vcproj/MigrateIDLAndScripts: Don't copy the IDL files
        anymore. Keep copying the scripts, though, since other projects
        (outside of the WebKit repository) do use those.

2010-02-02  Bryan Yeung  <bryeung@google.com>

        Reviewed by Darin Adler.

        Avoid using an invalidated KURL object in baseURI.

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

        This change fixes baseURI for Chromium (where the KURL implementation
        does not allow invalid KURLs to carry relative paths).  This is
        regression tested by
        LayoutTests/svg/W3C-SVG-1.1/struct-image-07-t.svg

        * dom/Element.cpp:
        (WebCore::Element::baseURI):

2010-02-02  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=34076
        <rdar://problem/7594601> Crash in mangleme in WebCore::Element::getAttribute

        Test: fast/forms/misplaced-img-form-registration.html

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::registerImgElement): Assert that the same image isn't added
        to vector again.
        (WebCore::HTMLFormElement::removeImgElement): Similarly, assert that we're removing something
        that's actually registered.

        * html/HTMLImageElement.cpp: (WebCore::HTMLImageElement::~HTMLImageElement): If parser fails
        to insert the image element, then there will be no removed from tree notification either,
        need to unregister right away.

2010-02-02  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Eliminate some of the platform flavor-specific stylesheet selectors

        Extract OS version into WebInspector.platformFlavor
        https://bugs.webkit.org/show_bug.cgi?id=34469

        * inspector/front-end/InspectorBackendStub.js:
        * inspector/front-end/InspectorFrontendHostStub.js:
        (.WebInspector.InspectorFrontendHostStub.prototype.platform):
        * inspector/front-end/inspector.css:
        * inspector/front-end/inspector.js:
        (WebInspector.pendingDispatches.0.URLRegExp.i.get platform):
        (WebInspector.get platformFlavor):
        (WebInspector._detectPlatformFlavor):
        (WebInspector.loaded):
        (WebInspector.toolbarDragStart):
        (WebInspector.isMac):

2010-02-02  Steve Block  <steveblock@google.com>

        Reviewed by Ariya Hidayat.

        Adds utility functions for converting between JavaInstance and NPAPI types
        https://bugs.webkit.org/show_bug.cgi?id=34468

        This is required by Android for injecting objects into V8 JavaScript.

        No new tests, added utility functions only.

        * Android.v8bindings.mk: Modified. Added JavaNPObjectV8.cpp
        * bridge/jni/v8/JavaNPObjectV8.cpp: Added.
        (JSC::Bindings::AllocJavaNPObject):
        (JSC::Bindings::FreeJavaNPObject):
        (JSC::Bindings::):
        (JSC::Bindings::JavaInstanceToNPObject):
        (JSC::Bindings::ExtractJavaInstance):
        (JSC::Bindings::JavaNPObjectHasMethod):
        (JSC::Bindings::JavaNPObjectInvoke):
        (JSC::Bindings::JavaNPObjectHasProperty):
        (JSC::Bindings::JavaNPObjectGetProperty):
        * bridge/jni/v8/JavaNPObjectV8.h: Added.

2010-02-02  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Ariya Hidayat.

        [Qt] Symbian plugins include a wrong header file for QPixmap
        https://bugs.webkit.org/show_bug.cgi?id=34475

        * plugins/symbian/PluginViewSymbian.cpp:

2010-02-02  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: URLs are not syntax-higlighted as links in source view.

        This change enables linkifier in the NativeTextViewer. It adds
        "linkify" and "a_node" parse states into the highlighter in order
        to detect links and distinguish between resource and external ones.
        Contains drive-by fix for the webkit-html-* styles and moves them to the
        common location.

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

        * inspector/front-end/NativeTextViewer.js:
        (WebInspector.NativeTextViewer):
        (WebInspector.NativeTextViewer.prototype._createSpan):
        (WebInspector.NativeTextViewer.prototype._createLink):
        (WebInspector.NativeTextViewer.prototype._rewriteHref):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.setContent):
        (WebInspector.SourceFrame.prototype._createEditorIfNeeded):
        * inspector/front-end/SourceHTMLTokenizer.js:
        (WebInspector.SourceHTMLTokenizer):
        (WebInspector.SourceHTMLTokenizer.prototype._isExpectingAttribute):
        (WebInspector.SourceHTMLTokenizer.prototype._isExpectingAttributeValue):
        (WebInspector.SourceHTMLTokenizer.prototype._setExpectingAttribute):
        (WebInspector.SourceHTMLTokenizer.prototype._setExpectingAttributeValue):
        (WebInspector.SourceHTMLTokenizer.prototype._stringToken):
        (WebInspector.SourceHTMLTokenizer.prototype._attrValueTokenType):
        (WebInspector.SourceHTMLTokenizer.prototype.nextToken):
        * inspector/front-end/SourceHTMLTokenizer.re2js:
        * inspector/front-end/SourceView.js:
        (WebInspector.SourceView.prototype._contentLoaded):
        * inspector/front-end/TextEditorHighlighter.js:
        (WebInspector.TextEditorHighlighter):
        * inspector/front-end/inspector.css:
        * inspector/front-end/inspectorSyntaxHighlight.css:

2010-02-02  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Ariya Hidayat.

        [Qt] Install libraries and headers in package builds
        https://bugs.webkit.org/show_bug.cgi?id=34325

        Add the QtWebKit libraries to the installable items, except on
        Symbian where the libraries are always linked in their final
        destination.

        Also include the headers generated by syncqt in the installation.

        * WebCore.pro:

2010-02-02  Kavita Kanetkar  <kkanetkar@chromium.org>

        Reviewed by Dmitry Titov.

        [V8] Raising an exception while setting timeout/interval from a detached frame
        https://bugs.webkit.org/show_bug.cgi?id=34453
        This fixes the issue/failing test mentioned in Chromium bug:
        http://code.google.com/p/chromium/issues/detail?id=32671


        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::WindowSetTimeoutImpl):

2010-02-02  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Eric Seidel.

        [BREWMP] Port Screen
        https://bugs.webkit.org/show_bug.cgi?id=34299

        Get the screen size and depth from the main display bitmap.

        * platform/brew/ScreenBrew.cpp: Added.
        (WebCore::getDisplayInfo):
        (WebCore::screenRect):
        (WebCore::screenAvailableRect):
        (WebCore::screenDepth):
        (WebCore::screenDepthPerComponent):
        (WebCore::screenIsMonochrome):

2010-02-02  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Eric Seidel.

        [BREWMP] Port LocalizedStrings
        https://bugs.webkit.org/show_bug.cgi?id=34257

        Port LocalizedStrings to BREWMP.

        * platform/brew/LocalizedStringsBrew.cpp: Added.
        (WebCore::submitButtonDefaultLabel):
        (WebCore::inputElementAltText):
        (WebCore::resetButtonDefaultLabel):
        (WebCore::defaultLanguage):
        (WebCore::searchableIndexIntroduction):
        (WebCore::fileButtonChooseFileLabel):
        (WebCore::fileButtonNoFileSelectedLabel):
        (WebCore::contextMenuItemTagOpenLinkInNewWindow):
        (WebCore::contextMenuItemTagDownloadLinkToDisk):
        (WebCore::contextMenuItemTagCopyLinkToClipboard):
        (WebCore::contextMenuItemTagOpenImageInNewWindow):
        (WebCore::contextMenuItemTagDownloadImageToDisk):
        (WebCore::contextMenuItemTagCopyImageToClipboard):
        (WebCore::contextMenuItemTagOpenFrameInNewWindow):
        (WebCore::contextMenuItemTagCopy):
        (WebCore::contextMenuItemTagGoBack):
        (WebCore::contextMenuItemTagGoForward):
        (WebCore::contextMenuItemTagStop):
        (WebCore::contextMenuItemTagReload):
        (WebCore::contextMenuItemTagCut):
        (WebCore::contextMenuItemTagPaste):
        (WebCore::contextMenuItemTagNoGuessesFound):
        (WebCore::contextMenuItemTagIgnoreSpelling):
        (WebCore::contextMenuItemTagLearnSpelling):
        (WebCore::contextMenuItemTagSearchWeb):
        (WebCore::contextMenuItemTagLookUpInDictionary):
        (WebCore::contextMenuItemTagOpenLink):
        (WebCore::contextMenuItemTagIgnoreGrammar):
        (WebCore::contextMenuItemTagSpellingMenu):
        (WebCore::contextMenuItemTagShowSpellingPanel):
        (WebCore::contextMenuItemTagCheckSpelling):
        (WebCore::contextMenuItemTagCheckSpellingWhileTyping):
        (WebCore::contextMenuItemTagCheckGrammarWithSpelling):
        (WebCore::contextMenuItemTagFontMenu):
        (WebCore::contextMenuItemTagBold):
        (WebCore::contextMenuItemTagItalic):
        (WebCore::contextMenuItemTagUnderline):
        (WebCore::contextMenuItemTagOutline):
        (WebCore::contextMenuItemTagWritingDirectionMenu):
        (WebCore::contextMenuItemTagDefaultDirection):
        (WebCore::contextMenuItemTagLeftToRight):
        (WebCore::contextMenuItemTagRightToLeft):
        (WebCore::contextMenuItemTagInspectElement):
        (WebCore::searchMenuNoRecentSearchesText):
        (WebCore::searchMenuRecentSearchesText):
        (WebCore::searchMenuClearRecentSearchesText):
        (WebCore::unknownFileSizeText):
        (WebCore::AXWebAreaText):
        (WebCore::AXLinkText):
        (WebCore::AXListMarkerText):
        (WebCore::AXImageMapText):
        (WebCore::AXHeadingText):
        (WebCore::imageTitle):
        (WebCore::contextMenuItemTagTextDirectionMenu):
        (WebCore::AXButtonActionVerb):
        (WebCore::AXTextFieldActionVerb):
        (WebCore::AXRadioButtonActionVerb):
        (WebCore::AXCheckedCheckBoxActionVerb):
        (WebCore::AXUncheckedCheckBoxActionVerb):
        (WebCore::AXLinkActionVerb):
        (WebCore::AXMenuListPopupActionVerb):
        (WebCore::AXMenuListActionVerb):
        (WebCore::AXDefinitionListTermText):
        (WebCore::AXDefinitionListDefinitionText):
        (WebCore::validationMessageValueMissingText):
        (WebCore::validationMessageTypeMismatchText):
        (WebCore::validationMessagePatternMismatchText):
        (WebCore::validationMessageTooLongText):
        (WebCore::validationMessageRangeUnderflowText):
        (WebCore::validationMessageRangeOverflowText):
        (WebCore::validationMessageStepMismatchText):

2010-02-02  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Eric Seidel.

        [BREWMP] Port systemBeep
        https://bugs.webkit.org/show_bug.cgi?id=33601

        Implement systemBeep with IShell_Beep.

        * platform/brew/SoundBrew.cpp: Added.
        (WebCore::systemBeep):

2010-02-02  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Eric Seidel.

        [Win] Utilize PrintContext to share the printing code with other ports
        https://bugs.webkit.org/show_bug.cgi?id=34312

        No new tests as this is just a small refactoring.

2010-02-02  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Eric Seidel.

        [BREWMP] Add conversions between IntPoint and AEEPoint
        https://bugs.webkit.org/show_bug.cgi?id=34194

        Make it easy to convert between IntPoint and AEEPoint.

        * platform/graphics/IntPoint.h:
        * platform/graphics/brew/IntPointBrew.cpp: Added.
        (WebCore::IntPoint::IntPoint):
        (WebCore::IntPoint::operator AEEPoint):

2010-02-02  Steve Block  <steveblock@google.com>

        Reviewed by Adam Barth.

        Adds virtual destructors for AbstractWeakReferenceMap and AbstractWeakReferenceMap::Visitor
        https://bugs.webkit.org/show_bug.cgi?id=34434

        No new tests, build fix only.

        * bindings/v8/V8DOMMap.h: Modified.
        (WebCore::AbstractWeakReferenceMap::~AbstractWeakReferenceMap): Added.
        (WebCore::AbstractWeakReferenceMap::Visitor::~Visitor): Added.

2010-02-02  Avi Drissman  <avi@chromium.org>

        Reviewed by Eric Seidel.

        Sync up Chromium Mac render theme to Mac render theme
        https://bugs.webkit.org/show_bug.cgi?id=34340

        Covered by existing layout tests.

        * platform/chromium/ThemeChromiumMac.mm:
        (WebCore::updateStates):
        (WebCore::checkbox):
        (WebCore::paintCheckbox):
        (WebCore::radio):
        (WebCore::paintRadio):
        (WebCore::listButtonSizes):
        (WebCore::setupButtonCell):
        (WebCore::button):
        (WebCore::paintButton):
        (WebCore::ThemeChromiumMac::controlSize):
        (WebCore::ThemeChromiumMac::minimumControlSize):
        (WebCore::ThemeChromiumMac::controlBorder):
        (WebCore::ThemeChromiumMac::paint):
        * rendering/RenderThemeChromiumMac.h:
        * rendering/RenderThemeChromiumMac.mm:
        (-[WebCoreRenderThemeNotificationObserver initWithTheme:WebCore::]):
        (WebCore::convertNSColorToColor):
        (WebCore::RenderThemeChromiumMac::systemColor):
        (WebCore::RenderThemeChromiumMac::isControlStyled):
        (WebCore::RenderThemeChromiumMac::adjustRepaintRect):
        (WebCore::RenderThemeChromiumMac::convertToPaintingRect):
        (WebCore::RenderThemeChromiumMac::paintCapsLockIndicator):
        (WebCore::RenderThemeChromiumMac::paintMenuList):
        (WebCore::RenderThemeChromiumMac::paintMenuListButton):
        (WebCore::RenderThemeChromiumMac::adjustMenuListStyle):
        (WebCore::RenderThemeChromiumMac::adjustMenuListButtonStyle):
        (WebCore::RenderThemeChromiumMac::paintSliderTrack):
        (WebCore::RenderThemeChromiumMac::paintSliderThumb):
        (WebCore::RenderThemeChromiumMac::paintSearchField):
        (WebCore::RenderThemeChromiumMac::setSearchFieldSize):
        (WebCore::RenderThemeChromiumMac::adjustSearchFieldStyle):
        (WebCore::RenderThemeChromiumMac::paintSearchFieldResultsButton):
        (WebCore::RenderThemeChromiumMac::adjustSliderThumbSize):
        (WebCore::RenderThemeChromiumMac::popupButton):
        (WebCore::RenderThemeChromiumMac::sliderThumbHorizontal):
        (WebCore::RenderThemeChromiumMac::sliderThumbVertical):

2010-02-02  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Eric Seidel.

        [BREWMP] Port Logging
        https://bugs.webkit.org/show_bug.cgi?id=34300

        Log calls to notImplemented() by default.

        * platform/brew/LoggingBrew.cpp: Added.
        (WebCore::InitializeLoggingChannelsIfNecessary):

2010-02-02  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Eric Seidel.

        [BREWMP] Port FileChooser
        https://bugs.webkit.org/show_bug.cgi?id=34261

        Port FileChooser to BREWMP.

        * platform/brew/FileChooserBrew.cpp: Added.
        (WebCore::FileChooser::basenameForWidth):

2010-02-01  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Darin Adler.

        Allow custom memory allocation control for IconDatabaseClient class
        https://bugs.webkit.org/show_bug.cgi?id=33252

        Inherits the following struct from Noncopyable because it is 
        instantiated by 'new' and no need to be copyable:

        class name               - instantiated at: WebCore/'location'
        class IconDatabaseClient - loader/icon/IconDatabase.cpp:89

        * loader/icon/IconDatabaseClient.h:

2010-02-01  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Eric Seidel.

        [BREWMP] Port MIMETypeRegistry
        https://bugs.webkit.org/show_bug.cgi?id=34220

        Port MIMETypeRegistry with an extension map as other ports do.

        * platform/brew: Added.
        * platform/brew/MIMETypeRegistryBrew.cpp: Added.
        (WebCore::):
        (WebCore::MIMETypeRegistry::getMIMETypeForExtension):

2010-02-01  Dmitry Titov  <dimich@chromium.org>

        Not reviewed, revert r54194 that fails new test on Qt and Chromium.
        https://bugs.webkit.org/show_bug.cgi?id=34382

        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::setNameAndOpenURL):
        (WebCore::HTMLFrameElementBase::insertedIntoDocument):
        * html/HTMLFrameElementBase.h:
        * page/Frame.cpp:
        * page/Frame.h:

2010-02-01  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Eric Seidel.

        Provide a way to get page number with layoutTestController
        https://bugs.webkit.org/show_bug.cgi?id=33840

        Test: printing/page-break-always.html

        * WebCore.base.exp:
        * WebCore.xcodeproj/project.pbxproj:
        * page/PrintContext.cpp:
        (WebCore::PrintContext::pageRect): Added a getter function.
        (WebCore::PrintContext::computePageRects): Move its logic into computePageRectsWithPageSize.
        (WebCore::PrintContext::computePageRectsWithPageSize): Factored out from computePageRects for pageNumberForElement.
        (WebCore::enclosingBoxModelObject): Added for pageNumberForElement.
        (WebCore::PrintContext::pageNumberForElement): Added for testing.
        * page/PrintContext.h:

2010-02-01  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Eric Seidel.

        [BREWMP] Add conversions between IntSize and AEESize
        https://bugs.webkit.org/show_bug.cgi?id=34197

        Make it easy to convert between IntSize and AEESize.

        * platform/graphics/IntSize.h:
        * platform/graphics/brew/IntSizeBrew.cpp: Added.
        (WebCore::IntSize::IntSize):
        (WebCore::IntSize::operator AEESize):

2010-02-01  Stephen White  <senorblanco@chromium.org>

        Reviewed by Eric Seidel.

        Fix for Pattern transformations in Chromium/Skia.  This required 
        reworking Pattern a bit to be more like the Gradient implementation.
        In particular, it now holds an m_pattern reference to the
        platform-specific implementation, and passes along changes to the
        m_patternSpaceTransformation, in the same way that Gradient does for
        m_gradientSpaceTransformation.  This is necessary since Skia creates the
        platform-specific pattern (SkShader) once, rather than recreating it
        on each draw.
        For platforms other than Skia, m_pattern is unused, they will
        continue to use the static createPlatformPattern(), and the new
        notification functions are stubbed out.  Other platforms can switch to
        the new implementation if they so choose.

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

        Covered by svg/custom/pattern-y-offset.svg,
        svg/custom/pattern-cycle-detection.svg, and many more.

        * platform/graphics/Pattern.cpp:
        (WebCore::Pattern::Pattern):
        Initializer for m_pattern.
        (WebCore::Pattern::~Pattern):
        call platformDestroy().
        (WebCore::Pattern::setPatternSpaceTransform):
        Pass along the transform via setPlatformPatternSpaceTransform().
        (WebCore::Pattern::platformDestroy):
        (WebCore::Pattern::setPlatformPatternSpaceTransform):
        Stub implementations for non-skia platforms.
        * platform/graphics/Pattern.h:
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::setPlatformFillPattern):
        (WebCore::GraphicsContext::setPlatformStrokePattern):
        Call platformPattern() instead of static version.
        Since Pattern now owns its SkShader, no need to unref here.
        * platform/graphics/skia/PatternSkia.cpp:
        (WebCore::Pattern::platformDestroy):
        Unref the SkShader on destroy.
        (WebCore::Pattern::platformPattern):
        Create the platform pattern (SkShader) once, and cache it.
        (WebCore::Pattern::setPlatformPatternSpaceTransform):
        Set the shader's local matrix from the m_patternSpaceTransformation.

2010-02-01  Daniel Bates  <dbates@webkit.org>

        Reviewed by Adam Barth.

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

        Implements support for full page blocking via the X-XSS-Protection header.

        Tests: http/tests/security/xssAuditor/full-block-base-href.html
               http/tests/security/xssAuditor/full-block-get-from-iframe.html
               http/tests/security/xssAuditor/full-block-iframe-javascript-url.html
               http/tests/security/xssAuditor/full-block-iframe-no-inherit.php
               http/tests/security/xssAuditor/full-block-javascript-link.html
               http/tests/security/xssAuditor/full-block-link-onclick.html
               http/tests/security/xssAuditor/full-block-object-tag.html
               http/tests/security/xssAuditor/full-block-post-from-iframe.html
               http/tests/security/xssAuditor/full-block-script-tag-with-source.html
               http/tests/security/xssAuditor/full-block-script-tag.html
               http/tests/security/xssAuditor/malformed-xss-protection-header.html

        * page/XSSAuditor.cpp:
        (WebCore::XSSAuditor::shouldFullPageBlockForXSSProtectionHeader): Added.
        (WebCore::XSSAuditor::findInRequest): Modified to call method
        XSSAuditor::shouldFullPageBlockForXSSProtectionHeader.
        * page/XSSAuditor.h: Defined method shouldFullPageBlockForXSSProtectionHeader
        and fixed misspelled words in large comment block.

2010-02-01  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Eric Seidel.

        [BREWMP] Port SharedTimer with IShell_SetTimerEx.
        https://bugs.webkit.org/show_bug.cgi?id=33599

        As fireTime passed in setSharedTimerFireTime is the absolute time,
        we must calcalute the interval by subtracting currentTime() from
        fireTime and pass the result to ISHELL_SetTimerEx.

        * platform/brew/SharedTimerBrew.cpp: Added.
        (WebCore::invokeCallback):
        (WebCore::setSharedTimerFiredFunction):
        (WebCore::setSharedTimerFireTime):
        (WebCore::stopSharedTimer):

2010-02-01  Shinichiro Hamaji  <hamaji@chromium.org>

        [Chromium] Unreviewed attempt to fix the chromium build.

        Corresponding change: http://trac.webkit.org/changeset/54182

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::processingUserGesture):
        * bindings/v8/ScriptController.h:

2010-02-01  Dmitry Titov  <dimich@chromium.org>

        Reviewed by David Levin.

        When a live iframe element is moved between pages, it still depends on the old page.
        https://bugs.webkit.org/show_bug.cgi?id=34382

        Test: fast/frames/iframe-reparenting-new-page.html

        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::setName):
        Move the code setting the frame name into a separate function.

        (WebCore::HTMLFrameElementBase::setNameAndOpenURL):
        (WebCore::HTMLFrameElementBase::updateLiveFrame):
        Update frame tree, reset page in the contentFrame and re-set the name.

        (WebCore::HTMLFrameElementBase::insertedIntoDocument): 
        * html/HTMLFrameElementBase.h:

        * page/Frame.cpp:
        (WebCore::Frame::setPage):
        * page/Frame.h: Add setPage method. It is only currently used when iframe is
                        moved between pages (so the ASSERT(m_ownerElement).

2010-02-01  Brady Eidson  <beidson@apple.com>

        Reviewed by Tim Hatcher.

        Add common IRC ports to port blocking.
        <rdar://problem/7593895> and https://bugs.webkit.org/show_bug.cgi?id=34451

        * platform/KURL.cpp:
        (WebCore::portAllowed):

2010-01-29  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Nate Chapin.

        [V8] Add compile time guards for IndexedDB custom functions
        https://bugs.webkit.org/show_bug.cgi?id=34368

        * bindings/v8/custom/V8IDBRequestCustom.cpp:
        * bindings/v8/custom/V8IndexedDatabaseRequestCustom.cpp:

2010-01-29  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig + Oliver Hunt.

        Bug 34346 - With JSC bindings, make processingUserGesture work with events in Isolated Worlds

        Change HTMLMediaElement methods that require checking whether the event is a user gesture to
        be passed a boolean.  This may be passed from the JSC bindings (where we have an exec state),
        or read from the event.  Add a Flag to the IDL to mark this information is required.

        * WebCore.Video.exp:
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::processingUserGesture):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::domWindowAllowPopUp):
        (WebCore::JSDOMWindow::open):
        (WebCore::JSDOMWindow::showModalDialog):
        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::JSDocument::setLocation):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::processingUserGesture):
        (WebCore::ScriptController::processingUserGestureEvent):
        (WebCore::ScriptController::anyPageIsProcessingUserGesture):
        * bindings/js/ScriptController.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        * dom/Event.cpp:
        (WebCore::Event::isUserEvent):
        * dom/Event.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::removedFromDocument):
        (WebCore::HTMLMediaElement::load):
        (WebCore::HTMLMediaElement::play):
        (WebCore::HTMLMediaElement::pause):
        (WebCore::HTMLMediaElement::beginScrubbing):
        (WebCore::HTMLMediaElement::documentDidBecomeActive):
        (WebCore::HTMLMediaElement::webkitEnterFullScreen):
        * html/HTMLMediaElement.h:
        * html/HTMLMediaElement.idl:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::isProcessingUserGesture):
        * loader/MediaDocument.cpp:
        (WebCore::MediaDocument::defaultEventHandler):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::allowPopUp):
        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlSeekButtonElement::defaultEventHandler):

2010-02-01  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Use the fallback style on Maemo 5

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

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::RenderThemeQt):
        (WebCore::RenderThemeQt::fallbackStyle):
        (WebCore::RenderThemeQt::qStyle):
        (WebCore::RenderThemeQt::setPaletteFromPageClientIfExists):
        * platform/qt/RenderThemeQt.h:

2010-02-01  Kavita Kanetkar  <kkanetkar@chromium.org>

        Reviewed by Nate Chapin.

        [V8] Making V8 generated classes' GetTemplate() function public
        https://bugs.webkit.org/show_bug.cgi?id=34026

        * bindings/scripts/CodeGeneratorV8.pm: Generated code need not depend on V8CustomBinding.h, made GetTemplate() signature public.

2010-02-01  Steve Block  <steveblock@google.com>

        Reviewed by Ariya Hidayat.

        Adds V8-specific JNI bridge classes
        https://bugs.webkit.org/show_bug.cgi?id=34166

        This is the V8 equivalent of bridge/jni/jsc/JNIBridgeJSC.

        No new tests, build fix only.

        * Android.v8bindings.mk: Modified. Added JNIBridge.cpp and JNIBridgeV8.cpp
        * bridge/Bridge.h: Modified. Added missing include for Noncopyable.h
        * bridge/jni/v8/JNIBridgeV8.cpp: Added.
        (JavaField::JavaField):
        * bridge/jni/v8/JNIBridgeV8.h: Added.
        (JSC::Bindings::JavaField::name):
        (JSC::Bindings::JavaField::type):
        (JSC::Bindings::JavaField::getJNIType):

2010-02-01  Steve Block  <steveblock@google.com>

        Reviewed by Ariya Hidayat.

        Adds V8-specific JNI utility functions.
        https://bugs.webkit.org/show_bug.cgi?id=33901

        This is the V8 equivalent of bridge/jni/jsc/JNIUtilityPrivate.

        No new tests, build fix only.

        * Android.v8bindings.mk: Modified. Add JNIUtilityPrivate.cpp
        * bridge/jni/v8/JNIUtilityPrivate.cpp: Added.
        (JSC::Bindings::convertNPVariantToJValue):
        (JSC::Bindings::convertJValueToNPVariant):
        * bridge/jni/v8/JNIUtilityPrivate.h: Added.

2010-02-01  Steve Block  <steveblock@google.com>

        Reviewed by Ariya Hidayat.

        Adds V8 version of JavaClass
        https://bugs.webkit.org/show_bug.cgi?id=33898

        This is the V8 equivalent of bridge/jni/jsc/JavaClassJSC

        No new tests, build fix only.

        * Android.v8bindings.mk: Modified. Added JavaClassV8.cpp
        * bridge/jni/v8/JavaClassV8.cpp: Added.
        (JavaClass::JavaClass):
        (JavaClass::~JavaClass):
        (JavaClass::methodsNamed):
        (JavaClass::fieldNamed):
        * bridge/jni/v8/JavaClassV8.h: Added.

2010-02-01  Steve Block  <steveblock@google.com>

        Reviewed by Ariya Hidayat.

        Adds V8 version of JavaInstance
        https://bugs.webkit.org/show_bug.cgi?id=33951

        This is the V8 equivalent of bridge/jni/jsc/JavaInstanceJSC.
        Also fixes a typo in a comment in JavaInstanceJSC.cpp.

        No new tests, build fix only.

        * Android.v8bindings.mk: Modified. Added JavaInstanceV8.cpp
        * bridge/jni/jsc/JavaInstanceJSC.cpp: Modified.
        (JavaInstance::invokeMethod): Modified. Fixed comment
        * bridge/jni/v8/JavaInstanceV8.cpp: Added.
        (JavaInstance::JavaInstance):
        (JavaInstance::~JavaInstance):
        (JavaInstance::getClass):
        (JavaInstance::invokeMethod):
        (JObjectWrapper::JObjectWrapper):
        (JObjectWrapper::~JObjectWrapper):
        * bridge/jni/v8/JavaInstanceV8.h: Added.
        (JSC::Bindings::JObjectWrapper::instance):
        (JSC::Bindings::JObjectWrapper::setInstance):
        (JSC::Bindings::JObjectWrapper::ref):
        (JSC::Bindings::JObjectWrapper::deref):
        (JSC::Bindings::JavaInstance::javaInstance):
        (JSC::Bindings::JavaInstance::begin):
        (JSC::Bindings::JavaInstance::end):
        (JSC::Bindings::JavaInstance::virtualBegin):
        (JSC::Bindings::JavaInstance::virtualEnd):

2010-02-01  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Eric Seidel.

        Making sure that all in-progress transactions are rolled back on
        the database thread before they're destroyed. Otherwise,
        SQLiteTransaction's destructor will try to do a rollback and that
        would cause an assertion failure, if the object is not destroyed
        on the DB thread.

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

        * platform/sql/SQLiteTransaction.cpp:
        (WebCore::SQLiteTransaction::stop):
        * storage/SQLTransaction.cpp:
        (WebCore::SQLTransaction::notifyDatabaseThreadIsShuttingDown):
        * storage/SQLTransaction.h:
        * storage/SQLTransactionCoordinator.cpp:
        (WebCore::SQLTransactionCoordinator::shutdown):

2010-02-01  Sam Weinig  <sam@webkit.org>

        Reviewed by Beth Dakin.

        Fix EXPERIMENTAL_SINGLE_VIEW_MODE build.

        * page/EventHandler.h:
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::currentNSEvent):
        (WebCore::EventHandler::currentKeyboardEvent):
        (WebCore::EventHandler::mouseDown):
        (WebCore::EventHandler::mouseDragged):
        (WebCore::EventHandler::mouseUp):
        (WebCore::EventHandler::mouseMoved):
        (WebCore::EventHandler::keyEvent):
        (WebCore::EventHandler::wheelEvent):
        (WebCore::EventHandler::sendContextMenuEvent):
        (WebCore::EventHandler::eventMayStartDrag):
        (WebCore::EventHandler::sendFakeEventsAfterWidgetTracking):

2010-02-01  Nate Chapin  <japhet@chromium.org>

        Unreviewed, Chromium build fix.

        Failed to properly add new files for http://trac.webkit.org/changeset/54150.

        * bindings/v8/custom/V8BarInfoCustom.cpp: Added.
        * bindings/v8/custom/V8CSSRuleCustom.cpp: Added.
        * bindings/v8/custom/V8CSSStyleSheetCustom.cpp: Added.
        * bindings/v8/custom/V8CSSValueCustom.cpp: Added.
        * bindings/v8/custom/V8CanvasPixelArrayCustom.cpp: Added.
        * bindings/v8/custom/V8DOMSelectionCustom.cpp: Added.
        * bindings/v8/custom/V8HTMLElementCustom.cpp: Added.
        * bindings/v8/custom/V8SVGDocumentCustom.cpp: Added.
        * bindings/v8/custom/V8SVGElementCustom.cpp: Added.
        * bindings/v8/custom/V8SVGPathSegCustom.cpp: Added.
        * bindings/v8/custom/V8ScreenCustom.cpp: Added.
        * bindings/v8/custom/V8StyleSheetCustom.cpp: Added.
        * bindings/v8/custom/V8WebGLArrayCustom.cpp: Added.

2010-01-27  Matt Perry  <mpcomplete@chromium.org>

        Reviewed by Eric Seidel.

        Add support for addUserScript to chromium port.

        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::evaluateInWorld):
        * bindings/v8/ScriptController.h:

2010-02-01  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Dan Bernstein.

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

        RenderVideo::intrinsicSizeChanged infinite recursion

        * rendering/RenderImage.h:
        (WebCore::RenderImage::intrinsicSizeChanged): Make protected instead of private so it can
            be called by RenderVideo.
        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::intrinsicSizeChanged): Call RenderMedia::intrinsicSizeChanged, not
            RenderVideo::intrinsicSizeChanged.
        (WebCore::RenderVideo::imageChanged): Call RenderMedia::imageChanged instead of 
            RenderImage::imageChanged.

2010-02-01  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Generate toV8() converter for most WebCore->V8 conversions,
        and defined custom converters in their respective V8<class>Custom.cpp.

        Old converters in V8DOMWrapper will be deleted in a later patch.

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

        * Android.v8bindings.mk:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/V8Collection.h:
        * bindings/v8/V8DOMWrapper.cpp:
        * bindings/v8/V8DOMWrapper.h:
        * bindings/v8/V8Proxy.h:
        * bindings/v8/custom/V8BarInfoCustom.cpp: Added.
        * bindings/v8/custom/V8CSSRuleCustom.cpp: Added.
        * bindings/v8/custom/V8CSSStyleSheetCustom.cpp: Added.
        * bindings/v8/custom/V8CSSValueCustom.cpp: Added.
        * bindings/v8/custom/V8CanvasPixelArrayCustom.cpp: Added.
        * bindings/v8/custom/V8CanvasRenderingContext2DCustom.cpp:
        * bindings/v8/custom/V8ConsoleCustom.cpp:
        * bindings/v8/custom/V8DOMSelectionCustom.cpp: Added.
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        * bindings/v8/custom/V8DocumentCustom.cpp:
        * bindings/v8/custom/V8ElementCustom.cpp:
        * bindings/v8/custom/V8EventCustom.cpp:
        * bindings/v8/custom/V8HTMLDocumentCustom.cpp:
        * bindings/v8/custom/V8HTMLElementCustom.cpp: Added.
        * bindings/v8/custom/V8HTMLSelectElementCustom.cpp:
        * bindings/v8/custom/V8HistoryCustom.cpp:
        * bindings/v8/custom/V8LocationCustom.cpp:
        * bindings/v8/custom/V8NamedNodeMapCustom.cpp:
        * bindings/v8/custom/V8NavigatorCustom.cpp:
        * bindings/v8/custom/V8NodeCustom.cpp:
        * bindings/v8/custom/V8SVGDocumentCustom.cpp: Added.
        * bindings/v8/custom/V8SVGElementCustom.cpp: Added.
        * bindings/v8/custom/V8SVGPathSegCustom.cpp: Added.
        * bindings/v8/custom/V8ScreenCustom.cpp: Added.
        * bindings/v8/custom/V8StyleSheetCustom.cpp: Added.
        * bindings/v8/custom/V8TreeWalkerCustom.cpp:
        * bindings/v8/custom/V8WebGLArrayCustom.cpp: Added.
        * bindings/v8/custom/V8WebGLByteArrayCustom.cpp:
        * bindings/v8/custom/V8WebGLFloatArrayCustom.cpp:
        * bindings/v8/custom/V8WebGLIntArrayCustom.cpp:
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        * bindings/v8/custom/V8WebGLShortArrayCustom.cpp:
        * bindings/v8/custom/V8WebGLUnsignedByteArrayCustom.cpp:
        * bindings/v8/custom/V8WebGLUnsignedIntArrayCustom.cpp:
        * bindings/v8/custom/V8WebGLUnsignedShortArrayCustom.cpp:
        * dom/make_names.pl: Add options to generate wrapper factory for V8 bindings.

2010-02-01  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: lazy-load textual resources to avoid UI hangup
        https://bugs.webkit.org/show_bug.cgi?id=34332

        * inspector/front-end/ResourceView.js:
        (WebInspector.ResourceView.prototype._innerSelectContentTab):
        * inspector/front-end/SourceView.js:
        (WebInspector.SourceView.prototype.show):
        (WebInspector.SourceView.prototype.contentTabSelected):

2010-02-01  Brady Eidson  <beidson@apple.com>

        Reviewed by Adele Peterson.

        Crash in Safari opening new tabs to "same page"
        <rdar://problem/7593857> and https://bugs.webkit.org/show_bug.cgi?id=34444

        Test: fast/loader/crash-copying-backforwardlist.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadItem): Null check currentItem().

        * page/Page.cpp:
        (WebCore::Page::goToItem): Ditto.

2010-02-01  Kevin Watters  <kevinwatters@gmail.com>

        Reviewed by Kevin Ollivier.

        [wx] Remove unused file that doesn't seem to belong to the port.
        
        https://bugs.webkit.org/show_bug.cgi?id=34445

        * platform/wx/KeyEventWin.cpp: Removed.

2010-02-01  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Adele Peterson.

        Fullscreen API should be on HTMLVideoElement
        https://bugs.webkit.org/show_bug.cgi?id=34438
        
        Move fullscreen DOM APIs from HTMLMediaElement to HTMLVideoElement.

        * html/HTMLMediaElement.cpp:
        * html/HTMLMediaElement.h:
        * html/HTMLMediaElement.idl:
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::paint): Removed outdated FIXME.
        (WebCore::HTMLVideoElement::paintCurrentFrameInContext): Ditto.
        (WebCore::HTMLVideoElement::webkitEnterFullScreen): Moved from HTMLMediaElement.
        (WebCore::HTMLVideoElement::webkitExitFullScreen): Ditto.
        (WebCore::HTMLVideoElement::webkitSupportsFullscreen): Ditto.
        (WebCore::HTMLVideoElement::webkitDisplayingFullscreen): Ditto.
        * html/HTMLVideoElement.h:
        * html/HTMLVideoElement.idl:

2010-02-01  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Syntax highlighting in source view of
        Resources pane stops half-way.

        There were two problems here: (1) styles for html highlighter were not
        added into the css file (they used to be injected manually in the
        SourceFrame before). (2) 'Tag' needed to be lexer's state, not parser's.
        Otherwise unbalanced quotes in the text nodes were matching too match
        into the string tokens.

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

        * inspector/front-end/NativeTextViewer.js:
        (WebInspector.NativeTextViewer.prototype._createLineDivs):
        (WebInspector.NativeTextViewer.prototype._lineHeight):
        (WebInspector.NativeTextViewer.prototype.initFontMetrics):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._createEditorIfNeeded):
        * inspector/front-end/SourceHTMLTokenizer.js:
        (WebInspector.SourceHTMLTokenizer):
        (WebInspector.SourceHTMLTokenizer.prototype.nextToken):
        * inspector/front-end/SourceHTMLTokenizer.re2js:
        * inspector/front-end/TextEditor.js:
        (WebInspector.TextEditor.prototype.initFontMetrics):
        (WebInspector.TextEditor.prototype._registerShortcuts):
        * inspector/front-end/inspectorSyntaxHighlight.css:

2010-02-01  Ben Murdoch  <benm@google.com>

        Reviewed by Darin Adler.

        ScriptCallFrame's do not get line numbers/source id's if the caller is unkown.
        https://bugs.webkit.org/show_bug.cgi?id=34335

        * bindings/js/ScriptCallStack.cpp:
        (WebCore::ScriptCallStack::ScriptCallStack): If the caller is unknown, the line number and source information is still availble so pass it to the ScriptCallFrame being constructed.

2010-02-01  Dirk Schulze  <krit@webkit.org>

        Reviewed by Simon Fraser.

        Add back an AffineTransform class for use by SVG
        https://bugs.webkit.org/show_bug.cgi?id=33750

        These are the first steps on reimplementing AffineTransform. Unlike
        the old affine code, this one is platform independent like TransformationMatrix.
        AffineTransform has the benefit, that it stores just 6 doubles instead of
        16 in TransformationMatrix. The calculations of transformations are not that
        complex and can improve the memory usage and speed of SVG.
        AffineTransform can be used by HTML Canvas3D or SVG, since they are 2D related (at
        least for the moment).
        HTML Canvas is the first that makes use of the new AffineTransform. Next patches
        will introduce the affine code to SVG.

        No new tests. The new AffineTransformation code is tested by fast/canvas.

        * Android.mk:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::scale):
        (WebCore::CanvasRenderingContext2D::rotate):
        (WebCore::CanvasRenderingContext2D::translate):
        (WebCore::CanvasRenderingContext2D::transform):
        (WebCore::CanvasRenderingContext2D::setTransform):
        (WebCore::CanvasRenderingContext2D::isPointInPath):
        (WebCore::CanvasRenderingContext2D::willDraw):
        * html/canvas/CanvasRenderingContext2D.h:
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/Path.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::getAffineCTM):
        (WebCore::GraphicsContext::concatCTM):
        * platform/graphics/cairo/GraphicsContextPlatformPrivateCairo.h:
        (WebCore::GraphicsContextPlatformPrivate::concatCTM):
        * platform/graphics/cairo/PathCairo.cpp:
        (WebCore::Path::transform):
        * platform/graphics/cairo/TransformationMatrixCairo.cpp:
        (WebCore::AffineTransform::operator cairo_matrix_t):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::concatCTM):
        (WebCore::GraphicsContext::getAffineCTM):
        * platform/graphics/cg/GraphicsContextPlatformPrivateCG.h:
        (WebCore::GraphicsContextPlatformPrivate::concatCTM):
        * platform/graphics/cg/PathCG.cpp:
        (WebCore::Path::transform):
        * platform/graphics/cg/TransformationMatrixCG.cpp:
        (WebCore::AffineTransform::operator CGAffineTransform):
        * platform/graphics/haiku/GraphicsContextHaiku.cpp:
        (WebCore::GraphicsContext::getAffineCTM):
        (WebCore::GraphicsContext::concatCTM):
        * platform/graphics/haiku/PathHaiku.cpp:
        (WebCore::Path::transform):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::getAffineCTM):
        (WebCore::GraphicsContext::concatCTM):
        * platform/graphics/qt/PathQt.cpp:
        (WebCore::Path::transform):
        * platform/graphics/qt/TransformationMatrixQt.cpp:
        (WebCore::AffineTransform::operator QTransform):
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::concatCTM):
        (WebCore::GraphicsContext::getAffineCTM):
        * platform/graphics/skia/PathSkia.cpp:
        (WebCore::Path::transform):
        * platform/graphics/skia/TransformationMatrixSkia.cpp:
        (WebCore::AffineTransform::operator SkMatrix):
        * platform/graphics/transforms/AffineTransform.cpp: Added.
        (WebCore::affineTransformDecompose):
        (WebCore::affineTransformCompose):
        (WebCore::AffineTransform::AffineTransform):
        (WebCore::AffineTransform::reset):
        (WebCore::AffineTransform::setMatrix):
        (WebCore::AffineTransform::isIdentity):
        (WebCore::AffineTransform::det):
        (WebCore::AffineTransform::isInvertible):
        (WebCore::AffineTransform::inverse):
        (WebCore::AffineTransform::multiply):
        (WebCore::AffineTransform::multLeft):
        (WebCore::AffineTransform::rotate):
        (WebCore::AffineTransform::scale):
        (WebCore::AffineTransform::translate):
        (WebCore::AffineTransform::scaleNonUniform):
        (WebCore::AffineTransform::rotateFromVector):
        (WebCore::AffineTransform::flipX):
        (WebCore::AffineTransform::flipY):
        (WebCore::AffineTransform::shear):
        (WebCore::AffineTransform::skew):
        (WebCore::AffineTransform::skewX):
        (WebCore::AffineTransform::skewY):
        (WebCore::makeMapBetweenRects):
        (WebCore::AffineTransform::map):
        (WebCore::AffineTransform::mapPoint):
        (WebCore::AffineTransform::mapRect):
        (WebCore::AffineTransform::blend):
        (WebCore::AffineTransform::toTransformationMatrix):
        * platform/graphics/transforms/AffineTransform.h: Added.
        (WebCore::AffineTransform::a):
        (WebCore::AffineTransform::setA):
        (WebCore::AffineTransform::b):
        (WebCore::AffineTransform::setB):
        (WebCore::AffineTransform::c):
        (WebCore::AffineTransform::setC):
        (WebCore::AffineTransform::d):
        (WebCore::AffineTransform::setD):
        (WebCore::AffineTransform::e):
        (WebCore::AffineTransform::setE):
        (WebCore::AffineTransform::f):
        (WebCore::AffineTransform::setF):
        (WebCore::AffineTransform::operator== ):
        (WebCore::AffineTransform::operator!=):
        (WebCore::AffineTransform::operator*=):
        (WebCore::AffineTransform::operator*):
        (WebCore::AffineTransform::setMatrix):
        * platform/graphics/win/GraphicsContextWin.cpp:
        (WebCore::GraphicsContextPlatformPrivate::concatCTM):
        * platform/graphics/wince/GraphicsContextWince.cpp:
        (WebCore::GraphicsContext::concatCTM):
        (WebCore::GraphicsContext::getAffineCTM):
        * platform/graphics/wx/GraphicsContextWx.cpp:
        (WebCore::GraphicsContext::getAffineCTM):
        (WebCore::GraphicsContext::concatCTM):
        * platform/graphics/wx/PathWx.cpp:
        (WebCore::Path::transform):
        * platform/graphics/wx/TransformationMatrixWx.cpp:
        (WebCore::AffineTransform::operator wxGraphicsMatrix):

2010-01-29  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Eric Carlson.

        [GTK] set playbin mute property depending on volume value
        https://bugs.webkit.org/show_bug.cgi?id=31586

        New API in MediaPlayer for mute control. 3 new methods are
        introduced:

        - bool supportsMuting() const;
        - bool muted() const;
        - void setMuted(bool);

        Platform MediaPlayer implementations can support it easily if the
        underlying sound daemon/API supports muting (eg. not only setting
        volume to 0) like PulseAudio for instance on Linux. At the moment
        the only player supporting this new API is the
        MediaPlayerPrivateGStreamer.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setMuted):
        (WebCore::HTMLMediaElement::mediaPlayerVolumeChanged):
        (WebCore::HTMLMediaElement::mediaPlayerMuteChanged):
        * html/HTMLMediaElement.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::NullMediaPlayerPrivate::supportsMuting):
        (WebCore::NullMediaPlayerPrivate::setMuted):
        (WebCore::MediaPlayer::MediaPlayer):
        (WebCore::MediaPlayer::muted):
        (WebCore::MediaPlayer::supportsMuting):
        (WebCore::MediaPlayer::setMuted):
        (WebCore::MediaPlayer::volumeChanged):
        (WebCore::MediaPlayer::muteChanged):
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerClient::mediaPlayerMuteChanged):
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::supportsMuting):
        (WebCore::MediaPlayerPrivateInterface::setMuted):
        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::mediaPlayerPrivateVolumeChangedCallback):
        (WebCore::notifyVolumeIdleCallback):
        (WebCore::mediaPlayerPrivateMuteChangedCallback):
        (WebCore::notifyMuteIdleCallback):
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::~MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::volumeChangedCallback):
        (WebCore::MediaPlayerPrivate::volumeChanged):
        (WebCore::MediaPlayerPrivate::supportsMuting):
        (WebCore::MediaPlayerPrivate::setMuted):
        (WebCore::MediaPlayerPrivate::muteChangedCallback):
        (WebCore::MediaPlayerPrivate::muteChanged):
        (WebCore::MediaPlayerPrivate::createGSTPlayBin):
        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.h:

2010-02-01  Henry Haverinen  <henry.haverinen@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Build without SSL support is broken

        Added missing #ifdefs for OpenSSL support and one null-pointer
        check for the socket.

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

        * platform/network/qt/SocketStreamHandlePrivate.h:
        * platform/network/qt/SocketStreamHandleQt.cpp:
        (WebCore::SocketStreamHandlePrivate::SocketStreamHandlePrivate):
        (WebCore::SocketStreamHandlePrivate::send):

2010-02-01  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Fix rest of the NativeTextViewer (line numbers,
        conditional breakpoints, selection).

        * inspector/front-end/NativeTextViewer.js:
        (WebInspector.NativeTextViewer):
        (WebInspector.NativeTextViewer.prototype._updatePreferredSize):
        (WebInspector.NativeTextViewer.prototype._registerMouseListeners):
        (WebInspector.NativeTextViewer.prototype._mouseDown):
        (WebInspector.NativeTextViewer.prototype._contextMenu):
        (WebInspector.NativeTextViewer.prototype._lineForMouseEvent):
        (WebInspector.NativeTextViewer.prototype._lineHeight):
        * inspector/front-end/TextEditor.js:
        (WebInspector.TextEditor):
        (WebInspector.TextEditor.prototype._registerMouseListeners):
        (WebInspector.TextEditor.prototype._offsetToLine):
        (WebInspector.TextEditor.prototype._lineHeight):
        (WebInspector.TextEditor.prototype.reveal):
        (WebInspector.TextEditor.prototype._paint):
        (WebInspector.TextEditor.prototype._updateDivDecorations):
        (WebInspector.TextEditor.prototype._paintSelection):

2010-02-01  Steve Block  <steveblock@google.com>

        Reviewed by Ariya Hidayat.

        Adds implementation of JavaString for V8.
        https://bugs.webkit.org/show_bug.cgi?id=33953

        No new tests, build fix only.

        * bridge/jni/JNIBridge.h: Modified. Include JavaStringV8.h for V8
        * bridge/jni/v8: Added.
        * bridge/jni/v8/JavaStringV8.h: Added.
        (JSC::Bindings::JavaStringImpl::init):
        (JSC::Bindings::JavaStringImpl::UTF8String):
        (JSC::Bindings::JavaStringImpl::uchars):
        (JSC::Bindings::JavaStringImpl::length):

2010-02-01  Alex Milowski  <alex@milowski.com>

        Reviewed by Darin Adler.

        Added compile time debug support for mathml layout (block boundary & baseline)

        * mathml/RenderMathMLBlock.cpp:
        (WebCore::RenderMathMLBlock::stretchToHeight):
        (WebCore::RenderMathMLBlock::paint):
        * mathml/RenderMathMLBlock.h:

2010-02-01  Philippe Normand  <pnormand@igalia.com>

        Rubber stamped by Xan Lopez.

        Fixed compilation warning about unsigned vs signed comparison.

        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::paint):

2010-01-31  Kent Tamura  <tkent@chromium.org>

        Unreviewed. Revert r54112 and r54124 because of Windows build error.

        * Android.mk:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::scale):
        (WebCore::CanvasRenderingContext2D::rotate):
        (WebCore::CanvasRenderingContext2D::translate):
        (WebCore::CanvasRenderingContext2D::transform):
        (WebCore::CanvasRenderingContext2D::setTransform):
        (WebCore::CanvasRenderingContext2D::isPointInPath):
        (WebCore::CanvasRenderingContext2D::willDraw):
        * html/canvas/CanvasRenderingContext2D.h:
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/Path.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        * platform/graphics/cairo/GraphicsContextPlatformPrivateCairo.h:
        * platform/graphics/cairo/PathCairo.cpp:
        * platform/graphics/cairo/TransformationMatrixCairo.cpp:
        * platform/graphics/cg/GraphicsContextCG.cpp:
        * platform/graphics/cg/GraphicsContextPlatformPrivateCG.h:
        * platform/graphics/cg/PathCG.cpp:
        * platform/graphics/cg/TransformationMatrixCG.cpp:
        * platform/graphics/haiku/GraphicsContextHaiku.cpp:
        * platform/graphics/haiku/PathHaiku.cpp:
        * platform/graphics/qt/GraphicsContextQt.cpp:
        * platform/graphics/qt/PathQt.cpp:
        * platform/graphics/qt/TransformationMatrixQt.cpp:
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        * platform/graphics/skia/PathSkia.cpp:
        * platform/graphics/skia/TransformationMatrixSkia.cpp:
        * platform/graphics/transforms/AffineTransform.cpp: Removed.
        * platform/graphics/transforms/AffineTransform.h: Removed.
        * platform/graphics/wince/GraphicsContextWince.cpp:
        * platform/graphics/wx/GraphicsContextWx.cpp:
        * platform/graphics/wx/PathWx.cpp:
        * platform/graphics/wx/TransformationMatrixWx.cpp:
        (WebCore::TransformationMatrix::operator wxGraphicsMatrix):

2010-01-31  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Darin Adler.

        Limit the scope of packing alignment to avoid MSVC C4103 warning.
        https://bugs.webkit.org/show_bug.cgi?id=34390

        Use pack(push, 16) and pack(pop) to limit the scope of packing
        alignment change.

        * bindings/js/JSSVGPODTypeWrapper.h:

2010-01-31  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        Fix valueAsNumber calculation for type=month.
        https://bugs.webkit.org/show_bug.cgi?id=34304

        valueAsNumber calculation for type=month which was checked in as
        r53893 was the number of milliseconds since UNIX epoch, and it was
        wrong. The correct way is the number months since UNIX epoch.

        * html/DateComponents.cpp:
        (WebCore::DateComponents::setMonthsSinceEpoch):
        (WebCore::DateComponents::monthsSinceEpoch):
        * html/DateComponents.h: Declare setMonthsSinceEpoch() and monthsSinceEpoch().
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::parseToDouble):
          Switch to monthsSinceEpoch() for type=MONTH.
        (WebCore::HTMLInputElement::valueAsDate):
          Add code with millisecondsSinceEpoch() for MONTH because
          parseToDouble() changed its behavior.
        (WebCore::HTMLInputElement::setValueAsNumber):
          Use setMonthsSinceEpoch() for MONTH.

2010-01-31  Dan Bernstein  <mitz@apple.com>

        Reviewed by Timothy Hatcher.

        Web Inspector: REGRESSION: Numbers in bubbles are vertically off-center
        https://bugs.webkit.org/show_bug.cgi?id=34398

        * inspector/front-end/inspector.css: Specify line-height: normal for
        ".console-message .bubble" and ".sidebar-tree-item .status .bubble".

2010-01-28  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Darin Adler.

        Implement CSSOM Range.getClientRects for collapsed selections
        https://bugs.webkit.org/show_bug.cgi?id=34239

        When getting the quads for a range on a text node, allow returning
        zero width quads. This leaves the case of collapsed selections inside
        elements still not fixed, but no worse.

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::selectionRect):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::absoluteQuadsForRange):

2010-01-31  Oliver Hunt  <oliver@apple.com>

        Reviewed by Simon Fraser.

        Animated scaling of background-image is too slow
        https://bugs.webkit.org/show_bug.cgi?id=33808

        Implement a version of the RenderImage animated scaling optimisation
        for background images. Due to the possibility of arbitrary transforms
        being applied to containing elements we explicitly check the current
        CTM of the context for scaling or rotation.

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawTiledImage):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/transforms/TransformationMatrix.h:
        (WebCore::TransformationMatrix::isIdentityOrTranslation):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelScaleData::RenderBoxModelScaleData):
        (WebCore::RenderBoxModelScaleData::~RenderBoxModelScaleData):
        (WebCore::RenderBoxModelScaleData::hiqhQualityRepaintTimer):
        (WebCore::RenderBoxModelScaleData::size):
        (WebCore::RenderBoxModelScaleData::setSize):
        (WebCore::RenderBoxModelScaleData::lastPaintTime):
        (WebCore::RenderBoxModelScaleData::setLastPaintTime):
        (WebCore::RenderBoxModelScaleData::useLowQualityScale):
        (WebCore::RenderBoxModelScaleData::transform):
        (WebCore::RenderBoxModelScaleData::setTransform):
        (WebCore::RenderBoxModelScaleData::setUseLowQualityScale):
        (WebCore::RenderBoxModelScaleObserver::boxModelObjectDestroyed):
        (WebCore::RenderBoxModelScaleObserver::highQualityRepaintTimerFired):
        (WebCore::RenderBoxModelScaleObserver::shouldPaintBackgroundAtLowQuality):
        (WebCore::RenderBoxModelObject::highQualityRepaintTimerFired):
        (WebCore::RenderBoxModelObject::~RenderBoxModelObject):
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * rendering/RenderBoxModelObject.h:

2010-01-31  Dirk Schulze  <krit@webkit.org>

        Reviewed by Simon Fraser.

        Add back an AffineTransform class for use by SVG
        https://bugs.webkit.org/show_bug.cgi?id=33750

        These are the first steps on reimplementing AffineTransform. Unlike
        the old affine code, this one is platform independent like TransformationMatrix.
        AffineTransform has the benefit, that it stores just 6 doubles instead of
        16 in TransformationMatrix. The calculations of transformations are not that
        complex and can improve the memory usage and speed of SVG.
        AffineTransform can be used by HTML Canvas3D or SVG, since they are 2D related (at
        least for the moment).
        HTML Canvas is the first that makes use of the new AffineTransform. Next patches
        will introduce the affine code to SVG.

        No new tests. The new AffineTransformation code is tested by fast/canvas.

        * Android.mk:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::scale):
        (WebCore::CanvasRenderingContext2D::rotate):
        (WebCore::CanvasRenderingContext2D::translate):
        (WebCore::CanvasRenderingContext2D::transform):
        (WebCore::CanvasRenderingContext2D::setTransform):
        (WebCore::CanvasRenderingContext2D::isPointInPath):
        (WebCore::CanvasRenderingContext2D::willDraw):
        * html/canvas/CanvasRenderingContext2D.h:
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/Path.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::getAffineCTM):
        (WebCore::GraphicsContext::concatCTM):
        * platform/graphics/cairo/GraphicsContextPlatformPrivateCairo.h:
        (WebCore::GraphicsContextPlatformPrivate::concatCTM):
        * platform/graphics/cairo/PathCairo.cpp:
        (WebCore::Path::transform):
        * platform/graphics/cairo/TransformationMatrixCairo.cpp:
        (WebCore::AffineTransform::operator cairo_matrix_t):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::concatCTM):
        (WebCore::GraphicsContext::getAffineCTM):
        * platform/graphics/cg/GraphicsContextPlatformPrivateCG.h:
        (WebCore::GraphicsContextPlatformPrivate::concatCTM):
        * platform/graphics/cg/PathCG.cpp:
        (WebCore::Path::transform):
        * platform/graphics/cg/TransformationMatrixCG.cpp:
        (WebCore::AffineTransform::operator CGAffineTransform):
        * platform/graphics/haiku/GraphicsContextHaiku.cpp:
        (WebCore::GraphicsContext::getAffineCTM):
        (WebCore::GraphicsContext::concatCTM):
        * platform/graphics/haiku/PathHaiku.cpp:
        (WebCore::Path::transform):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::getAffineCTM):
        (WebCore::GraphicsContext::concatCTM):
        * platform/graphics/qt/PathQt.cpp:
        (WebCore::Path::transform):
        * platform/graphics/qt/TransformationMatrixQt.cpp:
        (WebCore::AffineTransform::operator QTransform):
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::getAffineCTM):
        * platform/graphics/skia/PathSkia.cpp:
        (WebCore::Path::transform):
        * platform/graphics/skia/TransformationMatrixSkia.cpp:
        (WebCore::AffineTransform::operator SkMatrix):
        * platform/graphics/transforms/AffineTransform.cpp: Added.
        (WebCore::affineTransformDecompose):
        (WebCore::affineTransformCompose):
        (WebCore::AffineTransform::AffineTransform):
        (WebCore::AffineTransform::reset):
        (WebCore::AffineTransform::setMatrix):
        (WebCore::AffineTransform::isIdentity):
        (WebCore::AffineTransform::det):
        (WebCore::AffineTransform::isInvertible):
        (WebCore::AffineTransform::inverse):
        (WebCore::AffineTransform::multiply):
        (WebCore::AffineTransform::multLeft):
        (WebCore::AffineTransform::rotate):
        (WebCore::AffineTransform::scale):
        (WebCore::AffineTransform::translate):
        (WebCore::AffineTransform::scaleNonUniform):
        (WebCore::AffineTransform::rotateFromVector):
        (WebCore::AffineTransform::flipX):
        (WebCore::AffineTransform::flipY):
        (WebCore::AffineTransform::shear):
        (WebCore::AffineTransform::skew):
        (WebCore::AffineTransform::skewX):
        (WebCore::AffineTransform::skewY):
        (WebCore::makeMapBetweenRects):
        (WebCore::AffineTransform::map):
        (WebCore::AffineTransform::mapPoint):
        (WebCore::AffineTransform::mapRect):
        (WebCore::AffineTransform::blend):
        * platform/graphics/transforms/AffineTransform.h: Added.
        (WebCore::AffineTransform::a):
        (WebCore::AffineTransform::setA):
        (WebCore::AffineTransform::b):
        (WebCore::AffineTransform::setB):
        (WebCore::AffineTransform::c):
        (WebCore::AffineTransform::setC):
        (WebCore::AffineTransform::d):
        (WebCore::AffineTransform::setD):
        (WebCore::AffineTransform::e):
        (WebCore::AffineTransform::setE):
        (WebCore::AffineTransform::f):
        (WebCore::AffineTransform::setF):
        (WebCore::AffineTransform::operator== ):
        (WebCore::AffineTransform::operator!=):
        (WebCore::AffineTransform::operator*=):
        (WebCore::AffineTransform::operator*):
        (WebCore::AffineTransform::setMatrix):
        * platform/graphics/wince/GraphicsContextWince.cpp:
        (WebCore::GraphicsContext::concatCTM):
        (WebCore::GraphicsContext::getAffineCTM):
        * platform/graphics/wx/GraphicsContextWx.cpp:
        (WebCore::GraphicsContext::getAffineCTM):
        (WebCore::GraphicsContext::concatCTM):
        * platform/graphics/wx/PathWx.cpp:
        (WebCore::Path::transform):
        * platform/graphics/wx/TransformationMatrixWx.cpp:
        (WebCore::AffineTransform::operator wxGraphicsMatrix):

2010-01-31  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: [REGRESSION] Breakpoint source line is not displayed
        in the breakpoint manager.

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._addBreakpointToSource):

2010-01-31  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Introduce NativeTextViewer.

        This change handles rendering highlighted text, using browser's
        selection/drag/drop/click logic. Breakpoint decorations and
        program counter is working.

        Todo: line numbers are painted 'under' the text when scrolling
        horizontally, search is not yet implemented.

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

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/DivBasedTextViewer.js: Added.
        (WebInspector.DivBasedTextViewer):
        (WebInspector.DivBasedTextViewer.prototype._textChanged):
        (WebInspector.DivBasedTextViewer.prototype._createLineDivs):
        (WebInspector.DivBasedTextViewer.prototype._updatePreferredSize):
        (WebInspector.DivBasedTextViewer.prototype._scroll):
        (WebInspector.DivBasedTextViewer.prototype._registerMouseListeners):
        (WebInspector.DivBasedTextViewer.prototype._registerKeyboardListeners):
        (WebInspector.DivBasedTextViewer.prototype._registerClipboardListeners):
        (WebInspector.DivBasedTextViewer.prototype._paintSelection):
        (WebInspector.DivBasedTextViewer.prototype._positionDivDecoration):
        (WebInspector.DivBasedTextViewer.prototype._mouseDown):
        (WebInspector.DivBasedTextViewer.prototype._contextMenu):
        (WebInspector.DivBasedTextViewer.prototype._caretForMouseEvent):
        (WebInspector.DivBasedTextViewer.prototype._paintLine):
        (WebInspector.DivBasedTextViewer.prototype._createSpan):
        * inspector/front-end/Settings.js:
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.clearMessages):
        (WebInspector.SourceFrame.prototype.sizeToFitContentHeight):
        (WebInspector.SourceFrame.prototype._createEditorIfNeeded):
        (WebInspector.SourceFrame.prototype._addMessageToSource):
        (WebInspector.SourceFrame.prototype.resize):
        * inspector/front-end/TextEditor.js:
        (WebInspector.TextEditor):
        (WebInspector.TextEditor.prototype.setDivDecoration):
        (WebInspector.TextEditor.prototype._registerMouseListeners):
        (WebInspector.TextEditor.prototype._registerKeyboardListeners):
        (WebInspector.TextEditor.prototype._registerClipboardListeners):
        (WebInspector.TextEditor.prototype.reveal):
        (WebInspector.TextEditor.prototype._textChanged):
        (WebInspector.TextEditor.prototype.revalidateDecorationsAndPaint):
        (WebInspector.TextEditor.prototype._updatePreferredSize):
        (WebInspector.TextEditor.prototype.resize):
        (WebInspector.TextEditor.prototype._paintLinesContinuation):
        (WebInspector.TextEditor.prototype._paintLine):
        (WebInspector.TextEditor.prototype._contextMenu):
        (WebInspector.TextEditor.prototype._caretForMouseEvent):
        (WebInspector.TextEditor.prototype._changeFont):
        * inspector/front-end/TextEditorHighlighter.js:
        (WebInspector.TextEditorHighlighter.prototype._lex):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:
        * inspector/front-end/textEditor.css:

2010-01-31  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Eric Seidel.

        [Qt] Enable FAST_MOBILE_SCROLLING on Qt embedded platforms
        https://bugs.webkit.org/show_bug.cgi?id=34168

        Enable FAST_MOBILE_SCROLLING for Qt on Maemo 5, Linux embedded
        and Symbian

        * WebCore.pro:

2010-01-31  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Make ScriptState destructor protected since all non-empty
        ScriptStates are managed by GC. Remove obsolete constructor.

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

        * bindings/v8/ScriptState.cpp:
        * bindings/v8/ScriptState.h:

2010-01-30  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Use CGGradient on Leopard and later, since it's faster than CGShading
        https://bugs.webkit.org/show_bug.cgi?id=34384

        Use CGGradient on Leopard and later, rather than CGShading, for
        performance.

        * platform/graphics/Gradient.h:
        * platform/graphics/Gradient.cpp:
        (WebCore::Gradient::sortStopsIfNecessary): Utility method to sort stops.
        Did not call this from getColor() to avoid overhead of a function call.

        * platform/graphics/cg/GradientCG.cpp:
        (WebCore::Gradient::platformDestroy): Use CGGradientRelease() post-Tiger.
        (WebCore::Gradient::platformGradient): Create and return a CGGradientRef post-Tiger.
        (WebCore::Gradient::fill): Call new paint() method.
        (WebCore::Gradient::paint): New convenence method that avoids testing
        isRadial() in a bunch of other places.

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::fillPath): Call the gradient's paint() method.
        (WebCore::GraphicsContext::strokePath): Ditto
        (WebCore::GraphicsContext::fillRect): Ditto
        (WebCore::GraphicsContext::strokeRect): Ditto

2010-01-30  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Adele Peterson.

        Do color animations on premultiplied colors
        https://bugs.webkit.org/show_bug.cgi?id=34383
        
        Convert colors to premultiplied alpha before interpolating them,
        then convert the result back to non-premultiplied. This gives better
        results when animating from transparent colors.

        Test: transitions/color-transition-premultiplied.html

        * page/animation/AnimationBase.cpp:
        (WebCore::blendFunc):

2010-01-30  Gustavo Noronha Silva  <gns@gnome.org>

        Build fixes needed for make distcheck.

        * GNUmakefile.am:

2010-01-29  Mark Rowe  <mrowe@apple.com>

        Stop copying an IDL file in to the framework wrapper.

        * WebCore.xcodeproj/project.pbxproj:

2010-01-29  Mark Rowe  <mrowe@apple.com>

        Sort Xcode projects.

        * WebCore.xcodeproj/project.pbxproj:

== Rolled over to ChangeLog-2010-01-29 ==
