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