2011-05-11  Antoine Labour  <piman@chromium.org>

        Reviewed by David Levin.

        Expose shouldBufferData to ThreadableLoaderOptions to be able to disable buffering of the
        loaded resource.
        https://bugs.webkit.org/show_bug.cgi?id=60656

        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::loadRequest):
        Pass the shouldBufferData to the resource load scheduler, forcing it to true for the
        preflight request.
        * loader/ResourceLoadScheduler.cpp:
        (WebCore::ResourceLoadScheduler::scheduleSubresourceLoad):
        Pass through shouldBufferData to SubresourceLoader::create
        * loader/ResourceLoadScheduler.h:

        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::create):
        Set shouldBufferData on the newly created loader

        * loader/SubresourceLoader.h:

        * loader/ThreadableLoader.h:
        (WebCore::ThreadableLoaderOptions::ThreadableLoaderOptions):
        Add shouldBufferData to the options, defaulting to true.

2011-05-11  Jay Civelli  <jcivelli@chromium.org>

        Reviewed by Adam Barth.

        Adding a Content-Type parser. This is needed for MHTML support.
        https://bugs.webkit.org/show_bug.cgi?id=60637

        (WebCore::ScriptController::disableEval):
        * platform/network/ContentTypeParser.cpp: Added.
        * platform/network/ContentTypeParser.h: Added.

2011-05-11  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Steve Falkenburg.

        [Windows WebKit2] Use cookies set in WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=60274

        Share the default storage session between the UI and Web Processes.

        * platform/network/cf/CookieStorageCFNet.cpp:
        (WebCore::defaultSessionCookieStorage):
        Keep track of the default storage session cookie storage.
        (WebCore::currentCookieStorage):
        Call defaultCookieStorage to get the default cookie storage.
        (WebCore::defaultCookieStorage):
        If there is a default storage session cookie storage, prefer that over getting the default
        cookie storage. In the Web Process, asking CFNetwork for the default cookie storage directly
        without specifying a storage session will not get the cookie storage being shared by the UI
        and Web Processes.

        * platform/network/ResourceHandle.h:
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::willSendRequest):
        Make sure to set the current storage session on any requests used by the Web
        Process before CFNetwork has to do anything with them, in order for CFNetwork to avoid
        doing anything with the Web Process's default storage session (which is not the one shared
        with the UI Process).
        (WebCore::makeFinalRequest):
        Ditto.
        (WebCore::ResourceHandle::willSendRequest):
        Ditto.
        (WebCore::ResourceHandle::currentStorageSession):
        If there is a Private Browsing storage session, return that.
        If not, on Windows return the default storage session that is being shared with the UI
        Process and on Mac return 0.
        (WebCore::defaultCFURLStorageSession):
        (WebCore::ResourceHandle::setDefaultStorageSession):
        (WebCore::ResourceHandle::defaultStorageSession):

        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        Make sure to set the current storage session on any requests used by the Web
        Process before CFNetwork has to do anything with them, in order for CFNetwork to avoid
        doing anything with the Web Process's default storage session (which is not the one shared
        with the UI Process).

2011-05-11  Lucas De Marchi  <lucas.demarchi@profusion.mobi>

        Reviewed by David Kilzer.

        Remove wml directory from include lists
        https://bugs.webkit.org/show_bug.cgi?id=60646

        Remove wml dir from CMake, Autotools and qmake build systems since WML
        was removed in r85256.

        No new tests since no change in functionality.

        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.pri:

2011-05-11  Lucas De Marchi  <lucas.demarchi@profusion.mobi>

        Reviewed by Antonio Gomes.

        [CMAKE] Move EFL-specific file to CMakeListsEfl.txt
        https://bugs.webkit.org/show_bug.cgi?id=60642

        Move file EFL-specific file to the CMakeListsEfl.txt file. This implies
        having to include CMakeLists${PORT}.txt before the ADD_CUSTOM_COMMAND
        calls, since they depend on lists that now may change inside a port
        like WebCore_USER_AGENT_STYLE_SHEETS.

        No new tests since no change in functionality.

        * CMakeLists.txt: remove css file specific to EFL port.
        * CMakeListsEfl.txt: move file here.

2011-05-11  Tao Bai  <michaelbai@chromium.org>

        Reviewed by David Kilzer.

        Return empty Favicon URL instead of default one when the frame isn't top level one
        https://bugs.webkit.org/show_bug.cgi?id=60527
        This issue was discovered by chromium browser test.

        * dom/Document.cpp:
        (WebCore::Document::setIconURL):
        Restored original logic which was inadvertently flipped by http://trac.webkit.org/changeset/85785.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::iconURLs):
        (WebCore::FrameLoader::fillIconURL):
        Restored original logic, the empty URL should be returned instead of default one. The client (at
        least chromium) may rely on the returned value to decided whether the favicon should be changed.

2011-05-11  Nat Duca  <nduca@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] Make throttling of WebGL based on webgl frames, not compositor frames
        https://bugs.webkit.org/show_bug.cgi?id=60508

        When a WebGL layer is dirtied outside of a requestAnimFrame callback, we need
        to prevent WebGL from running too far ahead of the GPU process. The current
        throttling mechanism relies on prepareTexture being called for every WebGL frame.
        However, in a non-requestAnimFrame application, multiple frames might get created
        before the compositor runs and calls prepareTexture on the surface.

        To address this, we post a task that calls a special rate limiting GL extension on
        the WebGL context after every WebGL "frame." When the compositor runs, it calls
        prepareTexture as usual.

        * platform/graphics/chromium/Extensions3DChromium.h:
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::LayerRendererChromium):
        * platform/graphics/chromium/LayerRendererChromium.h:
        (WebCore::LayerRendererChromium::setIsAnimating):
        (WebCore::LayerRendererChromium::isAnimating):
        * platform/graphics/chromium/WebGLLayerChromium.cpp:
        (WebCore::WebGLLayerChromiumRateLimitTask::WebGLLayerChromiumRateLimitTask):
        (WebCore::WebGLLayerChromiumRateLimitTask::run):
        (WebCore::WebGLLayerChromiumRateLimitTask::cancel):
        (WebCore::WebGLLayerChromium::WebGLLayerChromium):
        (WebCore::WebGLLayerChromium::~WebGLLayerChromium):
        (WebCore::WebGLLayerChromium::setTextureUpdated):
        (WebCore::WebGLLayerChromium::setContext):
        * platform/graphics/chromium/WebGLLayerChromium.h:
        (WebCore::WebGLLayerChromium::context):

2011-05-11  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Texmap][Qt] Upstream texture-mapper changes from Qt's WebKit2 branch
        https://bugs.webkit.org/show_bug.cgi?id=60439

        Patch 12/12: Enable accelerated animations in texture-mapper. The entire interpolation
        mechanism happens inside TextureMapper, and we interpolate right before we paint.

        No new tests. Tests in LayoutTests/compositing cover this.

        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayerTextureMapper::GraphicsLayerTextureMapper):
        (WebCore::GraphicsLayerTextureMapper::syncCompositingState):
        (WebCore::GraphicsLayerTextureMapper::addAnimation):
        (WebCore::GraphicsLayerTextureMapper::pauseAnimation):
        (WebCore::GraphicsLayerTextureMapper::removeAnimation):
        (WebCore::GraphicsLayerTextureMapper::animationStartedTimerFired):
        * platform/graphics/texmap/TextureMapperNode.cpp:
        (WebCore::TextureMapperNode::descendantsOrSelfHaveRunningAnimations):
        (WebCore::normalizedAnimationValue):
        (WebCore::TextureMapperNode::applyOpacityAnimation):
        (WebCore::solveEpsilon):
        (WebCore::solveCubicBezierFunction):
        (WebCore::solveStepsFunction):
        (WebCore::applyTimingFunction):
        (WebCore::TextureMapperNode::applyTransformAnimation):
        (WebCore::TextureMapperNode::applyAnimationFrame):
        (WebCore::TextureMapperNode::applyAnimation):
        (WebCore::TextureMapperNode::hasRunningOpacityAnimation):
        (WebCore::TextureMapperNode::hasRunningTransformAnimation):
        (WebCore::TextureMapperNode::syncAnimations):
        (WebCore::copyTimingFunction):
        (WebCore::copyAnimationValue):
        (WebCore::TextureMapperAnimation::TextureMapperAnimation):
        * platform/graphics/texmap/TextureMapperNode.h:
        (WebCore::TextureMapperAnimation::create):

2011-05-11  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Texmap][Qt] Upstream texture-mapper changes from Qt's WebKit2 branch
        https://bugs.webkit.org/show_bug.cgi?id=60439

        Patch 11/12: Patch PluginView to build with TextureMapper on Linux.

        No new tests. This is a build fix.

        * platform/qt/QWebPageClient.h:
        (QWebPageClient::setRootGraphicsLayer):

2011-05-11  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Texmap][Qt] Upstream texture-mapper changes from Qt's WebKit2 branch
        https://bugs.webkit.org/show_bug.cgi?id=60439

        Patch 10/12: Glue the TextureMapper refactoring into Webkit(1).
        Pass a GraphicsLayer* instead of a PlatformLayer* to the QWebPageClient.

        No new tests. Tests in LayoutTests/compositing cover this.

        * platform/qt/QWebPageClient.h:
        (QWebPageClient::setRootGraphicsLayer):

2011-05-11  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Texmap][Qt] Upstream texture-mapper changes from Qt's WebKit2 branch
        https://bugs.webkit.org/show_bug.cgi?id=60439

        Patch 9/12: Refactor TextureMapperNode for performance, readability and accuracy.
        Changes include:
        1. Support the new TextureMapperPlatformLayer for media & WebGL.
        2. Use a pool for intermediate surfaces, to avoid constant allocating/freeing of textures.
        3. Divide computation operations to different smaller functions.
        4. Get rid of scissor/clip layers, use transformed clip instead.
        5. Allow tiling for big layers.

        No new tests. Tests in LayoutTests/compositing cover this.

        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayerTextureMapper::GraphicsLayerTextureMapper):
        (WebCore::GraphicsLayerTextureMapper::setNeedsDisplayInRect):
        (WebCore::GraphicsLayerTextureMapper::setContentsToMedia):
        (WebCore::GraphicsLayerTextureMapper::platformLayer):
        * platform/graphics/texmap/GraphicsLayerTextureMapper.h:
        (WebCore::GraphicsLayerTextureMapper::setContentsNeedsDisplay):
        (WebCore::GraphicsLayerTextureMapper::setContentsToCanvas):
        (WebCore::GraphicsLayerTextureMapper::node):
        * platform/graphics/texmap/TextureMapperNode.cpp:
        (WebCore::TextureMapperSurfaceManager::getIntermediateSurface):
        (WebCore::TextureMapperSurfaceManager::releaseIntermediateSurface):
        (WebCore::toTextureMapperNode):
        (WebCore::TextureMapperNode::rootLayer):
        (WebCore::TextureMapperNode::setTransform):
        (WebCore::TextureMapperNode::computePerspectiveTransformIfNeeded):
        (WebCore::TextureMapperNode::countDescendantsWithContent):
        (WebCore::TextureMapperNode::computeOverlapsIfNeeded):
        (WebCore::TextureMapperNode::computeReplicaTransformIfNeeded):
        (WebCore::TextureMapperNode::computeLocalTransformIfNeeded):
        (WebCore::TextureMapperNode::needsToComputeBoundingRect):
        (WebCore::TextureMapperNode::computeAllTransforms):
        (WebCore::TextureMapperNode::computeBoundingRectFromRootIfNeeded):
        (WebCore::TextureMapperNode::computeTiles):
        (WebCore::TextureMapperNode::computeVisibleRectIfNeeded):
        (WebCore::TextureMapperNode::renderContent):
        (WebCore::TextureMapperNode::paint):
        (WebCore::TextureMapperNode::targetRectForTileRect):
        (WebCore::TextureMapperNode::paintSelf):
        (WebCore::TextureMapperNode::compareGraphicsLayersZValue):
        (WebCore::TextureMapperNode::sortByZOrder):
        (WebCore::TextureMapperNode::paintSelfAndChildren):
        (WebCore::TextureMapperNode::paintReflection):
        (WebCore::TextureMapperNode::paintRecursive):
        (WebCore::TextureMapperNode::~TextureMapperNode):
        (WebCore::TextureMapperNode::resetDescendants):
        (WebCore::TextureMapperNode::setContentScale):
        (WebCore::TextureMapperNode::setVisibleRect):
        (WebCore::TextureMapperNode::syncCompositingState):
        (WebCore::TextureMapperNode::invalidateOverlaps):
        (WebCore::TextureMapperNode::syncCompositingStateSelf):
        (WebCore::TextureMapperNode::descendantsOrSelfHaveRunningAnimations):
        * platform/graphics/texmap/TextureMapperNode.h:
        (WebCore::TextureMapperPaintOptions::TextureMapperPaintOptions):
        (WebCore::TextureMapperAnimation::create):
        (WebCore::TextureMapperNode::TextureMapperNode):
        (WebCore::TextureMapperNode::size):
        (WebCore::TextureMapperNode::setOpacity):
        (WebCore::TextureMapperNode::setTextureMapper):
        (WebCore::TextureMapperNode::media):
        (WebCore::TextureMapperNode::texture):
        (WebCore::TextureMapperNode::targetRect):
        (WebCore::TextureMapperNode::entireRect):
        (WebCore::TextureMapperNode::contentSize):
        (WebCore::TextureMapperNode::State::State):
        (WebCore::deleteOwnedPtr):

2011-05-07  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Texmap][Qt] Upstream texture-mapper changes from Qt's WebKit2 branch
        https://bugs.webkit.org/show_bug.cgi?id=60439

        Patch 8/12: Changes to the GL backend of TextureMapper. The code for these changes is intertwined so it was hard to separate
        them to different patches. This is the summary of what the changes do:

        1. Use stencil for clipping instead of scissors, refactor beginClip/endClip functions to accomodate that.
        2. Get rid of the "Target" program which forced an intermediate framebuffer for any content. Instead,
           we upload the texture with BGRA from the start. Ports other than Qt can optimize this for their needs.
        3. Use glGetAttribLocation instead of glBindAttribLocation; On some platforms we might be polluting the
           GL context otherwise.
        4. Use image UIDs (cache-key in Qt) instead of image pointers. This is important for images that change their
           internal content.
        5. Allow packing and unpacking. This is currently a stub, for future memory optimizations.
        6. Put some of the initialization code here (beginPainting/endPainting).
        7. Allow painting a texture via an ID instead of a BitmapTexture data type.
        8. Get rid of makeContextCurrent / obtainCurrentContext. We only use texture-mapper when the context is current.

        No new tests. Tests in LayoutTests/compositing test this.

        * platform/graphics/opengl/TextureMapperGL.cpp:
        (WebCore::debugGLCommand):
        (WebCore::TextureMapperGLData::GlobalGLData::createShaderProgram):
        (WebCore::TextureMapperGLData::GlobalGLData::GlobalGLData):
        (WebCore::TextureMapperGLData::DirectlyCompositedImageRepository::findOrCreate):
        (WebCore::TextureMapperGLData::DirectlyCompositedImageRepository::deref):
        (WebCore::TextureMapperGLData::DirectlyCompositedImageRepository::~DirectlyCompositedImageRepository):
        (WebCore::TextureMapperGLData::TextureMapperGLData):
        (WebCore::BitmapTextureGL::id):
        (WebCore::BitmapTextureGL::isOpaque):
        (WebCore::BitmapTextureGL::relativeSize):
        (WebCore::BitmapTextureGL::setTextureMapper):
        (WebCore::BitmapTextureGL::pack):
        (WebCore::BitmapTextureGL::unpack):
        (WebCore::BitmapTextureGL::isPacked):
        (WebCore::BitmapTextureGL::BitmapTextureGL):
        (WebCore::TextureMapperGL::TextureMapperGL):
        (WebCore::TextureMapperGL::initializeShaders):
        (WebCore::TextureMapperGL::beginPainting):
        (WebCore::TextureMapperGL::endPainting):
        (WebCore::TextureMapperGL::drawTexture):
        (WebCore::BitmapTextureGL::reset):
        (WebCore::BitmapTextureGL::endPaint):
        (WebCore::BitmapTextureGL::setContentsToImage):
        (WebCore::createProjectionMatrix):
        (WebCore::BitmapTextureGL::bind):
        (WebCore::BitmapTextureGL::destroy):
        (WebCore::TextureMapperGL::~TextureMapperGL):
        (WebCore::TextureMapperGL::bindSurface):
        (WebCore::TextureMapperGL::beginClip):
        (WebCore::TextureMapperGL::endClip):
        (WebCore::TextureMapperGL::createTexture):
        * platform/graphics/opengl/TextureMapperGL.h:
        (WebCore::TextureMapperGL::allowSurfaceForRoot):
        (WebCore::TextureMapperGL::create):
        (WebCore::TextureMapperGL::setGraphicsContext):
        (WebCore::TextureMapperGL::graphicsContext):
        (WebCore::TextureMapperGL::isOpenGLBacked):
        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3DInternal::paintToTextureMapper):
        (WebCore::GraphicsContext3DInternal::boundingRect):
        (WebCore::GraphicsContext3DInternal::paint):
        * platform/graphics/qt/MediaPlayerPrivateQt.cpp:
        (WebCore::MediaPlayerPrivateQt::repaint):
        (WebCore::MediaPlayerPrivateQt::paintToTextureMapper):
        * platform/graphics/qt/MediaPlayerPrivateQt.h:
        (WebCore::MediaPlayerPrivateQt::acceleratedRenderingStateChanged):
        (WebCore::MediaPlayerPrivateQt::platformLayer):

2011-05-11  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Texmap][Qt] Upstream texture-mapper changes from Qt's WebKit2 branch
        https://bugs.webkit.org/show_bug.cgi?id=60439

        Patch 7/12: Allow a 3D-context (WebGL) to paint itself into a TextureMapper.
        This allows using a WebGL canvas with CSS.

        No new tests. Tests in LayoutTests/compositing/webgl cover this.

        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3DInternal::paintToTextureMapper):
        (WebCore::GraphicsContext3DInternal::boundingRect):
        (WebCore::GraphicsContext3DInternal::paint):
        * platform/graphics/qt/MediaPlayerPrivateQt.cpp:
        (WebCore::MediaPlayerPrivateQt::repaint):
        (WebCore::MediaPlayerPrivateQt::paintToTextureMapper):
        * platform/graphics/qt/MediaPlayerPrivateQt.h:
        (WebCore::MediaPlayerPrivateQt::acceleratedRenderingStateChanged):
        (WebCore::MediaPlayerPrivateQt::platformLayer):

2011-05-11  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Texmap][Qt] Upstream texture-mapper changes from Qt's WebKit2 branch
        https://bugs.webkit.org/show_bug.cgi?id=60439

        Patch 6/12: Allow the Qt media player implementation to paint into a TextureMapper,
        to allow videos to be composited.

        No new tests. Tests in LayoutTests/compositing cover this.

        * platform/graphics/qt/MediaPlayerPrivateQt.cpp:
        (WebCore::MediaPlayerPrivateQt::repaint):
        (WebCore::MediaPlayerPrivateQt::paintToTextureMapper):
        * platform/graphics/qt/MediaPlayerPrivateQt.h:
        (WebCore::MediaPlayerPrivateQt::acceleratedRenderingStateChanged):
        (WebCore::MediaPlayerPrivateQt::platformLayer):

2011-05-11  John Bauman  <jbauman@chromium.org>

        Reviewed by Kenneth Russell.

        Don't send zeros in TexImage if GL implementation handles that
        https://bugs.webkit.org/show_bug.cgi?id=60581

        Chromium already handles zeroing textures upon creation, so don't
        bother zeroing them in WebKit, as that causes some unnecessary memcpys
        of zeros.

        No new tests as functionality is the same.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::texImage2DBase):
        * platform/graphics/GraphicsContext3D.cpp:
        (WebCore::GraphicsContext3D::texImage2DResourceSafe):
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/gtk/GraphicsContext3DGtk.cpp:
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        * platform/graphics/mac/GraphicsContext3DMac.mm:
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3D::GraphicsContext3D):

2011-05-11  Simon Fraser  <simon.fraser@apple.com>

        Attempt to fix Chromium Mac build.

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintSliderThumb):

2011-05-11  Daniel Bates  <dbates@rim.com>

        Reviewed by Antonio Gomes.

        [Qt] Extract code to set mouse event modifiers into common function
        https://bugs.webkit.org/show_bug.cgi?id=60649

        Consolidate code to set the keyboard modifiers for a mouse event into a common
        function that can be used by both PlatformMouseEvent(QGraphicsSceneMouseEvent*, int clickCount)
        and PlatformMouseEvent(QInputEvent*, int clickCount) so as to remove duplicate code.

        No functionality was changed. So, no new tests.

        * platform/qt/PlatformMouseEventQt.cpp:
        (WebCore::mouseEventModifiersFromQtKeyboardModifiers): Added.
        (WebCore::PlatformMouseEvent::PlatformMouseEvent): Modified to call mouseEventModifiersFromQtKeyboardModifiers().

2011-05-11  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Eric Seidel.

        Switch RenderBoxModelObject::paintBorder to use IntRect instead of four ints
        https://bugs.webkit.org/show_bug.cgi?id=60591

        Switching RenderBoxModelObject::paintBorder to use IntRect instead of four ints representing a rect.

        No new tests since there is no functionality change.

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paintBoxDecorations):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintBoxDecorationsWithSize):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintBorder):
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::paintBoxDecorations):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::paintBoxDecorations):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::paintBoxDecorations):

2011-05-11  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r86255.
        http://trac.webkit.org/changeset/86255
        https://bugs.webkit.org/show_bug.cgi?id=60660

        REGRESSION (r86255): Lots of tests crashing in
        CFWriteStreamCreateWithAllocatedBuffers on Windows 7 Release
        (WebKit2 Tests) (Requested by aroben on #webkit).

        * platform/network/ResourceHandle.h:
        * platform/network/cf/CookieStorageCFNet.cpp:
        (WebCore::currentCookieStorage):
        (WebCore::defaultCookieStorage):
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::willSendRequest):
        (WebCore::makeFinalRequest):
        (WebCore::ResourceHandle::willSendRequest):
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::doUpdatePlatformRequest):

2011-05-11  Sam Weinig  <sam@webkit.org>

        Reviewed by Eric Seidel.

        Frequent crashes beneath WebCore::ScriptElement::prepareScript
        https://bugs.webkit.org/show_bug.cgi?id=60559

        * html/parser/HTMLScriptRunner.cpp:
        (WebCore::HTMLScriptRunner::runScript):
        Add null check and explanation that we are keeping the ASSERT to help
        track down the cause and produce a test.

2011-05-11  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Texmap][Qt] Upstream texture-mapper changes from Qt's WebKit2 branch
        https://bugs.webkit.org/show_bug.cgi?id=60439

        Patch 5/12: Implement the new TextureMapper functions for the Qt backend.
        This allow non-rectangular clipping, some stub functions, and getting a unique
        id for an image.

        No new tests. Tests in LayoutTests/compositing cover this.

        * platform/graphics/qt/TextureMapperQt.cpp:
        (WebCore::TextureMapperQt::beginClip):
        (WebCore::TextureMapperQt::endClip):
        (WebCore::TextureMapperQt::viewportSize):
        (WebCore::TextureMapperQt::setGraphicsContext):
        (WebCore::TextureMapperQt::graphicsContext):
        (WebCore::TextureMapperQt::drawTexture):
        (WebCore::TextureMapperQt::beginPainting):
        (WebCore::TextureMapperQt::endPainting):
        (WebCore::RGBA32PremultimpliedBufferQt::beginPaint):
        (WebCore::uidForImage):
        * platform/graphics/qt/TextureMapperQt.h:

2011-05-11  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Texmap] Upstream texture-mapper changes from Qt's WebKit2 branch
        https://bugs.webkit.org/show_bug.cgi?id=60439

        Patch 3/12: TextureMapper shouldn't depend on OpenGL, but rather only allow the GL backend when
        OpenGL is present.

        No new tests. This is a build fix.

        * WebCore.pri:
        * WebCore.pro:

2011-05-11  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Texmap][Qt] Upstream texture-mapper changes from Qt's WebKit2 branch
        https://bugs.webkit.org/show_bug.cgi?id=60439

        Patch 2/12: Add a few functions to the TextureMapper API, allowing:
        1. an entry/exit point for painting (beginPaint/endPaint)
        2. Clipping with a matrix, since we use stencil instead of scissors
        3. Draw a texture directly with an ID
        4. Remove offset, since we're using real tiling
        5. numberOfBytes calculation for textures, for memory management

        No new tests. Tests in LayoutTests/compositing test this.

        * platform/graphics/texmap/TextureMapper.h:
        (WebCore::BitmapTexture::destroy):
        (WebCore::BitmapTexture::allowOfflineTextureUpload):
        (WebCore::BitmapTexture::bpp):
        (WebCore::BitmapTexture::numberOfBytes):
        (WebCore::TextureMapper::viewportSize):
        (WebCore::TextureMapper::setViewportSize):
        (WebCore::TextureMapper::allowPartialUpdates):
        (WebCore::TextureMapper::isOpenGLBacked):
        (WebCore::TextureMapper::setTransform):
        (WebCore::TextureMapper::transform):
        (WebCore::TextureMapper::beginPainting):
        (WebCore::TextureMapper::endPainting):

2011-05-11  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Texmap][Qt] Upstream texture-mapper changes from Qt's WebKit2 branch
        https://bugs.webkit.org/show_bug.cgi?id=60439

        Patch 1/12: Change the TextureMapperPlatformLayer API to allow a 3D-context or a
        media player to decide how to paint into the TextureMapper, rather than mandate specific
        types of platform layers.

        No new tests. Tests in LayoutTests/compositing test this.

        * platform/graphics/GraphicsLayer.h:
        * platform/graphics/texmap/TextureMapperPlatformLayer.h:

2011-05-11  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler.

        Flesh out RenderLayer's ScrollableArea implementation a little more
        https://bugs.webkit.org/show_bug.cgi?id=60593

        Override a few more ScrollableArea methods on RenderLayer
        as a baby-step towards animating overflow div scrolling.

        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::visibleContentRect):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollPosition):
        (WebCore::RenderLayer::minimumScrollPosition):
        (WebCore::RenderLayer::maximumScrollPosition):
        (WebCore::RenderLayer::visibleContentRect):
        (WebCore::RenderLayer::overhangAmount):
        (WebCore::RenderLayer::didCompleteRubberBand):
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::shouldSuspendScrollAnimations):

2011-05-11  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt.

        <rdar://problem/9421781> Slider thumb draws upside-down in WebKit2
        <rdar://problem/9418025> Slider thumb has odd appearance

        Fix two issues drawing the slider thumb.
        
        To fix <rdar://problem/9421781>, if we detect that we're in WebKit2
        by virtual of the FrameView not having a documentView, then flip
        the graphics context.

        To fix <rdar://problem/9418025>, we call -drawInteriorWithFrame:inView:
        rather than -drawWithFrame:inView: so that AppKit doesn't draw a section
        of track behind the thumb.

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintSliderThumb):

2011-05-11  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Steve Falkenburg.

        [Windows WebKit2] Use cookies set in WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=60274

        Share the default storage session between the UI and Web Processes.

        * platform/network/cf/CookieStorageCFNet.cpp:
        (WebCore::defaultSessionCookieStorage):
        Keep track of the default storage session cookie storage.
        (WebCore::currentCookieStorage):
        Call defaultCookieStorage to get the default cookie storage.
        (WebCore::defaultCookieStorage):
        If there is a default storage session cookie storage, prefer that over getting the default
        cookie storage. In the Web Process, asking CFNetwork for the default cookie storage directly
        without specifying a storage session will not get the cookie storage being shared by the UI
        and Web Processes.

        * platform/network/ResourceHandle.h:
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::willSendRequest):
        Make sure to set the current storage session on any requests used by the Web
        Process before CFNetwork has to do anything with them, in order for CFNetwork to avoid
        doing anything with the Web Process's default storage session (which is not the one shared
        with the UI Process).
        (WebCore::makeFinalRequest):
        Ditto.
        (WebCore::ResourceHandle::willSendRequest):
        Ditto.
        (WebCore::ResourceHandle::currentStorageSession):
        If there is a Private Browsing storage session, return that.
        If not, on Windows return the default storage session that is being shared with the UI
        Process and on Mac return 0.
        (WebCore::defaultCFURLStorageSession):
        (WebCore::ResourceHandle::setDefaultStorageSession):
        (WebCore::ResourceHandle::defaultStorageSession):

        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        Make sure to set the current storage session on any requests used by the Web
        Process before CFNetwork has to do anything with them, in order for CFNetwork to avoid
        doing anything with the Web Process's default storage session (which is not the one shared
        with the UI Process).

2011-05-11  Martin Robinson  <mrobinson@igalia.com>

        Try once more to fix the WinCairo build.

        * platform/graphics/cairo/CairoUtilities.h: Include GraphicsTypes.h with a relative
        include rather than a system include.

2011-05-11  Sam Weinig  <sam@webkit.org>

        Reviewed by Eric Seidel.

        Stop including Console.h just to get Console enum types
        https://bugs.webkit.org/show_bug.cgi?id=60607

        Move MessageSource, MessageType and MessageLevel into its own
        header and cleanup surrounding classes.

        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCustomXPathNSResolver.cpp:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/v8/V8Proxy.cpp:
        * dom/ScriptExecutionContext.h:
        * html/HTMLFormElement.cpp:
        * html/parser/XSSFilter.cpp:
        * inspector/ConsoleMessage.h:
        * inspector/InjectedScriptHost.h:
        * inspector/InspectorAgent.h:
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorFrontendHost.h:
        * inspector/InspectorInstrumentation.cpp:
        * inspector/InspectorInstrumentation.h:
        * loader/EmptyClients.h:
        * loader/FrameLoader.cpp:
        * loader/MainResourceLoader.cpp:
        * loader/appcache/ApplicationCacheGroup.cpp:
        * page/ChromeClient.h:
        * page/Console.cpp:
        (WebCore::Console::~Console):
        * page/Console.h:
        * page/ConsoleTypes.h: Added.
        * page/ContentSecurityPolicy.cpp:
        * page/Geolocation.h:
        * workers/WorkerReportingProxy.h:
        * xml/XMLHttpRequest.cpp:

2011-05-11  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, rolling out r85650.
        http://trac.webkit.org/changeset/85650
        https://bugs.webkit.org/show_bug.cgi?id=59983

        Triggers m_numNodeListCaches > 0 assert in gc-heavy sites.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::childrenChanged):
        * dom/Node.cpp:
        (WebCore::Node::~Node):
        (WebCore::Node::setDocument):
        (WebCore::Node::setTreeScopeRecursively):
        (WebCore::Node::childNodes):
        (WebCore::Node::registerDynamicNodeList):
        (WebCore::Node::unregisterDynamicNodeList):
        (WebCore::Node::notifyLocalNodeListsAttributeChanged):
        (WebCore::Node::notifyLocalNodeListsChildrenChanged):
        (WebCore::Node::getElementsByTagName):
        (WebCore::Node::getElementsByTagNameNS):
        (WebCore::Node::getElementsByName):
        (WebCore::Node::getElementsByClassName):
        * dom/Node.h:
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::labels):

2011-05-11  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Darin Adler.

        Video track sometimes fails to draw.
        https://bugs.webkit.org/show_bug.cgi?id=60635
        <rdar://problem/9281951>

        No new tests, covered by existing pixel tests.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::loadResource): Set display mode to "Unknown" to force a 
            recalculation, and media engine notification, the next time the state machine runs.

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

        WinCE build fixes for strict PassOwnPtr

        * platform/graphics/wince/SharedBitmap.cpp:
        (WebCore::SharedBitmap::createHandle):
        (WebCore::SharedBitmap::clipBitmap):
        Use nullptr instead of 0.

        * platform/graphics/wince/SimpleFontDataWinCE.cpp: Keep LOOSE_PASS_OWN_PTR turned on for
        this file until SimpleFontData::scaledFontData is dealt with on all platforms.

        * platform/text/wince/TextCodecWinCE.cpp:
        (WebCore::newTextCodecWinCE): Use adoptPtr.

2011-05-11  Chang Shu  <cshu@webkit.org>

        Reviewed by Antonio Gomes.

        [Qt] Tab not working in editing/inserting/typing-tab-designmode-forms.html
        https://bugs.webkit.org/show_bug.cgi?id=60477

        PlatformKeyboardEvent.m_text should be set to "\t" instead of leaving as null.
        The value is checked at EventHandler.cpp:2527 (r86166).

        Function keyTextForKeyEvent is partially implemented and can be enhanced in
        a need-base.

        * platform/qt/PlatformKeyboardEventQt.cpp:
        (WebCore::keyTextForKeyEvent):
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):

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

        Use case-insensitive comparisons when checking plugin filenames on Windows

        Windows paths are nearly always case-insensitive.

        I couldn't think of a good way to test this.

        Fixes <http://webkit.org/b/60633> WebKit1 loads Windows Presentation Foundation plugin, but
        should not

        Reviewed by Steve Falkenburg.

        * plugins/win/PluginPackageWin.cpp:
        (WebCore::PluginPackage::isPluginBlacklisted): Use equalIgnoringCase instead of == when
        checking plugin filenames.

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

        Turn on strict PassOwnPtr on Windows

        Fixes <http://webkit.org/b/60632> Windows should build with strict PassOwnPtr enabled

        Reviewed by Adam Barth.

        * platform/graphics/win/SimpleFontDataWin.cpp: Keep LOOSE_PASS_OWN_PTR turned on for this
        file until SimpleFontData::scaledFontData is dealt with on all platforms.

2011-05-11  Julien Chaffraix  <jchaffraix@webkit.org>

        Reviewed by Geoffrey Garen.

        XPathResult should keep its node set's JS wrappers alive
        https://bugs.webkit.org/show_bug.cgi?id=34231

        The change added a custom mark function for JSC. V8 was already properly
        marking the nodes so no change were done on the V8 side.

        Tests: fast/xpath/xpath-iterator-result-should-mark-its-nodeset.html
               fast/xpath/xpath-other-nodeset-result-should-mark-its-nodeset.html
               fast/xpath/xpath-result-eventlistener-crash.html
               fast/xpath/xpath-snapshot-result-should-mark-its-nodeset.html

        * Android.jscbindings.mk:
        * GNUmakefile.list.am:
        * UseJSC.cmake:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        Added the new file to our build systems.

        * bindings/js/JSXPathResultCustom.cpp: Added.
        (WebCore::JSXPathResult::markChildren): Added code to mark the
        XPathResult snapshot's nodes.
        * xml/XPathResult.h:
        (WebCore::XPathResult::value): Exposed this getter so that we can
        mark our XPathValue.
        * xml/XPathResult.idl: Told the IDL parser that we now need
        a custom mark function.

2011-05-04  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Martin Robinson.

        [Gtk+] deadlock in gstreamer video player when exiting fullscreen
        https://bugs.webkit.org/show_bug.cgi?id=58548

        Block data flow towards the pipeline branch to remove to avoid
        potential deadlocks during the PAUSED->READY transitions of the
        elements to remove.

        * platform/graphics/gstreamer/GStreamerGWorld.cpp:
        (WebCore::GStreamerGWorld::exitFullscreen):

2011-05-11  Kent Tamura  <tkent@chromium.org>

        Reviewed by Hajime Morita.

        The position of validation message bubble is wrong for non text fields.
        https://bugs.webkit.org/show_bug.cgi?id=60341

        Tests: fast/forms/validation-message-on-checkbox.html
               fast/forms/validation-message-on-listbox.html
               fast/forms/validation-message-on-menulist.html
               fast/forms/validation-message-on-radio.html
               fast/forms/validation-message-on-textarea.html

        * css/html.css:
        (::-webkit-validation-bubble-message):
          Add white-space:normal in order not to inherit white-space:pre for <select>.
        * html/ValidationMessage.cpp:
        (WebCore::adjustBubblePosition):
          Adjust the bubble position.
          - The top of the bubble should be same as the bottom of the target control.
          - The left of the bubble should be same as the left of the target control.
            But If the left+32 is larger than the center of the target control,
            left+32 should be at the center of the target control.
            But the left position should not be less than 0.
        (WebCore::ValidationMessage::buildBubbleTree): Call adjustBubblePosition().

2011-05-11  Emil A Eklund  <eae@chromium.org>

        Reviewed by Eric Seidel.

        Convert RenderFlexibleBox to use IntPoint/IntSize instead of x,y/w,h pairs
        https://bugs.webkit.org/show_bug.cgi?id=60592

        Refactoring, covered by existing tests.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock):
        (WebCore::RenderFlexibleBox::layoutHorizontalBox):
        (WebCore::RenderFlexibleBox::layoutVerticalBox):
        (WebCore::RenderFlexibleBox::placeChild):
        * rendering/RenderFlexibleBox.h:

2011-05-10  Ilya Tikhonovsky  <loislo@chromium.org>

        Unreviewed buildfix for strict OwnPtr.

        * platform/audio/AudioBus.cpp:
        (WebCore::AudioBus::createBufferFromRange):
        (WebCore::AudioBus::createBySampleRateConverting):
        (WebCore::AudioBus::createByMixingToMono):
        * platform/audio/HRTFElevation.cpp:
        (WebCore::HRTFElevation::createForSubject):
        (WebCore::HRTFElevation::createByInterpolatingSlices):
        * platform/audio/Panner.cpp:
        (WebCore::Panner::create):
        * platform/audio/Reverb.cpp:
        (WebCore::Reverb::initialize):
        * platform/audio/chromium/AudioBusChromium.cpp:
        (WebCore::AudioBus::loadPlatformResource):
        (WebCore::createBusFromInMemoryAudioFile):

2011-05-10  Adam Barth  <abarth@webkit.org>

        Build fix for font data madness.  I've had to whitelist this on several
        ports.  They need to all be fixed at once.

        * platform/graphics/chromium/SimpleFontDataChromiumWin.cpp:

2011-05-10  David Kilzer  <ddkilzer@apple.com>

        BUILD FIX for !ENABLE(TEXT_CARET) after r86039

        * editing/FrameSelection.cpp:
        (WebCore::DragCaretController::paintDragCaret): Added
        UNUSED_PARAM(frame) for !ENABLE(TEXT_CARET).

2011-05-10  James Robinson  <jamesr@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] Clean up setLayerRenderer() calls in LayerRendererChromium
        https://bugs.webkit.org/show_bug.cgi?id=60524

        This refactors the way LayerRendererChromium calls setLayerRenderer on its layers in a few ways to clean things
        up:

        *) Move the pre-paint call to setLayerRenderer from updatePropertiesAndRenderSurfaces() to paintLayerContents().
            updatePropertiesAndRenderSurfaces() does too much and the layer renderer pointer only has to be up to date to do
            the actual paint. Longer term we won't need to call this at all in order to call paint and this call will just
            go away.
        *) Tweaks updateCompositorResourcesRecursive() to be slightly shorter and less error-prone.
        *) Explicitly set the LayerRendererChromium for each layer in the tree when transfering the root layer (used
            during lost context).  LayerChromium::setLayerRenderer checks if the new LayerRendererChromium is different
            by comparing the pointer value to the old one.  This check will be incorrect if there are multiple lost
            contexts between a setLayerRenderer() call and a new LayerRendererChromium happens to be allocated at the
            same address as the old one.  An explicit call to setLayerRenderer() for every layer in the tree fixes this
            since when this function is called the new and old LayerRendererChromium are still live and so they cannot
            live at the same address.

        The first two changes are purely refactors and do not change behavior.  The third issue can't be tested via a
        layout test directly as we don't have a way to induce a lost context on the compositor in a layout test.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::paintLayerContents):
        (WebCore::LayerRendererChromium::clearLayerRendererRecursive):
        (WebCore::LayerRendererChromium::transferRootLayer):
        (WebCore::LayerRendererChromium::updatePropertiesAndRenderSurfaces):
        (WebCore::LayerRendererChromium::updateCompositorResourcesRecursive):
        * platform/graphics/chromium/LayerRendererChromium.h:

2011-05-10  Anton D'Auria  <adauria@apple.com>

        Reviewed by David Levin.

        StorageTracker should report actual local storage usage on disk
        https://bugs.webkit.org/show_bug.cgi?id=60558

        Tests: storage/domstorage/localstorage/storagetracker/storage-tracker-6-create.html
               storage/domstorage/localstorage/storagetracker/storage-tracker-7-usage.html

        Use SQLiteFileSystem::getDatabaseFileSize to get actual usage by
        an origin's local storage db. Factored out code that retrieves
        path of local storage db.

        * WebCore.exp.in: Sorted alphabetically StorageTracker's mangled
        function names.
        * storage/StorageTracker.cpp:
        (WebCore::StorageTracker::syncDeleteOrigin): Uses helper function
        to get path of origin's db
        (WebCore::StorageTracker::databasePathForOrigin): New helper function.
        that gets the path of an origin's local storage db from StorageTracker.
        (WebCore::StorageTracker::diskUsageForOrigin): New API.
        * storage/StorageTracker.h:

2011-05-10  Anton D'Auria  <adauria@apple.com>

        Reviewed by Alexey Proskuryakov.

        Add ApplicationCache API to get disk usage per origin
        https://bugs.webkit.org/show_bug.cgi?id=57127

        ApplicationCacheStorage already provides an API to get per-origin
        disk usage. This should be exposed through WebCore::ApplicationCache
        to not be dependent on storage implementation.

        Test: http/tests/appcache/origin-usage.html

        * WebCore.exp.in:
        * loader/appcache/ApplicationCache.cpp:
        (WebCore::ApplicationCache::diskUsageForOrigin):
        * loader/appcache/ApplicationCache.h:

2011-05-10  Pratik Solanki  <psolanki@apple.com>

        Reviewed by Alexey Proskuryakov.

        Protect self in [WebCoreResourceHandleAsDelegate connection:didReceiveDataArray:]
        https://bugs.webkit.org/show_bug.cgi?id=60594
        <rdar://problem/9203259>

        No tests since we don't have any bots testing CFNETWORK_DATA_ARRAY_CALLBACK.

        * platform/network/mac/ResourceHandleMac.mm:
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveDataArray:]): The didReceiveData()
        callback on client can result in the load being cancelled. This results in the delegate
        (self) being freed.  Protect self during the loop so we can check for m_handle and safely
        return without crashing.

2011-05-10  Chris Guillory  <chris.guillory@google.com>

        Reviewed by James Robinson.

        [ChromiumWin] Font::drawComplexText calls EndPlatformPaint without calling BeginPlatformPaint.
        https://bugs.webkit.org/show_bug.cgi?id=59848

        To test this I plan to make the non-printing device (BitmapPlatformDevice) fail
        when EndPlatformPaint doesn't matchup with BeginPlatformPaint.
        http://codereview.chromium.org/6949012/ 

        * platform/graphics/chromium/FontChromiumWin.cpp:
        (WebCore::Font::drawComplexText):

2011-05-10  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r86195.
        http://trac.webkit.org/changeset/86195
        https://bugs.webkit.org/show_bug.cgi?id=60597

        LayerOffset is a really bad name (Requested by smfr on
        #webkit).

        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * page/FrameView.cpp:
        (WebCore::FrameView::paintScrollCorner):
        * platform/graphics/LayerOffset.h: Removed.
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::paintCustomHighlight):
        * rendering/InlineTextBox.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintCustomHighlight):
        * rendering/RenderBox.h:
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintReplaced):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintScrollCorner):
        (WebCore::RenderLayer::paintResizer):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::paint):
        * rendering/RenderObject.h:
        * rendering/RenderScrollbar.cpp:
        (WebCore::RenderScrollbar::paintPart):
        * rendering/RenderScrollbarPart.cpp:
        (WebCore::RenderScrollbarPart::paintIntoRect):
        * rendering/RenderScrollbarPart.h:
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::paintObject):
        (WebCore::RenderTable::paintMask):
        * rendering/RenderTable.h:
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::paint):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::paintCustomHighlight):
        (WebCore::RootInlineBox::paint):
        * rendering/RootInlineBox.h:

2011-05-10  Emil A Eklund  <eae@chromium.org>

        Reviewed by Eric Seidel.

        Convert x,y and width,height pairs to IntPoint and IntSize for RenderLayer
        https://bugs.webkit.org/show_bug.cgi?id=60409

        Convert RenderLayer to use IntPoint for x,y pairs and IntSize for offsets and sizes.

        Refactoring, covered by existing tests.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::RenderLayer::updateLayerPosition):
        (WebCore::RenderLayer::scrollTo):
        (WebCore::RenderLayer::visibleHeight):
        (WebCore::RenderLayer::visibleWidth):
        (WebCore::RenderLayer::scrollWidth):
        (WebCore::RenderLayer::scrollHeight):
        (WebCore::RenderLayer::computeScrollDimensions):
        (WebCore::RenderLayer::updateScrollInfoAfterLayout):
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::x):
        (WebCore::RenderLayer::y):
        (WebCore::RenderLayer::setLocation):
        (WebCore::RenderLayer::width):
        (WebCore::RenderLayer::height):
        (WebCore::RenderLayer::size):
        (WebCore::RenderLayer::setWidth):
        (WebCore::RenderLayer::setHeight):
        (WebCore::RenderLayer::scrolledContentOffset):
        (WebCore::RenderLayer::scrollXOffset):
        (WebCore::RenderLayer::scrollYOffset):
        (WebCore::RenderLayer::scrollOffset):
        (WebCore::RenderLayer::scrollToXOffset):
        (WebCore::RenderLayer::scrollToYOffset):
        (WebCore::RenderLayer::relativePositionOffset):

2011-05-10  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Eric Seidel.

        Create LayerOffset class
        https://bugs.webkit.org/show_bug.cgi?id=60490

        Adding a LayerOffset class that will replace existing usage of tx/ty.
        LayerOffset is necessary since these values are commonly used as both
        a size and a point. Updating paintIntoRect to use this new class.

        No new tests since this doesn't change any behavior.

        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * page/FrameView.cpp:
        (WebCore::FrameView::paintScrollCorner):
        * platform/graphics/LayerOffset.h: Added.
        (WebCore::LayerOffset::LayerOffset):
        (WebCore::LayerOffset::x):
        (WebCore::LayerOffset::y):
        (WebCore::LayerOffset::setX):
        (WebCore::LayerOffset::setY):
        (WebCore::LayerOffset::toSize):
        (WebCore::LayerOffset::toPoint):
        (WebCore::operator+=):
        (WebCore::operator-=):
        (WebCore::operator+):
        (WebCore::operator-):
        (WebCore::operator==):
        (WebCore::operator!=):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintScrollCorner):
        (WebCore::RenderLayer::paintResizer):
        * rendering/RenderScrollbar.cpp:
        (WebCore::RenderScrollbar::paintPart):
        * rendering/RenderScrollbarPart.cpp:
        (WebCore::RenderScrollbarPart::paintIntoRect):
        * rendering/RenderScrollbarPart.h:

2011-05-10  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        Make member variables of CaretBase private
        https://bugs.webkit.org/show_bug.cgi?id=60454

        Moved m_absCaretBounds, m_absoluteCaretRepaintBounds, m_absCaretBoundsDirty, and m_caretPaint back
        from CaretBase to FrameSelection because they are only used in FrameSelection, and made the rest
        of member variables in CaretBase private.

        * editing/FrameSelection.cpp:
        (WebCore::CaretBase::CaretBase): Takes CaretVisibility as an argument.
        (WebCore::DragCaretController::DragCaretController):
        (WebCore::FrameSelection::FrameSelection): Initializes m_absCaretBoundsDirty and m_caretPaint
        now that they are part of FrameSelection again.
        (WebCore::DragCaretController::setCaretPosition):
        (WebCore::FrameSelection::setSelection):
        (WebCore::CaretBase::clearCaretRect): Extracted from updateCaretRect.
        (WebCore::CaretBase::updateCaretRect): No longer clears caret; all call sites (namely setCaretPosition
        and localCaretRect) that used to call updateCaretRect now need to call clearCaretRect or updateCaretRect
        based on some conditions.
        (WebCore::FrameSelection::localCaretRect):
        (WebCore::CaretBase::caretRepaintRect):
        (WebCore::FrameSelection::recomputeCaretRect):
        (WebCore::FrameSelection::paintCaret): Only calls CaretBase::paintCaret if m_caretPaint is true.
        (WebCore::CaretBase::paintCaret): Removed an early exit for when m_caretPaint is false since m_caretPaint
        has been moved from CaretBase to FrameSelection.
        (WebCore::FrameSelection::focusedOrActiveStateChanged):
        (WebCore::FrameSelection::updateAppearance):
        (WebCore::FrameSelection::setCaretVisibility): Takes CaretVisibility instead of bool.
        (WebCore::FrameSelection::caretBlinkTimerFired):
        * editing/FrameSelection.h:
        (WebCore::CaretBase::fastLocalCaretRect): Added; replaces localCaretRectForPainting.
        (WebCore::CaretBase::shouldUpdateCaretRect): Added.
        (WebCore::CaretBase::setCaretRectNeedsUpdate): Added.
        (WebCore::CaretBase::setCaretVisibility): Added.
        (WebCore::CaretBase::caretIsVisible): Added.
        (WebCore::FrameSelection::setCaretRectNeedsUpdate): Added.

2011-05-10  James Robinson  <jamesr@chromium.org>

        Reviewed by Nate Chapin.

        [chromium] Use parent/child terms for compositor tree structures consistently instead of superlayer/sublayer
        https://bugs.webkit.org/show_bug.cgi?id=60588

        GraphicsLayer uses parent/child terminology for tree structure, as does CCLayerImpl.  LayerChromium was using
        superlayer/sublayer terms, inherited from this code's branching from the platform/graphics/win/CACF code.  The
        mixed terminology is confusing and parent/child is more common, so this unifies everything to use parent/child.

        No new tests, refactor only.

        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::setChildren):
        (WebCore::GraphicsLayerChromium::addChild):
        (WebCore::GraphicsLayerChromium::addChildAtIndex):
        (WebCore::GraphicsLayerChromium::addChildBelow):
        (WebCore::GraphicsLayerChromium::addChildAbove):
        (WebCore::GraphicsLayerChromium::replaceChild):
        (WebCore::GraphicsLayerChromium::removeFromParent):
        (WebCore::GraphicsLayerChromium::setContentsToImage):
        (WebCore::GraphicsLayerChromium::setContentsToCanvas):
        (WebCore::GraphicsLayerChromium::setContentsToMedia):
        (WebCore::GraphicsLayerChromium::hostLayerForChildren):
        (WebCore::GraphicsLayerChromium::layerForParent):
        (WebCore::GraphicsLayerChromium::updateChildList):
        (WebCore::GraphicsLayerChromium::updateLayerPreserves3D):
        (WebCore::GraphicsLayerChromium::setupContentsLayer):
        * platform/graphics/chromium/GraphicsLayerChromium.h:
        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::LayerChromium):
        (WebCore::LayerChromium::~LayerChromium):
        (WebCore::LayerChromium::addChild):
        (WebCore::LayerChromium::insertChild):
        (WebCore::LayerChromium::removeFromParent):
        (WebCore::LayerChromium::removeChild):
        (WebCore::LayerChromium::replaceChild):
        (WebCore::LayerChromium::indexOfChild):
        (WebCore::LayerChromium::rootLayer):
        (WebCore::LayerChromium::removeAllChildren):
        (WebCore::LayerChromium::setChildren):
        (WebCore::LayerChromium::parent):
        (WebCore::LayerChromium::dumpLayer):
        * platform/graphics/chromium/LayerChromium.h:
        (WebCore::LayerChromium::children):
        (WebCore::LayerChromium::setParent):
        (WebCore::LayerChromium::numChildren):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::updatePropertiesAndRenderSurfaces):
        (WebCore::LayerRendererChromium::updateCompositorResourcesRecursive):
        (WebCore::LayerRendererChromium::dumpRenderSurfaces):
        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        (WebCore::CCLayerImpl::parent):
        (WebCore::CCLayerImpl::descendantsDrawsContent):
        * platform/graphics/chromium/cc/CCLayerImpl.h:

2011-05-10  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Darin Adler.

        Switch RenderBoxModelObject::paintNinePieceImage to use IntRect instead of four ints
        https://bugs.webkit.org/show_bug.cgi?id=60586

        Switch paintNinePieceImage to take an IntRect instead of four ints representing an IntRect!

        No new tests as this is simply refactoring.

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paintMask):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintMaskImages):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintNinePieceImage):
        (WebCore::RenderBoxModelObject::paintBorder):
        * rendering/RenderBoxModelObject.h:

2011-05-05  Jer Noble  <jer.noble@apple.com>

        Reviewed by Maciej Stachowiak.

        Removing the full screen element via parent.innerHTML="" does not result in a webkitfullscreenchange event.
        https://bugs.webkit.org/show_bug.cgi?id=60278

        Handle the removal of a full screen element from within Node::willRemove() instead
        of Document::nodeWillBeRemoved().  The new function Document::fullScreenElementWillBeRemoved() will
        be called by Node::willRemove() to handle those changes which used to occur in nodeWillBeRemoved().

        Test: fullscreen/full-screen-remove-children.html

        * dom/Document.cpp:
        (WebCore::Document::nodeWillBeRemoved): Removed the code checking for the full screen element.
        (WebCore::Document::fullScreenElementWillBeRemoved): Added, moved from nodeWillBeRemoved.
        * dom/Document.h:
        * dom/Node.cpp:
        (WebCore::Node::willRemove): Check to see if this is the current full screen element.

2011-05-10  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=60582
        Crash switching overlay/non-overlay scrollbar preference still possible
        -and corresponding-
        <rdar://problem/9323983>

        This patch prevents any work from being done on pages that are in the page cache 
        when the preference is switched.

        When the Document is going into or coming out of the page cache, have the 
        FrameView inactivate or activate the Page's ScrollAnimators as appropriate.
        * dom/Document.cpp:
        (WebCore::Document::setInPageCache):

        Iterate through the Page's ScrollableAreas setting the active state of the 
        ScrollAnimators.
        * page/FrameView.cpp:
        (WebCore::FrameView::setAnimatorsAreActive):
        * page/FrameView.h:

        ScrollAnimator has a new bit -- m_isActive. Right now m_isActive is always true 
        unless the ScrollAnimator belongs to a ScrollableArea that is in the page cache.
        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::ScrollAnimator):
        * platform/ScrollAnimator.h:
        (WebCore::ScrollAnimator::setIsActive):
        (WebCore::ScrollAnimator::isActive):

        ScrollAnimatorMac has a new bit -- m_needsScrollerStyleUpdate. This is set to true 
        when a ScrollAnimator is inactive and has received the 
        updateScrollerStyleForNewRecommendedScrollerStyle delegate notification. It 
        prevents any work from being done for this delegate until the ScrollAnimator 
        becomes active again.
        * platform/mac/ScrollAnimatorMac.h:
        (WebCore::ScrollAnimatorMac::setNeedsScrollerStyleUpdate):
        (WebCore::ScrollAnimatorMac::needsScrollerStyleUpdate):

        This delegate method has been re-factored into ScrollAnimatorMac:: 
        updateScrollerStyle(). This way the meat of the function can be called by both the 
        delegate and ScrollAnimatorMac::setIsActive()
        * platform/mac/ScrollAnimatorMac.mm:
        (-[ScrollbarPainterControllerDelegate scrollerImpPair:updateScrollerStyleForNewRecommendedScrollerStyle:]):
        (WebCore::ScrollAnimatorMac::ScrollAnimatorMac):

        This override of ScrollAnimator::setIsActive() calls the base class, and then calls updateScrollerStyle() if needsScrollerStyleUpdate() is set to true.
        (WebCore::ScrollAnimatorMac::setIsActive):

        This is mostly the same as the old delegate method. Key differences are that if 
        the ScrollAnimator is inactive, we now setNeedsScrollerStyleUpdate(true) and 
        return early. We also only call scrollableArea()->scrollbarStyleChanged() if 
        needsScrollerStyleUpdate() is false since in the true case when we are restoring 
        from the page cache, this would be duplicated work.
        (WebCore::ScrollAnimatorMac::updateScrollerStyle):

        New WKSystemInterface function is needed to retrieve the scrollbar style.
        * WebCore.exp.in:
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

2011-05-10  Adam Barth  <abarth@webkit.org>

        Reviewed by David Levin.

        Enable strict PassOwnPtr on Chromium
        https://bugs.webkit.org/show_bug.cgi?id=60502

        Technically there are a few bits in here that weren't reviewed by Dave,
        but close enough for government work.  This patch all fixes  the
        remaining strict PassOwnPtr violations on Chromium Linux.

        * platform/graphics/chromium/PlatformCanvas.cpp:
        (WebCore::PlatformCanvas::resize):
        * platform/graphics/chromium/SimpleFontDataLinux.cpp:
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::setSharedGraphicsContext3D):

2011-05-10  Brady Eidson  <beidson@apple.com>

        Reviewed by Alice Liu.

        <rdar://problem/9343191> and https://bugs.webkit.org/show_bug.cgi?id=60572
        REGRESSION - Canon On-screen Manual.app crashes after a search

        No new tests - There's no way to reproduce the truly bizarre things Canon does in their app
        that would reasonably fit in to our testing infrastructure.

        In r66577 a new behavior was added where changing the "setLoadsImagesAutomatically" setting to "true" would immediately
        start loading those images that had been disabled.

        If this happens while a WebView is being dealloc'ed, and we don't know the WebView is being dealloc'ed, these new loads
        can cause crashes downstream when the WebView memory has actually been free'd.

        One example where this can happen is in Mac apps that subclass WebView then do work in their overridden dealloc methods.
        And the Canon Onscreen Manual is one such app.

        Starting these loads synchronously is not important.  By putting it on a 0-delay, properly closing the Page cancels them
        before they have a chance to really start.

        See http://webkit.org/b/60572 for more discussion.


        Add a timer to Settings and instead of calling setLoadsImagesAutomaticallyInAllFrames right
        away when this pref changes, call it on a 0-delay:
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setLoadsImagesAutomatically):
        (WebCore::Settings::loadsImagesAutomaticallyTimerFired):
        * page/Settings.h:

2011-05-10  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK][WebKit2] GTK+ 2.x widget rendering fails after r85480
        https://bugs.webkit.org/show_bug.cgi?id=59990

        No new tests. This is covered by existing pixel tests.

        * platform/gtk/GtkVersioning.c:
        (getGdkDrawableSize): Added this helper method.
        * platform/gtk/GtkVersioning.h: Added helper method declaration.
        * platform/gtk/WidgetRenderingContext.cpp:
        (WebCore::WidgetRenderingContext::WidgetRenderingContext): Call into the helper if
        there is actually a GdkDrawable. If not, disable the sanity check.

2011-05-10  Martin Robinson  <mrobinson@igalia.com>

        Fix the GTK+ WebKit2 build. Add a CredentialsStorage stub for libsoup.

        * GNUmakefile.list.am: Add stub to source list.
        * platform/network/soup/CredentialStorageSoup.cpp: Added.
        (WebCore::CredentialStorage::getFromPersistentStorage):  Added stub.
        (WebCore::CredentialStorage::get):

2011-05-09  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/9354979> REGRESSION (r83070-r83126): This conversation takes 10 seconds to load and makes mail unresponsive
        
        Second attempts at a fix for this bug.  Instead of removing the dirtying (which turned out to be needed in a few cases),
        make dirtyLinesFromChangedChild mark a child as needing layout when it has to recur to the parent.  Because the method already
        aborts the recursion if selfNeedsLayout() is set on the parent, this has the effect of stopping the O(n^2) pathological
        behavior, since you can use the selfNeedsLayout() bit to understand that you've dirtied the lines already.

        * rendering/RenderLineBoxList.cpp:
        (WebCore::RenderLineBoxList::dirtyLinesFromChangedChild):

2011-05-05  Brent Fulgham  <bfulgham@webkit.org> and Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Anders Carlsson.

        [Cairo][WebKit2] Add an implementation of ShareableBitmap for Cairo
        https://bugs.webkit.org/show_bug.cgi?id=60293

        No new tests. This is covered by current pixel tests.

        * platform/graphics/cairo/CairoUtilities.cpp:
        (WebCore::copyCairoImageSurface): Abstract the code from WebCore::ImageBuffer::copyImage
        into this helper which creates a deep copy of a Cairo image surface.
        * platform/graphics/cairo/CairoUtilities.h: Added declaration.
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::copyImage): Use the new helper.
        * platform/graphics/cairo/ImageCairo.cpp: Abstract some of this logic
        into the new drawSurfaceToContext method on PlatformContextCairo.
        (WebCore::BitmapImage::draw):
        * platform/graphics/cairo/PlatformContextCairo.cpp:
        (WebCore::drawPatternToCairoContext): Added.
        (WebCore::PlatformContextCairo::drawSurfaceToContext): Added.
        * platform/graphics/cairo/PlatformContextCairo.h: Added declarations.

2011-05-10  Anders Carlsson  <andersca@apple.com>

        Attempt to fix Qt build.

        * platform/network/qt/CredentialStorageQt.cpp:
        (WebCore::CredentialStorage::get):
        Add stub.

2011-05-10  Kenichi Ishibashi  <bashi@chromium.org>

        Reviewed by Tony Chang.

        REGRESSION(r85013): platform/chromium-linux/fast/text/international/complex-joining-using-gpos.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=60079

        Set resultingNumPoints = 0 so that harfbuzz uses the design coordinate
        value pair.

        * platform/graphics/chromium/HarfbuzzSkia.cpp:
        (WebCore::getOutlinePoint): Just return HB_Err_Ok with resultingNumPoints = 0.

2011-05-10  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Extra sign in required to view video on MobileMe Gallery album
        https://bugs.webkit.org/show_bug.cgi?id=60560
        <rdar://problem/9338693>

        Add symbols required by WebKit2.

        * WebCore.exp.in:

2011-05-10  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Styles sidebar is not updated upon changes in the Resources panel.
        https://bugs.webkit.org/show_bug.cgi?id=60320

        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel):

2011-05-06  Brett Wilson  <brettw@chromium.org>

        Reviewed by Adam Barth.

        Use a File object to store the downloaded file reference rather than
        just the path. This keeps the file and permissions in scope (using the
        already-existing blob system) so the browser won't delete the file
        when the load is complete. Instead, the file will be cleaned up when
        the request objects are deleted.
        https://bugs.webkit.org/show_bug.cgi?id=60281

        * platform/network/chromium/ResourceResponse.cpp:
        (WebCore::ResourceResponse::doPlatformCopyData):
        (WebCore::ResourceResponse::doPlatformAdopt):
        * platform/network/chromium/ResourceResponse.h:
        (WebCore::ResourceResponse::downloadedFile):
        (WebCore::ResourceResponse::setDownloadedFile):

2011-05-10  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Darin Adler.

        Files that load quickly sometimes won't play.
        https://bugs.webkit.org/show_bug.cgi?id=60556
        <rdar://problem/9330567>

        No new tests, this failure is very difficult to reproduce on some machines. The fix was
        verified manually.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::playabilityKnown): Move the call to updateStates
            to dispatchNotification so it is more obvious which state changes call it.
        (WebCore::MediaPlayerPrivateAVFoundation::setNaturalSize): Correct logging typo.
        (WebCore::MediaPlayerPrivateAVFoundation::metadataLoaded): Move updateStates call to 
            dispatchNotification.
        (WebCore::MediaPlayerPrivateAVFoundation::rateChanged): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundation::loadedTimeRangesChanged): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundation::dispatchNotification): Call updateStates after
            processing "size changed" notification so we detect all state changes. Consolidate
            calls to updateStates here.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createVideoLayer): Name the video layer in
            a debug build.

2011-05-10  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Simon Fraser.

        Add containsFloats call to hasOverhangingFloats.
        https://bugs.webkit.org/show_bug.cgi?id=60537

        Test: fast/block/float/no-overhanging-float-crash.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::repaintOverhangingFloats):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::hasOverhangingFloats):

2011-05-10  Alexis Menard  <alexis.menard@openbossa.org>

        Reviewed by Antonio Gomes.

        Warning fix on PluginPackage.cpp.
        https://bugs.webkit.org/show_bug.cgi?id=60371

        Warning fix on conversion from time_t to unsigned on Linux with GCC 4.6.0.
        Let's use a struct rather than an array so we can pass everything to StringHasher.

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

2011-05-10  Andreas Kling  <andreas.kling@nokia.com>

        Rubber-stamped by Csaba Osztrogonác.

        [Qt] Disable HAVE_QRAWFONT until Qt API stabilizes.
        https://bugs.webkit.org/show_bug.cgi?id=60551

        * WebCore.pro: Disable the line that enables HAVE_QRAWFONT
        if the feature is found. Added a comment about why.

2011-05-10  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Sam Weinig.

        Web Inspector: inspector/console/console-shadow-dom-access.html crashes on mac debug
        https://bugs.webkit.org/show_bug.cgi?id=60266

        * bindings/objc/DOM.mm:
        (kitClass): return DOMNode class for shadow root node


2011-05-10  Ben Murdoch  <benm@google.com>

        Reviewed by Steve Block.

        Fix build in WebCore/xml/XSLTProcessorLibxslt.cpp
        https://bugs.webkit.org/show_bug.cgi?id=60478

        No new tests), build fix only.

        * xml/XSLTProcessorLibxslt.cpp: Add CString.h include.

2011-05-10  Keith Kyzivat  <keith.kyzivat@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] QtRawFont support should check based on feature, not version
        https://bugs.webkit.org/show_bug.cgi?id=60513

        Build fix - no tests added.

        * WebCore.pro:

2011-05-10  Tony Gentilcore  <tonyg@chromium.org>

        Build fix: include ExceptionCode
        https://bugs.webkit.org/show_bug.cgi?id=60538

        * bindings/js/JSDOMBinding.cpp:

2011-05-06  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Darin Adler.

        Fix some unnecessary includes in headers
        https://bugs.webkit.org/show_bug.cgi?id=60388

        These were all found using the include-what-you-use clang plugin.

        * css/CSSFontFaceSrcValue.h:
        * css/CSSImageGeneratorValue.h:
        * css/CSSParser.h:
        * css/CSSPrimitiveValueCache.cpp:
        * css/CSSPrimitiveValueCache.h:
        * css/CSSStyleSelector.cpp:
        * css/CSSStyleSelector.h:
        * css/RGBColor.cpp:
        * css/RGBColor.h:
        * dom/EventTarget.h:
        * dom/ExceptionBase.cpp:
        * dom/ExceptionBase.h:
        * dom/MessagePort.cpp:
        * dom/Range.cpp:
        * dom/Range.h:
        * dom/SelectElement.cpp:
        * dom/SelectElement.h:
        * dom/TextEvent.cpp:
        * dom/TextEvent.h:
        * dom/Touch.cpp:
        * dom/Touch.h:
        * dom/TouchEvent.cpp:
        * dom/TouchEvent.h:
        * dom/XMLDocumentParser.h:
        * dom/XMLDocumentParserScope.h:
        * editing/AppendNodeCommand.cpp:
        * editing/ApplyBlockElementCommand.h:
        * editing/DeleteFromTextNodeCommand.cpp:
        * editing/EditCommand.h:
        * editing/Editor.h:
        * editing/FormatBlockCommand.h:
        * editing/IndentOutdentCommand.h:
        * editing/InsertIntoTextNodeCommand.cpp:
        * editing/InsertNodeBeforeCommand.cpp:
        * editing/ReplaceSelectionCommand.h:
        * editing/SetNodeAttributeCommand.h:
        * html/HTMLSelectElement.h:
        * html/canvas/CanvasRenderingContext2D.cpp:
        * loader/appcache/DOMApplicationCache.cpp:
        * page/EventSource.cpp:
        * rendering/RenderListBox.cpp:
        * rendering/RenderMenuList.cpp:
        * rendering/RenderTextControlSingleLine.cpp:
        * rendering/svg/RenderSVGInlineText.cpp:
        * svg/SVGMatrix.h:
        * websockets/WebSocket.cpp:
        * workers/AbstractWorker.cpp:
        * xml/XMLHttpRequest.cpp:
        * xml/XPathExpression.cpp:

2011-05-10  MORITA Hajime  <morrita@google.com>

        Reviewed by Ryosuke Niwa.

        REGRESSION(r73886): Frequent crashes in replaceSelectionWithFragment
        https://bugs.webkit.org/show_bug.cgi?id=60090

        SpellChecker uses TextCheckerClient, which belongs Page object,
        which is possibly destroyed during SpellChecker's lifetime.
        This change added to a guard before using TextCheckerClient to
        ensure it being live.
        
        No new tests, this is a speculative fix for a real crash.

        * editing/Editor.cpp:
        (WebCore::Editor::Editor):
        * editing/SpellChecker.cpp:
        (WebCore::SpellChecker::SpellChecker):
        (WebCore::SpellChecker::client):
        (WebCore::SpellChecker::canCheckAsynchronously):
        (WebCore::SpellChecker::requestCheckingFor):
        * editing/SpellChecker.h:

2011-05-09  Dan Bernstein  <mitz@apple.com>

        Try to fix the LLVM Compiler build.

        * page/EventHandler.h:

2011-05-09  Daniel Cheng  <dcheng@chromium.org>

        Fix the build.

        Really add the file this time.

        * page/DragState.h: Added.
        (WebCore::DragState::DragState):

2011-05-09  Daniel Cheng  <dcheng@chromium.org>

        Reviewed by Tony Chang.

        Refactor RenderObject::draggableNode.
        https://bugs.webkit.org/show_bug.cgi?id=60503

        This patch lays the ground for refactoring the drag start logic. It moves draggableNode to
        DragController to avoid the awkward plumbing of calling DragController from RenderObject and
        also moves EventHandlerDragState out from EventHandler so it can be shared between
        EventHandler and DragController where appropriate.

        No new tests since there should be no behavior change.

        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * page/DragController.cpp:
        (WebCore::DragController::draggableNode):
        (WebCore::DragController::mayStartDragAtEventLocation):
        * page/DragController.h:
        * page/DragState.h: Added.
        (WebCore::DragState::DragState):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::dragState):
        (WebCore::EventHandler::eventMayStartDrag):
        (WebCore::EventHandler::handleDrag):
        * page/EventHandler.h:
        * rendering/RenderObject.cpp:
        * rendering/RenderObject.h:

2011-05-09  Luke Macpherson   <macpherson@chromium.org>

        Reviewed by Darin Adler.

        Enable casting between CSSPrimitiveValue and FontWeight enum
        https://bugs.webkit.org/show_bug.cgi?id=60516

        No new tests added as no functionality changed.

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        Implement cast from FontWeight to CSSPrimitiveValue.
        (WebCore::CSSPrimitiveValue::operator FontWeight):
        Implement cast from CSSPrimitiveValue to FontWeight
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        Use new cast to reduce code size.
        Flatten switch inside if.

2011-05-09  Simon Fraser  <simon.fraser@apple.com>

        Move IconURL.* into the dom grouping.

        * WebCore.xcodeproj/project.pbxproj:

2011-05-08  Jeremy Noble  <jer.noble@apple.com>

        Reviewed by Dan Bernstein.

        Full-screen video disappears behind black screen with scrollbar, followed by crash at jerryseinfeld.com
        https://bugs.webkit.org/show_bug.cgi?id=60449

        Make RenderFullScreen a non-anonymous block, so that it does not get deleted when a parent attempts to 
        coalesce anonymous children.

        Test: fullscreen/full-screen-remove-sibling.html

        * rendering/RenderObject.h:
        (WebCore::RenderObject::isAnonymousBlock):

2011-05-09  Jeremy Noble  <jer.noble@apple.com>

        Reviewed by Simon Fraser.

        REGRESSION (r84706): Crazy rendering of vimeo.com after exiting fullscreen video
        https://bugs.webkit.org/show_bug.cgi?id=60512

        Initialize m_containsFullScreenElement.

        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::HTMLFrameElementBase):

2011-05-09  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        REGRESSION(r86039): DragCaretController doesn't draw caret
        https://bugs.webkit.org/show_bug.cgi?id=60505

        Removed an early exit in setCaretPosition introduced by r86039.
        Also replaced calls to containerNode by deprecatedNode since rendering code doesn't
        support container node for rendering caret.

        * editing/FrameSelection.cpp:
        (WebCore::DragCaretController::setCaretPosition):

2011-04-29  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] Untangle GtkAdjustments from WebCore
        https://bugs.webkit.org/show_bug.cgi?id=59821

        Completely remove the ability for WebKit to set GtkAdjustments on ScrollViews
        and, consequently, Scrollbars. Handling adjustment updates can now be managed
        in WebKit.

        No new tests. This is covered by existing Scrollbar tests.

        * platform/ScrollView.cpp: platformInit and platformDestroy can now be shared
        between ScrollView.cpp and ScrollViewGtk.cpp.
        * platform/ScrollView.h: Remove unused methods.
        * platform/gtk/MainFrameScrollbarGtk.cpp:
        (MainFrameScrollbarGtk::create): No longer need to pass in the adjustment.
        (MainFrameScrollbarGtk::MainFrameScrollbarGtk): Update the comments here.
        * platform/gtk/MainFrameScrollbarGtk.h: Lots of code removal.
        * platform/gtk/ScrollViewGtk.cpp: Ditto.
        (WebCore::ScrollView::createScrollbar): Ditto.
        (WebCore::ScrollView::setScrollbarModes): Ditto.
        * plugins/gtk/PluginViewGtk.cpp: This file needs the GRefPtrGtk.h include now
        that it doesn't receive it transitively.

2011-05-09  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        CSP should block Function constructor
        https://bugs.webkit.org/show_bug.cgi?id=60240

        Tests: http/tests/security/contentSecurityPolicy/function-constructor-allowed.html
               http/tests/security/contentSecurityPolicy/function-constructor-blocked.html

        * bindings/js/JSLazyEventListener.cpp:
        (WebCore::JSLazyEventListener::initializeJSFunction):
            - Update call site to the new entrypoint.
        * bindings/v8/V8LazyEventListener.cpp:
        (WebCore::V8LazyEventListener::prepareListenerObject):
            - Add some comments about the rediculousness of this implementation.

2011-05-09  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Add RAII-style DenormalDisabler class to disable denormals which hurt audio performance
        https://bugs.webkit.org/show_bug.cgi?id=60396

        No new tests since audio API is not yet implemented.

        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/audio/DenormalDisabler.h: Added.
        (WebCore::DenormalDisabler::DenormalDisabler):
        (WebCore::DenormalDisabler::~DenormalDisabler):
        (WebCore::DenormalDisabler::getCSR):
        (WebCore::DenormalDisabler::setCSR):
        * webaudio/AudioDestinationNode.cpp:
        (WebCore::AudioDestinationNode::provideInput):

2011-05-09  Tony Chang  <tony@chromium.org>

        Reviewed by Eric Seidel.

        Style cleanups in RenderFlexibleBox.cpp
        https://bugs.webkit.org/show_bug.cgi?id=60504

        No new tests, just refactoring.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::FlexBoxIterator::FlexBoxIterator): Use m_ for member variables, and
            use class initializer list.
        (WebCore::FlexBoxIterator::reset):
        (WebCore::FlexBoxIterator::next):
        (WebCore::RenderFlexibleBox::RenderFlexibleBox):
        (WebCore::marginWidthForChild): Pull out common code used in calc*PrefWidths
        (WebCore::RenderFlexibleBox::calcHorizontalPrefWidths):
        (WebCore::RenderFlexibleBox::calcVerticalPrefWidths):
        (WebCore::RenderFlexibleBox::computePreferredLogicalWidths):
        (WebCore::RenderFlexibleBox::layoutBlock):
        (WebCore::gatherFlexChildrenInfo): Rewrite uses of FlexBoxIterator into for statements
            rather than while loops.
        (WebCore::RenderFlexibleBox::layoutHorizontalBox): ditto
        (WebCore::RenderFlexibleBox::layoutVerticalBox): ditto
        (WebCore::RenderFlexibleBox::applyLineClamp):
        (WebCore::RenderFlexibleBox::allowedChildFlex): Rename variables w/h to width/height.

2011-05-09  Eric Seidel  <eric@webkit.org>

        Reviewed by Ryosuke Niwa.

        Abstract line deletion code into a function
        https://bugs.webkit.org/show_bug.cgi?id=60501

        No change in behavior, thus no testing.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::deleteLineRange):
        (WebCore::RenderBlock::layoutRunsAndFloats):
        (WebCore::RenderBlock::determineStartPosition):
        (WebCore::RenderBlock::matchedEndLine):

2011-05-09  Darin Adler  <darin@apple.com>

        Cleared some stray executable bits on source files.

        * bindings/js/WorkerScriptDebugServer.cpp: Removed property svn:executable.
        * bindings/js/WorkerScriptDebugServer.h: Removed property svn:executable.

2011-05-09  Erik Arvidsson  <arv@chromium.org>

        Reviewed by Darin Adler.

        radiogroup: onchange not detected when triggered by keyboard
        https://bugs.webkit.org/show_bug.cgi?id=32013

        Test: fast/forms/radio-group-keyboard-change-event.html

        * html/RadioInputType.cpp:
        (WebCore::RadioInputType::handleKeydownEvent): Ensure that we do not check the radio input before we simulate the click
            event. The simulated click event will check it for us but more importantly it will fire the "change" event as
            expected.

2011-05-09  Adam Barth  <abarth@webkit.org>

        Reviewed by Daniel Bates.

        XSSAuditor should be more selective about the <meta http-equivs> that it blocks
        https://bugs.webkit.org/show_bug.cgi?id=60489

        We don't need to filter most http-equiv attributes.  This patch
        introduces a blacklist for two that we probably do want to filter.
        It's possible a whitelist would be more appropriate, but I'm inclined
        to start with a blacklist and see how it works.

        This patch will hopefully fix a false positive that is causing errors
        with copy-and-pasted text in Gmail in some configurations (due to using
        the <meta> tag to request UTF-8 encoding both in the pasted text and in
        the page itself).

        * html/parser/XSSFilter.cpp:
        (WebCore::isNonCanonicalCharacter):
        (WebCore::canonicalize):
        (WebCore::isRequiredForInjection):
        (WebCore::hasName):
        (WebCore::findAttributeWithName):
        (WebCore::isNameOfInlineEventHandler):
        (WebCore::isDangerousHTTPEquiv):
            - This function is new in the patch and includes a blacklist of
              dangerous http-equivs.  Many of the other functions listed here
              are just being moved from an anonymous namespace to use static
              for internal linkage.
        (WebCore::containsJavaScriptURL):
        (WebCore::decodeURL):
        (WebCore::XSSFilter::eraseAttributeIfInjected):

2011-05-05  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Simon Fraser.

        Remove canvas usage of roundToDevicePixels
        https://bugs.webkit.org/show_bug.cgi?id=60331

        No new tests. This could only affect canvases at non-integral scale factors. Our tests only run in 1.0x.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawImage):

2011-05-09  Alexis Menard  <alexis.menard@openbossa.org>

        Reviewed by Andreas Kling.

        [Qt] Fix the build on Embedded Linux.
        https://bugs.webkit.org/show_bug.cgi?id=60347        

        qpa is the name for lighthouse but the old name for Qt for Embedded Linux should
        still be used in order to build properly.

        * WebCore.pri:

2011-05-09  Andreas Kling  <kling@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Simple small-caps text is displayed in uniform size.
        https://bugs.webkit.org/show_bug.cgi?id=60492

        Covered by existing tests.

        * platform/graphics/qt/FontPlatformDataQt.cpp:
        (WebCore::FontPlatformData::FontPlatformData): In the FontPlatformData constructor
        used by SimpleFontData::scaledFontData(), pass the pixel size to both QFont and QRawFont
        to make small caps and emphasis marks have the correct size when rendered through
        the fast font path.

2011-05-09  Andreas Kling  <kling@webkit.org>

        Reviewed by Tor Arne Vestbø.

        [Qt] Remove unused FontPlatformData functions.
        https://bugs.webkit.org/show_bug.cgi?id=60485

        * platform/graphics/qt/FontPlatformData.h:
        (WebCore::FontPlatformData::bold): Removed.
        (WebCore::FontPlatformData::family): Removed.
        (WebCore::FontPlatformData::italic): Removed.
        (WebCore::FontPlatformData::smallCaps): Removed.

2011-05-09  Robin Dunn  <robin@alldunn.com>

        Reviewed by Kevin Ollivier.

        [wx] Add invalid file handle check.
        
        https://bugs.webkit.org/show_bug.cgi?id=60483

        * platform/wx/FileSystemWx.cpp:
        (WebCore::closeFile):

2011-05-09  Robin Dunn  <robin@alldunn.com>

        Reviewed by Kevin Ollivier.

        [wx] Update the popup menu code to grab the native control and initialize the
        event handler properly.
        
        https://bugs.webkit.org/show_bug.cgi?id=60482

        * platform/wx/PopupMenuWx.cpp:
        (WebCore::PopupMenuWx::PopupMenuWx):
        (WebCore::PopupMenuWx::~PopupMenuWx):
        (WebCore::PopupMenuWx::show):

2011-05-09  Robin Dunn  <robin@alldunn.com>

        Reviewed by Kevin Ollivier.

        [wx] Make sure other controls adjust the rect to handle transforms, and turn off the
        adjustment in 2.9.2+ where it is handled internally by wx.
        
        Also add a couple drawing and focus handling fixes for text fields and menulist controls.
        
        https://bugs.webkit.org/show_bug.cgi?id=60481

        * platform/wx/RenderThemeWx.cpp:
        (WebCore::getAdjustedRect):
        (WebCore::RenderThemeWx::supportsFocus):
        (WebCore::RenderThemeWx::paintButton):
        (WebCore::RenderThemeWx::adjustTextFieldStyle):
        (WebCore::RenderThemeWx::paintTextField):
        (WebCore::RenderThemeWx::adjustMenuListStyle):
        (WebCore::RenderThemeWx::paintMenuList):
        (WebCore::RenderThemeWx::paintMenuListButton):

2011-05-09  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Darin Adler.

        Style fix: Function names must begin with lowercase letter and should not use "get".
        https://bugs.webkit.org/show_bug.cgi?id=60475

        * dom/Document.cpp:
        (WebCore::Document::webkitVisibilityState):
        * page/PageVisibilityState.cpp:
        (WebCore::pageVisibilityStateString): Renamed.
        * page/PageVisibilityState.h:

2011-05-09  Adam Barth  <abarth@webkit.org>

        Reviewed by Tony Gentilcore.

        Make Chromium build with strict PassOwnPtr
        https://bugs.webkit.org/show_bug.cgi?id=60461

        Fix many, many PassOwnPtr nits.

        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::precompileScript):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::WindowSetTimeoutImpl):
        * bindings/v8/custom/V8MessageEventCustom.cpp:
        (WebCore::V8MessageEvent::initMessageEventCallback):
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        (WebCore::SetTimeoutOrInterval):
        * dom/Document.cpp:
        (WebCore::Document::removedLastRef):
        (WebCore::Document::detach):
        * fileapi/DOMFileSystem.h:
        (WebCore::DOMFileSystem::scheduleCallback):
        * fileapi/FileSystemCallbacks.cpp:
        (WebCore::FileSystemCallbacks::didOpenFileSystem):
        (WebCore::ResolveURICallbacks::didOpenFileSystem):
        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayer::create):
        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        (WebCore::CCLayerImpl::createRenderSurface):
        * platform/graphics/gpu/BicubicShader.cpp:
        (WebCore::BicubicShader::create):
        * platform/graphics/gpu/ConvolutionShader.cpp:
        (WebCore::ConvolutionShader::create):
        * platform/graphics/gpu/LoopBlinnSolidFillShader.cpp:
        (WebCore::LoopBlinnSolidFillShader::create):
        * platform/graphics/gpu/SolidFillShader.cpp:
        (WebCore::SolidFillShader::create):
        * platform/graphics/gpu/TexShader.cpp:
        (WebCore::TexShader::create):
        * platform/graphics/gpu/Texture.cpp:
        (WebCore::Texture::create):
        * storage/chromium/DatabaseTrackerChromium.cpp:
        (WebCore::TrackerRemoveOpenDatabaseTask::create):
        * storage/chromium/SQLTransactionClientChromium.cpp:
        (WebCore::NotifyDatabaseChangedTask::create):

2011-05-07  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Daniel Bates.

        [Soup] Clean up error handling in ResourceHandleSoup
        https://bugs.webkit.org/show_bug.cgi?id=60436

        Instead of repeating the ResourceError creation twice, abstract
        it into a helper method.

        No new tests. This is a code cleanup.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::soupErrorShouldCauseLoadFailure): Added.
        (WebCore::convertSoupErrorToResourceError): Added.
        (WebCore::sendRequestCallback): Use the new helpers.
        (WebCore::readCallback): Ditto.

2011-05-09  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Dave Hyatt.

        Regression(r85869): Restore dirty line logic in RenderInline::destroy.
        https://bugs.webkit.org/show_bug.cgi?id=60448

        Test: fast/inline/inline-destroy-dirty-lines-crash.html

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

2011-05-09  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] WidgetGtk setFocus can not access directly the widget in WK2
        https://bugs.webkit.org/show_bug.cgi?id=60016

        Added code to check the situation where we do not have direct
        access to the widget. We use the page to grab the focus which
        would send a request to the UIProcess in WK2.

        * platform/gtk/WidgetGtk.cpp:
        (WebCore::Widget::setFocus):

2011-05-09  Leandro Gracia Gil  <leandrogracia@chromium.org>

        Reviewed by Tony Gentilcore.

        Media Stream API: add exception raising to the getUserMedia method.
        https://bugs.webkit.org/show_bug.cgi?id=60387

        Perform the required changes to support rising exceptions in the
        navigator.getUserMedia method. This is required by the latest changes in the spec:
        http://www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html#dom-navigator-getusermedia

        Test: fast/dom/MediaStream/argument-types.html

        * bindings/js/JSNavigatorCustom.cpp:
        (WebCore::JSNavigator::webkitGetUserMedia):
        * bindings/v8/custom/V8NavigatorCustom.cpp:
        (WebCore::V8Navigator::webkitGetUserMediaCallback):
        * page/Navigator.cpp:
        (WebCore::Navigator::webkitGetUserMedia):
        * page/Navigator.h:
        * page/Navigator.idl:

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

        Unreviewed Qt 4.8 fix.

        * WebCore.pro: 4.8 bots are updated with the full QRawFont APIs, so we can set HAVE_QRAWFONT now.

2011-05-09  Adam Roben  <aroben@apple.com>

        Windows project file fix after r86047

        * WebCore.vcproj/WebCore.vcproj: Added missing closing tags.

2011-05-06  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Darin Adler.

        Fix layer names to say "tiled" and show CALayer addresses, not PlatformCALayer addresses
        https://bugs.webkit.org/show_bug.cgi?id=60417

        Layer name now has "Tiled" prepended if it is a TiledLayer. This is true on Mac where
        the layer is a CATiledLayer and on Win where the layer is actually still a CACFLayer
        but implements a tiled layer. I also now print the address of the CALayer or CACFLayer
        instead of the PlatformCALayer everywhere.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::swapFromOrToTiledLayer):

2011-05-09  Rob Buis  <rbuis@rim.com>

        Reviewed by Dirk Schulze.

        Elements should assert that the QualifiedName given to their constructor corresponds to the Element constructed
        https://bugs.webkit.org/show_bug.cgi?id=22576

        Add tag name ASSERTs in SVG Element constructors.

        No new tests, since no change in behaviour.

        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::SVGAElement):
        * svg/SVGAltGlyphElement.cpp:
        (WebCore::SVGAltGlyphElement::SVGAltGlyphElement):
        * svg/SVGAnimateColorElement.cpp:
        (WebCore::SVGAnimateColorElement::SVGAnimateColorElement):
        * svg/SVGAnimateElement.cpp:
        (WebCore::SVGAnimateElement::SVGAnimateElement):
        * svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::SVGAnimateMotionElement):
        * svg/SVGAnimateTransformElement.cpp:
        (WebCore::SVGAnimateTransformElement::SVGAnimateTransformElement):
        * svg/SVGCircleElement.cpp:
        (WebCore::SVGCircleElement::SVGCircleElement):
        * svg/SVGClipPathElement.cpp:
        (WebCore::SVGClipPathElement::SVGClipPathElement):
        * svg/SVGCursorElement.cpp:
        (WebCore::SVGCursorElement::SVGCursorElement):
        * svg/SVGDefsElement.cpp:
        (WebCore::SVGDefsElement::SVGDefsElement):
        * svg/SVGDescElement.cpp:
        (WebCore::SVGDescElement::SVGDescElement):
        * svg/SVGEllipseElement.cpp:
        (WebCore::SVGEllipseElement::SVGEllipseElement):
        * svg/SVGFEBlendElement.cpp:
        (WebCore::SVGFEBlendElement::SVGFEBlendElement):
        * svg/SVGFEColorMatrixElement.cpp:
        (WebCore::SVGFEColorMatrixElement::SVGFEColorMatrixElement):
        * svg/SVGFEComponentTransferElement.cpp:
        (WebCore::SVGFEComponentTransferElement::SVGFEComponentTransferElement):
        * svg/SVGFECompositeElement.cpp:
        (WebCore::SVGFECompositeElement::SVGFECompositeElement):
        * svg/SVGFEConvolveMatrixElement.cpp:
        (WebCore::SVGFEConvolveMatrixElement::SVGFEConvolveMatrixElement):
        * svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::SVGFEDiffuseLightingElement):
        * svg/SVGFEDisplacementMapElement.cpp:
        (WebCore::SVGFEDisplacementMapElement::SVGFEDisplacementMapElement):
        * svg/SVGFEDistantLightElement.cpp:
        (WebCore::SVGFEDistantLightElement::SVGFEDistantLightElement):
        * svg/SVGFEDropShadowElement.cpp:
        (WebCore::SVGFEDropShadowElement::SVGFEDropShadowElement):
        * svg/SVGFEFloodElement.cpp:
        (WebCore::SVGFEFloodElement::SVGFEFloodElement):
        * svg/SVGFEFuncAElement.cpp:
        (WebCore::SVGFEFuncAElement::SVGFEFuncAElement):
        * svg/SVGFEFuncBElement.cpp:
        (WebCore::SVGFEFuncBElement::SVGFEFuncBElement):
        * svg/SVGFEFuncGElement.cpp:
        (WebCore::SVGFEFuncGElement::SVGFEFuncGElement):
        * svg/SVGFEFuncRElement.cpp:
        (WebCore::SVGFEFuncRElement::SVGFEFuncRElement):
        * svg/SVGFEGaussianBlurElement.cpp:
        (WebCore::SVGFEGaussianBlurElement::SVGFEGaussianBlurElement):
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::SVGFEImageElement):
        * svg/SVGFEMergeElement.cpp:
        (WebCore::SVGFEMergeElement::SVGFEMergeElement):
        * svg/SVGFEMergeNodeElement.cpp:
        (WebCore::SVGFEMergeNodeElement::SVGFEMergeNodeElement):
        * svg/SVGFEMorphologyElement.cpp:
        (WebCore::SVGFEMorphologyElement::SVGFEMorphologyElement):
        * svg/SVGFEOffsetElement.cpp:
        (WebCore::SVGFEOffsetElement::SVGFEOffsetElement):
        * svg/SVGFEPointLightElement.cpp:
        (WebCore::SVGFEPointLightElement::SVGFEPointLightElement):
        * svg/SVGFESpecularLightingElement.cpp:
        (WebCore::SVGFESpecularLightingElement::SVGFESpecularLightingElement):
        * svg/SVGFESpotLightElement.cpp:
        (WebCore::SVGFESpotLightElement::SVGFESpotLightElement):
        * svg/SVGFETileElement.cpp:
        (WebCore::SVGFETileElement::SVGFETileElement):
        * svg/SVGFETurbulenceElement.cpp:
        (WebCore::SVGFETurbulenceElement::SVGFETurbulenceElement):
        * svg/SVGFilterElement.cpp:
        (WebCore::SVGFilterElement::SVGFilterElement):
        * svg/SVGFontElement.cpp:
        (WebCore::SVGFontElement::SVGFontElement):
        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::SVGFontFaceElement):
        * svg/SVGFontFaceFormatElement.cpp:
        (WebCore::SVGFontFaceFormatElement::SVGFontFaceFormatElement):
        * svg/SVGFontFaceNameElement.cpp:
        (WebCore::SVGFontFaceNameElement::SVGFontFaceNameElement):
        * svg/SVGFontFaceSrcElement.cpp:
        (WebCore::SVGFontFaceSrcElement::SVGFontFaceSrcElement):
        * svg/SVGFontFaceUriElement.cpp:
        (WebCore::SVGFontFaceUriElement::SVGFontFaceUriElement):
        * svg/SVGForeignObjectElement.cpp:
        (WebCore::SVGForeignObjectElement::SVGForeignObjectElement):
        * svg/SVGGElement.cpp:
        (WebCore::SVGGElement::SVGGElement):
        * svg/SVGGlyphElement.cpp:
        (WebCore::SVGGlyphElement::SVGGlyphElement):
        * svg/SVGHKernElement.cpp:
        (WebCore::SVGHKernElement::SVGHKernElement):
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::SVGImageElement):
        * svg/SVGLineElement.cpp:
        (WebCore::SVGLineElement::SVGLineElement):
        * svg/SVGLinearGradientElement.cpp:
        (WebCore::SVGLinearGradientElement::SVGLinearGradientElement):
        * svg/SVGMPathElement.cpp:
        (WebCore::SVGMPathElement::SVGMPathElement):
        * svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::SVGMarkerElement):
        * svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::SVGMaskElement):
        * svg/SVGMetadataElement.cpp:
        (WebCore::SVGMetadataElement::SVGMetadataElement):
        * svg/SVGMissingGlyphElement.cpp:
        (WebCore::SVGMissingGlyphElement::SVGMissingGlyphElement):
        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::SVGPathElement):
        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::SVGPatternElement):
        * svg/SVGPolygonElement.cpp:
        (WebCore::SVGPolygonElement::SVGPolygonElement):
        * svg/SVGPolylineElement.cpp:
        (WebCore::SVGPolylineElement::SVGPolylineElement):
        * svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::SVGRadialGradientElement):
        * svg/SVGRectElement.cpp:
        (WebCore::SVGRectElement::SVGRectElement):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::SVGSVGElement):
        * svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::SVGScriptElement):
        * svg/SVGSetElement.cpp:
        (WebCore::SVGSetElement::SVGSetElement):
        * svg/SVGStopElement.cpp:
        (WebCore::SVGStopElement::SVGStopElement):
        * svg/SVGStyleElement.cpp:
        (WebCore::SVGStyleElement::SVGStyleElement):
        * svg/SVGSwitchElement.cpp:
        (WebCore::SVGSwitchElement::SVGSwitchElement):
        * svg/SVGSymbolElement.cpp:
        (WebCore::SVGSymbolElement::SVGSymbolElement):
        * svg/SVGTRefElement.cpp:
        (WebCore::SVGTRefElement::SVGTRefElement):
        * svg/SVGTSpanElement.cpp:
        (WebCore::SVGTSpanElement::SVGTSpanElement):
        * svg/SVGTextElement.cpp:
        (WebCore::SVGTextElement::SVGTextElement):
        * svg/SVGTextPathElement.cpp:
        (WebCore::SVGTextPathElement::SVGTextPathElement):
        * svg/SVGTitleElement.cpp:
        (WebCore::SVGTitleElement::SVGTitleElement):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::SVGUseElement):
        * svg/SVGVKernElement.cpp:
        (WebCore::SVGVKernElement::SVGVKernElement):
        * svg/SVGViewElement.cpp:
        (WebCore::SVGViewElement::SVGViewElement):

2011-05-09  Shishir Agrawal  <shishir@chromium.org>

        Reviewed by Tony Gentilcore.

        Implement Page Visibility API.
        https://bugs.webkit.org/show_bug.cgi?id=54181

        Tests: fast/events/page-visibility-iframe-delete-test.html
               fast/events/page-visibility-iframe-move-test.html
               fast/events/page-visibility-iframe-propagation-test.html
               fast/events/page-visibility-transition-test.html

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::visibilityState):
        (WebCore::Document::webkitVisibilityState):
        (WebCore::Document::webkitIsVisible):
        (WebCore::Document::dispatchVisibilityStateChangeEvent):
        * dom/Document.h:
        * dom/Document.idl:
        * dom/EventNames.h:
        * page/Frame.cpp:
        (WebCore::Frame::dispatchVisibilityStateChangeEvent):
        * page/Frame.h:
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::setVisibilityState):
        (WebCore::Page::visibilityState):
        * page/Page.h:
        * page/PageVisibilityState.cpp: Added.
        (WebCore::GetPageVisibilityStateString):
        * page/PageVisibilityState.h: Added.

2011-05-09  Luke Macpherson   <macpherson@chromium.org>

        Reviewed by Eric Seidel.

        Implement expanding CSS border properties in CSSStyleApplyProperty.
        https://bugs.webkit.org/show_bug.cgi?id=60456

        No new tests added as no functionality changed.

        * css/CSSStyleApplyProperty.cpp:
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
        Create CSS border expanding property handlers.
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        Remove property handlers that are no longer needed.

2011-05-08  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Kent Tamura.

        selectstart event does not fire when selection is made via select all
        https://bugs.webkit.org/show_bug.cgi?id=60376

        Fire selectstart event when a user selects all contents (i.e. document.execCommand('SelectAll')) in
        document, editable region, or text control.

        Tests: editing/selection/selectstart-on-selectall.html
               editing/selection/selectstart-prevent-selectall.html

        * dom/Node.h: Removed canSelectAll and selectAll as they are left over from WMLSelectElement.
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::selectAll): Dispatch selectstart event on selectStartTarget, which is
        input element or textarea element when the current selection is inside a shadow DOM, and the root
        editable element if it's inside a non-shadow editable region, and the body element otherwise.
        * html/HTMLSelectElement.h: Made canSelectAll and selectAll public since they are no longer
        declared in Node.

2011-05-08  Luke Macpherson   <macpherson@chromium.org>

        Reviewed by Eric Seidel.

        Make RenderStyle::setColumnBreakInside() reject unsupported enum values.
        https://bugs.webkit.org/show_bug.cgi?id=60249

        No new tests added as no functionality changed.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        Remove special-case code and use appropriate macro.
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::setColumnBreakInside):
        Assert that supported values are used.

2011-05-08  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        Extract a DragCaretController from FrameSelection
        https://bugs.webkit.org/show_bug.cgi?id=60273

        Extracted CaretBase and DragCaretController from FrameSelection. CaretBase is a base class for
        DragCaretController and FrameSelection and provides functions to paint caret.

        Since DragCaretController doesn't need to store selection, it only holds one VisiblePosition.

        * WebCore.exp.in:
        * editing/FrameSelection.cpp:
        (WebCore::CaretBase::CaretBase): Added.
        (WebCore::DragCaretController::DragCaretController): Added; Set m_caretVisible true.
        (WebCore::DragCaretController::isContentRichlyEditable): Added.
        (WebCore::FrameSelection::FrameSelection): Several member variables are move to CaretBase.
        (WebCore::DragCaretController::setCaretPosition): Extracted from FrameSelection::setSelection.
        (WebCore::FrameSelection::setSelection): Removed an early exit for DragCaretController.
        (WebCore::clearRenderViewSelection): Extracted from FrameSelection::respondToNodeModification.
        (WebCore::DragCaretController::nodeWillBeRemoved): Extracted from FrameSelection::nodeWillBeRemoved
        and respondToNodeModification. Note that the position DragCaretController holds is equivalent to
        FrameSelection's base or start so when removingNodeRemovesPosition returns true for m_position,
        we used to execute the first if clause and cleared render tree selection and DOM tree selection.
        This is exactly what new DragCaretController::nodeWillBeRemoved does.
        (WebCore::FrameSelection::nodeWillBeRemoved): Simplified early exist conditions.
        (WebCore::FrameSelection::respondToNodeModification): Calls clearRenderViewSelection.
        (WebCore::CaretBase::updateCaretRect): Takes document, caretPosition, selection type, and boolean isOrphaned.
        Note that we can't obtain the document from caretPosition because VisiblePosition can be null even if
        FrameSelection's start was not null.
        (WebCore::caretRendersInsideNode): Moved; Made static local.
        (WebCore::CaretBase::caretRenderer): Extracted from FrameSelection::caretRenderer.
        (WebCore::FrameSelection::caretRenderer): Calls CaretBase::caretRenderer.
        (WebCore::DragCaretController::caretRenderer): Ditto.
        (WebCore::FrameSelection::localCaretRect): Calls updateCaretRect with extra arguments.
        (WebCore::CaretBase::absoluteBoundsForLocalRect): Moved from FrameSelection; Takes Node*.
        (WebCore::CaretBase::caretRepaintRect): Ditto.
        (WebCore::FrameSelection::recomputeCaretRect): Calls absoluteBoundsForLocalRect, caretRepaintRect,
        and shouldRepaintCaret with extra arguments.
        (WebCore::CaretBase::shouldRepaintCaret): Takes a boolean isContentEditable.
        (WebCore::FrameSelection::invalidateCaretRect): Calls CaretBase::invalidateCaretRect.
        (WebCore::CaretBase::invalidateCaretRect): Extracted from FrameSelection::invalidateCaretRect.
        (WebCore::FrameSelection::paintCaret): Calls CaretBase::paintCaret.
        (WebCore::CaretBase::paintCaret): Extracted from FrameSelection::paintCaret.
        (WebCore::FrameSelection::updateAppearance): Removed an assertion that this function is never called for
        DragCaretController.
        (WebCore::DragCaretController::paintDragCaret): Moved from FrameSelection::paintDragCaret.
        * editing/FrameSelection.h:
        (WebCore::CaretBase::localCaretRectForPainting): Added.
        (WebCore::DragCaretController::isContentEditable): Added.
        (WebCore::DragCaretController::hasCaret): Added.
        (WebCore::DragCaretController::caretPosition): Added.
        (WebCore::DragCaretController::clear): Added.
        * page/DragController.cpp:
        (WebCore::DragController::tryDocumentDrag): Uses DragCaretController.
        (WebCore::DragController::dispatchTextInputEventFor): Ditto.
        (WebCore::DragController::concludeEditDrag): Ditto.
        (WebCore::DragController::placeDragCaret): Ditto.
        * page/Page.cpp:
        (WebCore::Page::Page): Instantiates DragCaretController instead of FrameSelection.
        * page/Page.h:
        (WebCore::Page::dragCaretController): Returns DragCaretController* instead of FrameSelection*.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintCaret): Uses FrameSelection and DragCaretController.

2011-05-08  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/9401853> REGRESSION (r78846): Insufficient expansion for justification when there are multiple inline boxes
        https://bugs.webkit.org/show_bug.cgi?id=60432

        * rendering/InlineTextBox.h:
        (WebCore::InlineTextBox::setExpansion): Changed back to take a int, since the m_expansion member
        variable is a (truncated) int anyway.
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::computeExpansionForJustifiedText): Changed the expansion local variable into an int
        so that the right amount is added to the total width. Also changed to use an early return.

2011-05-08  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: ignore 0 responses in the inspector network instrumentation.

        * inspector/front-end/NetworkManager.js:

2011-05-08  Jarkko Sakkinen  <jarkko.j.sakkinen@gmail.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] GraphicsContext3D::getImageData() does not retrieve image data correctly
        https://bugs.webkit.org/show_bug.cgi?id=58556

        Tests: fast/canvas/webgl/gl-teximage.html

        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3D::getImageData):

2011-05-07  Dan Bernstein  <mitz@apple.com>

        Reviewed by Maciej Stachowiak.

        <rdar://problem/9403055> REGRESSION (r85499): Inline images in iChat overflow their chat bubbles
        https://bugs.webkit.org/show_bug.cgi?id=60443

        Test: fast/replaced/table-percent-height-positioned.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeReplacedLogicalHeightUsing): Do not apply the logic to prevent precent-height
        replaced elements from being squeezed by table cells when the replaced element is positioned (and thus
        doesn’t affect the table cell’s height).

2011-05-07  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r86016.
        http://trac.webkit.org/changeset/86016
        https://bugs.webkit.org/show_bug.cgi?id=60445

        caused crashes on the WK2 Windows bots (Requested by
        jessieberlin on #webkit).

        * platform/network/ResourceHandle.h:
        * platform/network/cf/CookieStorageCFNet.cpp:
        (WebCore::currentCookieStorage):
        (WebCore::defaultCookieStorage):
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::willSendRequest):
        (WebCore::makeFinalRequest):
        (WebCore::ResourceHandle::willSendRequest):
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::doUpdatePlatformRequest):

2011-05-07  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r85974.
        http://trac.webkit.org/changeset/85974
        https://bugs.webkit.org/show_bug.cgi?id=60444

        broke browser tests (Requested by inferno-sec on #webkit).

        * platform/network/chromium/ResourceResponse.cpp:
        (WebCore::ResourceResponse::doPlatformCopyData):
        (WebCore::ResourceResponse::doPlatformAdopt):
        * platform/network/chromium/ResourceResponse.h:
        (WebCore::ResourceResponse::downloadFilePath):
        (WebCore::ResourceResponse::setDownloadFilePath):

2011-05-07  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Steve Falkenburg.

        [Windows WebKit2] Use cookies set in WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=60274

        Share the default storage session between the UI and Web Processes.

        * platform/network/cf/CookieStorageCFNet.cpp:
        (WebCore::defaultSessionCookieStorage):
        Keep track of the default storage session cookie storage.
        (WebCore::currentCookieStorage):
        Call defaultCookieStorage to get the default cookie storage.
        (WebCore::defaultCookieStorage):
        If there is a default storage session cookie storage, prefer that over getting the default
        cookie storage. In the Web Process, asking CFNetwork for the default cookie storage directly
        without specifying a storage session will not get the cookie storage being shared by the UI
        and Web Processes.

        * platform/network/ResourceHandle.h:
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::willSendRequest):
        Make sure to set the current storage session on any requests used by the Web
        Process before CFNetwork has to do anything with them, in order for CFNetwork to avoid
        doing anything with the Web Process's default storage session (which is not the one shared
        with the UI Process).
        (WebCore::makeFinalRequest):
        Ditto.
        (WebCore::ResourceHandle::willSendRequest):
        Ditto.
        (WebCore::ResourceHandle::currentStorageSession):
        If there is a Private Browsing storage session, return that.
        If not, on Windows return the default storage session that is being shared with the UI
        Process and on Mac return 0.
        (WebCore::defaultCFURLStorageSession):
        (WebCore::ResourceHandle::setDefaultStorageSession):
        (WebCore::ResourceHandle::defaultStorageSession):

        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        Make sure to set the current storage session on any requests used by the Web
        Process before CFNetwork has to do anything with them, in order for CFNetwork to avoid
        doing anything with the Web Process's default storage session (which is not the one shared
        with the UI Process).

2011-05-07  Joe Mason  <jmason@rim.com>

        Reviewed by Daniel Bates.

        FrameLoader::isProcessingUserGesture is wrong in dispatchWillPerformClientRedirect
        https://bugs.webkit.org/show_bug.cgi?id=52211

        Create a UserGestureIndicator when calling the clientRedirected callback.

        * loader/NavigationScheduler.cpp:
        (WebCore::ScheduledURLNavigation::didStartTimer):
        (WebCore::ScheduledURLNavigation::didStopTimer):
        (WebCore::ScheduledFormSubmission::didStartTimer):
        (WebCore::ScheduledFormSubmission::didStopTimer):

2011-05-06  Jon Lee  <jonlee@apple.com>

        Reviewed by Alice Liu.

        Crash when sending a wheel event to a node with no shadow ancestor node
        https://bugs.webkit.org/show_bug.cgi?id=60429
        <rdar://problem/9389619>

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleWheelEvent):add check to see if the shadow ancestor node of the node that was under the mouse exists before trying to dispatch the wheel event to it.

2011-05-06  Kent Tamura  <tkent@chromium.org>

        Reviewed by Ryosuke Niwa.

        Eliminate WebCore/dom/InputElement.{cpp,h}
        https://bugs.webkit.org/show_bug.cgi?id=60262

        - Fold in all of the code of InputElement.{cpp,h} into HTMLInputElement
          and TextFieldInputType.
        - Change the return type of Node::toInputElement():
          InputElement* -> HTMLInputElement*

        No new tests. This change should not change the existing behaviour.

        * CMakeLists.txt: Remove InpuntElement.cpp and/or InputElement.h.
        * GNUmakefile.list.am: ditto.
        * WebCore.exp.in: Add symbols of functions exposed to WebKit.
        * WebCore.gypi: Remove InpuntElement.cpp and/or InputElement.h.
        * WebCore.pro: ditto.
        * WebCore.vcproj/WebCore.vcproj: ditto.
        * WebCore.xcodeproj/project.pbxproj: ditto.
        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::textMarkerDataForVisiblePosition):
          Follow the return type change of Node::toInputElement().
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isPasswordField): ditto.
        (WebCore::AccessibilityRenderObject::isIndeterminate): ditto.
        (WebCore::AccessibilityRenderObject::isNativeCheckboxOrRadio): ditto.
        (WebCore::AccessibilityRenderObject::isChecked): ditto.
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::canShareStyleWithElement): ditto.
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector): ditto.
        * dom/CheckedRadioButtons.cpp:
        (WebCore::CheckedRadioButtons::removeButton): ditto.
        * dom/DOMAllInOne.cpp: Remove InputElement.h.
        * dom/InputElement.cpp: Removed.
        * dom/InputElement.h: Removed.
        * dom/Node.cpp:
        (WebCore::Node::toInputElement):
          Change the return type from InputElement* to HTMLInputElement*.
        * dom/Node.h: ditto.
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::HTMLInputElement):
        (WebCore::HTMLInputElement::formControlName):
        (WebCore::HTMLInputElement::tooLong):
        (WebCore::HTMLInputElement::updateFocusAppearance):
        (WebCore::HTMLInputElement::aboutToUnload):
        (WebCore::HTMLInputElement::handleFocusEvent):
        (WebCore::HTMLInputElement::handleBlurEvent):
        (WebCore::HTMLInputElement::updateType):
        (WebCore::HTMLInputElement::parseMappedAttribute):
        (WebCore::HTMLInputElement::size):
        (WebCore::HTMLInputElement::copyNonAttributeProperties):
        (WebCore::HTMLInputElement::value):
        (WebCore::HTMLInputElement::suggestedValue):
        (WebCore::HTMLInputElement::setSuggestedValue):
        (WebCore::HTMLInputElement::setValue):
        (WebCore::HTMLInputElement::setValueFromRenderer):
        (WebCore::HTMLInputElement::setFileListFromRenderer):
        (WebCore::HTMLInputElement::setDefaultName):
        (WebCore::HTMLInputElement::maxLength):
        (WebCore::HTMLInputElement::cacheSelection):
        (WebCore::formatCodes): Moved from InputElement.
        (WebCore::cursorPositionToMaskIndex): ditto.
        (WebCore::HTMLInputElement::isConformToInputMask): ditto.
        (WebCore::HTMLInputElement::validateInputMask): ditto.
        (WebCore::HTMLInputElement::setWapInputFormat): ditto.
        (WebCore::HTMLInputElement::notifyFormStateChanged): ditto.
        (WebCore::HTMLInputElement::parseMaxLengthAttribute): ditto.
        (WebCore::HTMLInputElement::updateValueIfNeeded):ditto.
        * html/HTMLInputElement.h:
          - Add data members which were defined in InputElementData.
          - Make some functions public because the public interface InputElement is removed.
          - Make some functions non-virtual because they don't override
            corresponding virtual functions of InputElement anymore.
        (WebCore::HTMLInputElement::toInputElement):
          Follow the return type change of Node::toInputElement().
        (WebCore::HTMLInputElement::isIndeterminate):
        (WebCore::HTMLInputElement::isAutofilled):
        (WebCore::HTMLInputElement::supportsMaxLength):
        (WebCore::HTMLInputElement::cachedSelectionStart):
        (WebCore::HTMLInputElement::cachedSelectionEnd):
        * html/HTMLTextAreaElement.cpp: Remove unused InputElement.h.
        * html/InputType.cpp:
        (WebCore::InputType::handleBeforeTextInsertedEvent): Remove the code.
        * html/InputType.h: Update for the above.
        * html/TextFieldInputType.cpp:
        (WebCore::replaceEOLAndLimitLength): Moved from InputElement.cpp.
        (WebCore::TextFieldInputType::sanitizeValue): Implement with replaceEOLAndLimitLength().
        (WebCore::TextFieldInputType::handleBeforeTextInsertedEvent):
          Move the code from InputElement::handleBeforeTextInsertedEvent().
        * html/TextFieldInputType.h: Update declarations.
        * rendering/RenderTextControlSingleLine.cpp:
          - Remove ASSERT(node()->isHTMLElement()) because it is checked in the constructor.
          - Follow the return type change of inputElement().
        (WebCore::RenderTextControlSingleLine::RenderTextControlSingleLine):
          Make sure node() is an HTMLInputElement instance.
        (WebCore::RenderTextControlSingleLine::addSearchResult):
        (WebCore::RenderTextControlSingleLine::stopSearchEventTimer):
        (WebCore::RenderTextControlSingleLine::showPopup):
        (WebCore::RenderTextControlSingleLine::hidePopup):
        (WebCore::RenderTextControlSingleLine::subtreeHasChanged):
        (WebCore::RenderTextControlSingleLine::updateFromElement):
        (WebCore::RenderTextControlSingleLine::createInnerBlockStyle):
        (WebCore::RenderTextControlSingleLine::createResultsButtonStyle):
        (WebCore::RenderTextControlSingleLine::createCancelButtonStyle):
        (WebCore::RenderTextControlSingleLine::createInnerSpinButtonStyle):
        (WebCore::RenderTextControlSingleLine::createOuterSpinButtonStyle):
        (WebCore::RenderTextControlSingleLine::createSpeechButtonStyle):
        (WebCore::RenderTextControlSingleLine::visibilityForCancelButton):
        (WebCore::RenderTextControlSingleLine::startSearchEventTimer):
        (WebCore::RenderTextControlSingleLine::searchEventTimerFired):
        (WebCore::RenderTextControlSingleLine::valueChanged):
        (WebCore::RenderTextControlSingleLine::setTextFromItem):
        (WebCore::RenderTextControlSingleLine::inputElement):
        * rendering/RenderTextControlSingleLine.h:
          Change the return type of inputElement(): InputElement* -> HTMLInputElement*.
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::isChecked):
          Follow the return type change of Node::toInputElement().
        (WebCore::RenderTheme::isIndeterminate): ditto.
        (WebCore::RenderTheme::shouldHaveSpinButton):
          Change the parameter type: InputElement* -> HTMLInputElement*.
        * rendering/RenderTheme.h: ditto.

2011-05-06  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Implement "Report-Only" mode for CSP
        https://bugs.webkit.org/show_bug.cgi?id=60402

        This mode lets web sites try out CSP by getting violation reports (and
        console spam) without actually changing the behavior of their web sites.

        Test: http/tests/security/contentSecurityPolicy/report-only.html

        * dom/Document.cpp:
        (WebCore::Document::processHttpEquiv):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::didBeginDocument):
        * page/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::ContentSecurityPolicy):
        (WebCore::ContentSecurityPolicy::didReceiveHeader):
        (WebCore::ContentSecurityPolicy::reportViolation):
        (WebCore::ContentSecurityPolicy::checkInlineAndReportViolation):
        (WebCore::ContentSecurityPolicy::checkEvalAndReportViolation):
        (WebCore::ContentSecurityPolicy::checkSourceAndReportViolation):
        (WebCore::ContentSecurityPolicy::allowJavaScriptURLs):
        * page/ContentSecurityPolicy.h:

2011-05-06  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=60421
        Custom scrollbars nested inside an overlay scrollbar overflow region end up 
        painting twice
        -and corresponding-
        <rdar://problem/9389072>

        Be sure not to paint custom css scrollbars during the special overlay-scrollbar 
        painting pass.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintOverflowControls):

2011-05-06  Cary Clark  <caryclark@google.com>

        Reviewed by Eric Seidel.

        Add utility for converting SkCanvas to CGContext
        https://bugs.webkit.org/show_bug.cgi?id=59808

        Skia on Mac uses Skia to render WebKit, and CG 
        to render UI elements. The CG elements need a 
        transcribed graphics context that preserves the 
        canvas matrix, and the canvas clip. 

        The BitLockerSkia utility class sets up a CGContext 
        from the SkCanvas, locks the bitmap's bits, and 
        releases the lock when the class goes out of scope. 

        Each time the CGContext is retrieved, it is rebuilt. 
        This permits the caller to modify the same canvas 
        between calls. 

        This change adds utilities but does not modify any 
        existing code. For now, there are no callers to these 
        utilities, so there is no functional change.

        No new tests.

        * platform/graphics/skia/BitLockerSkia.cpp: Added.
        (WebCore::SkMatrixToCGAffineTransform): Conversion utility.
        (WebCore::BitLockerSkia::BitLockerSkia): Takes SkCanvas.
        (WebCore::BitLockerSkia::~BitLockerSkia): Unlocks, cleans up.
        (WebCore::BitLockerSkia::release): Internal private helper.
        (WebCore::BitLockerSkia::cgContext): Returns CGContextRef.
        * platform/graphics/skia/BitLockerSkia.h: Added.

2011-05-06  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] [WebKit2] WebView::windowToScreen needs an implementation
        https://bugs.webkit.org/show_bug.cgi?id=55960

        Abstract coordinate system translation code from WebKit into WebCore.
        This will allow the code to be shared between WebKit and WebKit2. The code
        now lives in a new GtkUtilities.cpp helper file.

        * GNUmakefile.list.am: Added GtkUtilities to the source list.
        * platform/gtk/GtkUtilities.cpp: Added.
        (WebCore::convertWidgetRectToScreenRect):
        * platform/gtk/GtkUtilities.h: Added.

2011-05-06  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        Remove some unnecessary static methods in ResourceHandleSoup.

        No new tests. This is only a small cleanup.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::restartedCallback): Call ResourceResponse::updateFromSoupMessage directly.
        (WebCore::gotHeadersCallback):Ditto.
        (WebCore::contentSniffedCallback):Ditto.
        (WebCore::sendRequestCallback):Ditto.
        (WebCore::ResourceHandle::defaultSession): Create the soup session directly.

2011-05-06  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [Soup] ResourceHandles are leaked on 304 responses
        https://bugs.webkit.org/show_bug.cgi?id=60413

        Always call cleanupSoupRequestOperation, even when the request was not
        canceled. Before the code would call didFinishLoading and then never clean up
        the request.

        No new tests. This simply fixes a memory leak.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::sendRequestCallback):

2011-05-06  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add disable-javascript-urls CSP directive
        https://bugs.webkit.org/show_bug.cgi?id=60301

        This CSP directive is not in the CSP spec.  This patch is somewhat of
        an experiment to see whether this feature is useful.  Based on our
        implementation experience, we will coordinate with folks via the W3C to
        see if this makes sense to add to the spec.

        Test: http/tests/security/contentSecurityPolicy/javascript-urls-blocked.html

        * page/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::ContentSecurityPolicy):
        (WebCore::ContentSecurityPolicy::allowJavaScriptURLs):
        (WebCore::ContentSecurityPolicy::addDirective):
        * page/ContentSecurityPolicy.h:

2011-05-06  Brett Wilson  <brettw@chromium.org>

        Reviewed by Adam Barth.

        Use a File object to store the downloaded file reference rather than
        just the path. This keeps the file and permissions in scope (using the
        already-existing blob system) so the browser won't delete the file
        when the load is complete. Instead, the file will be cleaned up when
        the request objects are deleted.
        https://bugs.webkit.org/show_bug.cgi?id=60281

        * platform/network/chromium/ResourceResponse.cpp:
        (WebCore::ResourceResponse::doPlatformCopyData):
        (WebCore::ResourceResponse::doPlatformAdopt):
        * platform/network/chromium/ResourceResponse.h:
        (WebCore::ResourceResponse::downloadedFile):
        (WebCore::ResourceResponse::setDownloadedFile):

2011-05-06  Alexis Menard  <alexis.menard@openbossa.org>

        Reviewed by Darin Adler.

        Fix two warnings of unused variables.
        https://bugs.webkit.org/show_bug.cgi?id=60370

        Remove two unused local variable from the code.

        No new tests, the existing ones should cover.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutVerticalBox):
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::calculateNextProgressTime):

2011-05-06  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Wire up CSP's eval blocking to V8's new API
        https://bugs.webkit.org/show_bug.cgi?id=60384

        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::disableEval):

2011-05-06  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=60398 (<rdar://problem/9307696>)
        REGRESSION (r81684?): cox.com sign in button is missing
        
        Fix a typo in r81684 where the ascent was used in a comparison instead of boxHeight.
        This restores the original behavior before the refactoring messed it up.

        Added fast/inline/nested-top-alignment.html

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::computeLogicalBoxHeights):

2011-05-06  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=60390 (<rdar://problem/9364449>)
        REGRESSION (r81992): portions of ticketmaster site render blank

        Make simplified layout skip from a positioned object out to its containing block.  There is no
        need to dirty the intermediate inlines, and in this case it's actively harmful, since the
        block responsible for the layout of the positioned object doesn't get m_posChildNeedsLayout set.

        Added fast/block/positioning/hiding-inside-relpositioned-inline.html

        * rendering/RenderObject.h:
        (WebCore::RenderObject::markContainingBlocksForLayout):

2011-05-06  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: move selection test into the text area branch.

        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer.prototype._contextMenu):

2011-05-04  Adrienne Walker  <enne@google.com>

        Reviewed by James Robinson.

        [chromium] Fix incorrect scissor rect for layers that render into a rendersurface
        https://bugs.webkit.org/show_bug.cgi?id=59020

        Allow for empty scissor rects, which implies scissoring to the render
        surface. The previous code and previous patch on this bug both didn't
        take into account that the scissor rect should be the render surface
        and not the projection of the layer itself, because child layers
        aren't necessarily contained within the bounds of their superlayer.

        Test: compositing/flat-with-transformed-child.html

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::paintLayerContents):
        (WebCore::LayerRendererChromium::updatePropertiesAndRenderSurfaces):
        (WebCore::LayerRendererChromium::drawLayer):
        (WebCore::LayerRendererChromium::setScissorToRect):

2011-05-06  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Sam Weinig.

        Lazily allocate ScrollAnimator in ScrollableArea
        https://bugs.webkit.org/show_bug.cgi?id=60327

        Avoid allocating the ScrollAnimator up-front, because we
        create lots of ScrollableAreas via RenderLayer, and we should
        only need the animator when scrolling.

        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::ScrollableArea):
        (WebCore::ScrollableArea::scrollAnimator):
        (WebCore::ScrollableArea::scroll):
        (WebCore::ScrollableArea::scrollToOffsetWithoutAnimation):
        (WebCore::ScrollableArea::scrollToXOffsetWithoutAnimation):
        (WebCore::ScrollableArea::scrollToYOffsetWithoutAnimation):
        (WebCore::ScrollableArea::handleWheelEvent):
        (WebCore::ScrollableArea::handleGestureEvent):
        * platform/ScrollableArea.h:

2011-05-06  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Darin Adler.

        REGRESSION (r77954): HTTP Live Streams have incorrect controller UI
        https://bugs.webkit.org/show_bug.cgi?id=60304
        <rdar://problem/9392609>

        Don't assume that the only time the media controls UI may need to change is on a 
        network state change, readyState changes can be significant as well.

        Tested manually because we don't have any live streams to test in DRT.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setNetworkState): changedNetworkState -> updateStatusDisplay.
        (WebCore::HTMLMediaElement::setReadyState): Call updateStatusDisplay.

        * html/shadow/MediaControlRootElement.cpp:
        (WebCore::MediaControlRootElement::reset): changedNetworkState -> updateStatusDisplay.
        (WebCore::MediaControlRootElement::updateStatusDisplay): Ditto.
        * html/shadow/MediaControlRootElement.h:

        * html/shadow/MediaControlRootElementChromium.cpp:
        (WebCore::MediaControlRootElementChromium::reset): Ditto.
        (WebCore::MediaControlRootElementChromium::updateStatusDisplay): Ditto.
        * html/shadow/MediaControlRootElementChromium.h:
        * html/shadow/MediaControls.h:

2011-05-06  Andreas Kling  <andreas.kling@nokia.com>

        Unreviewed Qt 4.8 build fix.

        * WebCore.pro: Don't set HAVE_QRAWFONT yet. Left a FIXME so we can
        enable it after the 4.8 bots are updated with the full QRawFont APIs.

2011-05-06  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: editing CSS in the Resources panel and not committing does not revert the change.
        https://bugs.webkit.org/show_bug.cgi?id=60319

        * inspector/front-end/ResourceView.js:
        (WebInspector.ResourceSourceFrame.prototype.cancelEditing):

2011-05-06  Joe Mason  <jmason@rim.com>

        Reviewed by Adam Barth.

        WebSocket urls should always be encoded as UTF-8.
        https://bugs.webkit.org/show_bug.cgi?id=57138

        Change WebSocket::connect to take the raw URL string and parse it
        internally using the simple KURL constructor, which expects an absolute
        UTF-8 encoded URL.  This ensures that all code that creates a WebSocket
        goes through this method instead of completeURL.

        Test: http/tests/websocket/tests/url-with-nonascii-query.html

        * bindings/js/JSWebSocketCustom.cpp:
        (WebCore::JSWebSocketConstructor::constructJSWebSocket): Pass String instead of KURL to WebSocket::connect().
        * websockets/WebSocket.cpp:
        (WebCore::WebSocket::connect): Now takes a String instead of a KURL and parses it using UTF-8.
        * websockets/WebSocket.h:

2011-05-06  Luke Macpherson   <macpherson@chromium.org>

        Reviewed by Eric Seidel.

        Make CSSStyleSelector::applyProperty() CSSPropertyWebkitColorCorrection case use appropriate macro.
        https://bugs.webkit.org/show_bug.cgi?id=60339

        No tests added as no functionality changed.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        Use correct macro for CSSPropertySpeak.
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::initialColorSpace):
        Add initialColorSpace() static method.

2011-05-06  Luke Macpherson   <macpherson@chromium.org>

        Reviewed by Eric Seidel.

        Make RenderStyle::setPageBreakInside() reject unsupported enum values.
        https://bugs.webkit.org/show_bug.cgi?id=60235

        No tests added as no functionality changed.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        Remove special-case code and use appropriate macro.
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::setPageBreakInside):
        Assert that only supported values are used.

2011-05-06  Luke Macpherson   <macpherson@chromium.org>

        Reviewed by Eric Seidel.

        Move burden of checking for BJustify box alignment into RenderStyle
        https://bugs.webkit.org/show_bug.cgi?id=60246

        No new tests added as no functionality changed.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        Remove special-case logic checking for BJUSTIFY and use existing macro.
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::setBoxAlign):
        Assert valid values are used.

2011-05-06  Luke Macpherson   <macpherson@chromium.org>

        Reviewed by Eric Seidel.

        Make CSSStyleSelector::applyProperty() CSSPropertyPointerEvents use the correct macro.
        https://bugs.webkit.org/show_bug.cgi?id=60338

        No tests added as no functionality changed.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        Use correct macro for CSSPropertySpeak.

2011-05-06  Alexis Menard  <alexis.menard@openbossa.org>

        Reviewed by Alexey Proskuryakov.

        Build fix with gcc 4.6 and c++0x support.
        https://bugs.webkit.org/show_bug.cgi?id=60284

        When enabling support of c++0x the compilation fails because of an
        ambiguous overload error. In this code when constructing the pair
        we use the new c++0x rvalue reference feature (&&). It means we are
        calling String(const WTF::AtomicString&) which becomes ambiguous because
        it has an overload WTF::String::String(const WTF::String&) and usually one
        with the native port string type (e.g. QString). In this code we want the
        String version because the pair store Strings.

        No new tests, build fix.

        * loader/FormSubmission.cpp:
        (WebCore::FormSubmission::create):

2011-05-06  Cris Neckar  <cdn@chromium.org>

        Reviewed by Dirk Schulze.

        Tests for crash when a transform is applied to certain filters.
        https://bugs.webkit.org/show_bug.cgi?id=59551

        Test: svg/filters/filter-after-transform-crash.svg

        * platform/graphics/filters/FEComposite.cpp:
        (WebCore::FEComposite::determineAbsolutePaintRect):
        * platform/graphics/filters/FEConvolveMatrix.h:
        (WebCore::FEConvolveMatrix::determineAbsolutePaintRect):
        * platform/graphics/filters/FEDisplacementMap.h:
        (WebCore::FEDisplacementMap::determineAbsolutePaintRect):
        * platform/graphics/filters/FEFlood.h:
        (WebCore::FEFlood::determineAbsolutePaintRect):
        * platform/graphics/filters/FELighting.h:
        (WebCore::FELighting::determineAbsolutePaintRect):
        * platform/graphics/filters/FETile.h:
        (WebCore::FETile::determineAbsolutePaintRect):
        * platform/graphics/filters/FETurbulence.h:
        (WebCore::FETurbulence::determineAbsolutePaintRect):
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::isFilterSizeValid):
        (WebCore::FilterEffect::determineAbsolutePaintRect):
        (WebCore::FilterEffect::asUnmultipliedImage):
        (WebCore::FilterEffect::asPremultipliedImage):
        (WebCore::FilterEffect::copyUnmultipliedImage):
        (WebCore::FilterEffect::copyPremultipliedImage):
        (WebCore::FilterEffect::createUnmultipliedImageResult):
        (WebCore::FilterEffect::createPremultipliedImageResult):
        * platform/graphics/filters/FilterEffect.h:
        (WebCore::FilterEffect::maxEffectRect):
        (WebCore::FilterEffect::setMaxEffectRect):
        * rendering/svg/RenderSVGResourceFilter.cpp:
        * rendering/svg/RenderSVGResourceFilterPrimitive.cpp:
        (WebCore::RenderSVGResourceFilterPrimitive::determineFilterPrimitiveSubregion):

2011-05-06  Luke Macpherson   <macpherson@chromium.org>

        Reviewed by Eric Seidel.

        Use cast to convert primitive value to FontSmoothingMode.
        https://bugs.webkit.org/show_bug.cgi?id=60242

        No tests added as no functionality changed.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        Use cast to convert primitive value to FontSmoothingMode.

2011-05-05  Luke Macpherson   <macpherson@chromium.org>

        Reviewed by Eric Seidel.

        Make CSSPropertySpeak use the correct macro.
        https://bugs.webkit.org/show_bug.cgi?id=60335

        No tests added as no functionality changed.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        Use correct macro for CSSPropertySpeak.

2011-05-05  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Maciej Stachowiak.

        <rdar://problem/9390864>
        https://bugs.webkit.org/show_bug.cgi?id=60343
        Crash on Recovery System when trying to load page that includes media element

        Automated test not possible, tested manually.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::isAvailable): Only return true if
            AVFoundation and CoreMedia are installed.

        * platform/mac/SoftLinking.h: Define SOFT_LINK_FRAMEWORK_OPTIONAL, identical to 
            SOFT_LINK_FRAMEWORK except that it doesn't ASSERT if the framework doesn't exist.

2011-05-05  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Darin Adler.

        Live streams sometimes won't play with AVFoundation backend
        https://bugs.webkit.org/show_bug.cgi?id=58961
        rdar://problem/9284748

        Tested manually because we don't have any live streams to test in DRT.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::updateStates): Don't special case seeking, assume
            AVFoundation will notify us when internal states change.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.h: Make m_timeObserver
            a RetainPtr
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::MediaPlayerPrivateAVFoundationObjC): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::cancelLoad): Ditto.

2011-05-05  Jay Civelli  <jcivelli@chromium.org>

        Reviewed by Adam Barth.

        Adding quoted-printable encoding/decoding capabilities.
        This is needed for MHTML support.
        https://bugs.webkit.org/show_bug.cgi?id=59834

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/text/QuotedPrintable.cpp: Added.
        * platform/text/QuotedPrintable.h: Added.

2011-05-05  Andy Estes  <aestes@apple.com>

        Reviewed by Eric Seidel.

        Implement document.innerHTML
        https://bugs.webkit.org/show_bug.cgi?id=60316

        ASSERT that contextElement is non-0 when constructing a HTMLTreeBuilder
        for fragment parsing. This assertion will become invalid when
        document.innerHTML is implemented, which is the only case where HTML5
        specifies that a fragment will not have a context element.

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::HTMLTreeBuilder):

2011-05-05  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fix. Include ApplicationServices for wx port.

        * platform/graphics/GlyphBuffer.h:
        * platform/graphics/mac/ComplexTextControllerCoreText.cpp:

2011-05-05  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        WebCore part of <rdar://problem/9155590> Broken animation in iAd producer

        * WebCore.exp.in: Export wkExecutableWasLinkedOnOrBeforeSnowLeopard.
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::createTransformAnimationsFromKeyframes): Account for the binary-compatiblity
        check in Core Animation.
        * platform/mac/WebCoreSystemInterface.h: Added wkExecutableWasLinkedOnOrBeforeSnowLeopard.
        * platform/mac/WebCoreSystemInterface.mm: Ditto.

2011-05-05  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        WebKit2 (Mac): Background tabs/windows can force themselves to the front
        <rdar://problem/9386346>
        https://bugs.webkit.org/show_bug.cgi?id=60315

        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::setFocus):
        It is incorrect for us to call Chrome::focus() here, which could bring a window/tab
        to the front. Calling focusNSView() was only necessary because in WebKit we must inform
        the platform widget that the focus has changed. WebKit2 Mac now matches other ports.

2011-05-05  Justin Novosad  <junov@chromium.org>

        Reviewed by Kenneth Russell.

        [Chromium] Change the --accelerated-2d-canvas flag to mean Ganesh, and stop using --enable-accelerated-drawing for that purpose
        https://bugs.webkit.org/show_bug.cgi?id=60173

        * page/Page.cpp:
        (WebCore::Page::sharedGraphicsContext3D):
        Flipping the switch to make Skia the default for the accelerated 2d canvas

2011-05-05  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Adam Barth.

        ASSERT(m_state == ParsingState) fires @ www.canalplus.fr
        https://bugs.webkit.org/show_bug.cgi?id=60101

        Test: fast/parser/close-while-stopping.html

        * dom/Document.cpp:
        (WebCore::Document::close): According to http://www.whatwg.org/specs/web-apps/current-work/#dom-document-close,
        the close() steps should be aborted if there is no script-created parser
        associated with the document. Our parser lives throughout
        http://www.whatwg.org/specs/web-apps/current-work/#the-end, but it seems
        the spec doesn't consider the parser active any more. So to properly
        respect this, we need to check that the parser is still parsing.

2011-04-28  Evan Martin  <evan@chromium.org>

        Reviewed by Ojan Vafai.

        REGRESSION: backspace should not go back on Linux
        https://bugs.webkit.org/show_bug.cgi?id=59731

        Add a new EditingBehavior, shouldNavigateBackOnBackspace, which is false on
        Linux, and test for it in the default backspace handler.

        * editing/EditingBehavior.h:
        (WebCore::EditingBehavior::shouldNavigateBackOnBackspace):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::defaultBackspaceEventHandler):

2011-05-05  Igor Oliveira  <igor.oliveira@openbossa.org>

        Reviewed by Kenneth Russell.

        Framebuffer object is being created twice
        https://bugs.webkit.org/show_bug.cgi?id=60207

        Does not create more than one opengl framebuffer

        * platform/graphics/gpu/mac/DrawingBufferMac.mm:
        (WebCore::DrawingBuffer::DrawingBuffer):
        * platform/graphics/gpu/qt/DrawingBufferQt.cpp:
        (WebCore::DrawingBuffer::DrawingBuffer):
        * platform/graphics/gtk/DrawingBufferGtk.cpp:
        (WebCore::DrawingBuffer::DrawingBuffer):

2011-05-05  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Beth Dakin.

        Every RenderLayer registers itself as a ScrollableArea
        https://bugs.webkit.org/show_bug.cgi?id=59650

        Rather than registering every RenderLayer as a ScrollableArea
        on layer creation, only register RenderLayers which are overflow-
        scrollable. Use the m_scrollableAreaPage pointer to keep track
        of whether we've registered to avoid excess work.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::scrollsOverflow):
        (WebCore::RenderLayer::styleChanged):
        * rendering/RenderLayer.h:

2011-05-05  Jer Noble  <jer.noble@apple.com>

        Reviewed by Steve Falkenburg.

        Workaround iTunes' incorrect registry entry for .m4a extensions.
        https://bugs.webkit.org/show_bug.cgi?id=60229

        No new tests, as a test already exits for .m4a support (LayoutTests/media/audio-mpeg4-supported.html).
        The test failed to catch this regression because the build bots haven't installed iTunes.
        
        Add a hard-coded MIME type mapping for 'm4a' -> 'audio/x-m4a'.

        * platform/win/MIMETypeRegistryWin.cpp:
        (WebCore::MIMETypeRegistry::getMIMETypeForExtension):

2011-05-05  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Dave Hyatt.

        When style changes for a RenderBlock and we lose our ability to intrude into
        floats in the next siblings block (e.g a position change), make sure to mark
        our childs with floats for layout and iterate through our next sibling block
        chain to see which ones contain the float that also exists in our floating
        objects list and clear those using markAllDescendantsWithFloatsForLayout.
        https://bugs.webkit.org/show_bug.cgi?id=56299

        Tests: fast/block/float/float-not-removed-from-next-sibling-crash.html
               fast/block/float/float-not-removed-from-next-sibling.html
               fast/block/float/float-not-removed-from-next-sibling2.html
               fast/block/float/float-not-removed-from-next-sibling3.html
               fast/block/float/float-not-removed-from-next-sibling4.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::styleWillChange):
        (WebCore::RenderBlock::styleDidChange):
        (WebCore::RenderBlock::markSiblingsWithFloatsForLayout):
        * rendering/RenderBlock.h:

2011-05-05  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Timothy Hatcher.

        WebKit2: Docking Web Inspector doesn't respect maximum inspector size
        https://bugs.webkit.org/show_bug.cgi?id=60294
        <rdar://problem/9388518>

        Make a needed function public and export it.

        * WebCore.exp.in: Export constrainedAttaechedWindowHeight.
        * inspector/InspectorFrontendClientLocal.h: Make constrainedAttaechedWindowHeight public.

2011-05-05  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Nate Chapin.

        [Navigation Timing] navigationStart should always be available
        https://bugs.webkit.org/show_bug.cgi?id=59448

        * page/PerformanceTiming.cpp:
        (WebCore::PerformanceTiming::navigationStart):

2011-05-05  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Adam Roben.

        Block callbacks delivered during destruction
        https://bugs.webkit.org/show_bug.cgi?id=60291
        <rdar://problem/9382942>

        No new tests, tested by existing tests.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::~MediaPlayerPrivateAVFoundation): Call 
            setIgnoreLoadStateChanges(true) to cancel all callbacks.
        (WebCore::MediaPlayerPrivateAVFoundation::updateStates): Return immediately if 
            m_ignoreLoadStateChanges is true.
        (WebCore::MediaPlayerPrivateAVFoundation::dispatchNotification): loadStateChanged -> updateStates.
            Don't call updateStates after calling loadedTimeRangesChanged, it already does it.
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:

2011-05-05  David Hyatt  <hyatt@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/9354979> REGRESSION (r83070-r83126): Conversation takes 10 seconds to load and makes mail unresponsive

        Culled inlines were triggering some pathological line box tree groveling that isn't even necessary.
        Removed the ancient code (that used to be in RenderFlow), since it made no sense in the RenderBlock case
        (it was running for inline blocks, which was definitely not even the intent) or in the RenderInline case
        (the object being removed has no effect on any lines).
        
        Also tweaked culledInlineFirstLineBox and culledInlineLastLineBox to avoid bailing if the first replaced object that
        is encountered has a null inlineBoxWrapper().  Just a slight speed optimization to avoid an extra null check.
        
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::destroy):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::destroy):
        (WebCore::RenderInline::culledInlineFirstLineBox):
        (WebCore::RenderInline::culledInlineLastLineBox):

2011-05-05  Bharathwaaj Srinivasan  <bharathwaaj.s@gmail.com>

        Reviewed by Holger Freyther.

        Fix build-webkit --minimal.
        https://bugs.webkit.org/show_bug.cgi?id=60257

        No new tests. This is just a build fix.

        * bindings/js/JSDOMBinding.cpp:

2011-05-05  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Adam Roben.

        The preload attribute of the video tag is not completely implemented
        https://bugs.webkit.org/show_bug.cgi?id=43673
        <rdar://problem/9369746>

        This change implements "preload=metadata" for the AVFoundation backend.
        Tested manually with manual-tests/media-elements/video-preload.html.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): Initialize m_havePreparedToPlay.
        (WebCore::HTMLMediaElement::prepareForLoad): Ditto.
        (WebCore::HTMLMediaElement::prepareToPlay): New, tell player to prepare to play.
        (WebCore::HTMLMediaElement::seek): Call prepareToPlay when preload is less than 'auto'
            because we need to have media data loaded to seek.
        (WebCore::HTMLMediaElement::updatePlayState): Call prepareToPlay.
        * html/HTMLMediaElement.h:

        * manual-tests/media-elements/video-preload.html: Make changing urls work. 

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::MediaPlayerPrivateAVFoundation):  Remove 
            m_videoFrameHasDrawn and m_delayingLoad as they are no longer used.
        (WebCore::MediaPlayerPrivateAVFoundation::resumeLoad): Removed.
        (WebCore::MediaPlayerPrivateAVFoundation::load): Don't initialize m_videoFrameHasDrawn. 
            Move all preload logic to setPreload, call it from here.
        (WebCore::MediaPlayerPrivateAVFoundation::prepareToPlay): Move all preload logic to 
            setPreload, call it.
        (WebCore::MediaPlayerPrivateAVFoundation::duration): Don't cache duration = 0, it is
            unlikely to be correct and isn't worth caching. Use invalidTime() function.
        (WebCore::MediaPlayerPrivateAVFoundation::seeking): Use invalidTime() function.
        (WebCore::MediaPlayerPrivateAVFoundation::setNaturalSize): Add logging.
        (WebCore::MediaPlayerPrivateAVFoundation::updateStates): Update for name change AVAssetStatus
            to AssetStatus. Always create a AVPlayerItem for live streams because they can't be inspected
            without one. Set networkState to 'idle' when the playback buffer is full because that is
            a signal that AVFoundation won't do any more IO. Set readyState to 'HAVE_CURRENT_DATA' 
            when the first frame is available.
        (WebCore::MediaPlayerPrivateAVFoundation::metadataLoaded): Call tracksChanged so we cache
            width, height, hasVideo, etc.
        (WebCore::MediaPlayerPrivateAVFoundation::loadedTimeRangesChanged): Use invalidTime() function.
        (WebCore::MediaPlayerPrivateAVFoundation::timeChanged): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundation::seekCompleted): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundation::repaint): Don't set m_videoFrameHasDrawn, it is done
            in derived classes.
        (WebCore::MediaPlayerPrivateAVFoundation::setPreload): Centralize all logic about when to create
            AVAsset and AVPlayerItem here.
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::MediaPlayerPrivateAVFoundationObjC): Initialize
            m_videoFrameHasDrawn.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::hasAvailableVideoFrame): New, renamed from
            videoLayerIsReadyToDisplay. Return true if we have a layer with frames available or
            if we have painted a frame to the context.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVAssetForURL): New, create the AVAsset
            if necessary.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVAssetForCacheResource): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayer): Restructure logic.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerItem): New, create AVPlayerItem.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::beginLoadingMetadata): Correct logging.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::playerItemStatus): Return "buffer full" when
            the buffer is full.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformDuration): Get the duration from the
            AVAsset when we haven't allocated the AVPlayerItem yet so that we can return duration
            when we only have metadata.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::assetStatus): Update for name change.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::paint): Set m_videoFrameHasDrawn.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::tracksChanged): Get attributes from AVAsset
            when when we haven't allocated the AVPlayerItem yet so that we can report attributes
            when we only have metadata.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::sizeChanged): Guard against being called before
            we have allocated the AVPlayerItem.

2011-05-05  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        Rename SelectionController to FrameSelection
        https://bugs.webkit.org/show_bug.cgi?id=60234

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.exp.in:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * accessibility/AccessibilityObject.cpp:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::visiblePositionRangeForLine):
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        * bindings/objc/ExceptionHandlers.h:
        * css/CSSStyleSelector.cpp:
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::cloneChildNodes):
        * dom/Document.cpp:
        * dom/InputElement.cpp:
        * editing/DeleteButtonController.cpp:
        * editing/EditCommand.cpp:
        * editing/EditingAllInOne.cpp:
        * editing/EditingStyle.cpp:
        * editing/Editor.cpp:
        (WebCore::Editor::canCopy):
        (WebCore::Editor::canDelete):
        (WebCore::Editor::markMisspellingsAfterTypingToWord):
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges):
        (WebCore::Editor::changeSelectionAfterCommand):
        (WebCore::Editor::respondToChangedSelection):
        * editing/Editor.h:
        * editing/EditorCommand.cpp:
        (WebCore::executeDeleteToMark):
        (WebCore::executeMoveBackward):
        (WebCore::executeMoveBackwardAndModifySelection):
        (WebCore::executeMoveDown):
        (WebCore::executeMoveDownAndModifySelection):
        (WebCore::executeMoveForward):
        (WebCore::executeMoveForwardAndModifySelection):
        (WebCore::executeMoveLeft):
        (WebCore::executeMoveLeftAndModifySelection):
        (WebCore::executeMovePageDown):
        (WebCore::executeMovePageDownAndModifySelection):
        (WebCore::executeMovePageUp):
        (WebCore::executeMovePageUpAndModifySelection):
        (WebCore::executeMoveRight):
        (WebCore::executeMoveRightAndModifySelection):
        (WebCore::executeMoveToBeginningOfDocument):
        (WebCore::executeMoveToBeginningOfDocumentAndModifySelection):
        (WebCore::executeMoveToBeginningOfLine):
        (WebCore::executeMoveToBeginningOfLineAndModifySelection):
        (WebCore::executeMoveToBeginningOfParagraph):
        (WebCore::executeMoveToBeginningOfParagraphAndModifySelection):
        (WebCore::executeMoveToBeginningOfSentence):
        (WebCore::executeMoveToBeginningOfSentenceAndModifySelection):
        (WebCore::executeMoveToEndOfDocument):
        (WebCore::executeMoveToEndOfDocumentAndModifySelection):
        (WebCore::executeMoveToEndOfSentence):
        (WebCore::executeMoveToEndOfSentenceAndModifySelection):
        (WebCore::executeMoveToEndOfLine):
        (WebCore::executeMoveToEndOfLineAndModifySelection):
        (WebCore::executeMoveToEndOfParagraph):
        (WebCore::executeMoveToEndOfParagraphAndModifySelection):
        (WebCore::executeMoveParagraphBackwardAndModifySelection):
        (WebCore::executeMoveParagraphForwardAndModifySelection):
        (WebCore::executeMoveUp):
        (WebCore::executeMoveUpAndModifySelection):
        (WebCore::executeMoveWordBackward):
        (WebCore::executeMoveWordBackwardAndModifySelection):
        (WebCore::executeMoveWordForward):
        (WebCore::executeMoveWordForwardAndModifySelection):
        (WebCore::executeMoveWordLeft):
        (WebCore::executeMoveWordLeftAndModifySelection):
        (WebCore::executeMoveWordRight):
        (WebCore::executeMoveWordRightAndModifySelection):
        (WebCore::executeMoveToLeftEndOfLine):
        (WebCore::executeMoveToLeftEndOfLineAndModifySelection):
        (WebCore::executeMoveToRightEndOfLine):
        (WebCore::executeMoveToRightEndOfLineAndModifySelection):
        * editing/FrameSelection.cpp: Copied from Source/WebCore/editing/SelectionController.cpp.
        (WebCore::FrameSelection::FrameSelection):
        (WebCore::FrameSelection::moveTo):
        (WebCore::FrameSelection::setSelection):
        (WebCore::FrameSelection::nodeWillBeRemoved):
        (WebCore::FrameSelection::respondToNodeModification):
        (WebCore::FrameSelection::textWillBeReplaced):
        (WebCore::FrameSelection::setIsDirectional):
        (WebCore::FrameSelection::directionOfEnclosingBlock):
        (WebCore::FrameSelection::willBeModified):
        (WebCore::FrameSelection::positionForPlatform):
        (WebCore::FrameSelection::startForPlatform):
        (WebCore::FrameSelection::endForPlatform):
        (WebCore::FrameSelection::modifyExtendingRight):
        (WebCore::FrameSelection::modifyExtendingForward):
        (WebCore::FrameSelection::modifyMovingRight):
        (WebCore::FrameSelection::modifyMovingForward):
        (WebCore::FrameSelection::modifyExtendingLeft):
        (WebCore::FrameSelection::modifyExtendingBackward):
        (WebCore::FrameSelection::modifyMovingLeft):
        (WebCore::FrameSelection::modifyMovingBackward):
        (WebCore::FrameSelection::modify):
        (WebCore::FrameSelection::xPosForVerticalArrowNavigation):
        (WebCore::FrameSelection::clear):
        (WebCore::FrameSelection::setStart):
        (WebCore::FrameSelection::setEnd):
        (WebCore::FrameSelection::setBase):
        (WebCore::FrameSelection::setExtent):
        (WebCore::FrameSelection::setCaretRectNeedsUpdate):
        (WebCore::FrameSelection::updateCaretRect):
        (WebCore::FrameSelection::caretRenderer):
        (WebCore::FrameSelection::localCaretRect):
        (WebCore::FrameSelection::absoluteBoundsForLocalRect):
        (WebCore::FrameSelection::absoluteCaretBounds):
        (WebCore::FrameSelection::caretRepaintRect):
        (WebCore::FrameSelection::recomputeCaretRect):
        (WebCore::FrameSelection::shouldRepaintCaret):
        (WebCore::FrameSelection::invalidateCaretRect):
        (WebCore::FrameSelection::paintCaret):
        (WebCore::FrameSelection::debugRenderer):
        (WebCore::FrameSelection::contains):
        (WebCore::FrameSelection::selectFrameElementInParentIfFullySelected):
        (WebCore::FrameSelection::selectAll):
        (WebCore::FrameSelection::setSelectedRange):
        (WebCore::FrameSelection::isInPasswordField):
        (WebCore::FrameSelection::caretRendersInsideNode):
        (WebCore::FrameSelection::focusedOrActiveStateChanged):
        (WebCore::FrameSelection::pageActivationChanged):
        (WebCore::FrameSelection::updateSecureKeyboardEntryIfActive):
        (WebCore::FrameSelection::setUseSecureKeyboardEntry):
        (WebCore::FrameSelection::setFocused):
        (WebCore::FrameSelection::isFocusedAndActive):
        (WebCore::FrameSelection::updateAppearance):
        (WebCore::FrameSelection::setCaretVisible):
        (WebCore::FrameSelection::clearCaretRectIfNeeded):
        (WebCore::FrameSelection::caretBlinkTimerFired):
        (WebCore::FrameSelection::notifyRendererOfSelectionChange):
        (WebCore::FrameSelection::setFocusedNodeIfNeeded):
        (WebCore::FrameSelection::paintDragCaret):
        (WebCore::FrameSelection::copyTypingStyle):
        (WebCore::FrameSelection::shouldDeleteSelection):
        (WebCore::FrameSelection::bounds):
        (WebCore::FrameSelection::getClippedVisibleTextRectangles):
        (WebCore::FrameSelection::currentForm):
        (WebCore::FrameSelection::revealSelection):
        (WebCore::FrameSelection::setSelectionFromNone):
        (WebCore::FrameSelection::shouldChangeSelection):
        (WebCore::FrameSelection::formatForDebugger):
        (WebCore::FrameSelection::showTreeForThis):
        (showTree):
        * editing/FrameSelection.h: Copied from Source/WebCore/editing/SelectionController.h.
        (WebCore::FrameSelection::typingStyle):
        (WebCore::FrameSelection::clearTypingStyle):
        (WebCore::FrameSelection::setTypingStyle):
        (WebCore::FrameSelection::notifyAccessibilityForSelectionChange):
        * editing/ModifySelectionListLevel.cpp:
        * editing/RemoveFormatCommand.cpp:
        * editing/ReplaceSelectionCommand.cpp:
        * editing/SelectionController.cpp: Removed.
        * editing/SelectionController.h: Removed.
        * editing/SetSelectionCommand.cpp:
        (WebCore::SetSelectionCommand::SetSelectionCommand):
        (WebCore::SetSelectionCommand::doApply):
        (WebCore::SetSelectionCommand::doUnapply):
        * editing/SetSelectionCommand.h:
        (WebCore::SetSelectionCommand::create):
        * editing/SpellingCorrectionCommand.cpp:
        (WebCore::SpellingCorrectionCommand::doApply):
        * editing/SpellingCorrectionController.cpp:
        (WebCore::SpellingCorrectionController::respondToUnappliedSpellCorrection):
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::deleteKeyPressed):
        (WebCore::TypingCommand::forwardDeleteKeyPressed):
        * editing/chromium/FrameSelectionChromium.cpp: Copied from Source/WebCore/editing/chromium/SelectionControllerChromium.cpp.
        (WebCore::FrameSelection::notifyAccessibilityForSelectionChange):
        * editing/chromium/SelectionControllerChromium.cpp: Removed.
        * editing/gtk/FrameSelectionGtk.cpp: Copied from Source/WebCore/editing/gtk/SelectionControllerGtk.cpp.
        (WebCore::FrameSelection::notifyAccessibilityForSelectionChange):
        * editing/gtk/SelectionControllerGtk.cpp: Removed.
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::canCopyExcludingStandaloneImages):
        * editing/mac/FrameSelectionMac.mm: Copied from Source/WebCore/editing/mac/SelectionControllerMac.mm.
        (WebCore::FrameSelection::notifyAccessibilityForSelectionChange):
        * editing/mac/SelectionControllerMac.mm: Removed.
        * editing/qt/EditorQt.cpp:
        * loader/archive/cf/LegacyWebArchive.cpp:
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::populate):
        * page/DOMSelection.cpp:
        (WebCore::DOMSelection::type):
        (WebCore::DOMSelection::modify):
        (WebCore::DOMSelection::addRange):
        (WebCore::DOMSelection::deleteFromDocument):
        (WebCore::DOMSelection::containsNode):
        * page/DragController.cpp:
        (WebCore::DragController::dragIsMove):
        * page/DragController.h:
        * page/EventHandler.cpp:
        (WebCore::setSelectionIfNeeded):
        (WebCore::setNonDirectionalSelectionIfNeeded):
        (WebCore::EventHandler::sendContextMenuEventForKey):
        (WebCore::EventHandler::handleKeyboardSelectionMovement):
        * page/EventHandler.h:
        * page/FocusController.cpp:
        (WebCore::clearSelectionIfNeeded):
        * page/Frame.cpp:
        (WebCore::Frame::Frame):
        * page/Frame.h:
        (WebCore::Frame::selection):
        * page/Page.cpp:
        (WebCore::Page::Page):
        * page/Page.h:
        (WebCore::Page::dragCaretController):
        * page/chromium/DragControllerChromium.cpp:
        * page/chromium/EventHandlerChromium.cpp:
        * page/win/DragControllerWin.cpp:
        * page/win/EventHandlerWin.cpp:
        * rendering/HitTestResult.cpp:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::destroy):
        (WebCore::RenderBlock::paintCaret):
        * rendering/RenderImage.cpp:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::destroy):
        * rendering/RenderLayer.cpp:
        * rendering/RenderListBox.cpp:
        * rendering/RenderObjectChildList.cpp:
        (WebCore::RenderObjectChildList::removeChildNode):
        * rendering/RenderTextControl.cpp:
        * rendering/RenderTextControlSingleLine.cpp:
        * rendering/RenderTheme.cpp:
        * rendering/RenderTreeAsText.cpp:
        * svg/SVGSVGElement.cpp:
        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::selectSubString):

2011-05-05  Brent Fulgham  <bfulgham@webkit.org>

        [WinCairo] unreviewed build correction.

        * platform/network/curl/ResourceRequest.h:
        Stub out the new pipelined http logic for cURL.

2011-05-05  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: searching for node does not result in bringToFront call.
        https://bugs.webkit.org/show_bug.cgi?id=60222

        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.updateFocusedNode):

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

        Reviewed by Simon Hausmann.

        [Qt] Implement the fast font path for Qt.
        https://bugs.webkit.org/show_bug.cgi?id=51106

        Use the new QRawFont and QGlyphs APIs in Qt 4.8 to implement the fast paths for
        rendering and measurement of simple text.

        Since this is still unreleased API, it's guarded by HAVE(QRAWFONT) until the new
        classes are fully integrated into the Qt 4.8 release branch.

        * WebCore.pro: Add HAVE_QRAWFONT define (for Qt >= 4.8) and new files to build.

        * platform/graphics/Font.cpp:
        (WebCore::Font::drawText): Disable fast font path for stroked text, and when
        painting text with a shadow. (Qt-only)
        (WebCore::Font::codePath): Try to use fast font path in more cases.

        * platform/graphics/qt/FontCacheQt.cpp:
        (WebCore::rawFontForCharacters): Helper function, returns a suitable QRawFont
        to use for rendering a given string. Goes through QTextLayout to find the best
        font based on the original QFont query.
        (WebCore::FontCache::getFontDataForCharacters): Implemented using helper above.

        * platform/graphics/qt/FontPlatformData.h:
        (WebCore::FontPlatformDataPrivate::FontPlatformDataPrivate):
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::rawFont):
        * platform/graphics/qt/FontPlatformDataQt.cpp:
        (WebCore::FontPlatformData::FontPlatformData): Add a QRawFont member to FontPlatformData.

        * platform/graphics/qt/FontQt.cpp:
        (WebCore::fillPenForContext):
        (WebCore::strokePenForContext):
        (WebCore::drawTextCommon): Factored QPen creation out of drawTextCommon
        to share code between complex and simple font rendering paths.
        (WebCore::Font::drawGlyphs): Implemented using QPainter::drawGlyphs().

        * platform/graphics/qt/GlyphPageTreeNodeQt.cpp:
        (WebCore::GlyphPage::fill): Implemented using QRawFont::glyphIndexesForString().

        * platform/graphics/qt/SimpleFontDataQt.cpp:
        (WebCore::SimpleFontData::determinePitch): Return false when using QRawFont since we
        have no way of knowing the pitch.
        (WebCore::SimpleFontData::containsCharacters): Implemented using QRawFont::supportsCharacter().
        (WebCore::SimpleFontData::platformWidthForGlyph): Implemented using QRawFont::advancesForGlyphIndexes().
        (WebCore::SimpleFontData::scaledFontData): Added, based on other ports.
        (WebCore::SimpleFontData::smallCapsFontData): Ditto.
        (WebCore::SimpleFontData::emphasisMarkFontData): Ditto.
        (WebCore::SimpleFontData::platformBoundsForGlyph): Stub.
        (WebCore::SimpleFontData::platformInit): Use QRawFont APIs to retrieve font metrics.
        (WebCore::SimpleFontData::platformCharWidthInit): Ditto.

2011-05-05  Alexis Menard  <alexis.menard@openbossa.org>

        Reviewed by Andreas Kling.

        [Qt] RenderThemeQt and DumpRenderTreeSupportQt should use nullptr rather than 0.
        https://bugs.webkit.org/show_bug.cgi?id=60224

        We should use nullptr rather than 0. nullptr will be added in the new C++ standard
        but WebKit already has a nullptr class if there is no c++0x support.

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::adjustProgressBarStyle):
        (WebCore::RenderThemeQt::adjustSliderTrackStyle):
        (WebCore::RenderThemeQt::adjustSliderThumbStyle):

2011-05-05  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: rename BrowserDebugger to DOMDebugger.

        https://bugs.webkit.org/show_bug.cgi?id=60256
        InspectorBrowserDebuggerAgent => InspectorDOMDebuggerAgent
        browserDebugger => domDebugger

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/CodeGeneratorInspector.pm:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        (WebCore::InspectorAgent::inspectedPageDestroyed):
        (WebCore::InspectorAgent::disconnectFrontend):
        * inspector/InspectorAgent.h:
        (WebCore::InspectorAgent::DOMDebuggerAgent):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::connectFrontend):
        * inspector/InspectorDOMDebuggerAgent.cpp: Renamed from Source/WebCore/inspector/InspectorBrowserDebuggerAgent.cpp.
        (WebCore::InspectorDOMDebuggerAgent::create):
        (WebCore::InspectorDOMDebuggerAgent::InspectorDOMDebuggerAgent):
        (WebCore::InspectorDOMDebuggerAgent::~InspectorDOMDebuggerAgent):
        (WebCore::InspectorDOMDebuggerAgent::debuggerWasEnabled):
        (WebCore::InspectorDOMDebuggerAgent::debuggerWasDisabled):
        (WebCore::InspectorDOMDebuggerAgent::disable):
        (WebCore::InspectorDOMDebuggerAgent::clearFrontend):
        (WebCore::InspectorDOMDebuggerAgent::discardBindings):
        (WebCore::InspectorDOMDebuggerAgent::setEventListenerBreakpoint):
        (WebCore::InspectorDOMDebuggerAgent::removeEventListenerBreakpoint):
        (WebCore::InspectorDOMDebuggerAgent::didInsertDOMNode):
        (WebCore::InspectorDOMDebuggerAgent::didRemoveDOMNode):
        (WebCore::InspectorDOMDebuggerAgent::setDOMBreakpoint):
        (WebCore::InspectorDOMDebuggerAgent::removeDOMBreakpoint):
        (WebCore::InspectorDOMDebuggerAgent::willInsertDOMNode):
        (WebCore::InspectorDOMDebuggerAgent::willRemoveDOMNode):
        (WebCore::InspectorDOMDebuggerAgent::willModifyDOMAttr):
        (WebCore::InspectorDOMDebuggerAgent::descriptionForDOMEvent):
        (WebCore::InspectorDOMDebuggerAgent::hasBreakpoint):
        (WebCore::InspectorDOMDebuggerAgent::updateSubtreeBreakpoints):
        (WebCore::InspectorDOMDebuggerAgent::pauseOnNativeEventIfNeeded):
        (WebCore::InspectorDOMDebuggerAgent::setXHRBreakpoint):
        (WebCore::InspectorDOMDebuggerAgent::removeXHRBreakpoint):
        (WebCore::InspectorDOMDebuggerAgent::willSendXMLHttpRequest):
        (WebCore::InspectorDOMDebuggerAgent::clear):
        * inspector/InspectorDOMDebuggerAgent.h: Renamed from Source/WebCore/inspector/InspectorBrowserDebuggerAgent.h.
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::willInsertDOMNodeImpl):
        (WebCore::InspectorInstrumentation::didInsertDOMNodeImpl):
        (WebCore::InspectorInstrumentation::willRemoveDOMNodeImpl):
        (WebCore::InspectorInstrumentation::didRemoveDOMNodeImpl):
        (WebCore::InspectorInstrumentation::willModifyDOMAttrImpl):
        (WebCore::InspectorInstrumentation::willSendXMLHttpRequestImpl):
        (WebCore::InspectorInstrumentation::pauseOnNativeEventIfNeeded):
        * inspector/InstrumentingAgents.h:
        (WebCore::InstrumentingAgents::InstrumentingAgents):
        (WebCore::InstrumentingAgents::inspectorDOMDebuggerAgent):
        (WebCore::InstrumentingAgents::setInspectorDOMDebuggerAgent):
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::connectFrontend):

2011-05-04  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: show only Console and Scripts panels in worker inspector front-end
        https://bugs.webkit.org/show_bug.cgi?id=60159

        * inspector/front-end/WorkerManager.js:
        (WebInspector.WorkerManager.isWorkerFrontend):
        * inspector/front-end/inspector.js: show only Scripts and Console panels in the worker inspector front-end.

2011-05-03  Hans Wennborg  <hans@chromium.org>

        Reviewed by Steve Block.

        IndexedDB: Unit tests for LevelDB key coding functions
        https://bugs.webkit.org/show_bug.cgi?id=59692

        Fix some embarrassing bugs uncovered by unit tests.

        No new functionality, but this is now covered by unit tests in the Chromium WebKit port.

        * storage/IDBLevelDBCoding.cpp:
        (WebCore::IDBLevelDBCoding::decodeInt):
        (WebCore::IDBLevelDBCoding::decodeVarInt):

2011-05-05  Young Han Lee  <joybro@company100.net>

        Reviewed by Csaba Osztrogonác.

        [Texmap][Qt] Enable strict OwnPtr for Qt with texmap enabled.
        https://bugs.webkit.org/show_bug.cgi?id=60251

        No new tests. Build fix.

        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayerTextureMapper::GraphicsLayerTextureMapper):

2011-05-04  Jay Civelli  <jcivelli@chromium.org>

        Reviewed by Adam Barth.

        Adding a utility class to read a SharedBuffer line by line.
        https://bugs.webkit.org/show_bug.cgi?id=59946

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/SharedBufferCRLFLineReader.cpp: Added.
        * platform/SharedBufferCRLFLineReader.h: Added.

2011-05-04  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r85788.
        http://trac.webkit.org/changeset/85788
        https://bugs.webkit.org/show_bug.cgi?id=60250

        svg/text/text-block-child-crash.xhtml asserts (Requested by
        Ossy on #webkit).

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):

2011-05-04  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        Make more member functions in EventHandler private
        https://bugs.webkit.org/show_bug.cgi?id=60200

        Reduced the number of public member functions in EventHandler.

        * WebCore.exp.in:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleAutoscroll):
        (WebCore::EventHandler::autoscrollTimerFired):
        (WebCore::EventHandler::stopAutoscrollTimer):
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::handleMouseMoveEvent):
        (WebCore::EventHandler::keyEvent):
        (WebCore::EventHandler::eventInvertsTabsToLinksClientCallResult):
        * page/EventHandler.h:
        (WebCore::EventHandler::mouseDownMayStartSelect):

2011-05-04  James Robinson  <jamesr@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] REGRESSION(85136): Composited content vanishes when transform-style changes from preserve-3d to flat
        https://bugs.webkit.org/show_bug.cgi?id=60202

        In r85136 I accidentally transposed two lines in GraphicsLayerChromium when adding a null check.  This switches
        the order back and adds a regression test.

        Test: compositing/repaint/transform-style-change.html

        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::updateLayerPreserves3D):

2011-05-04  Cris Neckar  <cdn@chromium.org>

        Reviewed by Adam Barth.

        Expose WebView directly through ChromeClient.
        https://bugs.webkit.org/show_bug.cgi?id=49902

        Test: fast/media/media-svg-crash.html

        * loader/EmptyClients.h:
        (WebCore::EmptyChromeClient::webView):
        * page/ChromeClient.h:
        * page/brew/ChromeClientBrew.h:
        (WebCore::ChromeClientBrew::webView):

2011-05-04  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Darin Adler.

        Unable to Paste After Deleting Text from Input due to -webkit-user-select
        https://bugs.webkit.org/show_bug.cgi?id=60219

        When deleting all the text inside the input a placeholder <br>
        element was inserted for the selection point. However, when
        pasting, the test run computes the -webkit-user-select for the
        <br> element, instead of what would be the text inside the
        <input> and incorrectly disallows selection and prevented
        the paste.

        Test: editing/pasteboard/paste-placeholder-input.html

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplacementFragment::insertFragmentForTestRendering): skip
        <br> elements above us as those are likely placeholder elements.

2011-05-04  Fridrich Strba  <fridrich.strba@bluewin.ch>

        Reviewed by Martin Robinson.

        Windows build of WebKit GTK needs to be able to find SystemInfo.h
        https://bugs.webkit.org/show_bug.cgi?id=60221

        * GNUmakefile.am: add Source/WebCore/platform/win to the paths searched
        for headers, since Source/WebCore/platform/win/SystemInfo.h
        header is needed by Source/WebKit/gtk/webkit/webkitwebsettings.cpp
        on Windows.

2011-05-04  Vangelis Kokkevis  <vangelis@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] Improve sorting of layers in hierarchies that preserve-3d
        by testing for overlapping regions between layer pairs and doing a
        topological sort to determine the right order.
        https://bugs.webkit.org/show_bug.cgi?id=59255

        Test: platform/chromium/compositing/perpendicular-layer-sorting.html

        * WebCore.gypi:
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::updatePropertiesAndRenderSurfaces):
        * platform/graphics/chromium/LayerRendererChromium.h:
        * platform/graphics/chromium/cc/CCLayerImpl.h:
        (WebCore::CCLayerImpl::clearRenderSurface):
        * platform/graphics/chromium/cc/CCLayerSorter.cpp: Added.
        (WebCore::perpProduct):
        (WebCore::innerProduct):
        (WebCore::pointInColinearEdge):
        (WebCore::edgeEdgeTest):
        (WebCore::CCLayerSorter::LayerIntersector::LayerIntersector):
        (WebCore::CCLayerSorter::LayerIntersector::go):
        (WebCore::CCLayerSorter::LayerIntersector::edgeTriangleTest):
        (WebCore::CCLayerSorter::LayerIntersector::triangleTriangleTest):
        (WebCore::CCLayerSorter::LayerIntersector::checkZDiff):
        (WebCore::CCLayerSorter::LayerIntersector::layerZFromProjectedPoint):
        (WebCore::CCLayerSorter::CCLayerSorter):
        (WebCore::CCLayerSorter::checkOverlap):
        (WebCore::CCLayerSorter::createGraphNodes):
        (WebCore::CCLayerSorter::createGraphEdges):
        (WebCore::CCLayerSorter::removeEdgeFromList):
        (WebCore::CCLayerSorter::sort):
        * platform/graphics/chromium/cc/CCLayerSorter.h: Added.
        (WebCore::CCLayerSorter::GraphNode::GraphNode):
        (WebCore::CCLayerSorter::GraphEdge::GraphEdge):

2011-05-03  Jer Noble  <jer.noble@apple.com>

        Reviewed by Antti Koivisto.

        Safari: Video at apple.com cannot play at full screen mode with layout distortion
        https://bugs.webkit.org/show_bug.cgi?id=60140

        Because a fullscreen element may be in a stacking context with a lower z-index than
        a sibling stacking context, those higher contexts would sometimes "pop" through the 
        full screen renderer. To facilitate eliminating all the stacking contexts aside from
        the full screen renderer, added a new pseudo-class specific to video or audio full
        screen elements. Then, added a new UA rule which resets the z-index and opacities of 
        all elements under said pseudo-class to auto and 1 respectively. To facilitate quick
        identity checking of HTMLMediaElements, added isMediaElement() virtual function to 
        Element and HTMLMediaElement. 

        Test: fullscreen/full-screen-stacking-context.html

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::pseudoId): Support PseudoFullScreenMediaDocument.
        (WebCore::nameToPseudoTypeMap): Support fullScreenMediaDocument.
        (WebCore::CSSSelector::extractPseudoType): Support PseudoFullScreenMediaDocument.
        * css/CSSSelector.h: Add PseudoFullScreenMediaDocument.
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector): Support PseudoFullScreenMediaDocument.
        * css/fullscreen.css:
        (:root:-webkit-full-screen-document:not(:-webkit-full-screen)): Corrected these names, 
            which were missing the -webkit prefix.
        (:root:-webkit-full-screen-media-document *:not(-webkit-full-screen)): Added.
        * dom/Element.h:
        (WebCore::Element::isMediaElement): Added, returns false.
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::isMediaElement): Added, returns true.
        * rendering/style/RenderStyleConstants.h: Added FULL_SCREEN_MEDIA_DOCUMENT.

2011-05-04  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Eric Seidel.

        Split findNextLineBreak into a LineBreaker class
        https://bugs.webkit.org/show_bug.cgi?id=60209

        Breaking findNextLineBreak into a new class inside RenderBlock. Currently it's tracking
        nearly no state, but subsequent patches will move some of the local variables used throughout
        the nextLineBreak function into member variables to simplify breaking off helper functions from
        the bloated function.

        No new tests since this is just moving code around.

        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::LineBreaker::LineBreaker):
        (WebCore::RenderBlock::LineBreaker::lineWasHyphenated): Accessor.
        (WebCore::RenderBlock::LineBreaker::positionedObjects): Ditto.
        (WebCore::RenderBlock::LineBreaker::clear): Ditto.
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::layoutRunsAndFloats):
        (WebCore::RenderBlock::LineBreaker::skipTrailingWhitespace):
        (WebCore::RenderBlock::LineBreaker::skipLeadingWhitespace):
        (WebCore::RenderBlock::LineBreaker::reset):
        (WebCore::RenderBlock::LineBreaker::nextLineBreak):

2011-05-04  Fridrich Strba  <fridrich.strba@bluewin.ch>

        Reviewed by Adam Barth.

        Add COMPILER(MINGW) to the compilers using the Microsoft C Runtime's vsnprintf.
        The vsnprintf is part of Microsoft C runtime used also by MinGW (GCC) toolchain.
        https://bugs.webkit.org/show_bug.cgi?id=58579

        * dom/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::error):

2011-05-04  Alexis Menard  <alexis.menard@openbossa.org>

        Unreviewed warning fix.

        The variable is just used in the ASSERT macro. Let's use ASSERT_UNUSED to avoid
        a warning in Release build.

        * dom/Node.cpp:
        (WebCore::Node::removeEventListener):
        * platform/DateComponents.cpp:
        (WebCore::DateComponents::parseTime):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::convertToLayerCoords):
        * storage/StorageMap.cpp:
        (WebCore::StorageMap::importItem):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::buildShadowTree):
        (WebCore::SVGUseElement::expandUseElementsInShadowTree):

2011-05-04  Alexis Menard  <alexis.menard@openbossa.org>

        Unreviewed warning fix.

        The variable is just used in the ASSERT macro. Let's use ASSERT_UNUSED to avoid
        a warning in Release build.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::lastChildConsideringContinuation):

2011-05-04  Dimitri Glazkov  <dglazkov@chromium.org>

        Sort xcodeproj files.

        The WebCore.xcodeproj got out of sorts again.

        * WebCore.xcodeproj/project.pbxproj: Ran sort-XCode-project-file.

2011-05-04  Alexis Menard  <alexis.menard@openbossa.org>

        Reviewed by Adam Barth.

        Warning fix.

        * bindings/js/DOMObjectHashTableMap.h:
        (WebCore::DOMObjectHashTableMap::~DOMObjectHashTableMap):

2011-05-04  Rob Buis  <rbuis@rim.com>

        Reviewed by Darin Adler.

        NULL deref when SVG elements have table styles 
        https://bugs.webkit.org/show_bug.cgi?id=45561

        Restrict computed CSS values for SVG display property to block, inline or none.

        Tests: svg/custom/display-table-caption-foreignObject.svg
               svg/custom/display-table-caption-inherit-foreignObject.xhtml
               svg/custom/display-table-caption-inherit-text.xhtml
               svg/custom/display-table-caption-text.svg

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):

2011-05-04  Tao Bai  <michaelbai@chromium.org>

        Reviewed by David Kilzer.

        Populate touch-icon url to FrameLoaderClient
        https://bugs.webkit.org/show_bug.cgi?id=59143
        
        Parsed and populated apple-touch-icon url to FrameLoaderClient.
        Changed favicon to be a type of icon.

        * CMakeLists.txt:
        * Configurations/FeatureDefines.xcconfig:
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::iconURL):
        (WebCore::Document::setIconURL):
        * dom/Document.h:
        * dom/IconURL.cpp: Added.
        (WebCore::toIconIndex):
        * dom/IconURL.h: Added.
        (WebCore::IconURL::IconURL):
        * features.pri:
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::tokenizeRelAttribute):
        (WebCore::HTMLLinkElement::process):
        (WebCore::HTMLLinkElement::addSubresourceAttributeURLs):
        * html/HTMLLinkElement.h:
        (WebCore::HTMLLinkElement::RelAttribute::RelAttribute):
        (WebCore::HTMLLinkElement::isEnabledViaScript):
        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::HTMLNames::PreloadTask::relAttributeIsStyleSheet):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::iconURL):
        (WebCore::DocumentLoader::setIconURL):
        * loader/DocumentLoader.h:
        * loader/EmptyClients.h:
        (WebCore::EmptyFrameLoaderClient::dispatchDidChangeIcons):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::iconURL):
        (WebCore::FrameLoader::iconURLs):
        (WebCore::FrameLoader::fillIconURL):
        (WebCore::FrameLoader::getDefaultIconURL):
        (WebCore::FrameLoader::setIconURL):
        (WebCore::FrameLoader::didChangeIcons):
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:

2011-05-04  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Crash in PlatformCALayer ::replaceSublayer when layer has not superlayer
        https://bugs.webkit.org/show_bug.cgi?id=60191

        Skip replaceSublayer when there is no superlayer rather than asserting.
        This is probably not a problem and happens when restructuring the layer
        tree. Avoiding this crash will allow us to get more testing.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::swapFromOrToTiledLayer):

2011-05-04  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        Fix the GTK+ 2.x build for Windows. Instead of making getStockIcon a RenderTheme
        method, just use extern declarations to avoid having to declare it in the header.
        This will prevent having to include glib.h in RenderThemeGtk.h, which is included
        in many C++ files.

        No new tests. This is just a build fix.

        * platform/gtk/RenderThemeGtk.cpp: Update getStockIcon calls to say getStockIconForWidgetType.
        (WebCore::RenderThemeGtk::paintSearchFieldResultsDecoration):
        (WebCore::RenderThemeGtk::paintSearchFieldCancelButton):
        (WebCore::RenderThemeGtk::paintCapsLockIndicator):
        (WebCore::RenderThemeGtk::paintMediaButton):
        * platform/gtk/RenderThemeGtk.h: Removed getStockIcon declaration. Make gtkContainer() and
        gtkEntry() public because they are now accessed externally from getStockIcon().
        * platform/gtk/RenderThemeGtk2.cpp: Update getStockIcon calls.
        (WebCore::getStockIconForWidgetType):
        * platform/gtk/RenderThemeGtk3.cpp: Ditto.
        (WebCore::getStockIconForWidgetType):

2011-05-04  Mark Pilgrim  <pilgrim@chromium.org>

        Reviewed by Tony Chang.

        IndexedDB open (database) should fail if name is null
        https://bugs.webkit.org/show_bug.cgi?id=60022

        Test: storage/indexeddb/mozilla/open-database-null-name.html

        Combination problem: Bug in IDL didn't pass null values to .cpp layer,
        then .cpp layer didn't check for null value anyway.

        * storage/IDBFactory.cpp:
        (WebCore::IDBFactory::open): check for null name
        * storage/IDBFactory.idl: pass null name as null

2011-05-04  Jer Noble  <jer.noble@apple.com>

        Reviewed by Darin Adler.

        Entering full screen fails >= second time on Vimeo.com.
        https://bugs.webkit.org/show_bug.cgi?id=60143

        Force the RenderFullScreen's layer backing to be recreated when setAnimating() is called.
        Previously, the RenderLayerCompositor would fail to reparent the RenderFullScreen's layer
        at the end of an animation, if it determined that the RenderFullScreen would still require
        a layer even when not animating.

        * rendering/RenderFullScreen.cpp:
        (RenderFullScreen::setAnimating): Clear the renderer's layer.

2011-05-04  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler.

        Avoid allocating a new image buffer in ~CanvasRenderingContext2D()
        https://bugs.webkit.org/show_bug.cgi?id=59849

        When attempting to unwind the graphics state stack in the
        CanvasRenderingContext2D destructor, don't allow HTMLCanvasElement
        to create a new ImageBuffer.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::existingDrawingContext):
        * html/HTMLCanvasElement.h:
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::~CanvasRenderingContext2D):

2011-05-04  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: expose shadow DOM in the Elements panel
        https://bugs.webkit.org/show_bug.cgi?id=60160

        Test: inspector/elements/shadow-dom.html

        * dom/Element.cpp:
        (WebCore::Element::ensureShadowRoot):
        (WebCore::Element::removeShadowRoot):
        * inspector/Inspector.json:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::pushChildNodesToFrontend):
        (WebCore::InspectorDOMAgent::buildObjectForNode):
        (WebCore::InspectorDOMAgent::didInsertDOMNode):
        (WebCore::InspectorDOMAgent::didRemoveDOMNode):
        (WebCore::InspectorDOMAgent::isContainerNode):
        * inspector/InspectorDOMAgent.h:
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMNode):
        (WebInspector.DOMNode.prototype.inShadowTree):
        (WebInspector.DOMNode.prototype._setShadowRootPayload):
        (WebInspector.DOMNode.prototype._renumber):
        (WebInspector.DOMAgent.prototype._bindNodes):
        (WebInspector.DOMAgent.prototype.querySelectorAll):
        (WebInspector.DOMAgent.prototype._shadowRootUpdated):
        (WebInspector.DOMDispatcher.prototype.searchResults):
        (WebInspector.DOMDispatcher.prototype.shadowRootUpdated):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel):
        (WebInspector.ElementsPanel.prototype._nodeUpdated):
        (WebInspector.ElementsPanel.prototype._attributesUpdated):
        (WebInspector.ElementsPanel.prototype._nodeRemoved):
        (WebInspector.ElementsPanel.prototype.updateModifiedNodes):
        (WebInspector.ElementsPanel.prototype.updateBreadcrumb):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement):
        (WebInspector.ElementsTreeElement.prototype._updateChildren.updateChildrenOfNode):
        (WebInspector.ElementsTreeElement.prototype._updateChildren):
        ():
        * inspector/front-end/inspector.css:
        (#elements-content .dom-shadow-root):
        (.outline-disclosure li .webkit-html-tag.shadow):
        * inspector/front-end/utilities.js:

2011-05-03  Adam Roben  <aroben@apple.com>

        Remove an unnecessary OwnPtr equality check in XSLT code

        Fixes <http://webkit.org/b/60053> Testing OwnPtrs for equality should cause a compiler error

        Reviewed by Anders Carlsson and Antti Koivisto.

        * dom/Document.cpp:
        (WebCore::Document::setTransformSource): No need to check for equality. If the pointers are
        equal, we're screwed anyway. (And the caller always passes in a newly-allocated object, so
        we're safe.)

2011-05-04  Leandro Gracia Gil  <leandrogracia@chromium.org>

        Reviewed by Tony Gentilcore.

        Media Stream API: add the skeleton of the frame and page controllers and the embedder client.
        https://bugs.webkit.org/show_bug.cgi?id=56922

        Add the basic outlines of the page controller, the per-frame controller and the embedder
        client interface for the Media Stream API. Provide methods to handle the situations
        where a frame is detached from the page or transferred between pages.

        Tests for the Media Stream API will be provided by the bug 56587.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * page/Frame.cpp:
        (WebCore::Frame::Frame):
        (WebCore::Frame::~Frame):
        (WebCore::Frame::pageDestroyed):
        (WebCore::Frame::transferChildFrameToNewDocument):
        * page/Frame.h:
        (WebCore::Frame::mediaStreamFrameController):
        * page/MediaStreamClient.h: Added.
        (WebCore::MediaStreamClient::~MediaStreamClient):
        * page/MediaStreamController.cpp: Added.
        (WebCore::MediaStreamController::Request::Request):
        (WebCore::MediaStreamController::Request::localId):
        (WebCore::MediaStreamController::Request::frameController):
        (WebCore::MediaStreamController::MediaStreamController):
        (WebCore::MediaStreamController::~MediaStreamController):
        (WebCore::MediaStreamController::unregisterFrameController):
        (WebCore::MediaStreamController::registerRequest):
        * page/MediaStreamController.h: Added.
        * page/MediaStreamFrameController.cpp: Added.
        (WebCore::MediaStreamFrameController::Request::Request):
        (WebCore::MediaStreamFrameController::Request::~Request):
        (WebCore::MediaStreamFrameController::Request::scriptExecutionContext):
        (WebCore::MediaStreamFrameController::Request::isGenerateStreamRequest):
        (WebCore::MediaStreamFrameController::Request::isRecordedDataRequest):
        (WebCore::MediaStreamFrameController::RequestMap::abort):
        (WebCore::MediaStreamFrameController::RequestMap::abortAll):
        (WebCore::MediaStreamFrameController::MediaStreamFrameController):
        (WebCore::MediaStreamFrameController::~MediaStreamFrameController):
        (WebCore::MediaStreamFrameController::securityOrigin):
        (WebCore::MediaStreamFrameController::scriptExecutionContext):
        (WebCore::MediaStreamFrameController::pageController):
        (WebCore::MediaStreamFrameController::enterDetachedState):
        (WebCore::MediaStreamFrameController::disconnectPage):
        (WebCore::MediaStreamFrameController::disconnectFrame):
        (WebCore::MediaStreamFrameController::transferToNewPage):
        * page/MediaStreamFrameController.h: Added.
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::PageClients::PageClients):
        * page/Page.h:
        (WebCore::Page::mediaStreamController):

2011-05-04  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Double-click in a read-only style rule results in a non-editable blank property
        https://bugs.webkit.org/show_bug.cgi?id=60150

        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertiesSection.prototype._handleEmptySpaceDoubleClick):

2011-05-04  Dominic Battre  <battre@chromium.org>

        Reviewed by Tony Gentilcore.

        Fix missing header in case SVG is disabled
        https://bugs.webkit.org/show_bug.cgi?id=60153

        * dom/EventDispatcher.cpp:

2011-05-04  Luke Macpherson   <macpherson@chromium.org>

        Reviewed by Eric Seidel.

        Rename CSSStyleApplyProperty::propertyValue and setPropertyValue.
        https://bugs.webkit.org/show_bug.cgi?id=60006

        No new tests as no functionality added. Simple rename only.

        * css/CSSStyleApplyProperty.cpp:
        Rename propertyValue propertyHandler and setPropertyValue setPropertyHandler.
        * css/CSSStyleApplyProperty.h:
        Rename propertyValue propertyHandler and setPropertyValue setPropertyHandler.

2011-05-04  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        Cleanup conditionals in findNextLineBreak
        https://bugs.webkit.org/show_bug.cgi?id=60117

        Simplified conditional statements in findNextLineBreak.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::findNextLineBreak):

2011-05-04  Luke Macpherson   <macpherson@chromium.org>

        Reviewed by Eric Seidel.

        Make CSSStyleSelector::applyProperty() CSSPropertyWebkitHyphens case use appropriate macro.
        https://bugs.webkit.org/show_bug.cgi?id=60114

        No new tests as no functionality changes.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        Use HANDLE_INHERIT_AND_INITIAL_AND_PRIMITIVE macro to remove code duplication.

2011-05-04  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Reviewed by Andreas Kling.

        [Qt] Fix QNetworkReplyWrapper to not depend on QNetworkReply::isFinished() method
        https://bugs.webkit.org/show_bug.cgi?id=59070

        Applications using our API and our autotests subclass QNetworkReply as part of providing a
        custom QNetworkAccessManager. But there's an API limitation in Qt 4.7, that makes
        QNetworkReply::isFinished() always be false for these custom replies. This was fixed in Qt
        4.8, see http://bugreports.qt.nokia.com/browse/QTBUG-11737.

        The consequence is that QtWebKit cannot rely on this function. So now QNetworkReplyWrapper
        watches for the finished() signal and set a dynamic property "_q_isFinished" on the reply
        indicating that it is finished. When there's no finished signal (synchronous) we set the
        dynamic property once we get the reply.

        This fixes tst_QWebFrame::requestedUrl(), that was breaking because sniffer was not
        emitting its own finished() signal, causing QWebFrame::loadFinished() to not be emitted.

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyWrapper::QNetworkReplyWrapper):
        Connect the finished signal to the new setFinished() slot.

        (WebCore::QNetworkReplyWrapper::synchronousLoad):
        Since we don't get the finished signal for synchronous loads, set the dynamic property
        before processing it.

        (WebCore::QNetworkReplyWrapper::resetConnections):
        Do not reset the connection to setFinished().

        (WebCore::QNetworkReplyWrapper::setFinished):
        Set the dynamic property in the reply.

        (WebCore::QNetworkReplyWrapper::emitMetaDataChanged):
        (WebCore::QNetworkReplyHandler::start):
        Change to use wrapper's isFinished() instead of asking the reply directly.

        * platform/network/qt/QNetworkReplyHandler.h:
        (WebCore::QNetworkReplyWrapper::isFinished):
        Checks the dynamic property of the reply.

        * platform/network/qt/QtMIMETypeSniffer.cpp:
        (QtMIMETypeSniffer::sniff):
        Use the dynamic property to check if the reply is finished.

2011-05-04  Eric Seidel  <eric@webkit.org>

        Reviewed by Ryosuke Niwa.

        Split createLineBoxesFromBidiRuns out from layoutRunsAndFloats
        https://bugs.webkit.org/show_bug.cgi?id=60080

        No functional change, just moving code.

        * rendering/RenderBlock.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::createLineBoxesFromBidiRuns):
        (WebCore::RenderBlock::layoutRunsAndFloats):

2011-05-04  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Remove unused function FontPlatformData::pixelSize()
        https://bugs.webkit.org/show_bug.cgi?id=60156

        * platform/graphics/qt/FontPlatformData.h:
        (WebCore::FontPlatformData::pixelSize): Removed.

2011-05-04  Luke Macpherson   <macpherson@chromium.org>

        Reviewed by Darin Adler.

        Remove redundant conversion from auto table layout to auto table layout in CSSStyleSelector::applyProperty()
        https://bugs.webkit.org/show_bug.cgi?id=60011

        No new tests added as no functionality changed.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        Remove reundant check for auto table layout.

2011-05-04  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Darin Adler.

        Remove double-free checks for bug 56124
        https://bugs.webkit.org/show_bug.cgi?id=60037

        Antti's speculative fix for bug 56124 (r84151) appears to have worked,
        these CRASH() calls are not triggering anymore.

        * css/CSSSelector.h:
        (WebCore::CSSSelector::CSSSelector):
        (WebCore::CSSSelector::~CSSSelector):
        * css/CSSSelectorList.cpp:
        (WebCore::CSSSelectorList::deleteSelectors):

2011-05-04  Satish Sampath  <satish@chromium.org>

        Reviewed by Tony Gentilcore.

        Layout the speech input button to the left of outer spin button properly.
        https://bugs.webkit.org/show_bug.cgi?id=59742

        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::layout):

2011-05-04  Yury Semikhatsky  <yurys@chromium.org>

        Unreviewed. Build fix.

        * bindings/js/JSInjectedScriptHostCustom.cpp: fix includes declaration

2011-05-03  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: can't inspect element in an iframe when element originates from non-frame document
        https://bugs.webkit.org/show_bug.cgi?id=60031
        
        Inspected object type evaluation has moved into native bindings. This way it doesn't
        depend on the current JS context.

        Test: inspector/elements/elements-inspect-iframe-from-different-domain.html

        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::JSInjectedScriptHost::isHTMLAllCollection): this method helps distinguish
        real undefined values from HTMLAllCollection
        (WebCore::JSInjectedScriptHost::type): method that returns presice type of the passed
        value
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::V8InjectedScriptHost::isHTMLAllCollectionCallback):
        (WebCore::V8InjectedScriptHost::typeCallback):
        * inspector/InjectedScriptHost.idl:
        * inspector/InjectedScriptSource.js:
        (.):

2011-05-03  Pratik Solanki  <psolanki@apple.com>

        Reviewed by Antti Koivisto.

        Part of WebCore should use CFNetwork-based loader on Mac
        https://bugs.webkit.org/show_bug.cgi?id=51836

        Merge the conflicting definitions of WebCore::privateBrowsingCookieStorage() into one. Clean
        up some warnings and #if USE(CFNETWORK) around code.

        * platform/mac/CookieJar.mm:
        * platform/network/CookieStorage.h:
        * platform/network/cf/CookieStorageCFNet.cpp:
        (WebCore::privateBrowsingCookieStorage):
        (WebCore::currentCookieStorage):
        (WebCore::setCurrentCookieStorage):
        (WebCore::setCookieStoragePrivateBrowsingEnabled):
        (WebCore::notifyCookiesChangedOnMainThread):
        (WebCore::notifyCookiesChanged):
        * platform/network/cf/CookieStorageCFNet.h:
        * platform/network/mac/CookieStorageMac.mm:

2011-05-03  Justin Novosad  <junov@chromium.org>

        Reviewed by Kenneth Russell.

        [Chromium] Make accelerated 2d canvas enabled by default with skia
        https://bugs.webkit.org/show_bug.cgi?id=59929

        No new tests. Covered by existing layout tests

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::CanvasRenderingContext2D):
        Initialized for accelerated canvas if either the accelerated2dCanvas
        or the legacyAccelerated2dCanvas flags are enabled
        * page/Page.cpp:
        (WebCore::Page::sharedGraphicsContext3D):
        This is where the code goes to implement the functionality for the
        legacy vs current acceleration paths for the 2D canvas. Currently,
        this is a no-op, and always select the legacy path.  This is temporary
        until we are ready to sort the GPU layout tests (rebasline vs. bug)
        * page/Settings.cpp:  Added new flage for legacyAccelerated2dCanvas
        (WebCore::Settings::Settings):
        (WebCore::Settings::setLegacyAccelerated2dCanvasEnabled):
        * page/Settings.h:
        (WebCore::Settings::legacyAccelerated2dCanvasEnabled):

2011-04-29  Jer Noble  <jer.noble@apple.com>

        Reviewed by Eric Seidel.

        Implement FULLSCREEN_API on Windows, Part 4: Enable it
        https://bugs.webkit.org/show_bug.cgi?id=59798

        * WebCore.vcproj/WebCore.vcproj: Add missing full screen related
            files to the project.

2011-05-03  Alpha Lam  <hclam@chromium.org>

        Not reviewed. Build fix.

        More places from 0 to nullptr.

        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::precompileScript):
        * platform/graphics/chromium/LayerTilerChromium.cpp:
        (WebCore::LayerTilerChromium::create):
        * platform/graphics/gpu/BicubicShader.cpp:
        (WebCore::BicubicShader::create):
        * platform/graphics/gpu/ConvolutionShader.cpp:
        (WebCore::ConvolutionShader::create):
        * platform/graphics/gpu/LoopBlinnSolidFillShader.cpp:
        (WebCore::LoopBlinnSolidFillShader::create):
        * platform/graphics/gpu/SolidFillShader.cpp:
        (WebCore::SolidFillShader::create):
        * platform/graphics/gpu/TexShader.cpp:
        (WebCore::TexShader::create):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::~PlatformContextSkia):
        * platform/leveldb/LevelDBDatabase.cpp:
        (WebCore::LevelDBDatabase::createIterator):
        * platform/text/LocalizedNumberICU.cpp:
        (WebCore::createFormatterForCurrentLocale):

2011-05-03  Alpha Lam  <hclam@chromium.org>

        Not reviewed. Build fix.

        Using nullptr instead of 0. This makes visual studio happy.

        * storage/IDBTransactionBackendInterface.h:

2011-05-03  Luke Macpherson   <macpherson@chromium.org>

        Reviewed by Dimitri Glazkov.

        Add template parameter to ApplyPropertyColor to improve clarity by removing constructor parameter side effects.
        https://bugs.webkit.org/show_bug.cgi?id=59774

        No new tests required as on new functionality.

        * css/CSSStyleApplyProperty.cpp:
        (WebCore::ApplyPropertyColor::applyValue):
        Added template parameter "inheritColorFromParent = false".
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
        Use template parameter where appropriate.

2011-05-03  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/9313186> Make the fix for <rdar://problem/9190108> more robust.

        Added a pointer from FloatingObject to its originating line, if there is one, and made sure to
        dirty the line when the float is removed, instead of relying on the float always intersecting
        its originating line.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::removeFloatingObject):
        (WebCore::RenderBlock::removeFloatingObjectsBelow):
        (WebCore::RenderBlock::clearFloats):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::FloatingObject::FloatingObject):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::appendFloatingObjectToLastLine):
        (WebCore::RenderBlock::layoutRunsAndFloats):
        (WebCore::RenderBlock::determineStartPosition):

2011-05-02  Jer Noble  <jer.noble@apple.com>

        Reviewed by Adam Roben.

        Implement FULLSCREEN_API on Windows, Part 3: WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=59845

        Move WebFullScreenController into WebCore to facilitate code sharing between WebKit
        and WebKit2.  WebFullScreenController now uses a Client class to request work on its
        behalf by WebKit and WebKit2.  MediaPlayerPrivateFullscreenWindow now only creates a 
        CALayerHost once a root layer is set, as the CALayerHost was causing child window drawing
        problems, and because a CALayerHost is overkill if the window is only drawing black to
        its client area.

        * WebCore.vcproj/WebCore.vcproj:
        * platform/graphics/win/MediaPlayerPrivateFullscreenWindow.cpp:
        (WebCore::MediaPlayerPrivateFullscreenWindow::MediaPlayerPrivateFullscreenWindow): Do not create 
            m_layerHost in the constructor.
        (WebCore::MediaPlayerPrivateFullscreenWindow::createWindow): NULL check m_layerHost.
        (WebCore::MediaPlayerPrivateFullscreenWindow::setRootChildLayer): Lazily instantiate m_layerHost.
        (WebCore::MediaPlayerPrivateFullscreenWindow::wndProc): NULL check m_layerHost; if a root layer is
            not present, fill the window with black in WM_PAINT.
        * platform/graphics/win/MediaPlayerPrivateFullscreenWindow.h:
        * platform/graphics/win/FullScreenController.cpp: Renamed from Source/WebKit/win/WebFullScreenController.cpp.
        * platform/graphics/win/FullScreenController.h: Renamed from Source/WebKit/win/WebFullScreenController.h.
        * platform/graphics/win/FullScreenControllerClient.h: Split out from FullScreenController.h
        (WebCore::FullScreenControllerClient::~FullScreenControllerClient):

2011-05-03  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=60087 and <rdar://problem/9373182>
        WK2 Icon Database should provide access to all image representations in the icon.

        Add an accessor for CG platforms to get a CFArrayRef of all the CGImageRefs represented:
        * platform/graphics/BitmapImage.h:
        * platform/graphics/Image.h:
        (WebCore::Image::getCGImageArray):
        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::BitmapImage::getCGImageArray):

2011-05-03  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        findNextLineBreak splits InlineIterator into 3 pieces
        https://bugs.webkit.org/show_bug.cgi?id=60082

        Avoid splitting InlineIterator into 3 variables with inter-dependencies.

        * rendering/InlineIterator.h:
        (WebCore::InlineIterator::fastIncrementInTextNode): Added.
        (WebCore::InlineIterator::previousInSameNode): Added.
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::findNextLineBreak):

2011-05-03  Dean Jackson  <dino@apple.com>

        Reviewed by Simon Fraser.

        Interrupted transitions are not correctly removed
        https://bugs.webkit.org/show_bug.cgi?id=60062

        CompositeAnimation was replacing any existing
        transition as a new one was created. However, it wasn't
        clearing the lists in AnimationControllerPrivate that
        signal when a hardware animation starts. Rather than
        simple removing the existing transition, we now tell
        AnimationControllerPrivate that is has gone.

        Test: transitions/3d/interrupted-transition.html

        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::updateTransitions):

2011-05-03  Enrica Casucci  <enrica@apple.com>

        Reviewed by Ryosuke Niwa.

        Crash in SpellingCorrectionController::respondToChangedSelection.
        https://bugs.webkit.org/show_bug.cgi?id=60071
        <rdar://problem/9358190>

        Creating a Visible position could trigger a layout and there is no
        guarantee that the selection is still valid after that.

        Tests: editing/selection/undo-crash.html

        * editing/SpellingCorrectionController.cpp:
        (WebCore::SpellingCorrectionController::respondToChangedSelection):

2011-05-03  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Eric Seidel.

        Refactor computeInlineDirectionPositionsForLine into smaller functions
        https://bugs.webkit.org/show_bug.cgi?id=60072

        Split three functions off from computeInlineDirectionPositionsForLine
        to improve its readability.

        No new tests since this is just moving code around.

        * rendering/RenderBlock.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::setMarginsForRubyRun):
        (WebCore::setLogicalWidthForTextRun):
        (WebCore::computeExpansionForJustifiedText):
        (WebCore::RenderBlock::computeInlineDirectionPositionsForLine):

2011-05-03  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/59838> Implement HTTP pipelining for CoreFoundation-based networking

        Reviewed by Antti Koivisto.

        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::doUpdatePlatformRequest): Set the
        priority on the request if HTTP pipelining is enabled.
        (WebCore::ResourceRequest::doUpdateResourceRequest): Read the
        priority from the request if HTTP pipelining is enabled.
        (readBooleanPreference): Enable code when compiling with
        USE(CFNETWORK).
        (WebCore::initializeMaximumHTTPConnectionCountPerHost): Ditto.
        Comment out setting the minimum fast lane priority on Windows
        since it's not currently available.

2011-05-03  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/9278296> Flicker zooming on Google Maps satellite view with accelerated compositing turned on

        Conditionalize compositing tiled layer size-constraining logic to older
        OSes.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::constrainedSize):

2011-05-03  Roland Steiner  <rolandsteiner@chromium.org>

        Reviewed by Dimitri Glazkov.

        Allow access keys to be used in shadow DOM
        https://bugs.webkit.org/show_bug.cgi?id=59979

        Move access key methods and members back to Document from TreeScope.
        Also traverse into shadow trees when building the access key map.

        No new tests. (refactoring)

        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::getElementByAccessKey):
        (WebCore::Document::buildAccessKeyMap):
        (WebCore::Document::invalidateAccessKeyMap):
        * dom/Document.h:
        * dom/TreeScope.cpp:
        (WebCore::TreeScope::TreeScope):
        (WebCore::TreeScope::destroyTreeScopeData):
        * dom/TreeScope.h:

2011-05-03  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/8891395> -[DOMRange textRects] returns incorrect results for vertical or flipped text
        https://bugs.webkit.org/show_bug.cgi?id=60067

        No test because this code path is only used by the Objective-C API, which is not testable from DumpRenderTree.

        * rendering/RenderText.cpp:
        (WebCore::RenderText::absoluteRectsForRange): Use width/height instead of logicalWidth/logicalHeight here,
        and perform the local-to-absolute mapping on the rects rather than their origin, in order to get the right
        results for flipped writing modes.

2011-05-03  Anton Muhin  <antonm@chromium.org>

        Reviewed by Yury Semikhatsky.

        [v8] remove an ASSERT from grouping logic
        https://bugs.webkit.org/show_bug.cgi?id=60024

        This ASSERT was exploratory.  Alas, right now I am aware of no easy way to
        repro it.  Removing for now for greener bots.

        No new tests, only an ASSERT removal.

        * bindings/v8/V8GCController.cpp:
        (WebCore::calculateGroupId):

2011-05-03  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        WebKit allows selection that crosses the shadow boundary of a readonly input element
        https://bugs.webkit.org/show_bug.cgi?id=60000

        The bug was caused by VisibleSelection's not validating shadow DOM boundaries.
        Fixed the bug by adding an extra adjustment, adjustSelectionToAvoidCrossingShadowBoundaries,
        in its validation process.

        Tests: editing/selection/select-across-readonly-input-1.html
               editing/selection/select-across-readonly-input-2.html
               editing/selection/select-across-readonly-input-3.html
               editing/selection/select-across-readonly-input-4.html
               editing/selection/select-across-readonly-input-5.html

        * editing/VisibleSelection.cpp:
        (WebCore::VisibleSelection::validate): Calls adjustSelectionToAvoidCrossingShadowBoundaries.
        (WebCore::VisibleSelection::adjustSelectionToAvoidCrossingShadowBoundaries): Added.
        * editing/VisibleSelection.h:

2011-05-03  Eric Seidel  <eric@webkit.org>

        Reviewed by Ryosuke Niwa.

        Split out layoutRunsAndFloats from layoutInlineChildren
        https://bugs.webkit.org/show_bug.cgi?id=60052

        No new tests, just moving code here.  There should be
        no change in behavior.

        * rendering/RenderBlock.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::layoutRunsAndFloats):
        (WebCore::RenderBlock::layoutInlineChildren):

2011-05-03  James Robinson  <jamesr@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] Resizing a 2d canvas to huge dimensions after compositing crashes with accelerated 2d canvas option enabled
        https://bugs.webkit.org/show_bug.cgi?id=59965

        Fixes a few bugs leading to a crash if a canvas already being composited was resized to huge dimensions.

        Test: fast/canvas/canvas-resize-after-paint.html

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::reset):
            Mark the canvas's layer as needing a synthetic style recalculation when creating or destroying the backing
            DrawingBuffer so that we exit compositing mode properly if we can't handle the canvas dimensions.
        * platform/graphics/chromium/Canvas2DLayerChromium.cpp:
        (WebCore::Canvas2DLayerChromium::setLayerRenderer):
            Add a null check for m_drawingBuffer
        * platform/graphics/gpu/DrawingBuffer.cpp:
        (WebCore::DrawingBuffer::clear):
            Avoid clearing the m_context pointer in reset() - we destroy the DrawingBuffer whenever reset() fails, so
            this is unnecessary.

2011-05-03  Adam Roben  <aroben@apple.com>

        Fix most strict PassOwnPtr violations on Windows

        Fixes <http://webkit.org/b/60025> Windows should (almost) build with strict PassOwnPtr
        enabled

        Reviewed by Anders Carlsson.

        * loader/EmptyClients.h:
        * platform/GeolocationService.cpp:
        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:
        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp:
        * platform/mock/GeolocationServiceMock.cpp:
        * rendering/RenderTheme.cpp:
        * rendering/RenderThemeSafari.cpp:

2011-05-03  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Eric Seidel.

        Extract LineInfo class
        https://bugs.webkit.org/show_bug.cgi?id=60044

        Created a LineInfo class in RenderBlockLineLayout.cpp that brings together the relevant
        layout information about a line. This simplifies function signatures and clears up initialization.

        No new tests as this is refactoring.

        * rendering/RenderBlock.h: Updated internal layout function signatures to use LineInfo.
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::LineInfo::LineInfo):
        (WebCore::LineInfo::isFirstLine):
        (WebCore::LineInfo::isLastLine):
        (WebCore::LineInfo::isEmpty):
        (WebCore::LineInfo::previousLineBrokeCleanly):
        (WebCore::LineInfo::setFirstLine):
        (WebCore::LineInfo::setLastLine):
        (WebCore::LineInfo::setEmpty):
        (WebCore::LineInfo::setPreviousLineBrokeCleanly):
        (WebCore::RenderBlock::createLineBoxes):
        (WebCore::RenderBlock::constructLine):
        (WebCore::RenderBlock::computeInlineDirectionPositionsForLine):
        (WebCore::RenderBlock::layoutInlineChildren):
        (WebCore::RenderBlock::determineStartPosition):
        (WebCore::skipNonBreakingSpace):
        (WebCore::shouldCollapseWhiteSpace):
        (WebCore::requiresLineBox): Moved from RenderBlock.h and made it locally scoped to RenderBlockLineLayout.cpp
        (WebCore::RenderBlock::generatesLineBoxesForInlineChild):
        (WebCore::RenderBlock::skipTrailingWhitespace):
        (WebCore::RenderBlock::skipLeadingWhitespace):
        (WebCore::RenderBlock::findNextLineBreak):

2011-05-03  Roland Steiner  <rolandsteiner@chromium.org>

        Reviewed by Dimitri Glazkov.

        Update node list cache count on the containing TreeScope rather than the Document
        https://bugs.webkit.org/show_bug.cgi?id=59983

        Change code to call add/removeNodeListCache() and hasNodeListCaches() on the proper tree scope.
        Move updating of the node list cache count from setDocument() to setTreeScopeRecursively().
        Make setDocument() and setDocumentRecursively() private.

        No new tests. (refactoring)

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::childrenChanged):
        * dom/Node.cpp:
        (WebCore::Node::~Node):
        (WebCore::Node::setDocument):
        (WebCore::Node::setTreeScopeRecursively):
        (WebCore::Node::childNodes):
        (WebCore::Node::registerDynamicNodeList):
        (WebCore::Node::unregisterDynamicNodeList):
        (WebCore::Node::notifyLocalNodeListsAttributeChanged):
        (WebCore::Node::notifyLocalNodeListsChildrenChanged):
        (WebCore::Node::getElementsByTagName):
        (WebCore::Node::getElementsByTagNameNS):
        (WebCore::Node::getElementsByName):
        (WebCore::Node::getElementsByClassName):
        * dom/Node.h:
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::labels):

2011-05-03  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        Bundle trailingSpaceObject and trailingPositionedBoxes in findNextLineBreak as a class
        https://bugs.webkit.org/show_bug.cgi?id=60046

        Extracted TrailingObjects that encapsulates trailingSpaceObject and trailingPositionedBoxes.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::TrailingObjects::TrailingObjects):
        (WebCore::TrailingObjects::setTrailingWhitespace):
        (WebCore::TrailingObjects::clear):
        (WebCore::TrailingObjects::appendBoxIfNeeded):
        (WebCore::TrailingObjects::addMidpoints):
        (WebCore::RenderBlock::findNextLineBreak):

2011-05-03  Igor Oliveira  <igor.oliveira@openbossa.org>

        Reviewed by Eric Seidel.

        [Qt] Implement initial support to DataTransferItems
        https://bugs.webkit.org/show_bug.cgi?id=58448

        Implement initial support to DataTransferItems. DataTransferItems are used to 
        hold data for drag and drop operations. DataTransferItems hold a list of 
        DataTransferItem objects each of which holds an item being dragged.

        * WebCore.pro:
        * dom/DataTransferItems.idl:
        * editing/qt/EditorQt.cpp:
        (WebCore::Editor::newGeneralClipboard):
        * page/qt/EventHandlerQt.cpp:
        (WebCore::EventHandler::createDraggingClipboard):
        * platform/chromium/DataTransferItemsChromium.h:
        * platform/qt/ClipboardQt.cpp:
        (WebCore::Clipboard::create):
        (WebCore::ClipboardQt::ClipboardQt):
        (WebCore::ClipboardQt::items):
        * platform/qt/ClipboardQt.h:
        (WebCore::ClipboardQt::create):
        * platform/qt/DataTransferItemQt.cpp: Added.
        (WebCore::DataTransferItem::create):
        (WebCore::DataTransferItemQt::createFromPasteboard):
        (WebCore::DataTransferItemQt::create):
        (WebCore::DataTransferItemQt::DataTransferItemQt):
        (WebCore::DataTransferItemQt::getAsString):
        (WebCore::DataTransferItemQt::getAsFile):
        * platform/qt/DataTransferItemQt.h: Added.
        * platform/qt/DataTransferItemsQt.cpp: Copied from Source/WebCore/editing/qt/EditorQt.cpp.
        (WebCore::DataTransferItemsQt::create):
        (WebCore::DataTransferItemsQt::DataTransferItemsQt):
        (WebCore::DataTransferItemsQt::addPasteboardItem):
        * platform/qt/DataTransferItemsQt.h: Copied from Source/WebCore/editing/qt/EditorQt.cpp.

2011-05-03  Julien Chaffraix  <jchaffraix@codeaurora.org>

        Reviewed by Dimitri Glazkov.

        Element:shadowRoot & Element::ensureShadowRoot should return ShadowRoot*
        https://bugs.webkit.org/show_bug.cgi?id=58703

        No new tests, refactoring only.

        * dom/Element.cpp:
        (WebCore::Element::copyNonAttributeProperties):
        (WebCore::Element::insertedIntoDocument):
        (WebCore::Element::removedFromDocument):
        (WebCore::Element::insertedIntoTree):
        (WebCore::Element::removedFromTree):
        (WebCore::Element::attach):
        (WebCore::Element::detach):
        (WebCore::Element::recalcStyle):
        (WebCore::Element::shadowRoot):
        (WebCore::Element::ensureShadowRoot):
        (WebCore::Element::childrenChanged):
        * dom/Node.cpp:
        (WebCore::Node::setTreeScopeRecursively):
        (WebCore::shadowRoot):
        (WebCore::Node::setDocumentRecursively):
        (WebCore::NodeRendererFactory::findVisualParent):
        Updated all the call sites for shadowRoot and ensureShadowRoot in the 2
        previous classes.

        * dom/Element.h: Updated 2 methods' signature to return a ShadowRoot*.

        * dom/ShadowRoot.h: Removed toShadowRoot as it is not used anymore.

        * html/HTMLDetailsElement.cpp:
        * html/HTMLSummaryElement.cpp:
        Added #include for ShadowRoot.h.

2011-05-03  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Reviewed by Kenneth Rohde Christiansen.

        [EFL] Implement mediaSliderTrack
        https://bugs.webkit.org/show_bug.cgi?id=59998

        Implement paintMediaSliderTrack.

        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::RenderThemeEfl):
        (WebCore::RenderThemeEfl::paintMediaSliderTrack):
        * platform/efl/RenderThemeEfl.h:

2011-05-03  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        WebInspector: [Chromium] Fix slowness of Summary view nodes expansion in detailed heap profiles.
        https://bugs.webkit.org/show_bug.cgi?id=60023

        * inspector/front-end/DetailedHeapshotGridNodes.js:
        (WebInspector.HeapSnapshotConstructorNode):
        (WebInspector.HeapSnapshotConstructorNode.prototype._createNodesProvider):
        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshot.prototype.dispose):
        (WebInspector.HeapSnapshot.prototype.aggregates):
        (WebInspector.HeapSnapshot.prototype._buildAggregates):
        (WebInspector.HeapSnapshot.prototype._sortAggregateIndexes):
        (WebInspector.HeapSnapshot.prototype.createNodesProviderForClass):
        (WebInspector.HeapSnapshotFilteredOrderedIterator):
        (WebInspector.HeapSnapshotNodesProvider):
        * inspector/front-end/HeapSnapshotProxy.js:
        (WebInspector.HeapSnapshotProxy.prototype.aggregates):
        (WebInspector.HeapSnapshotProxy.prototype.createNodesProviderForClass):

2011-05-03  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        WebInspector: [Chromium] Hint user that to display retaining paths, an object entry must be clicked.
        https://bugs.webkit.org/show_bug.cgi?id=60029

        * English.lproj/localizedStrings.js:
        * inspector/front-end/DetailedHeapshotView.js:
        (WebInspector.HeapSnapshotRetainingPathsList.prototype.reset):
        (WebInspector.DetailedHeapshotView.prototype._mouseClickInContainmentGrid):

2011-05-03  Beth Dakin  <bdakin@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=60045
        Scrollbar thumb sometimes leaves artifacts in the track after scrolling
        -and corresponding-
        <rdar://problem/9015376>

        When we're using WK_SCROLLBAR_PAINTER, the AppleScrollBarVariant default should 
        always be ignored.
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::updateArrowPlacement):

2011-05-03  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

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

        Links broken at iplanwebsites.com. Make sure that culledInlineAbsoluteQuads still does
        a translation of a 0,0 point to absolute coordinates so that the top left position is
        accurate.

        Added fast/inline/skipped-whitespace-client-rect.html
        
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::culledInlineAbsoluteQuads):

2011-05-03  Sam Weinig  <sam@webkit.org>

        Fix chromium build.

        * page/Settings.cpp:

2011-05-02  Roland Steiner  <rolandsteiner@chromium.org>

        Reviewed by Dimitri Glazkov.

        Bug 59974 - Update image map on the containing TreeScope rather than the Document
        https://bugs.webkit.org/show_bug.cgi?id=59974

        No new tests. (reefactoring)

        * html/HTMLMapElement.cpp:
        (WebCore::HTMLMapElement::parseMappedAttribute):
        (WebCore::HTMLMapElement::insertedIntoDocument):
        (WebCore::HTMLMapElement::removedFromDocument):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::imageMap):

2011-05-03  Sam Weinig  <sam@webkit.org>

        Fix chromium build.

        * loader/HistoryController.cpp:

2011-05-02  Roland Steiner  <rolandsteiner@chromium.org>

        Reviewed by Dimitri Glazkov.

        Bug 59966 - Update ID hash on the containing TreeScope rather than the Document
        https://bugs.webkit.org/show_bug.cgi?id=59966

        No new tests. (refactoring)

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::elementsFromAttribute):
        (WebCore::AccessibilityRenderObject::activeDescendant):
        * accessibility/AccessibilityRenderObject.h:
        (WebCore::AccessibilityRenderObject::isAccessibilityRenderObject):
        * css/CSSCursorImageValue.cpp:
        (WebCore::resourceReferencedByCursorElement):
        (WebCore::CSSCursorImageValue::~CSSCursorImageValue):
        (WebCore::CSSCursorImageValue::updateIfSVGCursorIsUsed):
        (WebCore::CSSCursorImageValue::cachedImage):
        * dom/DynamicNodeList.cpp:
        (WebCore::DynamicNodeList::itemWithName):
        * dom/Element.h:
        (WebCore::Element::updateId):
        * dom/Node.cpp:
        (WebCore::Node::querySelector):
        * html/FormAssociatedElement.cpp:
        (WebCore::FormAssociatedElement::insertedIntoTree):
        (WebCore::FormAssociatedElement::resetFormOwner):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::dataList):
        * html/HTMLLabelElement.cpp:
        (WebCore::HTMLLabelElement::control):
        * rendering/svg/RenderSVGTextPath.cpp:
        (WebCore::RenderSVGTextPath::layoutPath):
        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::defaultEventHandler):
        * svg/SVGAltGlyphElement.cpp:
        (WebCore::SVGAltGlyphElement::glyphElement):
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::requestImageResource):
        (WebCore::SVGFEImageElement::build):
        * svg/SVGLinearGradientElement.cpp:
        (WebCore::SVGLinearGradientElement::collectGradientAttributes):
        * svg/SVGMPathElement.cpp:
        (WebCore::SVGMPathElement::pathElement):
        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::collectPatternAttributes):
        * svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::collectGradientAttributes):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::getElementById):
        * svg/SVGTRefElement.cpp:
        (WebCore::SVGTRefElement::updateReferencedText):
        * svg/SVGTextPathElement.cpp:
        (WebCore::SVGTextPathElement::insertedIntoDocument):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::buildPendingResource):
        (WebCore::SVGUseElement::hasCycleUseReferencing):
        (WebCore::SVGUseElement::expandUseElementsInShadowTree):
        * svg/SVGViewSpec.cpp:
        (WebCore::SVGViewSpec::viewTarget):
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::eventBaseFor):
        (WebCore::SVGSMILElement::connectConditions):
        (WebCore::SVGSMILElement::targetElement):
        * xml/XPathFunctions.cpp:
        (WebCore::XPath::FunId::evaluate):

2011-05-03  Sam Weinig  <sam@webkit.org>

        Fix chromium build.

        * css/StyleMedia.cpp:

2011-05-03  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Prune #includes from FrameView.h (Part 1)
        https://bugs.webkit.org/show_bug.cgi?id=59957

        * page/FrameView.h:
        Prune #includes.

        * accessibility/chromium/AXObjectCacheChromium.cpp:
        * page/win/FrameCGWin.cpp:
        * platform/Scrollbar.cpp:
        Add not necessary #includes.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.h:
        Add now necessary forward declaration.

2011-05-03  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Dimitri Glazkov.

        [Chromium] toV8(Node*) will enter infinite recursion when called with a node of type SHADOW_ROOT_NODE
        https://bugs.webkit.org/show_bug.cgi?id=60026

        Return a wrapper for Node in toV8(Node*) when called with a node of type
        SHADOW_ROOT_NODE instead of entering infinite recursion.

        * bindings/v8/custom/V8NodeCustom.cpp:
        (WebCore::toV8Slow):

2011-05-02  Adam Roben  <aroben@apple.com>

        Take advantage of implicit conversion from nullptr_t to PassOwnPtr

        Fixes <http://webkit.org/b/59964> Implicit conversion from std::nullptr_t to PassOwnPtr
        doesn't work, but should

        Reviewed by Adam Barth.

        * bindings/js/ScheduledAction.cpp:
        * css/CSSStyleSelector.cpp:
        * css/MediaList.cpp:
        * css/MediaQueryMatcher.cpp:
        * css/SVGCSSStyleSelector.cpp:
        * dom/MessagePort.cpp:
        * html/InputType.cpp:
        * html/canvas/WebGLRenderingContext.cpp:
        * inspector/InspectorStyleSheet.cpp:
        * page/ContextMenuController.cpp:
        * page/Page.cpp:
        * platform/PlatformGestureRecognizer.cpp:
        * platform/PurgeableBuffer.h:
        * platform/graphics/ImageBuffer.h:
        * platform/leveldb/LevelDBDatabase.cpp:
        * platform/mac/PurgeableBufferMac.cpp:
        * platform/text/RegularExpression.cpp:
        * rendering/RenderTheme.cpp:
        * rendering/RenderThemeMac.mm:
        * rendering/style/RenderStyle.h:
        * rendering/style/SVGRenderStyleDefs.cpp:
        * rendering/style/ShadowData.cpp:
        * rendering/style/StyleRareInheritedData.cpp:
        * rendering/style/StyleRareNonInheritedData.cpp:
        * rendering/svg/RenderSVGResourcePattern.cpp:

2011-05-03  Pavel Feldman  <pfeldman@google.com>

        Not reviewed: fix inspector status bar image glyph reference in network panel.

        * inspector/front-end/networkPanel.css:
        (.network-larger-resources-status-bar-item .glyph):

2011-05-03  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: rename BrowserDebugger agent to DOMDebugger.
        https://bugs.webkit.org/show_bug.cgi?id=60019

        * inspector/CodeGeneratorInspector.pm:
        * inspector/Inspector.json:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::connectFrontend):
        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.XHRBreakpointsSidebarPane.prototype._setBreakpoint):
        (WebInspector.XHRBreakpointsSidebarPane.prototype._removeBreakpoint):
        (WebInspector.XHRBreakpointsSidebarPane.prototype._checkboxClicked):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._setBreakpoint):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._removeBreakpoint):
        * inspector/generate-inspector-idl:

2011-05-03  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: remove special logic for type of document.__proto__
        https://bugs.webkit.org/show_bug.cgi?id=60014

        Test: inspector/console/console-log-document-proto.html

        * inspector/InjectedScriptSource.js: removed unnecessary check nodeType === undefined

2011-05-03  Pavel Feldman  <pfeldman@google.com>

        Not reviewed: fixed typo in inspector style.

        * inspector/front-end/inspector.css:
        (.status-bar-item > .glyph):

2011-05-03  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: revision history storage is too slow.
        https://bugs.webkit.org/show_bug.cgi?id=59939

        It turns out that iterating localStorage keys is very
        expensive (results in slow inspector start), refactor revision
        history in order not to rely upon that operation.

        * inspector/front-end/Resource.js:
        (WebInspector.Resource):
        (WebInspector.Resource._resourceRevisionRegistry):
        (WebInspector.Resource.restoreRevisions.persist):
        (WebInspector.Resource.restoreRevisions):
        (WebInspector.Resource.persistRevision):
        (WebInspector.Resource.prototype._persistRevision):
        * inspector/front-end/ResourceTreeModel.js:
        (WebInspector.ResourceTreeModel.prototype._processCachedResources):
        (WebInspector.ResourceTreeModel.prototype._frameNavigated):

2011-05-03  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: combine toolbar icon images.
        https://bugs.webkit.org/show_bug.cgi?id=59931

        * WebCore.gypi:
        * inspector/front-end/Images/auditsIcon.png: Removed.
        * inspector/front-end/Images/consoleIcon.png: Removed.
        * inspector/front-end/Images/elementsIcon.png: Removed.
        * inspector/front-end/Images/networkIcon.png: Removed.
        * inspector/front-end/Images/profilesIcon.png: Removed.
        * inspector/front-end/Images/resourcesIcon.png: Removed.
        * inspector/front-end/Images/scriptsIcon.png: Removed.
        * inspector/front-end/Images/timelineIcon.png: Removed.
        * inspector/front-end/Images/toolbarIcons.png: Added.
        * inspector/front-end/Images/toolbarIconsSmall.png: Added.
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.css:
        (.toolbar-icon):
        (#toolbar-dropdown .toolbar-icon):
        (.toolbar-item:active .toolbar-icon):
        (#toolbar-dropdown .toolbar-item:active .toolbar-icon):
        (.toolbar-item.elements .toolbar-icon):
        (.toolbar-item.resources .toolbar-icon):
        (#toolbar-dropdown .toolbar-item.resources .toolbar-icon):
        (.toolbar-item.network .toolbar-icon):
        (#toolbar-dropdown .toolbar-item.network .toolbar-icon):
        (.toolbar-item.scripts .toolbar-icon):
        (#toolbar-dropdown .toolbar-item.scripts .toolbar-icon):
        (.toolbar-item.timeline .toolbar-icon):
        (#toolbar-dropdown .toolbar-item.timeline .toolbar-icon):
        (.toolbar-item.profiles .toolbar-icon):
        (#toolbar-dropdown .toolbar-item.profiles .toolbar-icon):
        (.toolbar-item.audits .toolbar-icon):
        (#toolbar-dropdown .toolbar-item.audits .toolbar-icon):
        (.toolbar-item.console .toolbar-icon):
        (#toolbar-dropdown .toolbar-item.console .toolbar-icon):
        (.status-bar-item > .glyph):

2011-05-03  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: combine status bar button glyphs.
        https://bugs.webkit.org/show_bug.cgi?id=59885

        * WebCore.gypi:
        * inspector/front-end/Images/breakpointsActivateButtonGlyph.png: Removed.
        * inspector/front-end/Images/breakpointsDeactivateButtonGlyph.png: Removed.
        * inspector/front-end/Images/clearConsoleButtonGlyph.png: Removed.
        * inspector/front-end/Images/consoleButtonGlyph.png: Removed.
        * inspector/front-end/Images/dockButtonGlyph.png: Removed.
        * inspector/front-end/Images/enableOutlineButtonGlyph.png: Removed.
        * inspector/front-end/Images/enableSolidButtonGlyph.png: Removed.
        * inspector/front-end/Images/excludeButtonGlyph.png: Removed.
        * inspector/front-end/Images/focusButtonGlyph.png: Removed.
        * inspector/front-end/Images/garbageCollectButtonGlyph.png: Removed.
        * inspector/front-end/Images/gearButtonGlyph.png: Removed.
        * inspector/front-end/Images/helpButtonGlyph.png: Removed.
        * inspector/front-end/Images/largerResourcesButtonGlyph.png: Removed.
        * inspector/front-end/Images/nodeSearchButtonGlyph.png: Removed.
        * inspector/front-end/Images/pauseOnExceptionButtonGlyph.png: Removed.
        * inspector/front-end/Images/percentButtonGlyph.png: Removed.
        * inspector/front-end/Images/prettyPrintButtonGlyph.png: Removed.
        * inspector/front-end/Images/recordButtonGlyph.png: Removed.
        * inspector/front-end/Images/recordToggledButtonGlyph.png: Removed.
        * inspector/front-end/Images/reloadButtonGlyph.png: Removed.
        * inspector/front-end/Images/statusBarButtonGlyphs.png: Added.
        * inspector/front-end/Images/undockButtonGlyph.png: Removed.
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.css:
        (.status-bar-item > .glyph):
        (#dock-status-bar-item .glyph):
        (body.detached #dock-status-bar-item .glyph):
        (#console-status-bar-item .glyph):
        (.clear-status-bar-item .glyph):
        (button.enable-toggle-status-bar-item .glyph):
        (button.enable-toggle-status-bar-item.toggled-on .glyph):
        (.scripts-pause-on-exceptions-status-bar-item .glyph):
        (.scripts-toggle-pretty-print-status-bar-item .glyph):
        (.toggle-breakpoints .glyph):
        (.toggle-breakpoints.toggled-on .glyph):
        (.resources-larger-resources-status-bar-item .glyph):
        (.timeline-filter-status-bar-item .glyph):
        (.garbage-collect-status-bar-item .glyph):
        (.record-profile-status-bar-item .glyph):
        (.record-profile-status-bar-item.toggled-on .glyph):
        (.heap-snapshot-status-bar-item .glyph):
        (.node-search-status-bar-item .glyph):
        (.percent-time-status-bar-item .glyph):
        (.focus-profile-node-status-bar-item .glyph):
        (.exclude-profile-node-status-bar-item .glyph):
        (.reset-profile-status-bar-item .glyph):
        (.delete-storage-status-bar-item .glyph):
        (.refresh-storage-status-bar-item .glyph):
        * inspector/front-end/inspector.js:

2011-05-02  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Possible crash when removing elements with reflections
        https://bugs.webkit.org/show_bug.cgi?id=60009
        
        RenderLayer's destructor deleted its z-order list Vector pointers
        before removing the reflection layer. However, the reflection cleanup
        code could call back into the RenderLayer to dirty z-order lists,
        so move reflection cleanup to before z-order vector deletion.
        
        The test crashes when run manually a few times with MallocScribble enabled,
        but I was not able to create a test that crashed reliably.

        Test: fast/reflections/remove-reflection-crash.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::~RenderLayer):

2011-05-02  Ian Henderson  <ianh@apple.com>

        Reviewed by Dan Bernstein.

        CSS !important not respected by JavaScript
        https://bugs.webkit.org/show_bug.cgi?id=60007

        The addParsedProperty and addParsedProperties methods were subtly
        different.  The former did not check for !important before setting the
        given property.

        Change addParsedProperties to call addParsedProperty and move the
        relevant code.  The one other caller of this method, in
        editing/markup.cpp, probably wanted this behavior anyway.

        Test: fast/css/important-js-override.html

        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::addParsedProperties):
        (WebCore::CSSMutableStyleDeclaration::addParsedProperty):

2011-05-02  Ben Wells  <benwells@chromium.org>

        Reviewed by Simon Fraser.

        Cleanup variable usage in RenderObject.cpp paintOutline()
        https://bugs.webkit.org/show_bug.cgi?id=59911

        No new tests for this, there should be no change in behaviour.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::paintOutline):

2011-05-02  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by James Robinson.

        REGRESSION(r84672): showTree doesn't work for input/textarea elements
        https://bugs.webkit.org/show_bug.cgi?id=60001

        When shadow is null, try retrieving the inner element of a render text control.

        * dom/Node.cpp:
        (WebCore::traverseTreeAndMark):

2011-05-02  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by David Kilzer.

        Respect fixed text-indent on ::-webkit-input-placeholder
        https://bugs.webkit.org/show_bug.cgi?id=59825

        Test: fast/forms/input-placeholder-text-indent.html

        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::paintPlaceholder): indent by
        a fixed text-indent size specified on the placeholder style.

2011-05-02  Eric Uhrhane  <ericu@chromium.org>

        Reviewed by Eric Seidel.

        Some FileWriter progress events should be queued
        https://bugs.webkit.org/show_bug.cgi?id=50846

        * fileapi/FileWriter.cpp:
        * fileapi/FileWriter.h:
        Create a new asynchronous Task [FileWriterCompletionEventTask] that will set readyState to DONE and fire off the right events.

2011-05-02  Jia Pu  <jpu@apple.com>

        Reviewed by Alexey Proskuryakov.

        [Mac] Need to truncate the string sent to "Look Up … " menu item, if it's too long.
        https://bugs.webkit.org/show_bug.cgi?id=59836
        <rdar://problem/9275983>

        * platform/DefaultLocalizationStrategy.cpp:
        (WebCore::truncatedStringForLookupMenuItem):
        (WebCore::DefaultLocalizationStrategy::contextMenuItemTagLookUpInDictionary):

2011-05-02  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders Carlsson.

        <rdar://problem/9340945> and https://bugs.webkit.org/show_bug.cgi?id=59973
        In Aperture, a WebView might be dealloc'ed before it finishes loading.

        * WebCore.exp.in:
        * platform/RuntimeApplicationChecks.cpp:
        (WebCore::applicationIsAperture): Perform a com.apple.Aperture bundle check.
        * platform/RuntimeApplicationChecks.h:

2011-05-02  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Avoid wasted cycles updating paths when popping the context stack
        https://bugs.webkit.org/show_bug.cgi?id=59967

        CanvasRenderingContext2D has to map the current path through
        transforms whenever the context stack is popped, which creates
        a lot of platform path objects. Avoid extra work here when the
        path is empty, or when the transform is identity.

        * platform/graphics/cg/PathCG.cpp:
        (WebCore::Path::transform):

2011-05-02  Enrica Casucci  <enrica@apple.com>

        Reviewed by Dan Bernstein.

        Text does not split on white space when typing to the edge of window.
        https://bugs.webkit.org/show_bug.cgi?id=59968
        <rdar://problem/9112683>

        Test: editing/inserting/typing-at-end-of-line.html

        This is a regression introduced when we converted the line box tree to
        floating point in r78846. In findNextLineBreak, there was still one place where
        the character width was treated as int and truncated and we were inconsistent
        in the way we treated a character that did not fit entirely in the line.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::findNextLineBreak):

2011-04-19  Adrienne Walker  <enne@google.com>

        Reviewed by James Robinson.

        [chromium] Don't unnecessarily resize skia/cg canvases when painting in compositor
        https://bugs.webkit.org/show_bug.cgi?id=58907

        Additionally, move the context save/restore logic to a place where it
        will reset the translation added in LayerTilerChromium.

        Test: compositing/repaint/same-size-invalidation.html

        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerPainter::paint):
        * platform/graphics/chromium/PlatformCanvas.cpp:
        (WebCore::PlatformCanvas::resize):
        (WebCore::PlatformCanvas::Painter::Painter):
        (WebCore::PlatformCanvas::Painter::~Painter):
        * platform/graphics/chromium/PlatformCanvas.h:

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

        Enable strict OwnPtr for Qt
        https://bugs.webkit.org/show_bug.cgi?id=59667

        Unreviewed buildfix after r85343.

        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3D::GraphicsContext3D):

2011-05-02  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r85483.
        http://trac.webkit.org/changeset/85483
        https://bugs.webkit.org/show_bug.cgi?id=59958

        Causes media test failures. (Requested by eric_carlson on
        #webkit).

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        (WebCore::HTMLMediaElement::prepareForLoad):
        (WebCore::HTMLMediaElement::seek):
        (WebCore::HTMLMediaElement::updatePlayState):
        * html/HTMLMediaElement.h:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::MediaPlayerPrivateAVFoundation):
        (WebCore::MediaPlayerPrivateAVFoundation::resumeLoad):
        (WebCore::MediaPlayerPrivateAVFoundation::load):
        (WebCore::MediaPlayerPrivateAVFoundation::prepareToPlay):
        (WebCore::MediaPlayerPrivateAVFoundation::paint):
        (WebCore::MediaPlayerPrivateAVFoundation::duration):
        (WebCore::MediaPlayerPrivateAVFoundation::seeking):
        (WebCore::MediaPlayerPrivateAVFoundation::updateStates):
        (WebCore::MediaPlayerPrivateAVFoundation::hasAvailableVideoFrame):
        (WebCore::MediaPlayerPrivateAVFoundation::metadataLoaded):
        (WebCore::MediaPlayerPrivateAVFoundation::loadedTimeRangesChanged):
        (WebCore::MediaPlayerPrivateAVFoundation::timeChanged):
        (WebCore::MediaPlayerPrivateAVFoundation::seekCompleted):
        (WebCore::MediaPlayerPrivateAVFoundation::repaint):
        (WebCore::MediaPlayerPrivateAVFoundation::setPreload):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::MediaPlayerPrivateAVFoundationObjC):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::videoLayerIsReadyToDisplay):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerForURL):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerForCacheResource):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::beginLoadingMetadata):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::playerItemStatus):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformDuration):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::assetStatus):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::paint):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::tracksChanged):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::sizeChanged):

2011-05-02  Adam Barth  <abarth@webkit.org>

        Reviewed by David Levin.

        PLATFORM(MAC) should (almost!) build with strict PassOwnPtr
        https://bugs.webkit.org/show_bug.cgi?id=59924

        * css/CSSGrammar.y:
        * platform/graphics/mac/SimpleFontDataMac.mm:
            - Memory management for the font cache is somewhat... complext.
              This will require some careful thought to sort out.

2011-05-02  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Eric Seidel.

        showLineTree/showLineTreeForThis would make working with the line box tree easier
        https://bugs.webkit.org/show_bug.cgi?id=59662

        Adding a showLineTree/showLineTreeForThis method to help visualize and debug
        the line tree. Also adding a missing showRenderTreeForThis method to RenderObject.

        No new tests since this is a debugging feature only and not compiled in release.

        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::showLineTreeForThis):
        (WebCore::InlineBox::showLineTreeAndMark):
        (WebCore::InlineBox::showBox):
        (showLineTree):
        * rendering/InlineBox.h:
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::showLineTreeAndMark):
        * rendering/InlineFlowBox.h:
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::showBox):
        * rendering/InlineTextBox.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::showLineTreeAndMark):
        * rendering/RenderBlock.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::showRenderTreeForThis):
        (WebCore::RenderObject::showLineTreeForThis):
        (showTree):
        (showLineTree):
        * rendering/RenderObject.h:

2011-05-02  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Carlson.

        REGRESSIONS (r71934): In standalone media documents, (double-)clicking the media element doesn’t play/pause
        https://bugs.webkit.org/show_bug.cgi?id=59917

        Since default event handlers are not retargeted, we should always attempt ancestor
        traversal to find out whether the event.

        * html/MediaDocument.cpp:
        (WebCore::ancestorVideoElement): Added ancestor-traversing helper.
        (WebCore::MediaDocument::defaultEventHandler): Changed to use ancestorVideoElement.

2011-05-02  Sam Weinig  <sam@webkit.org>

        Attempt to fix the Leopard build.

        * platform/graphics/FontPlatformData.h:
        * platform/graphics/mac/ComplexTextController.h:
        * platform/graphics/mac/ComplexTextControllerATSUI.cpp:
        * platform/mac/WebCoreSystemInterface.h:

2011-05-02  Tony Chang  <tony@chromium.org>

        Reviewed by Kent Tamura.

        convert manual-tests/bugzilla-6821.html to a layout test
        https://bugs.webkit.org/show_bug.cgi?id=59404

        Test: fast/css/hover-update.html

        * manual-tests/bugzilla-6821.html: Removed.

2011-05-02  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Prune ApplicationServices.h out of the headers
        https://bugs.webkit.org/show_bug.cgi?id=59952

        More forward declares are better.

        * html/canvas/CanvasRenderingContext2D.cpp:
        * html/canvas/CanvasRenderingContext2D.h:
        * platform/graphics/GlyphBuffer.h:
        * platform/graphics/cg/ImageBufferCG.cpp:
        * platform/graphics/cg/PDFDocumentImage.cpp:
        * platform/graphics/cg/PDFDocumentImage.h:
        * platform/graphics/mac/ComplexTextController.h:
        * platform/graphics/mac/ComplexTextControllerCoreText.cpp:
        * platform/graphics/mac/GlyphPageTreeNodeMac.cpp:
        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollAnimatorMac.mm:
        * platform/mac/ScrollbarThemeMac.h:
        * platform/mac/ScrollbarThemeMac.mm:
        * platform/mac/WebCoreNSStringExtras.h:
        * platform/mac/WebCoreSystemInterface.h:

2011-05-02  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/7972529> Images with percentage based height/max-height are missing when they are inside blocks inside tables
        https://bugs.webkit.org/show_bug.cgi?id=58006

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeReplacedLogicalHeightUsing): Expanded the scope of the fix for
        <http://webkit.org/b/15359> from r29039 to cover not just the case of a auto-or-percent-height
        table cell as the immediate containing block, but any case where all containing block ancestors
        up to and including a table cell are auto-or-percent height.

2011-05-02  Daniel Bates  <dbates@webkit.org>

        Reviewed by Sam Weinig.

        Convert manual test onblur-remove.html to a DRT test; onblur-remove.html fails
        https://bugs.webkit.org/show_bug.cgi?id=59379

        Move manual test onblur-remove.html to LayoutTests/fast/events.

        Test: fast/events/onblur-remove.html

        * manual-tests/onblur-remove.html: Removed.

2011-05-02  Sailesh Agrawal  <sail@chromium.org>

        Reviewed by Dimitri Glazkov.

        Chromium Mac: Add scrollbar overlay drawing functions
        https://bugs.webkit.org/show_bug.cgi?id=59741

        These functions are simply copied from WebCoreSystemInterface. These will be used to implement overlay scrollbars for Chromium Mac.

        No new tests, since this code is only enabled on future versions of Mac OS X.

        * WebCore.gypi:
        * platform/chromium/ScrollbarOverlayUtilitiesMac.h: Added.
        * platform/chromium/ScrollbarOverlayUtilitiesMac.mm: Added.
        (LookUpNSScrollerImpClass):
        (LookUpNSScrollerImpPairClass):
        (ScrollbarControlSizeToNSControlSize):
        (wkScrollbarPainterUsesOverlayScrollers):
        (wkScrollbarPainterIsHorizontal):
        (wkScrollbarPainterKnobAlpha):
        (wkScrollbarPainterSetOverlayState):
        (wkScrollbarPainterPaint):
        (wkScrollbarMinimumThumbLength):
        (wkScrollbarPainterSetDelegate):
        (wkScrollbarPainterTrackAlpha):
        (wkMakeScrollbarPainter):
        (wkScrollbarThickness):
        (wkScrollbarMinimumTotalLengthNeededForThumb):
        (wkVerticalScrollbarPainterForController):
        (wkHorizontalScrollbarPainterForController):
        (wkMakeScrollbarReplacementPainter):
        (wkSetPainterForPainterController):
        (wkSetScrollbarPainterControllerStyle):
        (wkScrollbarPainterKnobRect):
        (wkSetScrollbarPainterKnobAlpha):
        (wkSetScrollbarPainterTrackAlpha):
        (wkSetScrollbarPainterKnobStyle):
        (wkMakeScrollbarPainterController):
        (wkContentAreaScrolled):
        (wkContentAreaWillPaint):
        (wkMouseEnteredContentArea):
        (wkMouseExitedContentArea):
        (wkMouseMovedInContentArea):
        (wkWillStartLiveResize):
        (wkContentAreaResized):
        (wkWillEndLiveResize):
        (wkContentAreaDidShow):
        (wkContentAreaDidHide):
        (wkDidBeginScrollGesture):
        (wkDidEndScrollGesture):
        (wkScrollbarPainterForceFlashScrollers):
        (IsScrollbarOverlayAPIAvailable):

2011-05-02  Luke Macpherson   <macpherson@chromium.org>

        Reviewed by Dimitri Glazkov.

        Implement Length based CSS properties in CSSStyleApplyProperty
        https://bugs.webkit.org/show_bug.cgi?id=59314

        No new tests as no functionality changed.

        * css/CSSStyleApplyProperty.cpp:
        (WebCore::ApplyPropertyLength::ApplyPropertyLength):
        Added this class to handle all length types.
        Property specific behavior is handled through set of boolean parameters.
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
        Added calls to set up entries for the newly added length properties.
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        Remove property implementations mow implemented in CSSStyleApplyProperty.
        * css/CSSStyleSelector.h:
        (WebCore::CSSStyleSelector::rootElementStyle):
        Expose m_rootElementStyle via getter.

2011-05-02  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Eric Seidel.

        HTMLMediaElement should not seek to time 0 when readyState reaches HAVE_METADATA
        https://bugs.webkit.org/show_bug.cgi?id=59828

        No new tests required, no functional change because seeking to time zero before playback
        begins has no effect.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setReadyState): Don't seek to time 0 when readyState reaches
            HAVE_METADATA.

2011-05-02  Sam Weinig  <sam@webkit.org>

        Reviewed by Gavin Barraclough.

        Fix extra whitespace in license in FocusDirection.h.

        * page/FocusDirection.h:

2011-05-02  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Barth.

        Prune some #includes from DOMWindow.h
        https://bugs.webkit.org/show_bug.cgi?id=59907

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::setSecurityOrigin):
        * page/DOMWindow.h:
        Remove #includes of SecurityOrigin and MessagePort by forward declaring
        and moving the SecurityOrigin setter to the .cpp file. Also adds EventTarget
        #include that was getting added by MessagePort.h.

        * bindings/js/JSCustomVoidCallback.cpp:
        * bindings/js/JSCustomXPathNSResolver.cpp:
        * bindings/js/JSDOMWindowCustom.h:
        * bindings/js/JSHistoryCustom.cpp:
        * bindings/js/ScriptController.h:
        * html/HTMLAnchorElement.cpp:
        * html/HTMLMediaElement.cpp:
        * html/parser/XSSFilter.cpp:
        * inspector/InspectorDOMStorageResource.cpp:
        * loader/MainResourceLoader.cpp:
        * page/DragController.cpp:
        * page/EventSource.cpp:
        * page/Location.cpp:
        * websockets/WebSocket.cpp:
        * xml/XSLTProcessorLibxslt.cpp:
        Add now missing SecurityOrigin.h #includes.

2011-05-02  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Brady Eidson.

        The preload attribute of the video tag is not completely implemented
        https://bugs.webkit.org/show_bug.cgi?id=43673
        <rdar://problem/7508322>

        Tested manually with manual-tests/media-elements/video-preload.html.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): Initialize m_havePreparedToPlay.
        (WebCore::HTMLMediaElement::prepareForLoad): Ditto.
        (WebCore::HTMLMediaElement::prepareToPlay): New, tell player to prepare to play.
        (WebCore::HTMLMediaElement::seek): Call prepareToPlay when preload is less than 'metadata'
            because we need to have media data loaded to seek.
        (WebCore::HTMLMediaElement::updatePlayState): Call prepareToPlay.
        * html/HTMLMediaElement.h:

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::MediaPlayerPrivateAVFoundation):  Remove 
            m_videoFrameHasDrawn and m_delayingLoad as they are no longer used.
        (WebCore::MediaPlayerPrivateAVFoundation::resumeLoad): Removed.
        (WebCore::MediaPlayerPrivateAVFoundation::load): Don't initialize m_videoFrameHasDrawn. 
            Move all preload logic to setPreload, call it from here.
        (WebCore::MediaPlayerPrivateAVFoundation::prepareToPlay): Move all preload logic to 
            setPreload, call it.
        (WebCore::MediaPlayerPrivateAVFoundation::duration): Don't cache duration = 0, it is
            unlikely to be correct and isn't worth caching.
        (WebCore::MediaPlayerPrivateAVFoundation::updateStates): Update for name change AVAssetStatus
            to AssetStatus. Create the AVPlayer once we know an asset is playable but preload is
            'metadata'. Set networkState to 'idle' when the playback buffer is full because that is
            a signal that AVFoundation won't do any more IO. Set readyState to 'HAVE_CURRENT_DATA' 
            when the first frame is available.
        (WebCore::MediaPlayerPrivateAVFoundation::metadataLoaded): Call tracksChanged so we cache
            width, height, hasVideo, etc.
        (WebCore::MediaPlayerPrivateAVFoundation::repaint): Don't set m_videoFrameHasDrawn, it is done
            in derived classes.
        (WebCore::MediaPlayerPrivateAVFoundation::setPreload): Centralize all logic about when to create
            AVAsset and AVPlayerItem here.
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::MediaPlayerPrivateAVFoundationObjC): Initialize
            m_videoFrameHasDrawn.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::hasAvailableVideoFrame): New, renamed from
            videoLayerIsReadyToDisplay. Return true if we have a layer with frames available or
            if we have painted a frame to the context.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVAssetForURL): New, create the AVAsset
            if necessary.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVAssetForCacheResource): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayer): Restructure logic.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerItem): New, create AVPlayerItem.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::beginLoadingMetadata): Correct logging.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::playerItemStatus): Return "buffer full" when
            the buffer is full.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformDuration): Get the duration from the
            AVAsset when we haven't allocated the AVPlayerItem yet so that we can return duration
            when we only have metadata.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::assetStatus): Update for name change.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::paint): Set m_videoFrameHasDrawn.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::tracksChanged): Get attributes from AVAsset
            when when we haven't allocated the AVPlayerItem yet so that we can report attributes
            when we only have metadata.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::sizeChanged): Guard against being called before
            we have allocated the AVPlayerItem.

2011-05-02  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] gdk_drawable_get_size() shouldn't be used with GTK+ >= 2.24
        https://bugs.webkit.org/show_bug.cgi?id=59932

        Use gdk_window_get_width() and gdk_window_get_height() if
        available, instead of the deprecated gdk_drawable_get_size().

        No new tests, build fix only.

        * platform/gtk/WidgetRenderingContext.cpp:
        (WebCore::WidgetRenderingContext::WidgetRenderingContext):

2011-05-02  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Brady Eidson.

        The preload attribute of the video tag is not completely implemented
        https://bugs.webkit.org/show_bug.cgi?id=43673
        <rdar://problem/7508322>

        Test manually with manual-tests/media-elements/video-preload.html.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::commonMovieAttributes): Add new "limit read-ahead"
            attribute when preload is not "auto".
        (WebCore::MediaPlayerPrivateQTKit::resumeLoad): Remove m_delayingLoad, we don't need it.
        (WebCore::MediaPlayerPrivateQTKit::load): Correct comment.
        (WebCore::MediaPlayerPrivateQTKit::prepareToPlay): Call setPreload('auto').
        (WebCore::MediaPlayerPrivateQTKit::setPreload): Set new attribue if we already have
            a QTMovie.

2011-05-02  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Brady Eidson.

        The preload attribute of the video tag is not completely implemented
        https://bugs.webkit.org/show_bug.cgi?id=43673
        <rdar://problem/7508322>

        Manual test manual-tests/media-elements/video-preload.html added.

        * manual-tests/media-elements/video-preload.html: Added. New manual test for media element 
            'preload' attribute because it is not possible to detect if a media engine supports 
            "preload=metadata" in a way that lets us have per-platform layout test results.

2011-05-01  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Eric Carlson.

        Regression(r74787): Media document mouse click and double-click
        events should be checked on target node only and not its descendants.
        https://bugs.webkit.org/show_bug.cgi?id=59886

        * html/MediaDocument.cpp:
        (WebCore::MediaDocument::defaultEventHandler):

2011-05-01  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Polish CSP host and port matching
        https://bugs.webkit.org/show_bug.cgi?id=59899

        Finish last two details of host and port matching.  I don't think the
        default port handling is testable with our current testing
        infrastructure.

        Tests: http/tests/security/contentSecurityPolicy/image-full-host-wildcard-allowed.html
               http/tests/security/contentSecurityPolicy/image-host-wildcard-allowed.html

        * page/ContentSecurityPolicy.cpp:
        (WebCore::CSPSource::hostMatches):
        (WebCore::CSPSource::portMatches):

2011-05-01  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        CSP default-src is missing
        https://bugs.webkit.org/show_bug.cgi?id=58641

        Add support for default-src.  The default-src provides a default policy
        for every directive that sends in "-src".  If the more-specific
        directive is present, it takes precedence.  I also took this
        opportunity to refactor the internals of ContentSecurityPolicy a bit to
        reduce duplicate code.

        Tests: http/tests/security/contentSecurityPolicy/default-src-inline-allowed.html
               http/tests/security/contentSecurityPolicy/default-src-inline-blocked.html
               http/tests/security/contentSecurityPolicy/script-src-overrides-default-src.html

        * page/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::didReceiveHeader):
        (WebCore::ContentSecurityPolicy::checkEval):
        (WebCore::ContentSecurityPolicy::operativeDirective):
        (WebCore::ContentSecurityPolicy::checkInlineAndReportViolation):
        (WebCore::ContentSecurityPolicy::checkEvalAndReportViolation):
        (WebCore::ContentSecurityPolicy::checkSourceAndReportViolation):
        (WebCore::ContentSecurityPolicy::allowJavaScriptURLs):
        (WebCore::ContentSecurityPolicy::allowInlineEventHandlers):
        (WebCore::ContentSecurityPolicy::allowInlineScript):
        (WebCore::ContentSecurityPolicy::allowInlineStyle):
        (WebCore::ContentSecurityPolicy::allowEval):
        (WebCore::ContentSecurityPolicy::allowScriptFromSource):
        (WebCore::ContentSecurityPolicy::allowObjectFromSource):
        (WebCore::ContentSecurityPolicy::allowChildFrameFromSource):
        (WebCore::ContentSecurityPolicy::allowImageFromSource):
        (WebCore::ContentSecurityPolicy::allowStyleFromSource):
        (WebCore::ContentSecurityPolicy::allowFontFromSource):
        (WebCore::ContentSecurityPolicy::allowMediaFromSource):
        (WebCore::ContentSecurityPolicy::addDirective):
        * page/ContentSecurityPolicy.h:

2011-05-01  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Prune some unnecessary #includes
        https://bugs.webkit.org/show_bug.cgi?id=59895

        Start getting rid of unnecessary #includes and forward declares.

        * bindings/js/JSDOMBinding.h:
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSDOMWindowShell.h:
        * bindings/js/ScheduledAction.cpp:
        * bindings/js/ScriptController.cpp:
        * bindings/js/ScriptController.h:
        * bindings/js/ScriptDebugServer.cpp:
        * editing/Editor.h:
        * inspector/InspectorClient.cpp:
        * loader/FrameLoader.h:
        * loader/NavigationScheduler.h:
        * page/Console.cpp:
        * xml/XMLTreeViewer.cpp:
        * xml/XMLTreeViewer.h:

2011-05-01  Patrick Gansterer  <paroga@webkit.org>

        [WIN] Unreviewed buildfix after r85434.

        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp:
        (WebCore::MediaPlayerPrivate::createLayerForMovie):

2011-05-01  Patrick Gansterer  <paroga@webkit.org>

        [WIN] Unreviewed buildfix after r85434.

        * platform/graphics/win/QTMovieVisualContext.cpp:
        (QTMovieVisualContext::QTMovieVisualContext): Added missing header.

2011-05-01  Justin Schuh  <jschuh@chromium.org>

        Reviewed by Adam Barth.

        History::stateObjectAdded should check origin via SecurityOrigin::canRequest
        https://bugs.webkit.org/show_bug.cgi?id=59840

        Tests: fast/loader/stateobjects/pushstate-in-data-url-denied.html
               http/tests/navigation/replacestate-base-illegal.html
               http/tests/navigation/replacestate-base-legal.html

        * page/History.cpp:
        (WebCore::History::stateObjectAdded):

2011-05-01  Patrick Gansterer  <paroga@webkit.org>

        [WIN] Unreviewed buildfix after r85434.

        * platform/graphics/win/QTMovieVisualContext.cpp:
        (QTMovieVisualContext::QTMovieVisualContext):

2011-05-01  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Barth.

        [WINCE] Fix OwnPtr strict issues
        https://bugs.webkit.org/show_bug.cgi?id=59898

        * page/wince/FrameWinCE.cpp:
        (WebCore::imageFromSelection):
        * platform/graphics/wince/FontPlatformData.cpp:
        (WebCore::FixedSizeFontData::create):
        (WebCore::FontPlatformPrivateData::FontPlatformData::hfont):
        (WebCore::FontPlatformPrivateData::FontPlatformData::getScaledFontHandle):
        (WebCore::FontPlatformPrivateData::FontPlatformData::discardFontHandle):
        * platform/graphics/wince/GraphicsContextWinCE.cpp:
        (WebCore::GraphicsContext::strokeArc):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::clip):
        (WebCore::GraphicsContext::fillRoundedRect):
        (WebCore::GraphicsContext::drawRoundCorner):
        (WebCore::GraphicsContext::drawText):
        * platform/graphics/wince/ImageBufferWinCE.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        * platform/graphics/wince/ImageWinCE.cpp:
        (WebCore::BitmapImage::getHBITMAPOfSize):
        * platform/graphics/wince/SharedBitmap.cpp:
        (WebCore::SharedBitmap::SharedBitmap):

2011-05-01  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        Get rid of versions of sendContextMenuEvent and eventMayStartDrag that takes NSEvent
        https://bugs.webkit.org/show_bug.cgi?id=59837

        Removed EventHandler::sendContextMenuEvent(NSEvent*) and EventHandler::eventMayStartDrag(NSEvent*)

        * WebCore.exp.in:
        * page/EventHandler.h:
        * page/mac/EventHandlerMac.mm:

2011-05-01  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        Move currentKeyboardEvent from EventHandlerMac.mm to WebHTMLView.mm
        https://bugs.webkit.org/show_bug.cgi?id=59835

        Moved currentKeyboardEvent.

        * WebCore.exp.in:
        * page/EventHandler.h:
        * page/mac/EventHandlerMac.mm:

2011-05-01  ojab  <ojab@ojab.ru>

        Reviewed by Eric Seidel.

        Fix build with --disable-video --enable-fullscreen-api
        https://bugs.webkit.org/show_bug.cgi?id=59698

        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::extraFullScreenStyleSheet):

2011-05-01  Jeff Timanus  <twiz@chromium.org>

        Reviewed by Eric Seidel.

        Add solid-color checking to BitmapImage::checkForSolidColour in the skia port.
        https://bugs.webkit.org/show_bug.cgi?id=59041

        Test:css2.1/t140201-c533-bgimage-00-a.html

        * platform/graphics/Image.cpp:
        (WebCore::Image::drawTiled): Removal of macro exclusion of assert for Skia path.
        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::BitmapImage::checkForSolidColor):

2011-05-01  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Barth.

        Fix OwnPtr strict issues in windows build
        https://bugs.webkit.org/show_bug.cgi?id=59878

        * platform/graphics/ca/win/CACFLayerTreeHost.cpp:
        (WebCore::getDirtyRects):
        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::MediaPlayerPrivateQuickTimeVisualContext):
        * platform/graphics/win/WKCAImageQueue.cpp:
        (WebCore::WKCAImageQueue::WKCAImageQueue):
        * platform/win/CursorWin.cpp:
        (WebCore::createSharedCursor):
        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::writeImage):

2011-05-01  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Eric Seidel.

        Use PassOwnPtr as return value of GraphicsContext::createWindowsBitmap
        https://bugs.webkit.org/show_bug.cgi?id=59876

        Also pass the size "as reference" instead of "as value".

        * platform/graphics/GraphicsContext.h:
        * platform/graphics/win/FontCGWin.cpp:
        (WebCore::drawGDIGlyphs):
        * platform/graphics/win/GraphicsContextWin.cpp:
        (WebCore::GraphicsContext::WindowsBitmap::WindowsBitmap):
        (WebCore::GraphicsContext::createWindowsBitmap):
        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp:
        (WebCore::MediaPlayerPrivate::paint):

2011-05-01  Emil A Eklund  <eae@chromium.org>

        Reviewed by Eric Seidel.

        getComputedStyle() returns unitless values for some properties that require units
        https://bugs.webkit.org/show_bug.cgi?id=55111

        Change getComputedStyle to return value with unit for -webkit-column-width, -webkit-column-gap and -webkit-perspective

        Test: fast/css/getComputedStyle/getComputedStyle-length-unit.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):

2011-05-01  Young Han Lee  <joybro@company100.net>

        Reviewed by Eric Seidel.

        Change TEXMAP_OPENGL_ES2 to TEXMAP_OPENGL_ES_2
        https://bugs.webkit.org/show_bug.cgi?id=59608

        TEXMAP_OPENGL_ES2 is a wrong name. TEXMAP_OPENGL_ES_2 is already defined in TextureMapper.h

        No new functionality, no new tests.

        * platform/graphics/opengl/TextureMapperGL.cpp:
        (WebCore::TextureMapperGL::TextureMapperGL):

2011-05-01  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Eric Seidel.

        CSS3 nth-child(n) selector fails
        https://bugs.webkit.org/show_bug.cgi?id=56943

        Regression from r75158.
        "n" is a valid parameter to nth() and should be allowed.

        Test: fast/css/nth-child-n.html

        * css/CSSParser.cpp:
        (WebCore::isValidNthToken):

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

        Not reviewed: address stack frame scriptName -> url rename in timeline panel.

        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.FormattedRecord.prototype._getRecordDetails):
        (WebInspector.TimelinePanel.PopupContentHelper.prototype._appendStackTrace):

2011-05-01  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Maciej Stachowiak.

        Crash in AccessibilityRenderObject while viewing PDFs in iframes
        https://bugs.webkit.org/show_bug.cgi?id=59629

        Could not reproduce this crash, but it's quite clear how it could happen.
 
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::accessibilityHitTest):

2011-05-01  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        LEAK: SVGElement leaks when detaching it in a pending resource state
        https://bugs.webkit.org/show_bug.cgi?id=59072

        Make the pending resources set non-refcounted again. We made it refcounted a while ago
        to fix a security bug, as we had dangling pointers in the set in SVGDocumentExtensions.
        Fix the underlying problem, by removing all pending resources referencing to a particular
        SVGElement, upon its destruction or upon removing it from the document.

        Example: <rect fill="url(#foo)" id="rect">
        When we try to render the rect, the foo paint server can't be found and thus "foo" will be
        added to the pending resource set, with "rect" as client. When "foo" appears, it would remove
        itself from the pending resource set, and a ref count to the "rect" would be released.
        If "foo" never appears, SVGDocumentExtensions still holds a ref to the <rect>, thus keeping
        it and the associated document alive.

        Tests: svg/custom/pending-resource-leak-2.svg
               svg/custom/pending-resource-leak-3.svg
               svg/custom/pending-resource-leak.svg

        These tests cover several scenarios where we used to leak. Should fix several SVG*Element leaks on the bots.
        I manually tested reloading above testcases dozens of times, before the leak count was incremented by 2 nodes on every reload, that's gone now.

        * rendering/svg/RenderSVGResourceContainer.cpp:
        (WebCore::RenderSVGResourceContainer::registerResource):
        * rendering/svg/RenderSVGShadowTreeRootContainer.cpp:
        (WebCore::RenderSVGShadowTreeRootContainer::updateFromElement):
        * rendering/svg/SVGResources.cpp:
        (WebCore::registerPendingResource):
        * svg/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::addPendingResource):
        (WebCore::SVGDocumentExtensions::hasPendingResources):
        (WebCore::SVGDocumentExtensions::removeElementFromPendingResources):
        (WebCore::SVGDocumentExtensions::removePendingResource):
        * svg/SVGDocumentExtensions.h:
        * svg/SVGElement.cpp:
        * svg/SVGElement.h:
        * svg/SVGElementRareData.h:
        (WebCore::SVGElementRareData::SVGElementRareData):
        (WebCore::SVGElementRareData::hasPendingResources):
        (WebCore::SVGElementRareData::setHasPendingResources):
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::~SVGStyledElement):
        (WebCore::SVGStyledElement::insertedIntoDocument):
        (WebCore::SVGStyledElement::removedFromDocument):
        (WebCore::SVGStyledElement::hasPendingResources):
        (WebCore::SVGStyledElement::setHasPendingResources):
        * svg/SVGStyledElement.h:
        (WebCore::SVGStyledElement::needsPendingResourceHandling):
        (WebCore::SVGStyledElement::buildPendingResource):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::SVGUseElement):
        (WebCore::SVGUseElement::insertedIntoDocument):
        (WebCore::SVGUseElement::svgAttributeChanged):
        (WebCore::SVGUseElement::buildPendingResource):
        * svg/SVGUseElement.h:

2011-05-01  Rafael Brandao  <rafael.lobo@openbossa.org>

        Reviewed by Csaba Osztrogonác.

        [Qt] build-webkit warning Inspector.idl is missing
        https://bugs.webkit.org/show_bug.cgi?id=59047
        
        Added variable_out to pipe output from one compiler to another,
        and then forced the output to be added to the sources.

        * CodeGenerators.pri:

2011-05-01  Dan Bernstein  <mitz@apple.com>

        Reviewed by Anders Carlsson.

        <rdar://problem/9155067> REGRESSION (float-based line boxes): Gaps and overlaps in selection highlight
        https://bugs.webkit.org/show_bug.cgi?id=56658

        Test: fast/text/selection-rect-rounding.html

        * platform/graphics/FontFastPath.cpp:
        (WebCore::Font::selectionRectForSimpleText): Account for non-integral anchor point coordinates.
        * platform/graphics/mac/FontComplexTextMac.cpp:
        (WebCore::Font::selectionRectForComplexText): Ditto.
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::selectionRect): Floor the horizontal sides of the clip rect.
        (WebCore::InlineTextBox::paintSelection): Pass the logical left location to Font::selectionRectForText(),
        since it affects rounding.

2011-04-30  Justin Schuh  <jschuh@chromium.org>

        Reviewed by Dirk Schulze.

        Make RenderSVGResourceFilter take ownership of filter data when painting
        https://bugs.webkit.org/show_bug.cgi?id=51524

        Test: svg/custom/filter-on-svgimage.svg

        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::removeClientFromCache):
        (WebCore::RenderSVGResourceFilter::postApplyResource):
        * rendering/svg/RenderSVGResourceFilter.h:
        (WebCore::FilterData::FilterData):

2011-04-30  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Adam Barth.

        Enable strict mode for OwnPtr and PassOwnPtr
        https://bugs.webkit.org/show_bug.cgi?id=59428

        Fix assignments and .set() calls with OwnPtr to use adoptPtr. Have GeolocationService
        factory methods return a PassOwnPtr.

        No new tests. This should not change functionality.

        * platform/GeolocationService.cpp:
        (WebCore::createGeolocationServiceNull):
        (WebCore::GeolocationService::create):
        * platform/GeolocationService.h:
        * platform/android/GeolocationServiceAndroid.cpp:
        (WebCore::GeolocationServiceAndroid::create):
        * platform/android/GeolocationServiceAndroid.h:
        * platform/efl/GeolocationServiceEfl.cpp:
        (WebCore::GeolocationServiceEfl::create):
        * platform/efl/GeolocationServiceEfl.h:
        * platform/graphics/cairo/CairoUtilities.cpp:
        (WebCore::appendPathToCairoContext):
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::drawPathShadow):
        (WebCore::GraphicsContext::clip):
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        * platform/graphics/cairo/OwnPtrCairo.h:
        * platform/graphics/cairo/PathCairo.cpp:
        (WebCore::Path::Path):
        (WebCore::Path::operator=):
        (WebCore::Path::apply):
        * platform/gtk/GeolocationServiceGtk.cpp:
        (WebCore::GeolocationServiceGtk::create):
        * platform/gtk/GeolocationServiceGtk.h:
        * platform/mock/GeolocationServiceMock.cpp:
        (WebCore::GeolocationServiceMock::create):
        * platform/mock/GeolocationServiceMock.h:

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

        Not reviewed: inspector toolbar titles were 2px off.

        * inspector/front-end/inspector.css:
        (#toolbar-dropdown .toolbar-label):

2011-04-30  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Eric Seidel.

        V8Proxy.h shouldn't include SecurityOrigin.h
        https://bugs.webkit.org/show_bug.cgi?id=59859

        Remove SecurityOrigin.h #include from V8Proxy.h. Touching
        SecurityOrigin.h now rebuilds 234 targets instead of 638 (when building
        chromium's DumpRenderTree).

        * bindings/v8/NPV8Object.cpp:
        * bindings/v8/V8Proxy.cpp:
        * bindings/v8/V8Proxy.h:
        * css/CSSStyleSelector.cpp:
        * dom/XMLDocumentParserLibxml2.cpp:
        * html/HTMLLinkElement.cpp:
        * loader/SubframeLoader.cpp:
        * page/History.cpp:
        * storage/IDBFactory.cpp:
        * storage/StorageAreaImpl.cpp:

2011-04-29  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        CSP script-src should block eval
        https://bugs.webkit.org/show_bug.cgi?id=59850

        Rather than have JavaScriptCore call back into WebCore to learn whether
        eval is enabled, we push that bit of the policy into JavaScriptCore.

        Tests: http/tests/security/contentSecurityPolicy/eval-allowed.html
               http/tests/security/contentSecurityPolicy/eval-blocked.html

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::disableEval):
        * bindings/js/ScriptController.h:
        * page/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::didReceiveHeader):
        (WebCore::ContentSecurityPolicy::internalAllowEval):
        (WebCore::ContentSecurityPolicy::allowEval):
        * page/ContentSecurityPolicy.h:

2011-04-29  Joseph Pecoraro  <joepeck@webkit.org>

        GTK build fix. Missed moving DateComponents and
        adding LocalizedDate files for their build file.

        * GNUmakefile.list.am:

2011-04-29  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        style-src should block @style
        https://bugs.webkit.org/show_bug.cgi?id=59293

        This patch blocks @style when style-src doesn't have the
        'unsafe-inline' token.  This patch blocks the parsing of the attribute
        itself.  That feels vaguely like too low a level to interpose the
        policy, but there didn't seem to be anywhere else natural to enforce
        the policy.

        Tests: http/tests/security/contentSecurityPolicy/inline-style-attribute-allowed.html
               http/tests/security/contentSecurityPolicy/inline-style-attribute-blocked.html
               http/tests/security/contentSecurityPolicy/inline-style-on-html.html

        * dom/StyledElement.cpp:
        (WebCore::StyledElement::parseMappedAttribute):

2011-04-29  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Kent Tamura.

        Allow Localized Date Strings for Date Input Fields
        https://bugs.webkit.org/show_bug.cgi?id=59752

        Test: fast/forms/date-input-visible-strings.html

        * CMakeLists.txt:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj: update build files for
        moving DateComponents from WebCore/html to WebCore/platform
        and adding the LocalizedDate files.

        * html/BaseDateAndTimeInputType.cpp:
        (WebCore::BaseDateAndTimeInputType::serialize):
        (WebCore::BaseDateAndTimeInputType::serializeWithComponents):
        (WebCore::BaseDateAndTimeInputType::serializeWithMilliseconds):
        InputType::serialize for a double value with date types is
        different for the month type because it assumes the incoming
        value is months instead of msecs (matching valueAsNumber in
        HTML5).  So provide a more general serialization function,
        serializeWithComponents, that will always serialize a string
        correctly for the current type but taking in a DateComponents
        object. The default serialize, and new serializeWithMilliseconds,
        can fall back to this and allows an override point for
        the month type.

        * html/MonthInputType.cpp:
        (WebCore::MonthInputType::serializeWithMilliseconds): the month
        type is a case where the default serialize does not take msec,
        so provide an implementation for month which handles msec input.

        * html/BaseDateAndTimeInputType.cpp:
        (WebCore::BaseDateAndTimeInputType::setValueAsDate): switch
        to serializeWithMilliseconds as the incoming date value is msec.
        * html/MonthInputType.cpp:
        (WebCore::MonthInputType::setValueAsDate): removed.

        * html/BaseDateAndTimeInputType.cpp:
        (WebCore::BaseDateAndTimeInputType::visibleValue): allow
        localized formatting of a date value.
        (WebCore::BaseDateAndTimeInputType::convertFromVisibleValue):
        allow parsing for a formatted date value.

        * html/BaseDateAndTimeInputType.h:
        * platform/DateComponents.cpp: Renamed from Source/WebCore/html/DateComponents.cpp.
        Expose the Type enum so it can be used outside of the DateComponents class.
        * platform/text/LocalizedDate.h: Added.
        * platform/text/LocalizedDateNone.cpp: Added.
        (WebCore::formatLocalizedDate): Default implementation falls back to
        existing HTML5 date input value formatting.

        * html/BaseDateAndTimeInputType.h:
        * html/DateInputType.cpp:
        (WebCore::DateInputType::dateType):
        * html/DateInputType.h:
        * html/DateTimeInputType.cpp:
        (WebCore::DateTimeInputType::dateType):
        * html/DateTimeInputType.h:
        * html/DateTimeLocalInputType.cpp:
        (WebCore::DateTimeLocalInputType::dateType):
        * html/DateTimeLocalInputType.h:
        * html/MonthInputType.cpp:
        (WebCore::MonthInputType::dateType):
        * html/MonthInputType.h:
        * html/TimeInputType.cpp:
        (WebCore::TimeInputType::dateType):
        * html/TimeInputType.h:
        * html/WeekInputType.cpp:
        (WebCore::WeekInputType::dateType):
        * html/WeekInputType.h: Accessors for the desired date
        type of a date input type. This allows the base class
        to write a generic algorithm.

2011-04-29  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        style-src should block inline style from <style>
        https://bugs.webkit.org/show_bug.cgi?id=59292

        The spec has been updated to allow blocking of inline styles with
        style-src.  This will help folks defend against tricky CSS3 injections.

        This patch covers the <style> case.  The next patch will cover the
        @style case.

        Tests: http/tests/security/contentSecurityPolicy/inline-style-allowed.html
               http/tests/security/contentSecurityPolicy/inline-style-blocked.html

        * dom/StyleElement.cpp:
        (WebCore::StyleElement::createSheet):
        * page/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::allowInlineStyle):
        * page/ContentSecurityPolicy.h:

2011-04-29  Chris Evans  <cevans@chromium.org>

        Reviewed by Adam Barth.

        Add WebCore::Setting to block displaying and/or running insecure content on secure pages
        https://bugs.webkit.org/show_bug.cgi?id=58378

        Test: To follow in subsequent patch, including the wiring to expose the new settings to LayoutTests.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::checkIfDisplayInsecureContent): Return whether or not the load should be blocked, and tweak the message upon blocking.
        (WebCore::FrameLoader::checkIfRunInsecureContent): Return whether or not the load should be blocked, and tweak the message upon blocking.
        * loader/FrameLoader.h:
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::willSendRequest): Check if the frame load is blocked due to mixed content and cancel it if so. The check was moved up so that it occurs before firing the load callbacks, to avoid any outgoing network hits or accounting. Redirects are handled because willSendRequest is called for each one in the chain.
        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::loadMediaPlayerProxyPlugin): Handle the blocking of mixed-content plug-in loads.
        (WebCore::SubframeLoader::loadPlugin): Handle the blocking of mixed-content plug-in loads.
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::canRequest): Handle the blocking of various loads due to mixed content conditions.
        * page/Settings.cpp:
        (WebCore::Settings::Settings): Permit mixed-content loads by default to avoid a change in behavior by default.
        * page/Settings.h: Add two new booleans to control blocking of mixed content (displaying and running thereof).
        (WebCore::Settings::setAllowDisplayOfInsecureContent):
        (WebCore::Settings::allowDisplayOfInsecureContent):
        (WebCore::Settings::setAllowRunningOfInsecureContent):
        (WebCore::Settings::allowRunningOfInsecureContent):

2011-04-29  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        Extract a function to obtain VisiblePosition from RenderText::positionForPoint
        https://bugs.webkit.org/show_bug.cgi?id=59811

        Extracted lineDirectionPointFitsInBox from positionForPoint.

        * rendering/RenderText.cpp:
        (WebCore::lineDirectionPointFitsInBox):
        (WebCore::RenderText::positionForPoint):

2011-04-29  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Alexey Proskuryakov.

        REGRESSION: r83938 abandons GC memory
        https://bugs.webkit.org/show_bug.cgi?id=59604

        This bug was caused by script and image elements waiting indefinitely
        for their loads to finish.

        * bindings/js/JSNodeCustom.cpp:
        (WebCore::isReachableFromDOM): Don't test for the load event firing,
        since the load event doesn't fire in cases of canceled or errored loads.
        Instead, test hasPendingActivity().
        
        Don't do this test at all for script elements because script elements
        can't load while outside the document. (fast/dom/script-element-gc.html
        verifies that this is correct.)

        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::hasPendingActivity):
        * html/HTMLImageElement.h:
        * loader/ImageLoader.cpp:
        (WebCore::ImageEventSender::hasPendingEvents):
        (WebCore::ImageLoader::hasPendingLoadEvent):
        * loader/ImageLoader.h: Added API for finding out if an image element
        has pending activity.

        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::setRequest): All loads are supposed to end in
        data(allDataReceived = true) or error(), but in the edge case of a
        canceled load, all we get is a call to setRequest(0). Be sure to
        record that we're no longer loading in that case, otherwise our element
        will leak forever, waiting for its load to complete.

2011-04-29  Emil Eklund  <eae@chromium.org>

        Reviewed by Tony Chang.

        Setting outerHTML should merge text nodes
        https://bugs.webkit.org/show_bug.cgi?id=52686

        When setting outerHTML adjacent text nodes should be merged. This matches
        the behavior of outerText and the IE implementation of outerHTML.       

        Test: fast/dom/set-outer-html.html

        * html/HTMLElement.cpp:
        (WebCore::mergeWithNextTextNode): Move function to before setOuterHTML.
        (WebCore::HTMLElement::setOuterHTML): Merge adjacent text nodes after replacing the element.

2011-04-29  Emil A Eklund  <eae@chromium.org>

        Reviewed by Dimitri Glazkov.

        Onchange on text fields has an incoherent behavior
        https://bugs.webkit.org/show_bug.cgi?id=57330

        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::insertedIntoDocument):
        Initialize m_textAsOfLastFormControlChangeEvent to empty string rather
        than null for empty fields.

2011-04-29  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Unreviewed buildfix after r85343.

        Enable strict OwnPtr for Qt
        https://bugs.webkit.org/show_bug.cgi?id=59667

        * plugins/mac/PluginViewMac.mm:
        (WebCore::PluginView::platformStart):

2011-04-29  Jon Lee  <jonlee@apple.com>

        Reviewed by mitzpettel.

        REGRESSION (WebKit2): (Mac) Selection is gone after switching tabs (59721)
        <rdar://problem/9327332>
        https://bugs.webkit.org/show_bug.cgi?id=59721

        Removing shouldClearSelectionWhenLosingWebPageFocus().  Reverting changelist 83814.

        * WebCore.exp.in:
        * editing/EditingBehavior.h:

2011-04-29  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Dave Hyatt.

        Allow only first table caption and destroy the remaining ones.
        https://bugs.webkit.org/show_bug.cgi?id=58249

        Previously, we were only laying out the first table caption.
        However Table::layout didn't mark the other ones as not needing
        layout. So after table layout completes, table is marked as not
        needing layout with its other table caption still needing layout.
        This causes incorrect layout root calculations and set it to a
        node which is already getting deleted.

        Tests: fast/table/dynamic-caption-add-before-child.xhtml
               fast/table/dynamic-caption-add-remove-before-child.xhtml
               fast/table/multiple-captions-crash.xhtml
               fast/table/multiple-captions-crash2.xhtml
               fast/table/multiple-captions-display.xhtml

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::addChild): when new caption or a before
        child caption is added, we need to explicitly trigger section
        recalc or otherwise layout won't catch it.
        (WebCore::RenderTable::removeChild): when child to be removed is
        m_caption, make sure to trigger style recalc on the table.
        (WebCore::RenderTable::recalcCaption): code to destroy captions
        other than the first one.
        (WebCore::RenderTable::recalcSections): call recalcCaption
        helper. Store the next sibling early since child can get destroyed
        in recalcCaption.
        * rendering/RenderTable.h:

2011-04-29  David Kilzer  <ddkilzer@apple.com>

        Remove WML
        https://bugs.webkit.org/show_bug.cgi?id=59678

        * DerivedSources.make: Removed $(WebCore)/wml path in VPATH.

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

        Unreviewed, rolling out r85330.
        http://trac.webkit.org/changeset/85330
        https://bugs.webkit.org/show_bug.cgi?id=41311

        Caused unexpected border rendering change on 500 tests on chromium linux.

        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::drawConvexPolygon):
        (WebCore::GraphicsContext::clipConvexPolygon):

2011-04-29  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Unreviewed buildfix after r85343.

        Enable strict OwnPtr for Qt
        https://bugs.webkit.org/show_bug.cgi?id=59667

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::wndProc):
        (WebCore::PluginView::snapshot):

2011-04-29  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Adam Barth.

        Enable strict OwnPtr for Qt
        https://bugs.webkit.org/show_bug.cgi?id=59667

        * platform/graphics/qt/ImageBufferQt.cpp:
        (WebCore::ImageBufferData::ImageBufferData):
        (WebCore::ImageBuffer::ImageBuffer):
        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::setData):
        * platform/graphics/qt/ImageDecoderQt.h:
        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyWrapper::QNetworkReplyWrapper):
        (WebCore::QNetworkReplyHandler::QNetworkReplyHandler):

2011-04-29  Dean Jackson  <dino@apple.com>

        Reviewed by Simon Fraser.

        Add ENABLE macro for WebKitAnimation
        https://bugs.webkit.org/show_bug.cgi?id=59729

        Add new feature to toggle WebKit Animation API.

        * Configurations/FeatureDefines.xcconfig:
        * GNUmakefile.am:
        * dom/Element.idl:
        * features.pri:
        * page/DOMWindow.idl:

2011-04-29  Dean Jackson  <dino@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=59149
        (Regression) Existing animations are not replaced when filling.

        Hardware animations that fill forwards were not being correctly
        replaced when the animation was removed. The actual animation
        logic was working correctly, but it wasn't deleting the
        CoreAnimation animation from the PlatformLayer. The fix was
        to explicitly call endAnimation when disconnecting the animation
        from its RenderObject.

        Test: animations/3d/replace-filling-transform.html

        * page/animation/AnimationBase.h:
        (WebCore::AnimationBase::clear): call endAnimation as the animation is cleared

2011-04-29  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Nikolas Zimmermann.

        When svg inline text is getting destroyed, make sure to mark
        its svg text ancestor as needing a positioning values update.
        This helps to recalculate layout attributes and makes sure
        that svg inline text is not used again.
        https://bugs.webkit.org/show_bug.cgi?id=59161

        Test: svg/text/inline-text-destroy-attributes-crash.xhtml

        * rendering/svg/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::destroy):
        * rendering/svg/RenderSVGInlineText.h:

2011-04-29  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fix. Fix wxMSW trunk builds by adding include.

        * platform/graphics/wx/GraphicsContextWx.cpp:

2011-04-29  Mike Reed  <reed@google.com>

        Reviewed by Ojan Vafai.

        Skia: Need to implement GraphicsContext::clipConvexPolygon()
        https://bugs.webkit.org/show_bug.cgi?id=41311

        This does not (yet) enable HAVE_PATH_BASED_BORDER_RADIUS_DRAWING
        as that shows other issues/question unrelated to clipping.
        https://bugs.webkit.org/show_bug.cgi?id=41311

        No new tests. covered by existing layout tests

        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::setPathFromConvexPoints):
        (WebCore::GraphicsContext::drawConvexPolygon):
        (WebCore::GraphicsContext::clipConvexPolygon):

2011-04-29  Mike Lawther  <mikelawther@chromium.org>

        Reviewed by Ojan Vafai.

        Fix IR->SR typo in enum value (and resulting style fails)
        https://bugs.webkit.org/show_bug.cgi?id=59779

        No functionality change, so no new tests

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator EShapeRendering):

2011-04-29  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: CSS editing breaks when entering "color: rgb(1"
        https://bugs.webkit.org/show_bug.cgi?id=59789

        Tests: inspector/styles/styles-add-invalid-property.html
               inspector/styles/styles-cancel-editing.html
               inspector/styles/styles-commit-editing.html

        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSProperty.prototype.setText.callback):
        (WebInspector.CSSProperty.prototype.setText):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertyTreeElement.prototype.selectElement):
        (WebInspector.StylePropertyTreeElement.prototype):
        (WebInspector.StylePropertyTreeElement.prototype.styleText.updateInterface.majorChange.isRevert.originalPropertyText):
        * inspector/front-end/inspector.js:
        (WebInspector.startEditing.defaultFinishHandler):
        (WebInspector.startEditing.keyDownEventListener):
        (WebInspector.startEditing):

2011-04-29  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        ENABLE(QT_BEARER) -> USE(QT_BEARER)

        * WebCore.pri:
        * WebCore.pro:
        * features.pri:
        * platform/network/NetworkStateNotifier.h:
        * platform/network/qt/NetworkStateNotifierQt.cpp:

2011-04-29  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        ENABLE(QT_USERAGENT_DEVICEMODEL) -> USE(QT_MOBILITY_SYSTEMINFO)

        * WebCore.pri:
        * features.pri:

2011-04-29  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: breakpoints set in original and formatted scripts are messed up after navigation.
        https://bugs.webkit.org/show_bug.cgi?id=59476

        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype.setFormatSourceFiles):
        (WebInspector.DebuggerPresentationModel.prototype._removeBreakpointFromDebugger):
        (WebInspector.PresentationBreakpoint.prototype.serialize):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._addOptionToFilesSelect.optionCompare):
        (WebInspector.ScriptsPanel.prototype._addOptionToFilesSelect):
        (WebInspector.ScriptsPanel.prototype.reset):

2011-04-28  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: include script end line:column in scriptParsed parameters.
        https://bugs.webkit.org/show_bug.cgi?id=59717

        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::dispatchDidParseSource):
        * bindings/v8/DebuggerScript.js:
        ():
        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::dispatchDidParseSource):
        * inspector/Inspector.json:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::resolveBreakpoint):
        (WebCore::InspectorDebuggerAgent::didParseSource):
        * inspector/InspectorDebuggerAgent.h:
        (WebCore::InspectorDebuggerAgent::Script::Script):
        * inspector/ScriptDebugListener.h:
        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel.prototype._parsedScriptSource):
        (WebInspector.DebuggerModel.prototype._failedToParseScriptSource):
        (WebInspector.DebuggerDispatcher.prototype.scriptParsed):
        * inspector/front-end/Script.js:
        (WebInspector.Script):

2011-04-28  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [protocol] Evaluate should expose thrown exception value
        https://bugs.webkit.org/show_bug.cgi?id=59000

        Each evaluation command may have either thrown or returned result. This is indicated
        by wasThrown property in the protocol.

        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::evaluate):
        (WebCore::InjectedScript::evaluateOn):
        (WebCore::InjectedScript::evaluateOnCallFrame):
        (WebCore::InjectedScript::getProperties):
        (WebCore::InjectedScript::makeEvalCall):
        * inspector/InjectedScript.h:
        * inspector/InjectedScriptSource.js:
        * inspector/Inspector.json: Removed "error" remote object type, added "wasThrown" property to
        the evaluation results.
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::evaluateOnCallFrame):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorRuntimeAgent.cpp:
        (WebCore::InspectorRuntimeAgent::evaluate):
        (WebCore::InspectorRuntimeAgent::evaluateOn):
        (WebCore::InspectorRuntimeAgent::getProperties):
        * inspector/InspectorRuntimeAgent.h:
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.completions.evaluated):
        (WebInspector.ConsoleView.prototype.evalInInspectedWindow):
        (WebInspector.ConsoleView.prototype._enterKeyPressed.printResult):
        (WebInspector.ConsoleView.prototype._enterKeyPressed):
        (WebInspector.ConsoleCommandResult):
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.PresenationCallFrame.prototype.evaluate):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype._createTooltipForNode.setTooltip):
        * inspector/front-end/ExtensionPanel.js:
        (WebInspector.ExtensionSidebarPane.prototype._onEvaluate):
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype._onEvaluateOnInspectedPage):
        * inspector/front-end/ObjectPropertiesSection.js:
        (WebInspector.ObjectPropertyTreeElement.prototype.update):
        * inspector/front-end/PropertiesSidebarPane.js:
        (WebInspector.PropertiesSidebarPane.prototype.update.nodePrototypesReady):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._showPopup.showObjectPopup):
        (WebInspector.SourceFrame.prototype._showPopup):

2011-04-29  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r85315.
        http://trac.webkit.org/changeset/85315
        https://bugs.webkit.org/show_bug.cgi?id=59792

        Broke script-formatter.html test (Requested by podivilov on
        #webkit).

        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype.setFormatSourceFiles):
        (WebInspector.DebuggerPresentationModel.prototype._removeBreakpointFromDebugger.didRemoveBreakpoint):
        (WebInspector.DebuggerPresentationModel.prototype._removeBreakpointFromDebugger):
        (WebInspector.PresentationBreakpoint.prototype.serialize):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._addOptionToFilesSelect.optionCompare):
        (WebInspector.ScriptsPanel.prototype._addOptionToFilesSelect):
        (WebInspector.ScriptsPanel.prototype.reset):

2011-04-29  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Hyperlink Auditing (ping) requests are not shown in network panel
        https://bugs.webkit.org/show_bug.cgi?id=58794

        Added ping requests to network panel.

        Test: http/tests/inspector/network/ping.html

        * English.lproj/localizedStrings.js:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::continueAfterPingLoaderImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::continueAfterPingLoader):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkDataGridNode.prototype.refreshResource):
        (WebInspector.NetworkDataGridNode.prototype._refreshStatusCell):
        (WebInspector.NetworkDataGridNode.prototype._refreshTypeCell):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource.prototype.get formParameters):
        (WebInspector.Resource.prototype.requestContentType):
        (WebInspector.Resource.prototype.isPingRequest):
        * loader/PingLoader.cpp:
        (WebCore::PingLoader::PingLoader):
        * loader/PingLoader.h:

2011-04-28  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: breakpoints set in original and formatted scripts are messed up after navigation.
        https://bugs.webkit.org/show_bug.cgi?id=59476

        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype.toggleFormatSourceFiles):
        (WebInspector.DebuggerPresentationModel.prototype._removeBreakpointFromDebugger):
        (WebInspector.PresentationBreakpoint.prototype.serialize):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._addOptionToFilesSelect.optionCompare):
        (WebInspector.ScriptsPanel.prototype._addOptionToFilesSelect):
        (WebInspector.ScriptsPanel.prototype.reset):

2011-04-29  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: add "open link in new tab" action into the network and resources panels.
        https://bugs.webkit.org/show_bug.cgi?id=59788

        This change also distinguishes context menu items case between platforms.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype._handleContextMenuEvent):
        * inspector/front-end/DOMBreakpointsSidebarPane.js:
        (WebInspector.DOMBreakpointsSidebarPane):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype._contextMenuEventFired):
        (WebInspector.ElementsPanel.prototype.populateHrefContextMenu):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype._populateTagContextMenu):
        (WebInspector.ElementsTreeElement.prototype._populateTextContextMenu):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkPanel.prototype._contextMenu):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.FrameResourceTreeElement.prototype._handleContextMenuEvent):
        (WebInspector.FrameResourceTreeElement.prototype._appendSaveAsAction):
        (WebInspector.ResourceRevisionTreeElement.prototype._handleContextMenuEvent):
        * inspector/front-end/Settings.js:
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.populateLineGutterContextMenu):
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer.prototype._contextMenu):
        * inspector/front-end/inspector.js:
        (WebInspector.openLinkExternallyLabel):
        (WebInspector.openResource):
        (WebInspector.useLowerCaseMenuTitles):

2011-04-28  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Mask placement on composited layer is incorrect sometimes
        https://bugs.webkit.org/show_bug.cgi?id=59775
        
        The mask layer always has the same size as its owning GraphicsLayer,
        so it needs to share the same offsetFromRenderer as well. This fixes
        the offset at which the mask layer contents are painted in cases where
        that offset is non-zero, for example when outline style bloats all of
        the layer sizes.

        Test: compositing/masks/layer-mask-placement.html

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):

2011-04-28  Dan Bernstein  <mitz@apple.com>

        Rubber-stamped by Mark Rowe.

        Reverted r81319.

        Fixes <rdar://problem/9331580> REGRESSION (r81319): Safari fails to display dropdown navigation on classics.berkeley.edu

        * page/NavigatorBase.cpp:

2011-04-28  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dirk Schulze.

        1px box-shadow looks ugly
        https://bugs.webkit.org/show_bug.cgi?id=58100
        and
        ShadowBlur incorrectly handles zero-sized blur radius in one axis
        https://bugs.webkit.org/show_bug.cgi?id=59710
        
        blurLayerImage() has issues at the edges if the blur radius
        is one, so in that case bump the buffer size out by a pixel.
        This results in a correct, symmetrical blur.
        
        Also fix an issue noticed during testing where a zero
        height or width radius would still blur on that axis,
        because we clamp the kernel size to a minimum of two.

        Test: fast/box-shadow/single-pixel-shadow.html

        * platform/graphics/ShadowBlur.h:
        * platform/graphics/ShadowBlur.cpp:
        (WebCore::ShadowBlur::blurLayerImage):
        Skip horizontal or vertial passes if the radius on that axis is zero.
        Move the "if (pass && m_blurRadius.width() != m_blurRadius.height())"
        clause to the end of the loop, since it only needs to execute once
        after the first pass.        
        (WebCore::ShadowBlur::blurredEdgeSize):
        New method to compute the width of the blurred edge (radius + extra
        pixel when necessary).
        (WebCore::ShadowBlur::calculateLayerBoundingRect):
        (WebCore::ShadowBlur::templateSize):
        (WebCore::ShadowBlur::drawRectShadow):
        (WebCore::ShadowBlur::drawInsetShadow):
        (WebCore::ShadowBlur::drawInsetShadowWithTiling):
        (WebCore::ShadowBlur::drawRectShadowWithTiling):
        (WebCore::ShadowBlur::drawLayerPieces):
        Use the result of blurredEdgeSize() rather than recomputing.

2011-04-28  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Beth Dakin.

        CSS sibling selector (~) does not work with :target pseudo class
        https://bugs.webkit.org/show_bug.cgi?id=26539

        Allow style recalculation of forward siblings of elements with
        forward positional rules.

        Tests: fast/css/pseudo-target-indirect-sibling-001.html
               fast/css/pseudo-target-indirect-sibling-002.html

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

2011-04-28  Nat Duca  <nduca@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] Add swapBuffersCompleteCallback to Extensions3DChromium
        https://bugs.webkit.org/show_bug.cgi?id=59626

        * platform/graphics/chromium/Extensions3DChromium.h:
        (WebCore::Extensions3DChromium::SwapBuffersCompleteCallbackCHROMIUM::~SwapBuffersCompleteCallbackCHROMIUM):

2011-04-28  Steve Lacey  <sjl@chromium.org>

        Reviewed by Eric Carlson.

        Change chromium media controls to use absolute positioning until bug 59644 is fixed.
        https://bugs.webkit.org/show_bug.cgi?id=59732

        * css/mediaControlsChromium.css:
        (audio::-webkit-media-controls-current-time-display, video::-webkit-media-controls-current-time-display):
        (audio::-webkit-media-controls-timeline, video::-webkit-media-controls-timeline):

2011-04-28  Luke Macpherson   <macpherson@chromium.org>

        Reviewed by Eric Seidel.

        Implement CSS border width and related properties in CSSStyleApplyProperty.
        https://bugs.webkit.org/show_bug.cgi?id=59414

        No new tests as no functionality added.

        * css/CSSStyleApplyProperty.cpp:
        Separated ApplyPropertyDefault into parent and child so that other classes could inherit
        the applyInheritValue and applyInitialValue methods only.
        This was necessary to avoid casting from CSSPrimitiveValue to inappropriate types in ApplyPropertyDefault::applyValue().
        
        Added ApplyPropertyWidth class for handling width based CSS properties.
        * css/CSSStyleSelector.cpp:
        Removed no-longer-required code for handling width based CSS properties.
        * css/CSSStyleSelector.h:
        Added a getter for m_rootElementStyle.

2011-04-28  Kent Tamura  <tkent@chromium.org>

        Run sort-Xcode-project-file.

        * WebCore.xcodeproj/project.pbxproj:

2011-04-28  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Dirk Schulze.

        [Cairo] Text underline is not shadowed when text-shadow is enabled
        https://bugs.webkit.org/show_bug.cgi?id=48074

        Use ContextShadow to enable shadows for text underlines. Also remove quite a bit
        of duplicate code in GraphicsContext used for stroking lines. This code looks like it was
        originally copied from the CG GraphicsContext.

        * platform/graphics/GraphicsContext.h: Make adjustLineToPixelBoundaries so that we
          can call it from a static helper function.
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::calculateStrokePatternOffset): Abstracted this code into a helper.
        (WebCore::drawLineOnCairoContext): Abstracted this code into a helper. We need to
        call it multiple times when shadowing text underlines.
        (WebCore::GraphicsContext::drawLine): Use drawLineOnCairoContext.
        (WebCore::GraphicsContext::strokeArc): Use calculateStrokePatternOffset.
        (WebCore::GraphicsContext::drawLineForText): Use drawLineOnCairoContext.

2011-04-28  Sam Weinig  <sam@webkit.org>

        Rubber-stamped by Mark Rowe.

        Cleanup WebCore.xcodeproj a bit.

        * WebCore.xcodeproj/project.pbxproj:
        Added CompilerVersion.xcconfig and moved some JS bindings files into the
        correct sub groups.

2011-04-28  David Levin  <levin@chromium.org>

        Reviewed by Adam Barth.

        Remove IMAGE_RESIZER related code.
        https://bugs.webkit.org/show_bug.cgi?id=59735

        * CMakeLists.txt:
        * Configurations/FeatureDefines.xcconfig:
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * features.pri:
        * html/AsyncImageResizer.cpp: Removed.
        * html/AsyncImageResizer.h: Removed.
        * html/ImageResizerThread.cpp: Removed.
        * html/ImageResizerThread.h: Removed.

2011-04-28  Ilya Tikhonovsky  <loislo@chromium.org>

        Unreviewed trivial one-line fix inspired by wrong patch for https://bugs.webkit.org/show_bug.cgi?id=59630.

        * inspector/front-end/Settings.js:
        (WebInspector.Settings):

2011-04-28  Beth Dakin  <bdakin@apple.com>

        Rubber-stamped by Sam Weinig.

        Rolling out revision 85258! I want to fix that bug a different way.
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::paint):

2011-04-28  Chang Shu  <cshu@webkit.org>

        Reviewed by Eric Seidel.

        isContentEditable is not working properly with document.designMode
        https://bugs.webkit.org/show_bug.cgi?id=53031

        The specification (http://dev.w3.org/html5/spec/Overview.html#attr-contenteditable)
        indicates that the element.isContentEditable relies on document.designMode if its
        and its ancestors' contenteditable attributes are set to inherit.

        1. Sync document render style after document.designMode is changed.
        2. Removed the code that does unnecessary and incorrect handling for contenteditable
        attribute with "inherit" value.
        3. Ryosuke Niwa also helped to fix the code in ApplyStyleCommand that causes an assertion.

        Tests: fast/dom/HTMLElement/iscontenteditable-designmodeon-allinherit-subframe.html
               fast/dom/HTMLElement/iscontenteditable-designmodeon-allinherit.html
               fast/dom/HTMLElement/iscontenteditable-designmodeon-ancestor.html
               fast/dom/HTMLElement/iscontenteditable-designmodeon.html

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::styleForDocument):
        * dom/Document.cpp:
        (WebCore::Document::setDesignMode):
        * dom/Node.cpp:
        (WebCore::Node::rendererIsEditable):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::surroundNodeRangeWithElement):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::setContentEditable):

2011-04-28  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r85101.
        http://trac.webkit.org/changeset/85101
        https://bugs.webkit.org/show_bug.cgi?id=59757

         it'd be better to rollout the patch and do another one with
        another property name. Current one will bring us to a problem
        at first run after upgrade because it's type was changed from
        int to string. (Requested by loislo on #webkit).

        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._debuggerWasEnabled):
        (WebInspector.ScriptsPanel.prototype._setPauseOnExceptions.callback):
        (WebInspector.ScriptsPanel.prototype._setPauseOnExceptions):

2011-04-28  Mike Reed  <reed@google.com>

        Reviewed by Eric Seidel.

        fix shadw behavior for both CSS and Canvas -- skia only
        https://bugs.webkit.org/show_bug.cgi?id=59700

        Test:
        canvas/philip/tests/2d.shadow.alpha.3.html
        canvas/philip/tests/2d.shadow.alpha.4.html
        canvas/philip/tests/2d.shadow.alpha.5.html
        fast/canvas/canvas-fillPath-alpha-shadow.html
        fast/canvas/canvas-strokePath-alpha-shadow.html
        fast/canvas/canvas-strokeRect-alpha-shadow.html
        fast/css/text-input-with-webkit-border-radius.html
        fast/repaint/shadow-multiple-horizontal.html
        fast/repaint/shadow-multiple-strict-horizontal.html
        fast/repaint/shadow-multiple-strict-vertical.html
        fast/repaint/shadow-multiple-vertical.html
        fast/canvas/canvas-getImageData.html

        * platform/graphics/chromium/FontChromiumWin.cpp:
        (WebCore::Font::drawGlyphs):
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::setPlatformShadow):

2011-04-28  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/59755> AXObjectCache::attachWrapper() over-retains an AccessibilityObjectWrapper

        Reviewed by Chris Fleizach.

        Previously, AXObjectCache::attachWrapper over-retained each
        AccessibilityObjectWrapper it created, which is why
        AXObjectCache::detachWrapper() contained an extra -release.

        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::detachWrapper): Removed extra -release.
        (WebCore::AXObjectCache::attachWrapper): Because setWrapper()
        assigns to a RetainPtr<> instance variable, it doesn't need a +1
        retained object passed in.  Fix the leak by using a RetainPtr<>
        for the AccessibilityObjectWrapper.

2011-04-28  Nat Duca  <nduca@chromium.org>

        Reviewed by Darin Fisher.

        [chromium] Compute compositor fps value and history using the frameBegin timestamp
        https://bugs.webkit.org/show_bug.cgi?id=59668

        This change switches the compositor FPS meter to use the timestamp
        of the beginning of the frame rather than the time we call
        swapBuffers. When scheduling is correctly tied to vsync, we can
        have highly variable times when we finish vsync and still have
        stable frame rates.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::updateAndDrawLayers):
        * platform/graphics/chromium/cc/CCHeadsUpDisplay.cpp:
        (WebCore::CCHeadsUpDisplay::CCHeadsUpDisplay):
        (WebCore::CCHeadsUpDisplay::drawFPSCounter):
        (WebCore::CCHeadsUpDisplay::onFrameBegin):
        (WebCore::CCHeadsUpDisplay::onPresent):
        * platform/graphics/chromium/cc/CCHeadsUpDisplay.h:

2011-04-28  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=59759
        Overflow:scroll regions with overlay scrollbars show full thumb instead of just a 
        track when there is nothing to scroll to
        <rdar://problem/9282066>

        Scrollbar::totalSize() and Scrollbar::visibleSize() are the same when there is 
        nothing to scroll to. Just dividing them to get a knob proportion yields 1, which 
        is not right. Set the proportion to 0 in this case instead.
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::paint):

2011-04-28  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/9291132> Add support for -epub-prefixed properties

        Test: fast/css/epub-properties.html

        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::cssPropertyName): Map "epub"-prefixed properties to "-epub"-prefixed ones.
        * css/CSSPropertyNames.in: Added -epub- aliases to caption-side, -webkit-hyphens, -webkit-text-combine,
        -webkit-text-emphasis, -webkit-text-emphasis-color, -webkit-text-emphasis-style, -webkit-text-orientation,
        text-transform, text-transform, word-break, and -webkit-writing-mode.

2011-04-28  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Remove WML
        https://bugs.webkit.org/show_bug.cgi?id=59678

        This patch removes WML from WebCore.  After removing WML, there's a
        bunch of twisted code that could be untwisted, but this patch contains
        only the purely mechanical part of removing the feature.

        There's been a lot of discussion on webkit-dev about whether we should
        remove WML.  In addition to those threads, we've had an informal poll
        of the reviewers as well as an in-person discussion at the WebKit
        contributor's meeting.  Removing any feature is likely to make some
        folks unhappy, but, on balance, removing WML appears to be the right
        thing for the project to do at this time.

        * CMakeLists.txt:
        * CodeGenerators.pri:
        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSStyleSelector.cpp:
        (WebCore::linkAttribute):
        (WebCore::CSSStyleSelector::styleForElement):
        (WebCore::CSSStyleSelector::adjustRenderStyle):
        * css/wml.css: Removed.
        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::createElement):
        * dom/Document.h:
        (WebCore::Document::isMediaDocument):
        * dom/Document.idl:
        * dom/InputElement.h:
        * dom/Node.cpp:
        (WebCore::Node::toInputElement):
        * dom/Node.h:
        * dom/OptionElement.cpp:
        (WebCore::toOptionElement):
        (WebCore::isOptionElement):
        * dom/OptionElement.h:
        * dom/OptionGroupElement.cpp:
        (WebCore::toOptionGroupElement):
        (WebCore::isOptionGroupElement):
        * dom/SelectElement.cpp:
        (WebCore::toSelectElement):
        * dom/SelectElement.h:
        * dom/Text.cpp:
        (WebCore::Text::attach):
        * dom/XMLDocumentParser.cpp:
        (WebCore::XMLDocumentParser::insertErrorMessageBlock):
        * dom/XMLDocumentParser.h:
        * dom/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::internalSubset):
        (WebCore::getEntityHandler):
        * dom/XMLDocumentParserQt.cpp:
        (WebCore::XMLDocumentParser::parse):
        (WebCore::XMLDocumentParser::parseDtd):
        * editing/htmlediting.cpp:
        (WebCore::canHaveChildrenForEditing):
        * features.pri:
        * history/BackForwardList.h:
        * history/BackForwardListImpl.cpp:
        * history/BackForwardListImpl.h:
        * history/PageCache.cpp:
        (WebCore::PageCache::canCachePageContainingThisFrame):
        * html/HTMLAnchorElement.h:
        * inspector/ConsoleMessage.cpp:
        (WebCore::messageSourceValue):
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleMessage.prototype.toString):
        * loader/FrameLoader.cpp:
        (WebCore::isBackForwardLoadType):
        (WebCore::FrameLoader::transitionToCommitted):
        (WebCore::FrameLoader::shouldReload):
        (WebCore::FrameLoader::loadDifferentDocumentItem):
        (WebCore::FrameLoader::loadItem):
        * loader/FrameLoaderTypes.h:
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::restoreDocumentState):
        * manual-tests/wml: Removed.
        * manual-tests/wml/StartTests.wml: Removed.
        * manual-tests/wml/a-br-element.wml: Removed.
        * manual-tests/wml/a-element.wml: Removed.
        * manual-tests/wml/a-img-element.wml: Removed.
        * manual-tests/wml/access-target.wml: Removed.
        * manual-tests/wml/anchor-br-element.wml: Removed.
        * manual-tests/wml/anchor-element.wml: Removed.
        * manual-tests/wml/anchor-img-element.wml: Removed.
        * manual-tests/wml/card-newcontext-attr.wml: Removed.
        * manual-tests/wml/card-onenterbackward.wml: Removed.
        * manual-tests/wml/card-onenterforward.wml: Removed.
        * manual-tests/wml/card-ontimer.wml: Removed.
        * manual-tests/wml/deck-access-control.wml: Removed.
        * manual-tests/wml/input-format.wml: Removed.
        * manual-tests/wml/onevent-go.wml: Removed.
        * manual-tests/wml/onevent-noop.wml: Removed.
        * manual-tests/wml/onevent-prev.wml: Removed.
        * manual-tests/wml/onevent-refresh.wml: Removed.
        * manual-tests/wml/onevent-shadow.wml: Removed.
        * manual-tests/wml/resources: Removed.
        * manual-tests/wml/resources/smiley.png: Removed.
        * manual-tests/wml/select-element.wml: Removed.
        * manual-tests/wml/select-onpick-event-crash.wml: Removed.
        * manual-tests/wml/select-onpick-event.wml: Removed.
        * manual-tests/wml/setvar-element.wml: Removed.
        * manual-tests/wml/targetdeck.wml: Removed.
        * manual-tests/wml/task-go-in-anchor.wml: Removed.
        * manual-tests/wml/task-prev-in-anchor.wml: Removed.
        * manual-tests/wml/task-refresh-in-anchor.wml: Removed.
        * manual-tests/wml/template-go.wml: Removed.
        * manual-tests/wml/template-ontimer.wml: Removed.
        * manual-tests/wml/timer.wml: Removed.
        * manual-tests/wml/variable-substitution.wml: Removed.
        * page/Console.cpp:
        (WebCore::printMessageSourceAndLevelPrefix):
        * page/Console.h:
        * page/Frame.cpp:
        (WebCore::Frame::Frame):
        * page/Page.cpp:
        * page/Page.h:
        * platform/MIMETypeRegistry.cpp:
        (WebCore::initializeSupportedNonImageMimeTypes):
        * platform/network/FormDataBuilder.h:
        * platform/network/mac/ResourceHandleMac.mm:
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveResponse:]):
        * platform/wince/MIMETypeRegistryWinCE.cpp:
        (WebCore::initMIMETypeEntensionMap):
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::altDisplayString):
        (WebCore::HitTestResult::absoluteImageURL):
        (WebCore::HitTestResult::absoluteLinkURL):
        (WebCore::HitTestResult::isLiveLink):
        * rendering/RenderBox.cpp:
        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::updateFromElement):
        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::findLegend):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::updateAltText):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::isLegend):
        (WebCore::RenderObject::offsetParent):
        * wml: Removed.
        * wml/WMLAElement.cpp: Removed.
        * wml/WMLAElement.h: Removed.
        * wml/WMLAccessElement.cpp: Removed.
        * wml/WMLAccessElement.h: Removed.
        * wml/WMLAnchorElement.cpp: Removed.
        * wml/WMLAnchorElement.h: Removed.
        * wml/WMLAttributeNames.in: Removed.
        * wml/WMLBRElement.cpp: Removed.
        * wml/WMLBRElement.h: Removed.
        * wml/WMLCardElement.cpp: Removed.
        * wml/WMLCardElement.h: Removed.
        * wml/WMLDoElement.cpp: Removed.
        * wml/WMLDoElement.h: Removed.
        * wml/WMLDocument.cpp: Removed.
        * wml/WMLDocument.h: Removed.
        * wml/WMLElement.cpp: Removed.
        * wml/WMLElement.h: Removed.
        * wml/WMLErrorHandling.cpp: Removed.
        * wml/WMLErrorHandling.h: Removed.
        * wml/WMLEventHandlingElement.cpp: Removed.
        * wml/WMLEventHandlingElement.h: Removed.
        * wml/WMLFieldSetElement.cpp: Removed.
        * wml/WMLFieldSetElement.h: Removed.
        * wml/WMLFormControlElement.cpp: Removed.
        * wml/WMLFormControlElement.h: Removed.
        * wml/WMLGoElement.cpp: Removed.
        * wml/WMLGoElement.h: Removed.
        * wml/WMLImageElement.cpp: Removed.
        * wml/WMLImageElement.h: Removed.
        * wml/WMLImageLoader.cpp: Removed.
        * wml/WMLImageLoader.h: Removed.
        * wml/WMLInputElement.cpp: Removed.
        * wml/WMLInputElement.h: Removed.
        * wml/WMLInsertedLegendElement.cpp: Removed.
        * wml/WMLInsertedLegendElement.h: Removed.
        * wml/WMLIntrinsicEvent.cpp: Removed.
        * wml/WMLIntrinsicEvent.h: Removed.
        * wml/WMLIntrinsicEventHandler.cpp: Removed.
        * wml/WMLIntrinsicEventHandler.h: Removed.
        * wml/WMLMetaElement.cpp: Removed.
        * wml/WMLMetaElement.h: Removed.
        * wml/WMLNoopElement.cpp: Removed.
        * wml/WMLNoopElement.h: Removed.
        * wml/WMLOnEventElement.cpp: Removed.
        * wml/WMLOnEventElement.h: Removed.
        * wml/WMLOptGroupElement.cpp: Removed.
        * wml/WMLOptGroupElement.h: Removed.
        * wml/WMLOptionElement.cpp: Removed.
        * wml/WMLOptionElement.h: Removed.
        * wml/WMLPElement.cpp: Removed.
        * wml/WMLPElement.h: Removed.
        * wml/WMLPageState.cpp: Removed.
        * wml/WMLPageState.h: Removed.
        * wml/WMLPostfieldElement.cpp: Removed.
        * wml/WMLPostfieldElement.h: Removed.
        * wml/WMLPrevElement.cpp: Removed.
        * wml/WMLPrevElement.h: Removed.
        * wml/WMLRefreshElement.cpp: Removed.
        * wml/WMLRefreshElement.h: Removed.
        * wml/WMLSelectElement.cpp: Removed.
        * wml/WMLSelectElement.h: Removed.
        * wml/WMLSetvarElement.cpp: Removed.
        * wml/WMLSetvarElement.h: Removed.
        * wml/WMLTableElement.cpp: Removed.
        * wml/WMLTableElement.h: Removed.
        * wml/WMLTagNames.in: Removed.
        * wml/WMLTaskElement.cpp: Removed.
        * wml/WMLTaskElement.h: Removed.
        * wml/WMLTemplateElement.cpp: Removed.
        * wml/WMLTemplateElement.h: Removed.
        * wml/WMLTimerElement.cpp: Removed.
        * wml/WMLTimerElement.h: Removed.
        * wml/WMLVariables.cpp: Removed.
        * wml/WMLVariables.h: Removed.

2011-04-28  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r85233 and r85235.
        http://trac.webkit.org/changeset/85233
        http://trac.webkit.org/changeset/85235
        https://bugs.webkit.org/show_bug.cgi?id=59754

        Causes issues with jsc. (Requested by dave_levin on #webkit).

        * ForwardingHeaders/wtf/ThreadRestrictionVerifier.h: Removed.
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::defaultIcon):
        (WebCore::IconDatabase::setIconDataForIconURL):
        (WebCore::IconDatabase::getOrCreateIconRecord):
        (WebCore::IconDatabase::readFromDatabase):

2011-04-28  Jay Civelli  <jcivelli@chromium.org>

        Reviewed by Adam Barth.

        Introducing a new class that allows serialization of a page back
        to HTML/XML with all its sub-frames and also retrieves the page's
        resources.
        Tests: unit-tests in chromium/tests/WebPageNewSerializerTest.cpp
        https://bugs.webkit.org/show_bug.cgi?id=58947

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * dom/Document.cpp:
        (WebCore::Document::suggestedMIMEType):
        * dom/Document.h:
        * editing/MarkupAccumulator.cpp:
        (WebCore::MarkupAccumulator::appendCustomAttributes):
        (WebCore::MarkupAccumulator::appendElement):
        * editing/MarkupAccumulator.h:
        * html/parser/HTMLMetaCharsetParser.cpp:
        (WebCore::HTMLMetaCharsetParser::processMeta):
        (WebCore::HTMLMetaCharsetParser::encodingFromMetaAttributes):
        * html/parser/HTMLMetaCharsetParser.h:
        * page/PageSerializer.cpp: Added.
        * page/PageSerializer.h: Added.

2011-04-28  Mark Pilgrim  <pilgrim@chromium.org>

        Reviewed by Tony Chang.

        IndexedDB createIndex should fail if name arg is null
        https://bugs.webkit.org/show_bug.cgi?id=58365

        Test: storage/indexeddb/mozilla/create-index-null-name.html

        * storage/IDBObjectStore.idl:
        * storage/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::createIndex):

2011-04-28  Mark Pilgrim  <pilgrim@chromium.org>

        Reviewed by Tony Chang.

        IndexedDB put() should fail if second (key) parameter is null
        https://bugs.webkit.org/show_bug.cgi?id=58613

        If key arg is not specified, prpKey ends up as a null pointer in ::put().
        However, if the key arg is specified but is null, prpKey ends up as a
        valid IDBKey which has a null key type. As it happens, we need to be able
        to detect the difference between these cases (the key arg is optional but
        if specified must not be null).

        Test: storage/indexeddb/mozilla/key-requirements-put-null-key.html

        * storage/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::put):

2011-04-07  David Levin  <levin@chromium.org>

        Reviewed by Darin Adler.

        Add asserts to RefCounted to make sure ref/deref happens on the right thread.
        https://bugs.webkit.org/show_bug.cgi?id=31639

        No new functionality exposed so no new tests. (The change is basically adding
        more testing.)

        * ForwardingHeaders/wtf/ThreadRestrictionVerifier.h: Added.
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::defaultIcon): Set the mutex which does the guarding of the variable.
        (WebCore::IconDatabase::getOrCreateIconRecord): Ditto.
        (WebCore::IconDatabase::setIconDataForIconURL): Ditto.
        (WebCore::IconDatabase::readFromDatabase): Ditto.

2011-04-28  Kenneth Russell  <kbr@google.com>

        Unreviewed build fix for Web Audio with strict OwnPtr.

        * platform/audio/HRTFDatabaseLoader.cpp:
        (WebCore::HRTFDatabaseLoader::HRTFDatabaseLoader):

2011-04-28  Dominic Cooney  <dominicc@chromium.org>

        Reviewed by Geoffrey Garen.

        Walk shadow hosts as well as parent nodes when finding opaque roots.
        https://bugs.webkit.org/show_bug.cgi?id=59571

        Test: fast/dom/shadow/gc-shadow.html

        * bindings/js/JSDOMBinding.h:
        (WebCore::root):

2011-04-28  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Click counting logic should be shared between WebKit1 and WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=59715

        Added a GtkClickCounter class which is just the logic from WebKit1 pushed down
        into WebCore so that WebKit1 and WebKit2 can share the code.

        No new tests. This is covered by fast/events/click-count.html.

        * GNUmakefile.list.am: Added new files.
        * platform/gtk/GtkClickCounter.cpp: Added.
        (WebCore::GtkClickCounter::GtkClickCounter): Added.
        (WebCore::GtkClickCounter::reset): Added.
        (WebCore::GtkClickCounter::shouldProcessButtonEvent): Added.
        (WebCore::getEventTime): Added.
        (WebCore::GtkClickCounter::clickCountForGdkButtonEvent): Added.
        * platform/gtk/GtkClickCounter.h: Added.

2011-04-28  Dan Bernstein  <mitz@apple.com>

        Build fix.

        * css/CSSParser.cpp:
        (WebCore::cssPropertyID):

2011-04-28  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        Allow specifying CSS property aliases in CSSPropertyNames.in files
        https://bugs.webkit.org/show_bug.cgi?id=59712

        * css/CSSParser.cpp:
        (WebCore::cssPropertyID): Removed code to handle some aliases
        * css/CSSPropertyNames.in: Added aliases no longer handled in code.
        * css/makeprop.pl: Interpret lines of the form "alias-property-name = property-name" as
        defining an alias, and add an appropriate entry to the gperf file.

2011-04-28  Arno Renevier  <arno@renevier.net>

        Reviewed by Gustavo Noronha Silva.

        [Soup] does not load css stylesheets without content-type
        https://bugs.webkit.org/show_bug.cgi?id=59697

        When sniffing content type, do not replace http Content-Type header in
        soup message anymore, but keep sniffed content type in a separate
        variable.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::contentSniffedCallback):
        * platform/network/soup/ResourceResponse.h:
        (WebCore::ResourceResponse::sniffedContentType):
        (WebCore::ResourceResponse::setSniffedContentType):
        * platform/network/soup/ResourceResponseSoup.cpp:
        (WebCore::ResourceResponse::updateFromSoupMessage):

2011-04-28  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Andreas Kling.

        Remove flag ENABLE_SYMBIAN_DIALOG_PROVIDER
        https://bugs.webkit.org/show_bug.cgi?id=59704

        No new tests, just code cleanup.

        * WebCore.pri:

2011-04-28  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: remove "Pretty print" source frame context menu item.
        https://bugs.webkit.org/show_bug.cgi?id=59709

        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype.setFormatSourceFiles):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._toggleFormatSourceFiles):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.populateTextAreaContextMenu):

2011-04-28  Satish Sampath  <satish@chromium.org>

        Reviewed by Tony Gentilcore.

        Speech input button layout issues with padding and border.
        https://bugs.webkit.org/show_bug.cgi?id=59613

        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::layout):
        (WebCore::RenderTextControlSingleLine::nodeAtPoint):
        (WebCore::RenderTextControlSingleLine::forwardEvent):

2011-04-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Check whether to use native scrollbars at run time
        https://bugs.webkit.org/show_bug.cgi?id=59694

        It's currently decided at build time depending on whether webkit2
        build is enabled or not. That makes imposible to build both
        webkit1 and webkit2 using the same libWebCore.

        * GNUmakefile.am:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::wheelEvent):
        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::createScrollbar):

2011-04-28  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: add status bar button for pretty print.
        https://bugs.webkit.org/show_bug.cgi?id=59467

        * WebCore.gypi:
        * inspector/front-end/Images/prettyPrintButtonGlyph.png: Added.
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype.get statusBarItems):
        (WebInspector.ScriptsPanel.prototype._toggleFormatSourceFiles):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.css:
        (.scripts-toggle-pretty-print-status-bar-item .glyph):
        (.scripts-toggle-pretty-print-status-bar-item.toggled .glyph):

2011-04-28  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: add ResourceTreeModel tests.
        https://bugs.webkit.org/show_bug.cgi?id=59616

        Tests: http/tests/inspector/resource-tree/resource-tree-document-url.html
               http/tests/inspector/resource-tree/resource-tree-frame-navigate.html
               http/tests/inspector/resource-tree/resource-tree-reload.html

        * inspector/front-end/ResourceTreeModel.js:
        (WebInspector.ResourceTreeModel.prototype.frontendReused):
        (WebInspector.ResourceTreeModel.prototype._addFrame):
        (WebInspector.ResourceTreeModel.prototype._frameNavigated):
        (WebInspector.ResourceTreeModel.prototype._frameDetached):
        (WebInspector.ResourceTreeModel.prototype._onResourceUpdated):
        (WebInspector.ResourceTreeModel.prototype.forAllResources):
        (WebInspector.ResourceTreeModel.prototype._clearChildFramesAndResources):
        (WebInspector.ResourceTreeModel.prototype._callForFrameResources):
        (WebInspector.ResourceTreeModel.prototype._addFramesRecursively):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype._populateResourceTree):
        (WebInspector.ResourcesPanel.prototype._frameAdded):
        (WebInspector.ResourcesPanel.prototype._frameDetached):
        (WebInspector.ResourcesPanel.prototype._frameNavigated):
        (WebInspector.FrameTreeElement):
        (WebInspector.FrameTreeElement.prototype.frameNavigated):

2011-04-28  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Yury Semikhatsky.

        WebInspector: [Chromium] Implement retaining paths following in detailed heap snapshots.
        https://bugs.webkit.org/show_bug.cgi?id=59592

        * inspector/front-end/DetailedHeapshotGridNodes.js:
        (WebInspector.HeapSnapshotGridNode.prototype._populate):
        (WebInspector.HeapSnapshotGridNode.prototype.populateChildren.childrenRetrieved):
        (WebInspector.HeapSnapshotGridNode.prototype.populateChildren.callSerialize):
        (WebInspector.HeapSnapshotGridNode.prototype.populateChildren):
        * inspector/front-end/DetailedHeapshotView.js:
        (WebInspector.HeapSnapshotContainmentDataGrid.prototype._defaultPopulateCount.100.expandRoute.nextStep.else.afterExpand):
        (WebInspector.HeapSnapshotContainmentDataGrid.prototype._defaultPopulateCount.100.expandRoute):
        (WebInspector.HeapSnapshotRetainingPathsList.prototype.showNext.pathFound):
        (WebInspector.DetailedHeapshotView.prototype._mouseClickInRetainmentGrid.expandRoute):
        (WebInspector.DetailedHeapshotView.prototype._mouseClickInRetainmentGrid):
        (WebInspector.DetailedHeapshotView.prototype.changeView.sortingComplete):
        (WebInspector.DetailedHeapshotView.prototype.changeView):
        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshotPathFinder.prototype.findNext):
        (WebInspector.HeapSnapshotPathFinder.prototype._nextEdgeIter):
        (WebInspector.HeapSnapshotPathFinder.prototype._buildNextPath):
        (WebInspector.HeapSnapshotPathFinder.prototype._pathToString):
        (WebInspector.HeapSnapshotPathFinder.prototype._pathToRoute):
        * inspector/front-end/heapProfiler.css:
        (div.retaining-paths-view td.path-column div:hover):

2011-04-28  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: [Chromium] Optimize detailed heap snapshots loading / parsing.
        https://bugs.webkit.org/show_bug.cgi?id=59454

        Test: inspector/profiler/heap-snapshot-loader.html

        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshotLoader):
        (WebInspector.HeapSnapshotLoader.prototype._findBalancedCurlyBrackets):
        (WebInspector.HeapSnapshotLoader.prototype.finishLoading):
        (WebInspector.HeapSnapshotLoader.prototype._parseNodes):
        (WebInspector.HeapSnapshotLoader.prototype._parseStringsArray):
        (WebInspector.HeapSnapshotLoader.prototype.pushJSONChunk):
        * inspector/front-end/HeapSnapshotProxy.js:
        (WebInspector.HeapSnapshotFakeWorker.prototype.postMessage):

2011-04-28  ojab  <ojab@ojab.ru>

        Reviewed by David Levin.

        Fix build with libpng-1.5.1
        https://bugs.webkit.org/show_bug.cgi?id=59607

        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::readColorProfile):

2011-04-28  Zoltan Herczeg  <zherczeg@inf.u-szeged.hu>

        Reviewed by Nikolas Zimmermann.

        Optimizing gaussian blur filter to ARM-neon SIMD instruction set
        https://bugs.webkit.org/show_bug.cgi?id=59447

        This patch contains two sub-routines, one for speeding up
        alpha channel only gaussian blur (by 2.5 times) and one
        for speeding up all channel blur (by 4 times).

        The common code is also redesigned to better fit for platform
        specific code. This means large chunks of code was moved to
        different files, and all platform specific files are added to
        all build systems.

        * CMakeLists.txt:
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcproj/WebCoreCommon.vsprops:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/filters/FEGaussianBlur.cpp:
        (WebCore::FEGaussianBlur::platformApplyGeneric):
        (WebCore::FEGaussianBlur::apply):
        * platform/graphics/filters/FEGaussianBlur.h:
        (WebCore::FEGaussianBlur::kernelPosition):
        (WebCore::FEGaussianBlur::platformApply):
        * platform/graphics/filters/FELighting.cpp:
        (WebCore::FELighting::platformApplyGeneric):
        (WebCore::FELighting::drawLighting):
        * platform/graphics/filters/FELighting.h:
        (WebCore::FELighting::platformApply):
        * platform/graphics/filters/arm/FEGaussianBlurNEON.cpp: Added.
        (WebCore::WTF_ALIGNED):
        (WebCore::feGaussianBlurConstantsForNeon):
        * platform/graphics/filters/arm/FEGaussianBlurNEON.h: Added.
        (WebCore::FEGaussianBlur::platformApplyNeon):
        * platform/graphics/filters/arm/FELightingNEON.cpp:
        (WebCore::WTF_ALIGNED):
        (WebCore::FELighting::getPowerCoefficients):
        * platform/graphics/filters/arm/FELightingNEON.h:
        (WebCore::FELighting::platformApplyNeon):

2011-04-28  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: provide a hotkey for script pause
        https://bugs.webkit.org/show_bug.cgi?id=59593

        In fact, F8 works as a hotkey, but this fact was not reflected
        in the shortcut help popup.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._registerShortcuts):

2011-04-28  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        PluginStream should play nice with strict OwnPtr
        https://bugs.webkit.org/show_bug.cgi?id=59675

        These failures appear when enabling strict OwnPtr on Qt.

        * plugins/PluginStream.cpp:
        (WebCore::PluginStream::PluginStream):
        (WebCore::PluginStream::didReceiveData):

2011-04-26  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Use CachedResource to retrieve charset-decoded stylesheet text
        https://bugs.webkit.org/show_bug.cgi?id=59326

        Concrete CachedResource successors for stylesheets and scripts
        can decode their content better than the generic approach we use.

        * inspector/InspectorPageAgent.cpp:
        (WebCore::decodeSharedBuffer):
        (WebCore::prepareCachedResourceBuffer):
        (WebCore::cachedResourceDecoded):
        (WebCore::InspectorPageAgent::resourceContent):
        (WebCore::InspectorPageAgent::resourceData):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::originalStyleSheetText):

2011-04-28  Jon Lee  <jonlee@apple.com>

        Reviewed by Simon Fraser.

        REGRESSION: white overlay scrollbars on apple.com/startpage
        https://bugs.webkit.org/show_bug.cgi?id=59540
        <rdar://problem/9338653>

        Now we look at the document background in addition to the <body> element,
        and blend those colors in with the base background of the frame view to
        arrive at our aggregate color. This provides a better result to determine
        overlay scrollbar style.

        * page/Frame.cpp:
        (WebCore::Frame::getDocumentBackgroundColor): look up the colors on the html and body element, and properly composite them.
        * platform/graphics/Color.h: a short comment to note that blend() uses the Porter-Duff source-over equation

2011-04-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Maciej Stachowiak.

        Fix OwnPtr issues in IndexedDB
        https://bugs.webkit.org/show_bug.cgi?id=59656

        This patch is an attempt to fix the clang build.  Clang can't seem to
        cope with OwnPtrs to classes declared in an anonymous namespace because
        OwnPtr's copy constructor isn't defined (but would need to be defined
        in this translation unit).

        * platform/leveldb/LevelDBDatabase.cpp:

2011-04-27  Ryuan Choi  <ryuan.choi@samsung.com>

        Reviewed by Antonio Gomes.

        [EFL] Change cursor to LAZY_NATIVE_CURSOR
        https://bugs.webkit.org/show_bug.cgi?id=59411

        Enable LAZY_NATIVE_CURSOR on EFL build.

        No test added because functionality is unchanged.

        * CMakeListsEfl.txt: Add Cursor.cpp
        * platform/Cursor.h:
        (WebCore::Cursor::Cursor):
        * platform/efl/CursorEfl.cpp:
        (WebCore::Cursor::Cursor):
        (WebCore::Cursor::~Cursor):
        (WebCore::getCursorString):
        (WebCore::Cursor::ensurePlatformCursor):
        * platform/efl/WidgetEfl.cpp:
        (WebCore::Widget::setCursor):

2011-04-27  Adam Barth  <abarth@webkit.org>

        Build fix from the future.  Another trival strict OwnPtr fixes.  This
        is the last futuristic build fix I can detect with my time traveling
        abilities.

        * platform/graphics/chromium/TransparencyWin.cpp:
        (WebCore::TransparencyWin::initializeNewContext):

2011-04-27  Dmitry Lomov  <dslomov@google.com>

        Reviewed by David Levin.

        CrossThreadCopier should not have a default specialization for raw pointers
        https://bugs.webkit.org/show_bug.cgi?id=59234
        Removed the ablity to pass raw pointers cross-thread
        Added and applied annotations for doing that

        * fileapi/FileReader.cpp:
        (WebCore::FileReader::readInternal):
        (WebCore::FileReader::abort):
        * fileapi/FileStreamProxy.cpp:
        (WebCore::FileStreamProxy::startOnFileThread):
        (WebCore::FileStreamProxy::stopOnFileThread):
        (WebCore::FileStreamProxy::getSize):
        (WebCore::FileStreamProxy::getSizeOnFileThread):
        (WebCore::FileStreamProxy::openForRead):
        (WebCore::FileStreamProxy::openForReadOnFileThread):
        (WebCore::FileStreamProxy::openForWrite):
        (WebCore::FileStreamProxy::openForWriteOnFileThread):
        (WebCore::FileStreamProxy::close):
        (WebCore::FileStreamProxy::read):
        (WebCore::FileStreamProxy::readOnFileThread):
        (WebCore::FileStreamProxy::write):
        (WebCore::FileStreamProxy::writeOnFileThread):
        (WebCore::FileStreamProxy::truncate):
        (WebCore::FileStreamProxy::truncateOnFileThread):
        * loader/WorkerThreadableLoader.cpp:
        (WebCore::WorkerThreadableLoader::MainThreadBridge::MainThreadBridge):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::destroy):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::cancel):
        * page/GeolocationPositionCache.cpp:
        (WebCore::GeolocationPositionCache::triggerReadFromDatabase):
        (WebCore::GeolocationPositionCache::triggerWriteToDatabase):
        * platform/CrossThreadCopier.h:
        (WebCore::AllowCrossThreadAccessWrapper::AllowCrossThreadAccessWrapper):
        (WebCore::AllowCrossThreadAccessWrapper::value):
        (WebCore::AllowCrossThreadAccess):
        (WebCore::AllowExtendedLifetimeWrapper::AllowExtendedLifetimeWrapper):
        (WebCore::AllowExtendedLifetimeWrapper::value):
        (WebCore::AllowExtendedLifetime):
        * platform/graphics/chromium/cc/CCCompletionEvent.h:
        * storage/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::get):
        (WebCore::IDBObjectStoreBackendImpl::put):
        (WebCore::IDBObjectStoreBackendImpl::deleteFunction):
        (WebCore::IDBObjectStoreBackendImpl::clear):
        (WebCore::IDBObjectStoreBackendImpl::createIndex):
        (WebCore::IDBObjectStoreBackendImpl::deleteIndex):
        (WebCore::IDBObjectStoreBackendImpl::openCursor):
        * storage/SQLCallbackWrapper.h:
        (WebCore::SQLCallbackWrapper::clear):
        * websockets/WorkerThreadableWebSocketChannel.cpp:
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::mainThreadCreateWebSocketChannel):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::Bridge):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::connect):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::send):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::bufferedAmount):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::close):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::disconnect):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::suspend):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::resume):
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::postConsoleMessageToWorkerObject):

2011-04-27  Adam Barth  <abarth@webkit.org>

        Two build fixes from the future.  (Trivial strict OwnPtr fixes.)

        * page/Frame.cpp:
        (WebCore::Frame::setTiledBackingStoreEnabled):
        * platform/audio/ReverbConvolver.cpp:
        (WebCore::ReverbConvolver::ReverbConvolver):

2011-04-27  Adam Barth  <abarth@webkit.org>

        Reviewed by David Levin.

        Fix five strict PassOwnPtr violations in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=59640

        * css/MediaList.cpp:
        (WebCore::MediaList::deleteMedium):
        (WebCore::MediaList::setMediaText):
        (WebCore::MediaList::appendMedium):
        * css/MediaQuery.h:
        * dom/MessagePort.cpp:
        (WebCore::MessagePort::disentanglePorts):
        (WebCore::MessagePort::entanglePorts):
        * inspector/InspectorStyleSheet.cpp:
        (ParsedStyleSheet::setText):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::adjustStyle):
        (WebCore::RenderTheme::adjustMeterStyle):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::adjustMenuListStyle):
        (WebCore::RenderThemeMac::adjustSliderTrackStyle):
        (WebCore::RenderThemeMac::adjustSliderThumbStyle):
        (WebCore::RenderThemeMac::adjustSearchFieldStyle):
        (WebCore::RenderThemeMac::adjustSearchFieldCancelButtonStyle):
        (WebCore::RenderThemeMac::adjustSearchFieldDecorationStyle):
        (WebCore::RenderThemeMac::adjustSearchFieldResultsDecorationStyle):
        (WebCore::RenderThemeMac::adjustSearchFieldResultsButtonStyle):

2011-04-27  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        <rdar://problem/9315254> ARIA role attribute implemented incorrectly; does not support token list with fallbacks
        https://bugs.webkit.org/show_bug.cgi?id=59648

        Test: accessibility/aria-fallback-roles.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::ariaRoleToWebCoreRole):

2011-04-27  Beth Dakin  <bdakin@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=59671
        Race condition with scrollbar animations and closing a page can cause a crash in 
        WebCore::FrameView::setVisibleScrollerThumbRect + 15
        -and corresponding-
        <rdar://problem/9329253>

        It is definitely possible for Page to be null here. So we should null-check it! 
        And we should not ASSERT.
        * page/FrameView.cpp:
        (WebCore::FrameView::didCompleteRubberBand):
        (WebCore::FrameView::scrollbarStyleChanged):
        (WebCore::FrameView::setVisibleScrollerThumbRect):

2011-04-27  Ryosuke Niwa  <rniwa@webkit.org>

        WinCE build fix after r85143.

        * platform/graphics/wince/FontWinCE.cpp:
        (WebCore::TextRunComponent::TextRunComponent):

2011-04-27  Mark Pilgrim  <pilgrim@chromium.org>

        Reviewed by Tony Chang.

        IndexedDB object store delete should fail if key is null
        https://bugs.webkit.org/show_bug.cgi?id=58614

        Test: storage/indexeddb/mozilla/key-requirements-delete-null-key.html

        * storage/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::deleteFunction):

2011-04-27  Eric Seidel  <eric@webkit.org>

        Reviewed by Ryosuke Niwa.

        Should have an easy way to construct starting BidiStatus for a paragraph root
        https://bugs.webkit.org/show_bug.cgi?id=59226

        Two places try to construct BidiStatuses for a paragraph root using copy/paste code.
        I've made this a constructor for BidiStatus instead.

        As part of this effort I added a direction() accessor for TextRun and got
        rid of the old m_rtl bool.  This is part of the generic effort in the
        Bidi code to replace old bool usage with the superior TextDirection enum
        (this generally makes the code cleaner).

        As part of this replacement effort I found several places which were
        assuming LTR (by passing rtl=false) when they probably want to use
        the current text direction.  I suspect that LTR vs. RTL may affect
        string width in the case of ligatures.  It's unclear.

        This is almost entirely a mechanical change.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawTextInternal):
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawBidiText):
        * platform/graphics/TextRun.h:
        (WebCore::TextRun::TextRun):
        (WebCore::TextRun::direction):
        (WebCore::TextRun::rtl):
        (WebCore::TextRun::ltr):
        (WebCore::TextRun::setDirection):
        * platform/text/BidiResolver.h:
        (WebCore::BidiStatus::BidiStatus):
        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::paint):
        (WebCore::EllipsisBox::selectionRect):
        (WebCore::EllipsisBox::paintSelection):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::selectionRect):
        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::paintSelection):
        (WebCore::InlineTextBox::paintCompositionBackground):
        (WebCore::InlineTextBox::paintSpellingOrGrammarMarker):
        (WebCore::InlineTextBox::paintTextMatchMarker):
        (WebCore::InlineTextBox::computeRectForReplacementMarker):
        (WebCore::InlineTextBox::offsetForPosition):
        (WebCore::InlineTextBox::positionForOffset):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::determineStartPosition):
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::paintObject):
        (WebCore::RenderFileUploadControl::computePreferredLogicalWidths):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::updateFromElement):
        (WebCore::RenderListBox::paintItemForeground):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::getAvgCharWidth):
        (WebCore::RenderTextControl::paintPlaceholder):
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::constructTextRun):
        * rendering/svg/SVGTextMetrics.cpp:
        (WebCore::constructTextRun):

2011-04-27  Robert Hogan  <robert@webkit.org>

        Reviewed by Adam Barth.

        Allow shadowing of history object
        https://bugs.webkit.org/show_bug.cgi?id=55965

        Tests: http/tests/history/cross-origin-replace-history-object-child.html
               http/tests/history/cross-origin-replace-history-object.html

        * page/DOMWindow.idl:

2011-04-27  James Robinson  <jamesr@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] Ensure compositing layers are up to date before entering doComposite
        https://bugs.webkit.org/show_bug.cgi?id=59159

        Adds some assertions to try to catch GraphicsLayer mutations at bad times (such as during
        GraphicsLayerClient::paintContents() implementations).

        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::updateLayerPreserves3D):
        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::LayerChromium):
        (WebCore::LayerChromium::~LayerChromium):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::updateLayers):
        * platform/graphics/chromium/LayerRendererChromium.h:
          Add a set of assertions that we aren't creating or destroying LayerChromiums during paintContents

2011-04-27  James Robinson  <jamesr@chromium.org>

        Reviewed by Adam Barth.

        Fix OwnPtr strict issues in chromium linux build
        https://bugs.webkit.org/show_bug.cgi?id=59664

        * platform/graphics/chromium/ComplexTextControllerLinux.cpp:
        (WebCore::ComplexTextController::getNormalizedTextRun):
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::PlatformContextSkia):

2011-04-27  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Make sure to set sample-rate of created AudioBus in AudioBus::createBySampleRateConverting()
        https://bugs.webkit.org/show_bug.cgi?id=59641

        No new tests since audio API is not yet implemented.

        * platform/audio/AudioBus.cpp:
        (WebCore::AudioBus::createBySampleRateConverting):
        (WebCore::AudioBus::createByMixingToMono):

2011-04-27  Geoffrey Garen  <ggaren@apple.com>

        Motivated by Alexey Proskuryakov.

        * bindings/scripts/CodeGeneratorJS.pm: Tried to make this comment more
        informative, since it confused Alexey and me.

2011-04-27  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Fixed a small leak related to CSSValues when deallocating a DOMWrapperWorld
        https://bugs.webkit.org/show_bug.cgi?id=59646

        Made the cssValueRoots map per-world, instead of a global. When we deallocate
        a world, we need to clear all entries in the map for that world, since
        the finalizers that would otherwise clear those entries don't run. The
        simplest way to do this is just to make the world own the map.
        
        * bindings/js/DOMWrapperWorld.h:
        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::JSCSSStyleDeclaration::getPropertyCSSValue):
        * bindings/js/JSCSSValueCustom.cpp:
        (WebCore::JSCSSValueOwner::isReachableFromOpaqueRoots):
        (WebCore::JSCSSValueOwner::finalize):
        * bindings/js/JSDOMBinding.h:

2011-04-27  Adam Barth  <abarth@webkit.org>

        Reviewed by David Levin.

        Fix OwnPtr issues in IndexedDB
        https://bugs.webkit.org/show_bug.cgi?id=59656

        I didn't do an exhaustive review of this code, but I fixed the problems
        caught by turning on strict OwnPtr and all their antecedents.  This
        patch is entirely tighter bookkeeping.  There shouldn't be any actual
        behavior change.

        * platform/leveldb/LevelDBDatabase.cpp:
        (WebCore::LevelDBDatabase::LevelDBDatabase):
        (WebCore::LevelDBDatabase::open):
        (WebCore::LevelDBDatabase::createIterator):
        * platform/leveldb/LevelDBDatabase.h:
        * platform/leveldb/LevelDBIterator.cpp:
        (WebCore::LevelDBIterator::LevelDBIterator):
        * platform/leveldb/LevelDBIterator.h:
        * storage/IDBLevelDBBackingStore.cpp:
        (WebCore::IDBLevelDBBackingStore::IDBLevelDBBackingStore):
        (WebCore::IDBLevelDBBackingStore::open):
        (WebCore::getNewDatabaseId):
        (WebCore::IDBLevelDBBackingStore::getObjectStores):
        (WebCore::getNewObjectStoreId):
        (WebCore::deleteRange):
        (WebCore::IDBLevelDBBackingStore::nextAutoIncrementNumber):
        (WebCore::IDBLevelDBBackingStore::forEachObjectStoreRecord):
        (WebCore::IDBLevelDBBackingStore::getIndexes):
        (WebCore::getNewIndexId):
        (WebCore::findGreatestKeyLessThan):
        (WebCore::IDBLevelDBBackingStore::getPrimaryKeyViaIndex):
        (WebCore::IDBLevelDBBackingStore::keyExistsInIndex):
        (WebCore::findLastIndexKeyEqualTo):
        * storage/IDBLevelDBBackingStore.h:

2011-04-19  MORITA Hajime  <morrita@google.com>

        Reviewed by Tony Chang.

        [Refactoring] DocumentMarkerController::MarkerMapVectorPair should be replaced with a list of some class.
        https://bugs.webkit.org/show_bug.cgi?id=58113

        * Introduced RenderedDocumentMarker, a subclass of DocumentMarker.
        * Eliminated Vector<IntRect> and move the IntRect into RenderedDocumentMarker
        * Now MarkerMapVectorPair is no longer used.
        
        No new tests, No behavior change.

        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/DocumentMarker.h:
        * dom/DocumentMarkerController.cpp:
        (WebCore::DocumentMarkerController::addMarker):
        (WebCore::DocumentMarkerController::copyMarkers):
        (WebCore::DocumentMarkerController::removeMarkers):
        (WebCore::DocumentMarkerController::markerContainingPoint):
        (WebCore::DocumentMarkerController::markersForNode):
        (WebCore::DocumentMarkerController::renderedRectsForMarkers):
        (WebCore::DocumentMarkerController::removeMarkersFromList):
        (WebCore::DocumentMarkerController::repaintMarkers):
        (WebCore::DocumentMarkerController::setRenderedRectForMarker):
        (WebCore::DocumentMarkerController::invalidateRenderedRectsForMarkersInRect):
        (WebCore::DocumentMarkerController::shiftMarkers):
        (WebCore::DocumentMarkerController::setMarkersActive):
        (WebCore::DocumentMarkerController::clearDescriptionOnMarkersIntersectingRange):
        (WebCore::DocumentMarkerController::showMarkers):
        * dom/DocumentMarkerController.h:
        * dom/RenderedDocumentMarker.h: Added.
        (WebCore::RenderedDocumentMarker::RenderedDocumentMarker):
        (WebCore::RenderedDocumentMarker::isRendered):
        (WebCore::RenderedDocumentMarker::contains):
        (WebCore::RenderedDocumentMarker::setRenderedRect):
        (WebCore::RenderedDocumentMarker::renderedRect):
        (WebCore::RenderedDocumentMarker::invalidate):
        (WebCore::RenderedDocumentMarker::invalidMarkerRect):

2011-04-27  James Robinson  <jamesr@chromium.org>

        Unreviewed, rolling out r85112.
        http://trac.webkit.org/changeset/85112
        https://bugs.webkit.org/show_bug.cgi?id=59159

        Broke mac compile

        * page/FrameView.cpp:
        (WebCore::FrameView::updateCompositingLayers):
        * page/FrameView.h:
        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::updateLayerPreserves3D):
        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::LayerChromium):
        (WebCore::LayerChromium::~LayerChromium):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::updateLayers):
        * platform/graphics/chromium/LayerRendererChromium.h:

2011-04-27  Mark Rowe  <mrowe@apple.com>

        Build fix.

        * WebCore.xcodeproj/project.pbxproj: Make RenderLayerCompositor.h accessbile to WebKit and WebKit2.

2011-04-27  Pratik Solanki  <psolanki@apple.com>

        Unreviewed. Fix WinCE build. The include should be guarded inside USE(CFNETWORK).

        * platform/network/ResourceHandleClient.h:

2011-04-27  James Robinson  <jamesr@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] Ensure compositing layers are up to date before entering doComposite
        https://bugs.webkit.org/show_bug.cgi?id=59159

        Adds some assertions to try to catch GraphicsLayer mutations at bad times (such as during
        GraphicsLayerClient::paintContents() implementations).

        * page/FrameView.cpp:
        (WebCore::FrameView::updateCompositingLayers):
            Add an optional CompositingUpdateType parameter.
        * page/FrameView.h:
        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::updateLayerPreserves3D):
        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::LayerChromium):
        (WebCore::LayerChromium::~LayerChromium):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::updateLayers):
        * platform/graphics/chromium/LayerRendererChromium.h:
          Add a set of assertions that we aren't creating or destroying LayerChromiums during paintContents
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::dirtyZOrderLists):
        (WebCore::RenderLayer::updateCompositingAndLayerListsIfNeeded):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateCompositingLayers):
        * rendering/RenderLayerCompositor.h:
          Fix a typo in CompositingUpdateType Pait->Paint

2011-04-27  Pratik Solanki  <psolanki@apple.com>

        Reviewed by Antti Koivisto.

        Part of WebCore should use CFNetwork-based loader on Mac
        https://bugs.webkit.org/show_bug.cgi?id=51836

        Add willCacheResponse method when using CFNetwork on Mac. Also put appropriate ifdefs around
        willCacheResponse/shouldCacheResponse.

        * loader/EmptyClients.h:
        * loader/FrameLoaderClient.h:
        * loader/ResourceLoader.h:
        * loader/cf/ResourceLoaderCFNet.cpp:
        * loader/mac/ResourceLoaderMac.mm:
        (WebCore::ResourceLoader::willCacheResponse):
        * platform/network/ResourceHandleClient.h:
        (WebCore::ResourceHandleClient::willCacheResponse):
        (WebCore::ResourceHandleClient::shouldCacheResponse):
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::willCacheResponse):

2011-04-27  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Brian Weinstein.

        Web Inspector: Stop on Exception state does not persist.

        A wrong property name was used when we persist PauseOnExceptionState property to Local Storage.
        https://bugs.webkit.org/show_bug.cgi?id=59630

        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._debuggerWasEnabled):
        (WebInspector.ScriptsPanel.prototype._setPauseOnExceptions.callback):
        (WebInspector.ScriptsPanel.prototype._setPauseOnExceptions):

2011-04-27  Adrienne Walker  <enne@google.com>

        [chromium] Unreviewed, rollout r85075 (scissor rect changes)
        https://bugs.webkit.org/show_bug.cgi?id=59020

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::updatePropertiesAndRenderSurfaces):

2011-04-27  Darin Adler  <darin@apple.com>

        Reviewed by David Levin.

        Fix strict OwnPtr issues seen in about 30 more files
        https://bugs.webkit.org/show_bug.cgi?id=59615

        * bindings/js/JSCallbackData.h:
        (WebCore::DeleteCallbackDataTask::create): Use adoptPtr.
        * bindings/js/JSMessageEventCustom.cpp:
        (WebCore::JSMessageEvent::initMessageEvent): Use adoptPtr.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::updateSpecifiersWithElementName): Use OwnPtr,
        adoptPtr, and release.
        * dom/MessageEvent.cpp:
        (WebCore::MessageEvent::initMessageEvent): Use OwnPtr, adoptPtr,
        and release.
        * dom/MessagePortChannel.cpp:
        (WebCore::MessagePortChannel::EventData::create): Use adoptPtr.
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ProcessMessagesSoonTask::create): Use adoptPtr.
        * dom/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::doEnd): Use adoptPtr.
        * dom/default/PlatformMessagePortChannel.cpp:
        (WebCore::MessagePortChannel::create): Use adoptPtr.
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::detach): Use nullptr.
        * inspector/InspectorAgent.cpp:
        (WebCore::PostWorkerNotificationToFrontendTask::create): Use adoptPtr.
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::addMessageToConsole): Use adoptPtr.
        (WebCore::InspectorConsoleAgent::didReceiveResponse): Use adoptPtr.
        (WebCore::InspectorConsoleAgent::didFailLoading): Use adoptPtr.
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::connectFrontend): Use adoptPtr.
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::didInvalidateStyleAttr): Use adoptPtr.
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::InspectorResourceAgent): Use adoptPtr.
        * page/FrameActionScheduler.cpp:
        (WebCore::FrameActionScheduler::scheduleEvent): Use adoptPtr.
        * platform/graphics/ShadowBlur.cpp:
        (WebCore::ScratchBuffer::clearScratchBuffer): Use nullptr.
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayer::create): Use adoptPtr.
        (WebCore::GraphicsLayerCA::ensureCloneLayers): Use adoptPtr.
        (WebCore::GraphicsLayerCA::removeCloneLayers): Use nullptr.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::setMaxMarginBeforeValues): Use adoptPtr.
        (WebCore::RenderBlock::setMaxMarginAfterValues): Use adoptPtr.
        (WebCore::RenderBlock::setPaginationStrut): Use adoptPtr.
        (WebCore::RenderBlock::setPageLogicalOffset): Use adoptPtr.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::destroyGraphicsLayer): Use nullptr.
        (WebCore::RenderLayerBacking::updateClippingLayers): Use nullptr.
        (WebCore::RenderLayerBacking::updateForegroundLayer): Use nullptr.
        (WebCore::RenderLayerBacking::updateMaskLayer): Use nullptr.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateOverflowControlsLayers): Use nullptr.
        (WebCore::RenderLayerCompositor::ensureRootPlatformLayer): Use nullptr.
        (WebCore::RenderLayerCompositor::destroyRootPlatformLayer): Use nullptr.
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData): Removed
        explicit initializations of OwnPtr members to 0. Use adoptPtr.
        * workers/SharedWorkerContext.cpp:
        (WebCore::createConnectEvent): Use adoptPtr.
        * workers/Worker.cpp:
        (WebCore::Worker::notifyFinished): Use nullptr.

2011-04-27  Enrica Casucci  <enrica@apple.com>

        Reviewed by Darin Adler.

        REGRESSION (r84311): Copy should preserve background color if specified in the body only if the entire content is selected.
        https://bugs.webkit.org/show_bug.cgi?id=59251
        <rdar://problem/9327044>

        When we are looking for wrapping elements that are presentational, we should
        include elements that have a non transparent background color only if they
        are not blocks.

        Test: editing/pasteboard/do-not-copy-body-color.html

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

2011-04-20  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Antti Koivisto.

        Teach sub-selector chains about shadow descendants
        https://bugs.webkit.org/show_bug.cgi?id=58342

        The primary change is to the logic of parsing specifiers:
        1) The shadow descendant selectors (those specifiers that are unknown
        pseudo element selectors) are always kept at the top of the chain.
        2) The sub-selectors after shadow descendant selectors are stashed right
        behind the sub-selector, but not at the end of the chain.
        3) Other sub-selectors are appended at the end of the chain.

        * css/CSSGrammar.y: Changed specifier_list collection to use new
            CSSParser::updateSpecifier helper.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::updateSpecifiersWithElementName): Added logic to
            look for the last ShadowDescendant relation in the chain of selectors,
            because the next selector after it is the one that should get the
            element name.
        (WebCore::CSSParser::updateSpecifiers): Moved and modified the logic from
            CSSGrammar.y. The new logic adjusts the selector chain to allow
            shadow descendant selectors have sub-selectors (and have multiple shadow
            descendants in the chain).
        * css/CSSParser.h: Added decl.
        * css/CSSParserValues.cpp:
        (WebCore::CSSParserSelector::insertTagHistory): Added.
        (WebCore::CSSParserSelector::appendTagHistory): Aded.
        * css/CSSParserValues.h: Added decls.
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector): Added
            shadow descendant selector match check, since now there could be many
            of them in the selector chain.

2011-04-20  Adrienne Walker  <enne@google.com>

        Reviewed by Kenneth Russell.

        [chromium] Fix incorrect scissor rect for layers that render into a rendersurface
        https://bugs.webkit.org/show_bug.cgi?id=59020

        mapRect is the incorrect transform here.  The parent scissor rect
        needs to be projected into layer space instead.

        Test: compositing/flat-with-transformed-child.html

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::updatePropertiesAndRenderSurfaces):

2011-04-27  Pratik Solanki  <psolanki@apple.com>

        Reviewed by Antti Koivisto.

        Part of WebCore should use CFNetwork-based loader on Mac
        https://bugs.webkit.org/show_bug.cgi?id=51836

        * Configurations/WebCore.xcconfig: Add location of CFNetwork.framework.
        * platform/mac/SoftLinking.h:
        * platform/network/cf/CookieJarCFNet.cpp: Soft-link in CFNetwork functions on Mac.

2011-04-27  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Antti Koivisto.

        Cleanup CSSStyleApplyProperty.cpp
        https://bugs.webkit.org/show_bug.cgi?id=59623

        As first step remove ApplyPropertyColorBase, merge it with ApplyPropertyColor, there's no need for two seperated classes.
        Use typedefs instead of repating the function pointer declarations in a few places.

        * css/CSSStyleApplyProperty.cpp:
        (WebCore::ApplyPropertyDefault::ApplyPropertyDefault):
        (WebCore::ApplyPropertyColor::ApplyPropertyColor):
        (WebCore::ApplyPropertyColor::applyInheritValue):
        (WebCore::ApplyPropertyColor::applyInitialValue):
        (WebCore::ApplyPropertyColor::applyValue):
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):

2011-04-27  Dan Bernstein  <mitz@apple.com>

        Reviewed by Anders Carlsson.

        <rdar://problem/9335973> REGRESSION (r84341): Buttons in the Mac App store are rendered incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=59622

        Test: fast/borders/border-image-trumps-radius.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::determineBackgroundBleedAvoidance): If there is a renderable, loaded border
        image, then border radius is ignored, so no bleed avoidance is needed.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::borderImageIsLoadedAndCanBeRendered): Added. Moved some logic here from...
        (WebCore::RenderObject::mustRepaintBackgroundOrBorder): ...here.
        * rendering/RenderObject.h:

2011-02-03  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] editing/pasteboard/copy-standalone-image.html fails
        https://bugs.webkit.org/show_bug.cgi?id=53645

        When writing an image to the clipboard, also write the URL and title
        into the markup and URL portion. This change also abstracts a helper
        imageToMarkup into markup.{cpp/h} from several different locations
        throughout the platform layer.

        * editing/markup.h: Added new function definition.
        * editing/markup.cpp:
        (WebCore::imageToMarkup): Add this function which turns an image URL 
        and element into some markup representing that image, while preserving
        non-src attributes.
        * platform/chromium/ClipboardChromium.cpp: Move the imageToMarkup helper
        to markup.cpp.
        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::getURLForImageNode): Add this helper which gets the appropriate
        image URL for a variety of image tag types.
        (WebCore::Pasteboard::writeImage): Write the image URL and title to the
        markup and URL portions of the clipboard. This will ensure that images
        paste properly back into WebKit.
        * platform/win/ClipboardWin.cpp: Remove the imageToMarkup helper and the
        one from markup.h

2011-04-27  Steve Block  <steveblock@google.com>

        Reviewed by David Levin.

        Remove Android build system
        https://bugs.webkit.org/show_bug.cgi?id=48111

        This is to avoid the maintenance burden until the Android port is
        fully upstreamed.

        No new tests, build change only.

        * Android.derived.jscbindings.mk: Removed.
        * Android.derived.mk: Removed.
        * Android.derived.v8bindings.mk: Removed.
        * Android.jscbindings.mk: Removed.
        * Android.mk: Removed.
        * Android.v8bindings.mk: Removed.

2011-04-27  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Somehow about:blank gets into the icon database
        https://bugs.webkit.org/show_bug.cgi?id=58067
        rdar://problem/6751446

        Implemented the policy Brady suggested, where only http and https URLs can
        be associated with and icon, guarding both on the way in to the database,
        and on the way out.

        * loader/icon/IconDatabase.cpp:
        (WebCore::pageCanHaveIcon): Added.
        (WebCore::IconDatabase::synchronousIconForPageURL): Call pageCanHaveIcon
        instead of just checking for an empty URL.
        (WebCore::IconDatabase::synchronousIconURLForPageURL): Ditto.
        (WebCore::IconDatabase::retainIconForPageURL): Ditto.
        (WebCore::IconDatabase::releaseIconForPageURL): Ditto.
        (WebCore::IconDatabase::setIconURLForPageURL): Ditto.
        (WebCore::IconDatabase::getOrCreatePageURLRecord): Ditto.
        (WebCore::IconDatabase::importIconURLForPageURL): Broke assertion into
        two separate assertions and added a third.
        (WebCore::IconDatabase::performURLImport): Call pageCanHaveIcon.

        * platform/KURL.cpp: Sorted includes. Moved a FIXME to the top of the file.
        (WebCore::isLetterMatchIgnoringCase): Renamed matchLetter to this name,
        overloaded it to work on both UChar and char, and added an assertion to it.
        Also moved this to the top of the file and made the UChar version usable
        in the shared code used even by Google.
        (WebCore::KURL::invalidate): Updated for name change.
        (WebCore::KURL::protocolIs): Use isLetterMatchIgnoringCase instead of
        toASCIILower since it's faster.
        (WebCore::KURL::parse): Updated for name changes.
        (WebCore::protocolIs):Use isLetterMatchIgnoringCase instead of toASCIILower
        since it's faster.
        (WebCore::protocolIsInHTTPFamily): Added.

        * platform/KURL.h: Tweaked formatting. Renamed protocolInHTTPFamily
        to protocolIsInHTTPFamily and added a version that works on a string.
        Kept the old name as an inline function so we don't have to rename
        all the cal sites now.

        * platform/KURLGoogle.cpp: Renamed as above.
        (WebCore::KURLGooglePrivate::KURLGooglePrivate): Updated for rename.
        (WebCore::KURLGooglePrivate::setUtf8): Ditto.
        (WebCore::KURLGooglePrivate::setAscii): Ditto.
        (WebCore::KURLGooglePrivate::initProtocolIsInHTTPFamily): Ditto.
        (WebCore::KURLGooglePrivate::copyTo): Ditto.
        (WebCore::KURL::KURL): Ditto.
        (WebCore::KURL::protocolIsInHTTPFamily): Ditto.
        (WebCore::KURL::invalidate): Ditto.
        * platform/KURLGooglePrivate.h: Ditto.

        * WebCore.exp.in: Updated for above changes.

2011-04-27  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: browser crash on evaluation of 'throw undefined'
        https://bugs.webkit.org/show_bug.cgi?id=59611

        Test: inspector/console/console-eval-throw-undefined.html

        * inspector/InjectedScriptSource.js: use try/catch to protect from
        exception during conversion of another exception to string.

2011-04-27  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: clicking bookmarklet multiplies resources panel entries.
        https://bugs.webkit.org/show_bug.cgi?id=59590

        * inspector/front-end/ResourceTreeModel.js:
        (WebInspector.ResourceTreeModel):
        (WebInspector.ResourceTreeModel.prototype._processCachedResources):
        (WebInspector.ResourceTreeModel.prototype._frameNavigated):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype._populateResourceTree):
        (WebInspector.FrameTreeElement):
        (WebInspector.FrameTreeElement.prototype.appendResource):
        * inspector/front-end/inspector.js:
        (WebInspector.frontendReused):

2011-04-27  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: opening bookmarklet disconnects DOM agent.
        https://bugs.webkit.org/show_bug.cgi?id=59588

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::setDocument):

2011-04-27  Hans Wennborg  <hans@chromium.org>

        Reviewed by Tony Gentilcore.

        IndexedDB: Fix compiler warnings about uninitialized variables
        https://bugs.webkit.org/show_bug.cgi?id=59599

        Build fix. No new tests.

        * storage/IDBLevelDBBackingStore.cpp:
        (WebCore::getNewObjectStoreId):
        (WebCore::getNewIndexId):

2011-04-26  Hans Wennborg  <hans@chromium.org>

        Reviewed by Tony Gentilcore.

        IndexedDB: Move LevelDB key coding routines to separate file
        https://bugs.webkit.org/show_bug.cgi?id=59452

        Move all routines concerned with encoding, decoding and comparison of
        LevelDB keys from IDBLevelDBBackingStore.cpp to a separate file:
        IDBLevelDBCoding.cpp.

        This makes IDBLevelDBBackingStore.cpp easier to work with, and will
        allow for unit testing of the coding routines.

        No new functionality, no new tests.

        * WebCore.gypi:
        * storage/IDBLevelDBBackingStore.cpp:
        (WebCore::getInt):
        (WebCore::putInt):
        (WebCore::getString):
        (WebCore::putString):
        (WebCore::compareKeys):
        (WebCore::compareIndexKeys):
        (WebCore::Comparator::compare):
        (WebCore::setUpMetadata):
        (WebCore::IDBLevelDBBackingStore::extractIDBDatabaseMetaData):
        (WebCore::getNewDatabaseId):
        (WebCore::IDBLevelDBBackingStore::setIDBDatabaseMetaData):
        (WebCore::IDBLevelDBBackingStore::getObjectStores):
        (WebCore::getNewObjectStoreId):
        (WebCore::IDBLevelDBBackingStore::createObjectStore):
        (WebCore::IDBLevelDBBackingStore::deleteObjectStore):
        (WebCore::IDBLevelDBBackingStore::getObjectStoreRecord):
        (WebCore::getNewVersionNumber):
        (WebCore::IDBLevelDBBackingStore::putObjectStoreRecord):
        (WebCore::IDBLevelDBBackingStore::clearObjectStore):
        (WebCore::IDBLevelDBBackingStore::deleteObjectStoreRecord):
        (WebCore::IDBLevelDBBackingStore::nextAutoIncrementNumber):
        (WebCore::IDBLevelDBBackingStore::keyExistsInObjectStore):
        (WebCore::IDBLevelDBBackingStore::forEachObjectStoreRecord):
        (WebCore::IDBLevelDBBackingStore::getIndexes):
        (WebCore::getNewIndexId):
        (WebCore::IDBLevelDBBackingStore::createIndex):
        (WebCore::IDBLevelDBBackingStore::putIndexDataForRecord):
        (WebCore::versionExists):
        (WebCore::IDBLevelDBBackingStore::getPrimaryKeyViaIndex):
        (WebCore::IDBLevelDBBackingStore::keyExistsInIndex):
        (WebCore::IDBLevelDBBackingStore::openObjectStoreCursor):
        (WebCore::IDBLevelDBBackingStore::openIndexKeyCursor):
        (WebCore::IDBLevelDBBackingStore::openIndexCursor):
        * storage/IDBLevelDBCoding.cpp: Added.
        (WebCore::IDBLevelDBCoding::encodeByte):
        (WebCore::IDBLevelDBCoding::maxIDBKey):
        (WebCore::IDBLevelDBCoding::minIDBKey):
        (WebCore::IDBLevelDBCoding::encodeInt):
        (WebCore::IDBLevelDBCoding::decodeInt):
        (WebCore::IDBLevelDBCoding::encodeVarInt):
        (WebCore::IDBLevelDBCoding::decodeVarInt):
        (WebCore::IDBLevelDBCoding::encodeString):
        (WebCore::IDBLevelDBCoding::decodeString):
        (WebCore::IDBLevelDBCoding::encodeStringWithLength):
        (WebCore::IDBLevelDBCoding::decodeStringWithLength):
        (WebCore::IDBLevelDBCoding::encodeDouble):
        (WebCore::IDBLevelDBCoding::decodeDouble):
        (WebCore::IDBLevelDBCoding::encodeIDBKey):
        (WebCore::IDBLevelDBCoding::decodeIDBKey):
        (WebCore::IDBLevelDBCoding::extractEncodedIDBKey):
        (WebCore::IDBLevelDBCoding::compareEncodedIDBKeys):
        (WebCore::IDBLevelDBCoding::compare):
        (WebCore::IDBLevelDBCoding::KeyPrefix::KeyPrefix):
        (WebCore::IDBLevelDBCoding::KeyPrefix::decode):
        (WebCore::IDBLevelDBCoding::KeyPrefix::encode):
        (WebCore::IDBLevelDBCoding::KeyPrefix::compare):
        (WebCore::IDBLevelDBCoding::KeyPrefix::type):
        (WebCore::IDBLevelDBCoding::SchemaVersionKey::encode):
        (WebCore::IDBLevelDBCoding::MaxDatabaseIdKey::encode):
        (WebCore::IDBLevelDBCoding::DatabaseFreeListKey::DatabaseFreeListKey):
        (WebCore::IDBLevelDBCoding::DatabaseFreeListKey::decode):
        (WebCore::IDBLevelDBCoding::DatabaseFreeListKey::encode):
        (WebCore::IDBLevelDBCoding::DatabaseFreeListKey::databaseId):
        (WebCore::IDBLevelDBCoding::DatabaseFreeListKey::compare):
        (WebCore::IDBLevelDBCoding::DatabaseNameKey::decode):
        (WebCore::IDBLevelDBCoding::DatabaseNameKey::encode):
        (WebCore::IDBLevelDBCoding::DatabaseNameKey::compare):
        (WebCore::IDBLevelDBCoding::DatabaseMetaDataKey::encode):
        (WebCore::IDBLevelDBCoding::ObjectStoreMetaDataKey::ObjectStoreMetaDataKey):
        (WebCore::IDBLevelDBCoding::ObjectStoreMetaDataKey::decode):
        (WebCore::IDBLevelDBCoding::ObjectStoreMetaDataKey::encode):
        (WebCore::IDBLevelDBCoding::ObjectStoreMetaDataKey::objectStoreId):
        (WebCore::IDBLevelDBCoding::ObjectStoreMetaDataKey::metaDataType):
        (WebCore::IDBLevelDBCoding::ObjectStoreMetaDataKey::compare):
        (WebCore::IDBLevelDBCoding::IndexMetaDataKey::IndexMetaDataKey):
        (WebCore::IDBLevelDBCoding::IndexMetaDataKey::decode):
        (WebCore::IDBLevelDBCoding::IndexMetaDataKey::encode):
        (WebCore::IDBLevelDBCoding::IndexMetaDataKey::compare):
        (WebCore::IDBLevelDBCoding::IndexMetaDataKey::indexId):
        (WebCore::IDBLevelDBCoding::ObjectStoreFreeListKey::ObjectStoreFreeListKey):
        (WebCore::IDBLevelDBCoding::ObjectStoreFreeListKey::decode):
        (WebCore::IDBLevelDBCoding::ObjectStoreFreeListKey::encode):
        (WebCore::IDBLevelDBCoding::ObjectStoreFreeListKey::objectStoreId):
        (WebCore::IDBLevelDBCoding::ObjectStoreFreeListKey::compare):
        (WebCore::IDBLevelDBCoding::IndexFreeListKey::IndexFreeListKey):
        (WebCore::IDBLevelDBCoding::IndexFreeListKey::decode):
        (WebCore::IDBLevelDBCoding::IndexFreeListKey::encode):
        (WebCore::IDBLevelDBCoding::IndexFreeListKey::compare):
        (WebCore::IDBLevelDBCoding::IndexFreeListKey::objectStoreId):
        (WebCore::IDBLevelDBCoding::IndexFreeListKey::indexId):
        (WebCore::IDBLevelDBCoding::ObjectStoreNamesKey::decode):
        (WebCore::IDBLevelDBCoding::ObjectStoreNamesKey::encode):
        (WebCore::IDBLevelDBCoding::ObjectStoreNamesKey::compare):
        (WebCore::IDBLevelDBCoding::IndexNamesKey::IndexNamesKey):
        (WebCore::IDBLevelDBCoding::IndexNamesKey::decode):
        (WebCore::IDBLevelDBCoding::IndexNamesKey::encode):
        (WebCore::IDBLevelDBCoding::IndexNamesKey::compare):
        (WebCore::IDBLevelDBCoding::ObjectStoreDataKey::decode):
        (WebCore::IDBLevelDBCoding::ObjectStoreDataKey::encode):
        (WebCore::IDBLevelDBCoding::ObjectStoreDataKey::compare):
        (WebCore::IDBLevelDBCoding::ObjectStoreDataKey::userKey):
        (WebCore::IDBLevelDBCoding::ExistsEntryKey::decode):
        (WebCore::IDBLevelDBCoding::ExistsEntryKey::encode):
        (WebCore::IDBLevelDBCoding::ExistsEntryKey::compare):
        (WebCore::IDBLevelDBCoding::ExistsEntryKey::userKey):
        (WebCore::IDBLevelDBCoding::IndexDataKey::IndexDataKey):
        (WebCore::IDBLevelDBCoding::IndexDataKey::decode):
        (WebCore::IDBLevelDBCoding::IndexDataKey::encode):
        (WebCore::IDBLevelDBCoding::IndexDataKey::encodeMaxKey):
        (WebCore::IDBLevelDBCoding::IndexDataKey::compare):
        (WebCore::IDBLevelDBCoding::IndexDataKey::databaseId):
        (WebCore::IDBLevelDBCoding::IndexDataKey::objectStoreId):
        (WebCore::IDBLevelDBCoding::IndexDataKey::indexId):
        (WebCore::IDBLevelDBCoding::IndexDataKey::userKey):
        * storage/IDBLevelDBCoding.h: Added.
        (WebCore::IDBLevelDBCoding::DatabaseNameKey::origin):
        (WebCore::IDBLevelDBCoding::DatabaseNameKey::databaseName):
        (WebCore::IDBLevelDBCoding::IndexMetaDataKey::metaDataType):
        (WebCore::IDBLevelDBCoding::ObjectStoreNamesKey::objectStoreName):
        (WebCore::IDBLevelDBCoding::IndexNamesKey::indexName):

2011-04-27  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: expose exception details when script is paused on exception
        https://bugs.webkit.org/show_bug.cgi?id=59591

        When script is paused on an exception, the exception value is added as <exception>
        property in the local scope and the breakpoint details message says
        "Paused on excepion: '<exception to strin value>'."

        * English.lproj/localizedStrings.js:
        * inspector/front-end/ScopeChainSidebarPane.js:
        (WebInspector.ScopeChainSidebarPane.prototype.update):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._debuggerPaused.else.didGetSourceLocation):
        (WebInspector.ScriptsPanel.prototype._debuggerPaused):

2011-04-26  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [protocol] Paused event should expose exception value that caused it
        https://bugs.webkit.org/show_bug.cgi?id=58996

        Debug.pause event now contains an optional reference to the exception
        object in case script execution is paused on a JavaScript exception.

        Also JavaScript call frames are passed directly into the injected script when
        we need to wrap them for passing to the front-end. This change breaks cyclic
        dependency ScriptDebugServer->InspectorDebuggerAgent->InjectedScript->InjectedScriptHost->ScriptDebugServer

        * bindings/js/JSInjectedScriptHostCustom.cpp:
        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::dispatchDidPause):
        * bindings/js/ScriptDebugServer.h:
        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::breakProgram):
        (WebCore::ScriptDebugServer::editScriptSource):
        (WebCore::ScriptDebugServer::breakProgramCallback):
        (WebCore::ScriptDebugServer::handleV8DebugEvent):
        * bindings/v8/ScriptDebugServer.h:
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::evaluateOnCallFrame):
        (WebCore::InjectedScript::wrapCallFrames):
        * inspector/InjectedScript.h:
        * inspector/InjectedScriptHost.cpp:
        * inspector/InjectedScriptHost.h:
        (WebCore::InjectedScriptHost::init):
        * inspector/InjectedScriptHost.idl:
        * inspector/InjectedScriptSource.js:
        (.):
        * inspector/Inspector.json:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::evaluateOnCallFrame):
        (WebCore::InspectorDebuggerAgent::currentCallFrames):
        (WebCore::InspectorDebuggerAgent::wrapCallFrames):
        (WebCore::InspectorDebuggerAgent::didPause):
        (WebCore::InspectorDebuggerAgent::didContinue):
        (WebCore::InspectorDebuggerAgent::clear):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/ScriptDebugListener.h:
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::WorkerInspectorController):

2011-04-27  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: implement incremental CSS editing in the structure view.
        https://bugs.webkit.org/show_bug.cgi?id=59455

        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertyTreeElement.prototype):

2011-04-27  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Eric Seidel.

        Frame.h shouldn't include Document.h
        https://bugs.webkit.org/show_bug.cgi?id=59560

        Frame can use a forward-declared Document if we move
        Frame::displayStringModifiedByEncoding's implementation out of the
        header.
                                Size  #includes  Size * #includes
        Before: page/Frame.h:   0.746       653           487.138
                dom/Document.h: 0.220      1306           287.320
        
        After:  page/Frame.h:   0.646       653           421.838
                dom/Document.h: 0.220      1189           261.580

        * WebCore.exp.in:
        * bindings/ScriptControllerBase.cpp:
        * bindings/generic/BindingSecurityBase.cpp:
        * bindings/v8/V8Proxy.cpp:
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        * dom/CharacterData.cpp:
        * dom/UserTypingGestureIndicator.cpp:
        * editing/chromium/SelectionControllerChromium.cpp:
        * inspector/InspectorDOMStorageResource.cpp:
        * inspector/InspectorInstrumentation.h:
        * loader/PingLoader.cpp:
        * loader/SubresourceLoader.cpp:
        * loader/appcache/DOMApplicationCache.cpp:
        * loader/cache/CachedResourceRequest.cpp:
        * page/Frame.cpp:
        (WebCore::Frame::displayStringModifiedByEncoding):
        * page/Frame.h:
        * page/Geolocation.cpp:
        * page/Location.cpp:
        * page/Navigator.cpp:
        * page/PageGroupLoadDeferrer.cpp:
        * page/PerformanceTiming.cpp:
        * xml/XSLTProcessorLibxslt.cpp:

2011-04-27  James Robinson  <jamesr@chromium.org>

        Reviewed by Eric Seidel.

        Fix OwnPtr strict errors in RenderStyle and make StyleRareInheritedData::textShadow an OwnPtr
        https://bugs.webkit.org/show_bug.cgi?id=59377

        This cleans up some strict OwnPtr<> violations around text and box shadow data.  ShadowData's linked list data
        structure now uses OwnPtr<>s to manage memory - each entry in the list has ownership of the next ShadowData.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * page/animation/AnimationBase.cpp:
        (WebCore::blendFunc):
        (WebCore::PropertyWrapperShadow::PropertyWrapperShadow):
        (WebCore::PropertyWrapperShadow::blend):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::setTextShadow):
        (WebCore::RenderStyle::setBoxShadow):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::textShadow):
        * rendering/style/ShadowData.cpp:
        (WebCore::ShadowData::ShadowData):
        * rendering/style/ShadowData.h:
        (WebCore::ShadowData::ShadowData):
        (WebCore::ShadowData::next):
        (WebCore::ShadowData::setNext):
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::~StyleRareInheritedData):
        * rendering/style/StyleRareInheritedData.h:
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):

2011-04-26  David Levin  <levin@chromium.org>

        Reviewed by Eric Seidel.

        Fix some strict PassOwnPtr issues in WebCore.
        https://bugs.webkit.org/show_bug.cgi?id=59563

        * css/SVGCSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applySVGProperty):
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::create):
        (WebCore::WebGLRenderingContext::~WebGLRenderingContext):
        * platform/text/TextCodecLatin1.cpp:
        (WebCore::newStreamingTextDecoderWindowsLatin1):
        * platform/text/TextCodecUTF16.cpp:
        (WebCore::newStreamingTextDecoderUTF16LE):
        (WebCore::newStreamingTextDecoderUTF16BE):
        * platform/text/TextCodecUserDefined.cpp:
        (WebCore::newStreamingTextDecoderUserDefined):
        * platform/text/mac/TextCodecMac.cpp:
        (WebCore::newTextCodecMac):
        * workers/Worker.cpp:
        (WebCore::Worker::notifyFinished):

2011-04-26  Justin Novosad  <junov@chromium.org>

        Reviewed by Kenneth Russell.

        [Chromium] Expose skia gpu canvas rendering as a runtime flag
        https://bugs.webkit.org/show_bug.cgi?id=58683
        Replace the SKIA_GPU compile flag by the pre-existing
        acceleratedDrawingEnabled flag. Most code changes are trivial:
        compile-time conditionals on SKIA_GPU were either replaced with
        a run-time check, or a compile time check on USE(SKIA) 

        No new tests. Covered by existing tests.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setGlobalCompositeOperation):
        * page/Page.cpp:
        (WebCore::Page::sharedGraphicsContext3D):
        Added check for the acceleratedDrawing flag.
        * platform/graphics/chromium/DrawingBufferChromium.cpp:
        (WebCore::DrawingBuffer::DrawingBuffer):
        (WebCore::DrawingBuffer::publishToPlatformLayer):
        * platform/graphics/gpu/DrawingBuffer.h:
        * platform/graphics/gpu/SharedGraphicsContext3D.cpp:
        (WebCore::SharedGraphicsContext3D::create):
        On Skia builds, this methos now receives a bool arg to turn on
        GPU-accelerated skia rendering
        (WebCore::SharedGraphicsContext3D::SharedGraphicsContext3D):
        (WebCore::SharedGraphicsContext3D::~SharedGraphicsContext3D):
        (WebCore::SharedGraphicsContext3D::grContext):
        * platform/graphics/gpu/SharedGraphicsContext3D.h:
        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::computeResamplingMode):
        (WebCore::paintSkBitmap):
        (WebCore::Image::drawPattern):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::PlatformContextSkia):
        (WebCore::PlatformContextSkia::~PlatformContextSkia):
        (WebCore::PlatformContextSkia::isNativeFontRenderingAllowed):
        (WebCore::PlatformContextSkia::setSharedGraphicsContext3D):
        (WebCore::PlatformContextSkia::prepareForSoftwareDraw):
        (WebCore::PlatformContextSkia::prepareForHardwareDraw):
        (WebCore::PlatformContextSkia::syncSoftwareCanvas):
        (WebCore::PlatformContextSkia::markDirtyRect):
        * platform/graphics/skia/PlatformContextSkia.h:
        (WebCore::PlatformContextSkia::accelerationMode):
        (WebCore::PlatformContextSkia::useGPU):
        (WebCore::PlatformContextSkia::useSkiaGPU):

2011-04-26  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: restore inspector test disabled in r84913.

        Test: http/tests/inspector-enabled/dom-storage-open.html

        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::clearFrontend):

2011-04-26  Kenichi Ishibashi  <bashi@chromium.org>

        Reviewed by Tony Chang.

        [Chromium] Vertical positions are off for some Arabic glyphs on Linux
        https://bugs.webkit.org/show_bug.cgi?id=59182

        Use vertical offsets of the shaping results.

        Test: platform/chromium-linux/fast/text/international/arabic-vertical-offset.html

        * platform/graphics/chromium/ComplexTextControllerLinux.cpp:
        (WebCore::ComplexTextController::ComplexTextController):
        Added initialization of m_startingY.
        (WebCore::ComplexTextController::nextScriptRun):
        Followed the change in handling positions.
        (WebCore::ComplexTextController::deleteGlyphArrays): Ditto.
        (WebCore::ComplexTextController::createGlyphArrays): Ditto.
        (WebCore::ComplexTextController::resetGlyphArrays): Ditto.
        (WebCore::ComplexTextController::setGlyphPositions):
        Changed to use vertical offsets as same as horizontal offsets.
        * platform/graphics/chromium/ComplexTextControllerLinux.h:
        Removed m_xPositions and Added m_positions and m_startingY.
        (WebCore::ComplexTextController::positions): Added.
        * platform/graphics/chromium/FontLinux.cpp:
        Followed the change in ComplexTextController.
        (WebCore::Font::drawComplexText): Ditto.
        (WebCore::Font::floatWidthForComplexText): Ditto.
        (WebCore::glyphIndexForXPositionInScriptRun): Ditto.
        (WebCore::Font::offsetForPositionForComplexText): Ditto.
        (WebCore::Font::selectionRectForComplexText): Ditto.

2011-04-26  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Eric Seidel.

        Root element should establish a new block formatting context
        https://bugs.webkit.org/show_bug.cgi?id=54573

        Always expanding the root renderer to include overhanging floats.

        Test: fast/block/float/float-overhangs-root.html

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

2011-04-26  Dawit Alemayehu  <adawit@kde.org>

        Reviewed by Andreas Kling.

        [Qt] Improper rendering of <button> tag when it contains a <br>
        https://bugs.webkit.org/show_bug.cgi?id=50521

        Test: platform/qt/fast/forms/button-line-break.html

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::computeSizeBasedOnStyle):
        (WebCore::RenderThemeQt::setButtonPadding):

2011-04-26  James Robinson  <jamesr@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] Only reset tiles if the LayerRendererChromium is actually changing
        https://bugs.webkit.org/show_bug.cgi?id=59572

        http://trac.webkit.org/changeset/84981/ caused us to reset the tiles
        when LayerRendererChromium was set.  We set this pointer every frame
        and should only reset the tiles if the new LayerRendererChromium is
        different from the old one (indicating a context loss), not just reset
        on every frame.

        * platform/graphics/chromium/LayerTilerChromium.cpp:
        (WebCore::LayerTilerChromium::setLayerRenderer):
        * platform/graphics/chromium/LayerTilerChromium.h:

2011-04-26  Dinesh K Garg  <dineshg@codeaurora.org>

        Reviewed by Eric Seidel.

        beginElement broken by setAttribute
        https://bugs.webkit.org/show_bug.cgi?id=26019

        Test: svg/animations/animate-beginElementAt.svg

        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::attributeChanged):
        Reset the animation state here as the rest of the code reads it and would still
        think we are animating when we are not.

        * svg/animation/SVGSMILElement.h:
        (WebCore::SVGSMILElement::setInactive): Helper function to reset the state.

2011-04-26  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r84989.
        http://trac.webkit.org/changeset/84989
        https://bugs.webkit.org/show_bug.cgi?id=59566

        REGRESSION (r84989): Lots of vertical text tests failing on
        windows (Requested by weinig on #webkit).

        * platform/graphics/FontPlatformData.h:
        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::FontCache::getFontDataForCharacters):
        (WebCore::FontCache::createFontPlatformData):
        * platform/graphics/win/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/win/FontPlatformDataCGWin.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        * platform/graphics/win/FontPlatformDataWin.cpp:
        (WebCore::FontPlatformData::FontPlatformData):

2011-04-26  Sam Weinig  <sam@webkit.org>

        Reviewed by Eric Seidel.

        Try again:
            Remove JSDOMWrapperWithGlobalPointer now that all JSDOMWrappers have global objects
            https://bugs.webkit.org/show_bug.cgi?id=59310

        * bindings/js/JSDOMBinding.h:
        (WebCore::DOMConstructorObject::DOMConstructorObject):
        * bindings/js/JSDOMWrapper.h:
        (WebCore::JSDOMWrapper::globalObject):
        (WebCore::JSDOMWrapper::scriptExecutionContext):
        (WebCore::JSDOMWrapper::createStructure):
        (WebCore::JSDOMWrapper::JSDOMWrapper):
        * bindings/scripts/CodeGeneratorJS.pm:

2011-04-26  Sam Weinig  <sam@webkit.org>

        Reviewed by David Hyatt.

        Remove Datagrid from the tree
        https://bugs.webkit.org/show_bug.cgi?id=59543

        * Android.derived.jscbindings.mk:
        * Android.derived.v8bindings.mk:
        * Android.jscbindings.mk:
        * Android.v8bindings.mk:
        * CMakeLists.txt:
        * CodeGenerators.pri:
        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * UseJSC.cmake:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSDataGridColumnListCustom.cpp: Removed.
        * bindings/js/JSDataGridDataSource.cpp: Removed.
        * bindings/js/JSDataGridDataSource.h: Removed.
        * bindings/js/JSHTMLDataGridElementCustom.cpp: Removed.
        * bindings/v8/V8DataGridDataSource.cpp: Removed.
        * bindings/v8/V8DataGridDataSource.h: Removed.
        * bindings/v8/custom/V8DataGridColumnListCustom.cpp: Removed.
        * bindings/v8/custom/V8HTMLDataGridElementCustom.cpp: Removed.
        * css/CSSStyleSelector.cpp:
        * css/CSSStyleSelector.h:
        * css/html.css:
        (input, textarea, keygen, select, button, isindex):
        (select:disabled, keygen:disabled, optgroup:disabled, option:disabled):
        * editing/htmlediting.cpp:
        (WebCore::canHaveChildrenForEditing):
        * features.pri:
        * html/DOMDataGridDataSource.cpp: Removed.
        * html/DOMDataGridDataSource.h: Removed.
        * html/DataGridColumn.cpp: Removed.
        * html/DataGridColumn.h: Removed.
        * html/DataGridColumn.idl: Removed.
        * html/DataGridColumnList.cpp: Removed.
        * html/DataGridColumnList.h: Removed.
        * html/DataGridColumnList.idl: Removed.
        * html/DataGridDataSource.h: Removed.
        * html/HTMLDataGridCellElement.cpp: Removed.
        * html/HTMLDataGridCellElement.h: Removed.
        * html/HTMLDataGridCellElement.idl: Removed.
        * html/HTMLDataGridColElement.cpp: Removed.
        * html/HTMLDataGridColElement.h: Removed.
        * html/HTMLDataGridColElement.idl: Removed.
        * html/HTMLDataGridElement.cpp: Removed.
        * html/HTMLDataGridElement.h: Removed.
        * html/HTMLDataGridElement.idl: Removed.
        * html/HTMLDataGridRowElement.cpp: Removed.
        * html/HTMLDataGridRowElement.h: Removed.
        * html/HTMLDataGridRowElement.idl: Removed.
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::ieForbidsInsertHTML):
        * html/HTMLElementsAllInOne.cpp:
        * html/HTMLTagNames.in:
        * page/DOMWindow.idl:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::sizesToIntrinsicLogicalWidth):
        * rendering/RenderDataGrid.cpp: Removed.
        * rendering/RenderDataGrid.h: Removed.
        * rendering/RenderingAllInOne.cpp:

2011-04-26  Chun-Lung Huang  <alvincl.huang@gmail.com>

        Reviewed by Adele Peterson.

        On WebKit (Windows), glyphs in vertical text tests are rotated 90
        degrees clockwise.  https://bugs.webkit.org/show_bug.cgi?id=48459

        This platform dependent patch makes WebKit (Windows) show the
        vertical writing text correctly.  Job was done by adding a prefix '@'
        in front of the font family name (Windows Only). No new tests added.
        Some layout tests images:
        http://www.flickr.com/photos/burorly/sets/72157625585506341/

        * platform/graphics/FontPlatformData.h:
        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::FontCache::getFontDataForCharacters):
        (WebCore::FontCache::createFontPlatformData):
        * platform/graphics/win/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/win/FontPlatformDataCGWin.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        * platform/graphics/win/FontPlatformDataWin.cpp:
        (WebCore::FontPlatformData::FontPlatformData):

2011-04-26  Jer Noble  <jer.noble@apple.com>

        Reviewed by Brady Eidson.

        HTML5 video fullscreen transition causes an audio stutter
        https://bugs.webkit.org/show_bug.cgi?id=59544

        AVFoundation will momentarily stutter when you disconnect a AVPlayerLayer 
        from its AVPlayer.  Since you shouldn't necessarily have to destroy the
        layer to render it invisible, instead just set the layer as hidden.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::setVisible): Call through to platformSetVisible().
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformSetVisible): Added.

2011-04-26  Christian Dywan  <christian@lanedo.com>

        Reviewed by Eric Seidel.

        Extra separator after Select All in context menu
        https://bugs.webkit.org/show_bug.cgi?id=54092

        * page/ContextMenuController.cpp: Move separator to non-GTK+
            port guards since it is for the spelling options menu
            which the GTK+ port doesn't use.

2011-04-26  James Robinson  <jamesr@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] Clear out LayerTilerChromium's tiles on lost context
        https://bugs.webkit.org/show_bug.cgi?id=59233

        Clears out the LayerTilerChromium's tile set when the LayerRendererChromium is reset.  In this case the tiles are
        no longer valid since they exist in the previous LayerRendererChromium.

        Will be tested by a chrome test since we don't have any way to exercise the context lost case in layout tests.

        * platform/graphics/chromium/LayerTilerChromium.h:
        (WebCore::LayerTilerChromium::setLayerRenderer):

2011-04-26  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Dirk Schulze.

        [GTK] Flash in divs with overflow: auto is not positioned and clipped properly
        https://bugs.webkit.org/show_bug.cgi?id=57644

        Manual test: plugins/windowed-in-iframe-2.html

        * manual-tests/plugins/windowed-in-iframe-2.html: Added.
        * platform/gtk/WidgetGtk.cpp:
        (WebCore::Widget::setFrameRect): Like the Qt port, we notify the widget via frameRectsChanged.
        * plugins/PluginView.h: Added helper method to set the allocation and clip.
        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::setNPWindowIfNeeded):Call the helper method instead of setting
        the allocation immediately. Bring this method into sync with the implementation in
        the Qt port.
        (WebCore::PluginView::updateWidgetAllocationAndClip): Added.
        (WebCore::PluginView::plugAddedCallback): Call the new helper method.

2011-04-26  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Eric Seidel.

        [GTK]  fast/block/float/overhanging-tall-block.html crashes in the bots
        https://bugs.webkit.org/show_bug.cgi?id=58818

        Prevent allocating scratch buffers larger than the target GdkDrawable
        when creating a WidgetRenderingContext. This prevents incredibly large
        widgets from crashing the X Server. This change also allowed greatly
        simplifying the way that the painting offset is calculated.

        * platform/gtk/WidgetRenderingContext.cpp:
        (WebCore::WidgetRenderingContext::WidgetRenderingContext): Never allocate a pixmap
        larger than the target GdkDrawable.
        (WebCore::WidgetRenderingContext::~WidgetRenderingContext): Calculate the offset of the
        blit by looking at the location of the target rect itself, rather than delaying the
        calculation up to this point.
        (WebCore::WidgetRenderingContext::calculateClipRect): Added.
        (WebCore::WidgetRenderingContext::gtkPaintBox): Use the new calculateClipRectHelper.
        (WebCore::WidgetRenderingContext::gtkPaintFlatBox): Ditto.
        (WebCore::WidgetRenderingContext::gtkPaintFocus): Ditto.
        (WebCore::WidgetRenderingContext::gtkPaintSlider): Ditto.
        (WebCore::WidgetRenderingContext::gtkPaintCheck): Ditto.
        (WebCore::WidgetRenderingContext::gtkPaintOption): Ditto.
        (WebCore::WidgetRenderingContext::gtkPaintShadow): Ditto.
        (WebCore::WidgetRenderingContext::gtkPaintArrow): Ditto.
        (WebCore::WidgetRenderingContext::gtkPaintVLine): Ditto.
        * platform/gtk/WidgetRenderingContext.h: Remove some now unused members. Add
        a member to store the IntSize mapping from the coordinates of the target to the coordinates
        of the scratch buffer.

2011-04-26  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Barth.

        Respect charset in handleDataURL
        https://bugs.webkit.org/show_bug.cgi?id=47746

        Original patch by Kwang Yul Seo <skyul@company100.net>

        We must use TextEncoding(charset) to encode data URL again. Otherwise TextEncoding::encode()
        returns an empty string because encoding name is not specified.

        Also use "US-ASCII" as fallback charset as extractCharsetFromMediaType can be empty.

        This change fixes over 130 layout tests when running GTK port with cURL network backend.

        * platform/network/DataURL.cpp:
        (WebCore::handleDataURL):

2011-04-26  Anders Carlsson  <andersca@apple.com>

        Fix clang++ build.

        You can never have too many casts!

        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper position]):
        * editing/mac/SelectionControllerMac.mm:
        (WebCore::accessibilityConvertScreenRect):

2011-04-26  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Fix web audio build on mac port
        https://bugs.webkit.org/show_bug.cgi?id=59355

        No new tests since audio API is not yet implemented.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSAudioContextCustom.cpp:
        (WebCore::JSAudioContext::visitChildren):
        * bindings/js/JSJavaScriptAudioNodeCustom.cpp:
        (WebCore::JSJavaScriptAudioNode::visitChildren):
        * webaudio/AudioContext.idl:

2011-04-26  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Add FFTFrame implementation for FFmpeg
        https://bugs.webkit.org/show_bug.cgi?id=59408

        No new tests since audio API is not yet implemented.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * platform/audio/FFTFrame.h:
        * platform/audio/FFTFrameStub.cpp:
        * platform/audio/ffmpeg: Added.
        * platform/audio/ffmpeg/FFTFrameFFMPEG.cpp: Added.
        (WebCore::FFTFrame::FFTFrame):
        (WebCore::FFTFrame::initialize):
        (WebCore::FFTFrame::cleanup):
        (WebCore::FFTFrame::~FFTFrame):
        (WebCore::FFTFrame::multiply):
        (WebCore::FFTFrame::doFFT):
        (WebCore::FFTFrame::doInverseFFT):
        (WebCore::FFTFrame::realData):
        (WebCore::FFTFrame::imagData):
        (WebCore::FFTFrame::getUpToDateComplexData):
        (WebCore::FFTFrame::contextForSize):
        * platform/audio/mac/FFTFrameMac.cpp:
        * webaudio/ConvolverNode.cpp:

2011-04-26  Jeff Miller  <jeffm@apple.com>

        Add a newline at the end of SVGFEDropShadowElement.idl.

        * svg/SVGFEDropShadowElement.idl:

2011-04-26  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Eric Seidel.

        InlineBox.h shouldn't include RenderBR.h
        https://bugs.webkit.org/show_bug.cgi?id=59480

        Per bug 59348 RenderBR.h is a "top header" by include * size, because
        InlineBox.h includes it. There's no reason why it has to.

        * rendering/InlineBox.h:
        * rendering/InlineTextBox.cpp:
        * rendering/RenderBlock.h:

2011-04-26  Sam Weinig  <sam@webkit.org>

        Nope, roll out r84950 and r84952. Working on a laptop is clearly not something
        I should do.

        * bindings/js/JSDOMBinding.h:
        (WebCore::JSDOMWrapperWithGlobalPointer::globalObject):
        (WebCore::JSDOMWrapperWithGlobalPointer::scriptExecutionContext):
        (WebCore::JSDOMWrapperWithGlobalPointer::createStructure):
        (WebCore::JSDOMWrapperWithGlobalPointer::JSDOMWrapperWithGlobalPointer):
        (WebCore::DOMConstructorObject::DOMConstructorObject):
        * bindings/js/JSDOMWrapper.h:
        (WebCore::JSDOMWrapper::JSDOMWrapper):
        * bindings/scripts/CodeGeneratorJS.pm:

2011-04-26  Sam Weinig  <sam@webkit.org>

        Fix build.

        * bindings/js/JSDOMWrapper.h:
        (WebCore::JSDOMWrapper::globalObject):

2011-04-26  Sam Weinig  <sam@webkit.org>

        Roll r84945 back in with infinite recursion removed.

        * bindings/js/JSDOMBinding.h:
        (WebCore::DOMConstructorObject::DOMConstructorObject):
        * bindings/js/JSDOMWrapper.h:
        (WebCore::JSDOMWrapper::globalObject):
        (WebCore::JSDOMWrapper::scriptExecutionContext):
        (WebCore::JSDOMWrapper::createStructure):
        (WebCore::JSDOMWrapper::JSDOMWrapper):
        * bindings/scripts/CodeGeneratorJS.pm:

2011-04-26  Sam Weinig  <sam@webkit.org>

        Rollout previous patch. It broke stuff.

        * bindings/js/JSDOMBinding.h:
        (WebCore::JSDOMWrapperWithGlobalPointer::globalObject):
        (WebCore::JSDOMWrapperWithGlobalPointer::scriptExecutionContext):
        (WebCore::JSDOMWrapperWithGlobalPointer::createStructure):
        (WebCore::JSDOMWrapperWithGlobalPointer::JSDOMWrapperWithGlobalPointer):
        (WebCore::DOMConstructorObject::DOMConstructorObject):
        * bindings/js/JSDOMWrapper.h:
        (WebCore::JSDOMWrapper::JSDOMWrapper):
        * bindings/scripts/CodeGeneratorJS.pm:

2011-04-26  Sam Weinig  <sam@webkit.org>

        Reviewed by Maciej Stachowiak.

        Remove JSDOMWrapperWithGlobalPointer now that all JSDOMWrappers have global objects
        https://bugs.webkit.org/show_bug.cgi?id=59310

        * bindings/js/JSDOMBinding.h:
        (WebCore::DOMConstructorObject::DOMConstructorObject):
        * bindings/js/JSDOMWrapper.h:
        (WebCore::JSDOMWrapper::globalObject):
        (WebCore::JSDOMWrapper::scriptExecutionContext):
        (WebCore::JSDOMWrapper::createStructure):
        (WebCore::JSDOMWrapper::JSDOMWrapper):
        Merge JSDOMWrapperWithGlobalPointer with JSDOMWrapper.

        * bindings/scripts/CodeGeneratorJS.pm:
        Make JSDOMWrapper the base class.

2011-04-26  Dan Bernstein  <mitz@apple.com>

        Reviewed by Mark Rowe.

        Choose the compiler based on the Xcode version for Snow Leopard debug builds.

        * Configurations/Base.xcconfig:
        * Configurations/CompilerVersion.xcconfig: Added.

2011-04-26  Adrienne Walker  <enne@google.com>

        Reviewed by Geoffrey Garen.

        Use OwnArrayPtr<T> instead of OwnPtr<T*> in ScopeTracer
        https://bugs.webkit.org/show_bug.cgi?id=59469

        * platform/chromium/TraceEvent.h:
        (WebCore::internal::ScopeTracer::ScopeTracer):

2011-04-25  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Nixed special finalizer handling for WebCore strings
        https://bugs.webkit.org/show_bug.cgi?id=59425

        Not needed anymore, since weak handles have finalizers.

        * WebCore.exp.in: Exports!

        * bindings/js/DOMWrapperWorld.cpp:
        (WebCore::JSStringOwner::finalize):
        (WebCore::DOMWrapperWorld::DOMWrapperWorld): Use a weak handle finalizer,
        so we don't need special treatment anymore.

        * bindings/js/DOMWrapperWorld.h:
        (WebCore::JSStringOwner::JSStringOwner):
        (WebCore::DOMWrapperWorld::stringWrapperOwner): Use a HashMap of Weak<T>
        instead of a WeakGCMap, so we can specify a custom finalizer.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::jsStringSlowCase):
        * bindings/js/JSDOMBinding.h:
        (WebCore::jsString): Updated for string map change.

2011-04-26  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/59372> Restore user default for enabling HTTP pipelining

        Reviewed by Antti Koivisto.

        To enable HTTP pipelining post-SnowLeopard, use this command:

            defaults write BUNDLE.ID WebKitEnableHTTPPipelining -bool YES

        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::readBooleanPreference): Re-added.  Originally added in
        r76756 and removed in r84120.
        (WebCore::initializeMaximumHTTPConnectionCountPerHost): Enable
        HTTP pipelining if use default is set to true.  Added macro
        guards to match those in ResourceRequestMac.mm.

2011-04-26  Antti Koivisto  <antti@apple.com>

        Reviewed by Adele Peterson.

        Don't strip fragments from file: urls in memory cache
        https://bugs.webkit.org/show_bug.cgi?id=59463
        <rdar://problem/9231130>

        Some clients expect file: resources to be unique based on fragment identifier. 
        Limit the changes in http://trac.webkit.org/changeset/74107 to the HTTP protocol only

        Test: fast/loader/file-protocol-fragment.html

        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::removeFragmentIdentifierIfNeeded):

2011-04-26  David Levin  <levin@chromium.org>

        Reviewed by Darin Adler.

        Fix more strict OwnPtr in WebCore (round N).
        https://bugs.webkit.org/show_bug.cgi?id=59464

        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::attach):
        * fileapi/FileReader.cpp:
        (WebCore::FileReader::terminate):
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::preflightFailure):
        * workers/DefaultSharedWorkerRepository.cpp:
        (WebCore::SharedWorkerConnectTask::create):
        (WebCore::SharedWorkerScriptLoader::load):

2011-04-26  Ruben  <chromium@hybridsource.org>

        Reviewed by Tony Chang.

        Change linux ifdefs for Chromium to Unix instead, allowing
        new Unix ports to be enabled by default
        https://bugs.webkit.org/show_bug.cgi?id=59297

        No new tests, just changing preprocessor defines.

        * bindings/js/JSInspectorFrontendHostCustom.cpp:
        * bindings/v8/custom/V8InspectorFrontendHostCustom.cpp:
        * dom/SelectElement.cpp:
        * loader/cache/CachedFont.cpp:
        * page/EventHandler.cpp:
        * page/chromium/EventHandlerChromium.cpp:
        * platform/Scrollbar.cpp:
        * platform/chromium/PlatformBridge.h:
        * platform/graphics/chromium/FontPlatformData.h:
        * platform/graphics/skia/FontCustomPlatformData.cpp:
        * platform/graphics/skia/FontCustomPlatformData.h:

2011-04-26  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Dan Bernstein.

        [RTL] Arabic/AB - after typing a date, cursors doesn't go back
        https://bugs.webkit.org/show_bug.cgi?id=49111

        Even when the offset corresponds to a position visually left of the box
        and there aren't any inline boxes on the left, the previous/next position
        may still correspond to some position in the same line.

        The bug was caused by our ignoring such cases. Fixed the bug by comparing
        previous/next position's inline box to the current box. If they match,
        then we stay on the same position because moving to the left visually at
        the left edge should not result in a position on the same line.

        Also fixed a bug that WebKit uses offsets that are not extrema when moved to
        the left edge or to the right edge, and a bug that WebKit could not move to
        the left from 12^3 CBA abc to 123 C^BA abc (there is no offset between 3 and C).

        Test cases are added to editing/selection/move-left-right.html

        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::leftVisuallyDistinctCandidate):
        (WebCore::VisiblePosition::rightVisuallyDistinctCandidate):

2011-04-26  Gabor Loki  <loki@webkit.org>

        Reviewed by Csaba Osztrogonác.

        Speeding up SVG filters with multicore (SMP) support
        https://bugs.webkit.org/show_bug.cgi?id=43903

        Some SVG filters execute a huge number of pixel manipulations, which
        cannot be sped up by graphics accelerators, since their algorithm is
        too complex. Using the power of Symmetric Multi Processing (SMP) we
        can split up a task to smaller (data independent) tasks, which can be
        executed independently.

        The ParallelJobs framework provides a simple way for distributed
        programming. The framework is based on WebKit's threading infrastructure,
        Open Multi-Processing's (OpenMP) API, and libdispatch API.

        * ForwardingHeaders/wtf/ParallelJobs.h: Added.
        * platform/graphics/filters/FETurbulence.cpp:
        (WebCore::FETurbulence::PaintingData::PaintingData):
        (WebCore::FETurbulence::noise2D):
        (WebCore::FETurbulence::calculateTurbulenceValueForPoint):
        (WebCore::FETurbulence::fillRegion):
        (WebCore::FETurbulence::fillRegionWorker):
        (WebCore::FETurbulence::apply):
        * platform/graphics/filters/FETurbulence.h:

2011-04-26  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: close button is off in docked mode on a mac.
        https://bugs.webkit.org/show_bug.cgi?id=59453

        * inspector/front-end/inspector.css:
        (.toolbar-item.close-left):

2011-04-26  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: New Style is not working (UI glitch)
        https://bugs.webkit.org/show_bug.cgi?id=59451

        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::setFrontend):
        * inspector/front-end/AuditRules.js:
        (WebInspector.AuditRules.ImageDimensionsRule.prototype.doRun.getStyles):
        (WebInspector.AuditRules.CssInHeadRule.prototype.doRun.externalStylesheetsReceived):
        (WebInspector.AuditRules.CssInHeadRule.prototype.doRun.inlineStylesReceived):
        (WebInspector.AuditRules.StylesScriptsOrderRule.prototype.doRun.cssBeforeInlineReceived):
        (WebInspector.AuditRules.StylesScriptsOrderRule.prototype.doRun.lateStylesReceived):
        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleModel.prototype.setRuleSelector):
        (WebInspector.CSSStyleModel.prototype.setRuleSelector.callback):
        (WebInspector.CSSStyleModel.prototype.addRule):
        (WebInspector.CSSStyleModel.prototype.addRule.callback):
        (WebInspector.CSSStyleModel.prototype._documentElementId):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMNode.prototype._addAttribute):
        (WebInspector.DOMNode.prototype.documentElement):
        * inspector/front-end/ResourceTreeModel.js:
        (WebInspector.PageDispatcher.prototype.frameDetached):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.prototype._createNewRule):

2011-04-26  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: introduce DOMStorage::enable and disable.
        https://bugs.webkit.org/show_bug.cgi?id=59445

        * inspector/Inspector.json:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        (WebCore::InspectorAgent::restoreInspectorStateFromCookie):
        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::InspectorDOMStorageAgent):
        (WebCore::InspectorDOMStorageAgent::restore):
        (WebCore::InspectorDOMStorageAgent::enable):
        (WebCore::InspectorDOMStorageAgent::disable):
        * inspector/InspectorDOMStorageAgent.h:
        (WebCore::InspectorDOMStorageAgent::create):
        * inspector/front-end/DOMStorage.js:
        (WebInspector.DOMStorageDispatcher.prototype.addDOMStorage):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype._reset):
        * inspector/front-end/inspector.js:

2011-04-26  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: extract Page agent dispatcher into the ResourceTreeModel.
        https://bugs.webkit.org/show_bug.cgi?id=59440

        * inspector/Inspector.json:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::restoreInspectorStateFromCookie):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::setFrontend):
        (WebCore::InspectorPageAgent::frameNavigated):
        * inspector/InspectorPageAgent.h:
        * inspector/front-end/AuditsPanel.js:
        (WebInspector.AuditsPanel):
        (WebInspector.AuditsPanel.prototype._onLoadEventFired):
        (WebInspector.AuditsPanel.prototype._domContentLoadedEventFired):
        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleModelResourceBinding):
        (WebInspector.CSSStyleModelResourceBinding.prototype._inspectedURLChanged):
        * inspector/front-end/DOMBreakpointsSidebarPane.js:
        (WebInspector.DOMBreakpointsSidebarPane):
        (WebInspector.DOMBreakpointsSidebarPane.prototype._inspectedURLChanged):
        * inspector/front-end/DOMStorage.js:
        (WebInspector.DOMStorageDispatcher.prototype.addDOMStorage):
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype._inspectedURLChanged):
        (WebInspector.ExtensionServer.prototype.initExtensions):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkPanel):
        (WebInspector.NetworkPanel.prototype._onLoadEventFired):
        (WebInspector.NetworkPanel.prototype._domContentLoadedEventFired):
        (WebInspector.NetworkPanel.prototype._frameNavigated):
        * inspector/front-end/ResourceTreeModel.js:
        (WebInspector.ResourceTreeModel):
        (WebInspector.ResourceTreeModel.prototype._processCachedResources):
        (WebInspector.ResourceTreeModel.prototype._dispatchInspectedURLChanged):
        (WebInspector.ResourceTreeModel.prototype._frameNavigated):
        (WebInspector.ResourceTreeModel.prototype._frameDetached):
        (WebInspector.ResourceTreeModel.prototype._clearChildFramesAndResources):
        (WebInspector.PageDispatcher):
        (WebInspector.PageDispatcher.prototype.domContentEventFired):
        (WebInspector.PageDispatcher.prototype.loadEventFired):
        (WebInspector.PageDispatcher.prototype.frameNavigated):
        (WebInspector.PageDispatcher.prototype.frameDetached):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel):
        (WebInspector.ResourcesPanel.prototype._onLoadEventFired):
        (WebInspector.ResourcesPanel.prototype._frameNavigated):
        * inspector/front-end/inspector.js:

2011-04-26  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed rollout r84877 and StyleRareInheritedData.cpp changes of r84892,
        because it broke transitions/multiple-text-shadow-transition.html

        Fix OwnPtr strict errors in RenderStyle and make StyleRareInheritedData::textShadow an OwnPtr
        https://bugs.webkit.org/show_bug.cgi?id=59377

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * page/animation/AnimationBase.cpp:
        (WebCore::PropertyWrapperShadow::PropertyWrapperShadow):
        (WebCore::PropertyWrapperShadow::blend):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::setTextShadow):
        (WebCore::RenderStyle::setBoxShadow):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::textShadow):
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::~StyleRareInheritedData):
        * rendering/style/StyleRareInheritedData.h:
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):

2011-04-26  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Adam Barth.

        Turn off make built-in implicit rules for derived sources makefile
        https://bugs.webkit.org/show_bug.cgi?id=59418

        We don't use any of make's built-in implicit rules, turning them off
        speeds up parsing of the makefile.

        * WebCore.xcodeproj/project.pbxproj:
        * gyp/generate-derived-sources.sh:

2011-04-26  Leo Yang  <leo.yang@torchmobile.com.cn>

        Reviewed by Nikolas Zimmermann.

        ASSERT failure in SVGUseElement
        https://bugs.webkit.org/show_bug.cgi?id=59313

        In SVGUseElement::insertedIntoDocument(), ASSERT(!m_isPendingResource)
        was wrong because the document may not be well-formed.

        This patch asserts the element is not pending on resource or the
        document is not well-formed.

        Test: svg/custom/use-crash-in-non-wellformed-document.svg

        * svg/SVGUseElement.cpp:
        (WebCore::isWellFormedDocument):
        (WebCore::SVGUseElement::insertedIntoDocument):

2011-04-26  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [Chromium] Fix columns resizing in the detailed heap snapshot grids.
        https://bugs.webkit.org/show_bug.cgi?id=59438

        * inspector/front-end/DetailedHeapshotView.js:
        (WebInspector.DetailedHeapshotView.prototype._changeView):

2011-04-26  David Levin  <levin@chromium.org>

        Reviewed by Adam Barth.

        Fix a few OwnPtr strict errors in WebCore headers.
        https://bugs.webkit.org/show_bug.cgi?id=59431

        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::create):
        * css/MediaQueryMatcher.cpp:
        (WebCore::MediaQueryMatcher::prepareEvaluator):
        * dom/NodeRareData.h:
        (WebCore::NodeListsNodeData::create):
        * dom/ScriptRunner.h:
        (WebCore::ScriptRunner::create):
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::connectFrontend):
        * loader/icon/IconDatabase.h:
        (WebCore::IconDatabase::create):
        * platform/graphics/SimpleFontData.cpp:
        (WebCore::SimpleFontData::verticalRightOrientationFontData):
        (WebCore::SimpleFontData::uprightOrientationFontData):
        (WebCore::SimpleFontData::brokenIdeographFontData):
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        * rendering/svg/SVGResources.h:
        (WebCore::SVGResources::ClipperFilterMaskerData::create):
        (WebCore::SVGResources::MarkerData::create):
        (WebCore::SVGResources::FillStrokeData::create):
        * storage/StorageSyncManager.cpp:
        (WebCore::StorageSyncManager::close):
        * workers/WorkerContext.cpp:
        (WebCore::CloseWorkerContextTask::create):
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::MessageWorkerContextTask::create):
        (WebCore::MessageWorkerTask::create):
        (WebCore::WorkerExceptionTask::create):
        (WebCore::WorkerContextDestroyedTask::create):
        (WebCore::WorkerTerminateTask::create):
        (WebCore::WorkerThreadActivityReportTask::create):
        * workers/WorkerRunLoop.cpp:
        (WebCore::WorkerRunLoop::Task::create):
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThreadStartupData::create):
        (WebCore::WorkerThreadShutdownFinishTask::create):
        (WebCore::WorkerThreadShutdownStartTask::create):

2011-04-26  Adam Klein  <adamk@chromium.org>

        Reviewed by Adam Barth.

        Fix last strict OwnPtr violation under svg/...
        https://bugs.webkit.org/show_bug.cgi?id=59429

        * svg/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::removePendingResource):

2011-04-26  Adam Barth  <abarth@webkit.org>

        Reviewed by David Levin.

        Fix more strict OwnPtr violations in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=59433

        These manifest in the Chromium build.

        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::ScriptController):
        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::editScriptSource):
        * bindings/v8/V8DOMMap.cpp:
        (WebCore::DOMDataStoreHandle::DOMDataStoreHandle):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::precompileScript):
        * bindings/v8/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::WorkerScriptController):
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::speechInput):
        * platform/PlatformGestureRecognizer.cpp:
        (WebCore::PlatformGestureRecognizer::create):
        * platform/PlatformGestureRecognizer.h:
        * platform/graphics/chromium/DrawingBufferChromium.cpp:
        (WebCore::DrawingBuffer::DrawingBuffer):
        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        (WebCore::CCLayerImpl::CCLayerImpl):
        * platform/graphics/gpu/Texture.cpp:
        (WebCore::Texture::create):
        * platform/image-decoders/bmp/BMPImageDecoder.cpp:
        (WebCore::BMPImageDecoder::decodeHelper):
        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::decode):
        * platform/image-decoders/ico/ICOImageDecoder.cpp:
        (WebCore::ICOImageDecoder::decodeAtIndex):
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::JPEGImageDecoder::decode):
        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageDecoder::decode):
        * storage/chromium/DatabaseTrackerChromium.cpp:
        (WebCore::DatabaseTracker::addOpenDatabase):

2011-04-25  David Levin  <levin@chromium.org>

        Reviewed by Adam Barth.

        Fix OwnPtr strict errors in CrossThreadTask.h
        https://bugs.webkit.org/show_bug.cgi?id=59427

        * dom/CrossThreadTask.h:
        (WebCore::CrossThreadTask1::create):
        (WebCore::CrossThreadTask2::create):
        (WebCore::CrossThreadTask3::create):
        (WebCore::CrossThreadTask4::create):
        (WebCore::CrossThreadTask5::create):
        (WebCore::CrossThreadTask6::create):
        (WebCore::CrossThreadTask7::create):
        (WebCore::CrossThreadTask8::create):

2011-04-25  Mark Rowe  <mrowe@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/9330337> Leak of 'WebCore::ApplyPropertyFillLayer<WebCore::FillSize>'

        * css/CSSStyleApplyProperty.cpp:
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty): Don't initialize CSSPropertyWebkitMaskSize twice.
        * css/CSSStyleApplyProperty.h:
        (WebCore::CSSStyleApplyProperty::setPropertyValue): Add some asserts to catch this class of leak.

2011-04-25  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Ryosuke Niwa.

        REGRESSION: a character appears after tab span when typing immediately before the tab span
        https://bugs.webkit.org/show_bug.cgi?id=58132

        Correcting the order of operations we use to avoid inserting into invalid positions in
        ReplaceSelectionCommand to avoid inserting into tab-spans.

        Test: editing/pasteboard/paste-before-tab-span.html

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply): Moving positionOutsideTabSpan to after
        positionAvoidingPrecedingNodes, since that function could once again put our position
        inside a tab span.

2011-04-25  David Levin  <levin@chromium.org>

        Reviewed by Adam Barth.

        Fix OwnPtr strict error in ImageBuffer.h
        https://bugs.webkit.org/show_bug.cgi?id=59422

        * platform/graphics/ImageBuffer.h:
        (WebCore::ImageBuffer::create):

2011-04-25  Adam Barth  <abarth@webkit.org>

        Reviewed by David Levin.

        Fix strict OwnPtr violations and whitelist known-tricky files
        https://bugs.webkit.org/show_bug.cgi?id=59421

        With this patch, WebCore builds cleanly with strict OwnPtrs.

        * dom/MessagePort.cpp:
        (WebCore::MessagePort::MessagePort):
        * dom/XMLDocumentParserLibxml2.cpp:
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::ContextMenuController):
        (WebCore::ContextMenuController::clearContextMenu):
        * page/PluginHalter.cpp:
        * platform/graphics/MediaPlayer.cpp:
        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::adopt):
        (WebCore::ResourceRequestBase::copyData):
        * svg/SVGDocumentExtensions.cpp:

2011-04-25  David Levin  <levin@chromium.org>

        Reviewed by Adam Barth.

        Fix OwnPtr strict errors in DatasetDOMStringMap.h.
        https://bugs.webkit.org/show_bug.cgi?id=59419

        * dom/DatasetDOMStringMap.h:
        (WebCore::DatasetDOMStringMap::create):

2011-04-25  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Eric Seidel.

        KeyboardEvent.cpp should work with strict OwnPtrs.
        https://bugs.webkit.org/show_bug.cgi?id=59403

        * dom/KeyboardEvent.cpp:
        (WebCore::KeyboardEvent::KeyboardEvent):

2011-04-25  James Robinson  <jamesr@chromium.org>

        Reviewed by Eric Seidel.

        Fix OwnPtr strict errors in RenderStyle and make StyleRareInheritedData::textShadow an OwnPtr
        https://bugs.webkit.org/show_bug.cgi?id=59377

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * page/animation/AnimationBase.cpp:
        (WebCore::PropertyWrapperShadow::PropertyWrapperShadow):
        (WebCore::PropertyWrapperShadow::blend):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::setTextShadow):
        (WebCore::RenderStyle::setBoxShadow):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::textShadow):
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::~StyleRareInheritedData):
        * rendering/style/StyleRareInheritedData.h:
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):

2011-04-25  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r84864.
        http://trac.webkit.org/changeset/84864
        https://bugs.webkit.org/show_bug.cgi?id=59413

        Expect result of use-crash-in-non-wellformed-document.svg is
        platform dependent (Requested by leoyang on #webkit).

        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::insertedIntoDocument):

2011-04-25  Leo Yang  <leo.yang@torchmobile.com.cn>

        Reviewed by Nikolas Zimmermann.

        ASSERT failure in SVGUseElement
        https://bugs.webkit.org/show_bug.cgi?id=59313

        In SVGUseElement::insertedIntoDocument(), ASSERT(!m_isPendingResource)
        was wrong because the document may not be well-formed.

        This patch asserts the element is not pending on resource or the
        document is not well-formed.

        Test: svg/custom/use-crash-in-non-wellformed-document.svg

        * svg/SVGUseElement.cpp:
        (WebCore::isWellFormedDocument):
        (WebCore::SVGUseElement::insertedIntoDocument):

2011-04-25  Igor Oliveira  <igor.oliveira@openbossa.org>

        Reviewed by Tony Chang.

        Move complexity from DataTransferItemsChromium and DataTransferItemChromium for base class
        https://bugs.webkit.org/show_bug.cgi?id=59028

        The DataTransferItemsChromium and DataTransferItemChromium code can be reused by other platforms.
        Moving the code for base class we can reduce the efforts to support DataTransferItems
        element in different platforms.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/DataTransferItem.cpp:
        (WebCore::DataTransferItem::DataTransferItem):
        (WebCore::DataTransferItem::owner):
        (WebCore::DataTransferItem::kind):
        (WebCore::DataTransferItem::type):
        * dom/DataTransferItem.h:
        * dom/DataTransferItems.cpp: Copied from Source/WebCore/platform/chromium/DataTransferItemsChromium.cpp.
        (WebCore::DataTransferItems::DataTransferItems):
        (WebCore::DataTransferItems::length):
        (WebCore::DataTransferItems::item):
        (WebCore::DataTransferItems::deleteItem):
        (WebCore::DataTransferItems::clear):
        (WebCore::DataTransferItems::add):
        * dom/DataTransferItems.h:
        * platform/chromium/DataTransferItemChromium.cpp:
        (WebCore::DataTransferItem::create):
        (WebCore::DataTransferItemChromium::DataTransferItemChromium):
        (WebCore::DataTransferItemChromium::getAsString):
        (WebCore::DataTransferItemChromium::getAsFile):
        * platform/chromium/DataTransferItemChromium.h:
        * platform/chromium/DataTransferItemsChromium.cpp:
        (WebCore::DataTransferItemsChromium::DataTransferItemsChromium):
        * platform/chromium/DataTransferItemsChromium.h:

2011-04-25  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        REGRESSION(75137): directly composited images are double-drawn sometimes
        https://bugs.webkit.org/show_bug.cgi?id=58632

        Depending on the order of operations (layout, creating compositing 
        layers and creating simple image layers) a layer can have both image
        content and have m_drawsContent=true. In this case 2 copies of the image
        are drawn in the layer. If the image has alpha, it looks wrong.

        I added an updateDrawsContent() call after setting the image contents
        to make sure it's correct.

        I couldn't create a test case that shows the problem because layerTreeAsText()
        doesn't emit enough info to show this level of detail. I've opened
        https://bugs.webkit.org/show_bug.cgi?id=59352 to fix that.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateImageContents):

2011-04-25  Kenneth Russell  <kbr@google.com>

        Reviewed by David Levin.

        Fix OwnPtr strict errors in InlineFlowBox.cpp
        https://bugs.webkit.org/show_bug.cgi?id=59392

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::setLayoutOverflow):
        (WebCore::InlineFlowBox::setVisualOverflow):

2011-04-25  Kenneth Russell  <kbr@google.com>

        Reviewed by David Levin.

        Fix OwnPtr strict errors in TransformState.cpp
        https://bugs.webkit.org/show_bug.cgi?id=59380

        * rendering/TransformState.cpp:
        (WebCore::TransformState::applyTransform):

2011-04-25  Adam Barth  <abarth@webkit.org>

        Reviewed by James Robinson.

        DOMWindow.cpp should work with strict OwnPtrs
        https://bugs.webkit.org/show_bug.cgi?id=59356

        * page/DOMWindow.cpp:
        (WebCore::PostMessageTimer::fired):
        (WebCore::DOMWindow::postMessageTimerFired):
        * page/DOMWindow.h:

2011-04-25  Adam Klein  <adamk@chromium.org>

        Reviewed by James Robinson.

        Fix OwnPtr strict errors in some SVG classes.
        https://bugs.webkit.org/show_bug.cgi?id=59395

        * rendering/style/SVGRenderStyleDefs.cpp:
        (WebCore::StyleShadowSVGData::StyleShadowSVGData):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::SVGSVGElement):
        * svg/SVGStyledTransformableElement.cpp:
        (WebCore::SVGStyledTransformableElement::supplementalTransform):
        * svg/SVGTextElement.cpp:
        (WebCore::SVGTextElement::supplementalTransform):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged):

2011-04-25  Adam Barth  <abarth@webkit.org>

        Re-land changes to ValidationMessage.

        * html/ValidationMessage.cpp:
        (WebCore::ValidationMessage::setMessage):
        (WebCore::ValidationMessage::setMessageDOMAndStartTimer):
        (WebCore::ValidationMessage::requestToHideMessage):

2011-04-25  Ojan Vafai  <ojan@chromium.org>

        Reviewed by James Robinson.

        fix OwnPtr strict error in FrameView.cpp
        https://bugs.webkit.org/show_bug.cgi?id=59402

        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::addWidgetToUpdate):

2011-04-25  Adam Klein  <adamk@chromium.org>

        Unreviewed, rolling out r84844.
        http://trac.webkit.org/changeset/84844
        https://bugs.webkit.org/show_bug.cgi?id=59395

        Checked in too much.

        * rendering/style/SVGRenderStyleDefs.cpp:
        (WebCore::StyleShadowSVGData::StyleShadowSVGData):
        * svg/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::removePendingResource):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::SVGSVGElement):
        * svg/SVGStyledTransformableElement.cpp:
        (WebCore::SVGStyledTransformableElement::supplementalTransform):
        * svg/SVGTextElement.cpp:
        (WebCore::SVGTextElement::supplementalTransform):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged):

2011-04-25  Adrienne Walker  <enne@google.com>

        Reviewed by David Levin.

        Make ActiveDOMCallback play nice with OwnPtr strict mode
        https://bugs.webkit.org/show_bug.cgi?id=59398

        * bindings/generic/ActiveDOMCallback.cpp:
        (WebCore::ActiveDOMCallback::ActiveDOMCallback):

2011-04-25  Adam Klein  <adamk@chromium.org>

        Reviewed by James Robinson.

        Fix OwnPtr strict errors in some SVG classes.
        https://bugs.webkit.org/show_bug.cgi?id=59395

        * rendering/style/SVGRenderStyleDefs.cpp:
        (WebCore::StyleShadowSVGData::StyleShadowSVGData):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::SVGSVGElement):
        * svg/SVGStyledTransformableElement.cpp:
        (WebCore::SVGStyledTransformableElement::supplementalTransform):
        * svg/SVGTextElement.cpp:
        (WebCore::SVGTextElement::supplementalTransform):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged):

2011-04-25  James Robinson  <jamesr@chromium.org>

        Unreviewed, rolling out r84835.
        http://trac.webkit.org/changeset/84835
        https://bugs.webkit.org/show_bug.cgi?id=59394

        Breaks compile because Deque<OwnPtr> doesn't work

        * dom/XMLDocumentParserLibxml2.cpp:
        (WebCore::PendingCallbacks::~PendingCallbacks):
        (WebCore::PendingCallbacks::appendStartElementNSCallback):
        (WebCore::PendingCallbacks::appendEndElementNSCallback):
        (WebCore::PendingCallbacks::appendCharactersCallback):
        (WebCore::PendingCallbacks::appendProcessingInstructionCallback):
        (WebCore::PendingCallbacks::appendCDATABlockCallback):
        (WebCore::PendingCallbacks::appendCommentCallback):
        (WebCore::PendingCallbacks::appendInternalSubsetCallback):
        (WebCore::PendingCallbacks::appendErrorCallback):
        (WebCore::XMLDocumentParser::XMLDocumentParser):
        * html/ValidationMessage.cpp:
        (WebCore::ValidationMessage::setMessage):
        (WebCore::ValidationMessage::setMessageDOMAndStartTimer):
        (WebCore::ValidationMessage::requestToHideMessage):

2011-04-25  James Robinson  <jamesr@chromium.org>

        Reviewed by Sam Weinig.

        Fix OwnPtr strict mode violation in ImageBufferCG
        https://bugs.webkit.org/show_bug.cgi?id=59396

        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::ImageBuffer):

2011-04-25  Huang Dongsung  <luxtella@company100.net>

        Reviewed by Dirk Schulze.

        [Skia] Remove an unused local variable in PlatformContextSkia::readbackHardwareToSoftware().
        https://bugs.webkit.org/show_bug.cgi?id=59308

        An unused local variable is created and even allocates heap memory.

        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::readbackHardwareToSoftware):

2011-04-25  Geoffrey Garen  <ggaren@apple.com>

        Qt build fix: Updated files not used by other ports for rename.

        * bindings/js/JSTouchCustom.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/js/JSTouchListCustom.cpp:
        (WebCore::toJSNewlyCreated):

2011-04-25  Adrienne Walker  <enne@google.com>

        Reviewed by David Levin.

        WebCore/css/CSS* files should play nice with strict OwnPtrs
        https://bugs.webkit.org/show_bug.cgi?id=59382

        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::getFontData):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::addProperty):
        (WebCore::CSSParser::parseValue):

2011-04-25  Adam Barth  <abarth@webkit.org>

        Reviewed by James Robinson.

        ValidationMessage and XMLDocumentParserLibxml2 should play nice with strict OwnPtrs
        https://bugs.webkit.org/show_bug.cgi?id=59394

        * dom/XMLDocumentParserLibxml2.cpp:
        (WebCore::PendingCallbacks::PendingCallbacks):
        (WebCore::PendingCallbacks::appendStartElementNSCallback):
        (WebCore::PendingCallbacks::appendEndElementNSCallback):
        (WebCore::PendingCallbacks::appendCharactersCallback):
        (WebCore::PendingCallbacks::appendProcessingInstructionCallback):
        (WebCore::PendingCallbacks::appendCDATABlockCallback):
        (WebCore::PendingCallbacks::appendCommentCallback):
        (WebCore::PendingCallbacks::appendInternalSubsetCallback):
        (WebCore::PendingCallbacks::appendErrorCallback):
        (WebCore::XMLDocumentParser::XMLDocumentParser):
        * html/ValidationMessage.cpp:
        (WebCore::ValidationMessage::setMessage):
        (WebCore::ValidationMessage::setMessageDOMAndStartTimer):
        (WebCore::ValidationMessage::requestToHideMessage):

2011-04-25  James Robinson  <jamesr@chromium.org>

        Reviewed by Adam Barth.

        Fix OwnPtr strictness issues in WebCore/inspector/
        https://bugs.webkit.org/show_bug.cgi?id=59387

        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::ensureSourceData):

2011-04-25  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Beth Dakin.

        Removed XPathNamespace because it was unused
        https://bugs.webkit.org/show_bug.cgi?id=59381
        
        This allows us to make Node::ownerDocument() non-virtual, though it has
        the unhappy side-effect of rebuilding the world.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj: Bye bye dead code.

        * dom/Node.h: Hello fast code!

        * xml/XPathNamespace.cpp: Removed.
        * xml/XPathNamespace.h: Removed.

2011-04-25  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        HistoryItemMac should play nice with OwnPtrs
        https://bugs.webkit.org/show_bug.cgi?id=59388

        * history/mac/HistoryItemMac.mm:
        (WebCore::HistoryItem::setTransientProperty):

2011-04-25  David Levin  <levin@chromium.org>

        Reviewed by Kenneth Russell.

        Fix strict OwnPtrs in ContextMenuController.cpp
        https://bugs.webkit.org/show_bug.cgi?id=59375

        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::createContextMenu):
        (WebCore::separatorItem):

2011-04-25  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        CheckedRadioButton should play nice with strict OwnPtr
        https://bugs.webkit.org/show_bug.cgi?id=59386

        * dom/CheckedRadioButtons.cpp:
        (WebCore::CheckedRadioButtons::addButton):

2011-04-25  Adam Barth  <abarth@webkit.org>

        Reviewed by David Levin.

        Resource*.cpp should play nice with strict OwnPtrs
        https://bugs.webkit.org/show_bug.cgi?id=59383

        * bridge/runtime_method.cpp:
        (JSC::RuntimeMethod::RuntimeMethod):
        * platform/network/ResourceHandle.cpp:
        (WebCore::ResourceHandle::ResourceHandle):
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::adopt):
        (WebCore::ResourceResponseBase::copyData):

2011-04-25  Adam Barth  <abarth@webkit.org>

        Reviewed by David Levin.

        Page*.cpp and objc_runtime.mm should play nice with strict OwnPtrs
        https://bugs.webkit.org/show_bug.cgi?id=59374

        * bridge/objc/objc_runtime.mm:
        (JSC::Bindings::callObjCFallbackObject):
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::initGroup):
        * page/PageGroup.cpp:
        (WebCore::PageGroup::addUserScriptToWorld):
        (WebCore::PageGroup::addUserStyleSheetToWorld):
        * page/mac/PageMac.cpp:
        (WebCore::Page::addSchedulePair):

2011-04-25  Geoffrey Garen  <ggaren@apple.com>

        Build fix: This time for sure!
        
        * dom/make_names.pl:

2011-04-25  Geoffrey Garen  <ggaren@apple.com>

        Build fix: Let's edit the script instead of the autogenrated file. That
        way, our change will stand the test of time.

        * dom/make_names.pl:

2011-04-25  Adam Barth  <abarth@webkit.org>

        Reviewed by David Levin.

        Fix strict OwnPtrs in HTMLMediaElement and HTTPHeaderMap
        https://bugs.webkit.org/show_bug.cgi?id=59368

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        * platform/network/HTTPHeaderMap.cpp:
        (WebCore::HTTPHeaderMap::copyData):

2011-04-25  James Robinson  <jamesr@chromium.org>

        Reviewed by Adam Barth.

        Fix strict OwnPtr violations in Render*.cpp
        https://bugs.webkit.org/show_bug.cgi?id=59361

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::RenderBlock):
        (WebCore::RenderBlock::finishDelayUpdateScrollInfo):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::addLayoutOverflow):
        (WebCore::RenderBox::addVisualOverflow):
        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::styleDidChange):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateTransform):
        (WebCore::RenderLayer::paintChildLayerIntoColumns):
        (WebCore::RenderLayer::hitTestChildLayerColumns):
        (WebCore::RenderLayer::ensureBacking):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::styleDidChange):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::compositor):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::addCachedPseudoStyle):
        (WebCore::RenderStyle::accessCounterDirectives):
        (WebCore::RenderStyle::accessAnimations):
        (WebCore::RenderStyle::accessTransitions):
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::applyResource):
        * rendering/svg/SVGResources.cpp:
        (WebCore::SVGResources::SVGResources):

2011-04-25  Adam Barth  <abarth@webkit.org>

        Attempt to fix the compile.

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::loadWithNextMediaEngine):

2011-04-25  Geoffrey Garen  <ggaren@apple.com>

        Rubber-stamped by Beth Dakin.

        Merged CREATE_DOM_NODE_WRAPPER and CREATE_DOM_OBJECT_WRAPPER into 
        CREATE_DOM_WRAPPER because there's no meaningful difference between
        them anymore.

        * bindings/js/JSCDATASectionCustom.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/js/JSCSSRuleCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSCSSValueCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSDOMBinding.h:
        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSElementCustom.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/js/JSEventCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSHTMLCollectionCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSImageDataCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::createWrapperInline):
        * bindings/js/JSSVGPathSegCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSStyleSheetCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSTextCustom.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/js/JSWebKitCSSMatrixCustom.cpp:
        (WebCore::JSWebKitCSSMatrixConstructor::constructJSWebKitCSSMatrix):
        * bindings/js/JSWebSocketCustom.cpp:
        (WebCore::JSWebSocketConstructor::constructJSWebSocket):
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequestConstructor::constructJSXMLHttpRequest):
        * bindings/js/JSXSLTProcessorCustom.cpp:
        (WebCore::JSXSLTProcessorConstructor::constructJSXSLTProcessor):

2011-04-25  Adam Barth  <abarth@webkit.org>

        Reviewed by James Robinson.

        HTMLDocumentParser should play nice with OwnPtrs
        https://bugs.webkit.org/show_bug.cgi?id=59363

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::pumpTokenizer):

2011-04-25  Adam Barth  <abarth@webkit.org>

        Reviewed by James Robinson.

        Frame.cpp should work with strict OwnPtrs
        https://bugs.webkit.org/show_bug.cgi?id=59360

        * page/Frame.cpp:
        (WebCore::createRegExpForLabels):

2011-04-25  Adam Barth  <abarth@webkit.org>

        Reviewed by David Levin.

        Fix strict OwnPtr in Element.cpp
        https://bugs.webkit.org/show_bug.cgi?id=59357

        * dom/NodeRareData.h:
        (WebCore::NodeRareData::ensureEventTargetData):

2011-04-25  Adam Barth  <abarth@webkit.org>

        Reviewed by David Levin.

        Fix strict OwnPtr issues in Media*.cpp
        https://bugs.webkit.org/show_bug.cgi?id=59354

        There's still a tricky case in MediaPlayer.cpp, but we'll worry about
        that later.

        * css/MediaQueryMatcher.cpp:
        (WebCore::MediaQueryMatcher::addListener):
        * dom/Document.cpp:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::createNullMediaPlayer):

2011-04-25  James Robinson  <jamesr@chromium.org>

        Reviewed by David Levin.

        Fix strict OwnPtr violations in ListHashSet and RenderLayerCompositor
        https://bugs.webkit.org/show_bug.cgi?id=59353

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::RenderLayerCompositor):

2011-04-25  Adam Barth  <abarth@webkit.org>

        Reviewed by James Robinson.

        Worker*.cpp should work with strict OwnPtrs
        https://bugs.webkit.org/show_bug.cgi?id=59346

        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::WorkerInspectorController):
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::WorkerContext):
        * workers/WorkerRunLoop.cpp:
        (WebCore::WorkerRunLoop::WorkerRunLoop):
        * workers/WorkerScriptLoader.cpp:
        (WebCore::WorkerScriptLoader::createResourceRequest):

2011-04-25  James Robinson  <jamesr@chromium.org>

        Reviewed by Adam Barth.

        Remove bad use of OwnPtr::set() in IconDatabase.cpp
        https://bugs.webkit.org/show_bug.cgi?id=59344

        Needed for strict OwnPtr compliance.

        * loader/icon/IconDatabase.cpp:
        (WebCore::readySQLiteStatement):

2011-04-25  Adam Barth  <abarth@webkit.org>

        Reviewed by Maciej Stachowiak.

        ImageBuffer.h should work with strict OwnPtrs
        https://bugs.webkit.org/show_bug.cgi?id=59341

        This patch is to prepare for the strict OwnPtr hack-a-thon.

        * platform/graphics/ImageBuffer.h:
        (WebCore::ImageBuffer::create):

2011-04-25  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Brian Weinstein.

        WebCore build on Windows should include windows.h in its precompiled header to speed builds
        https://bugs.webkit.org/show_bug.cgi?id=59339

        windows.h is included by several of the underlying wtf headers, including Atomics.h and
        ThreadingPrimitives.h anyway, so include it in the WebCorePrefix.h to speed up compilation.
        
        On my 8 core Mac Pro, this reduces a clean rebuild of debug WebCore from 8 minutes to 7 minutes
        (a 12% speedup).

        * WebCorePrefix.h: Include windows.h

2011-04-25  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Crash in WebCore::FrameView::notifyPageThatContentAreaWillPaint()
        https://bugs.webkit.org/show_bug.cgi?id=59311

        * platform/gtk/MainFrameScrollbarGtk.cpp:
        (MainFrameScrollbarGtk::attachAdjustment): Before connecting an adjustment to a scrollbar
        disconnect any lingering signal handlers. This prevents an adjustment from controlling the
        active ScrollView and some zombie ScrollView.

2011-04-25  Geoffrey Garen  <ggaren@apple.com>

        Another shot at fixing the EFL build.

        * UseJSC.cmake:
        * bindings/js/JSDOMBinding.cpp:

2011-04-25  Geoffrey Garen  <ggaren@apple.com>

        Try to fix EFL build.

        * UseJSC.cmake: Added a missing file.

2011-04-25  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Removed a use of markDOMObjectWrapper: ActiveDOMObjects, Workers, and MessagePorts
        https://bugs.webkit.org/show_bug.cgi?id=59333

        * WebCore.xcodeproj/project.pbxproj: Added .idl files for easier editing.

        * bindings/js/JSDOMBinding.cpp:
        * bindings/js/JSDOMBinding.h:
        * bindings/js/JSDocumentCustom.cpp:
        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::visitChildren): Removed now-unused functions.

        * bindings/scripts/CodeGeneratorJS.pm: Added support for ActiveDOMObject
        lifetime management.

        * dom/Document.idl: No need for a custom mark function anymore, since
        ActiveDOMObjets now manage their own lifetimes.

        * dom/MessagePort.cpp:
        (WebCore::MessagePort::hasPendingActivity): Correctly report that we
        have pending activity when we're remotely entangled, instead of relying
        on our clients to know this about us and do the check for us.

        * dom/MessagePort.h: FIXME!

        * dom/MessagePort.idl:
        * fileapi/DOMFileSystem.idl:
        * fileapi/FileReader.idl:
        * fileapi/FileWriter.idl:
        * notifications/Notification.idl:
        * notifications/NotificationCenter.idl:
        * page/EventSource.idl:
        * storage/IDBDatabase.idl:
        * storage/IDBRequest.idl:
        * storage/IDBTransaction.idl:
        * webaudio/AudioContext.idl:
        * websockets/WebSocket.idl:
        * workers/AbstractWorker.idl:
        * workers/SharedWorker.idl:
        * workers/Worker.idl: Opt in to ActiveDOMObject lifetime management.

        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::hasPendingActivity): No need to make up for
        MessagePort::hasPendingActivity being wrong anymore, since it's now right.

        * xml/XMLHttpRequest.idl: Opt in to ActiveDOMObject lifetime management.

2011-04-25  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: worker messages should be routed to corresponding worker front-end
        https://bugs.webkit.org/show_bug.cgi?id=59323

        Added WorkerManager which is responsible for routing messages between
        Page inspector front-end and Worker inspector front-ends.

        * WebCore.gypi:
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/WorkerManager.js: Added.
        (WebInspector.WorkerManager):
        (WebInspector.WorkerManager.loaded.InspectorFrontendHost.sendMessageToBackend):
        (WebInspector.WorkerManager.loaded.InspectorFrontendHost.loaded):
        (WebInspector.WorkerManager.loaded):
        (WebInspector.WorkerFrontendStub):
        (WebInspector.WorkerFrontendStub.prototype._receiveMessage):
        (WebInspector.WorkerDispatcher):
        (WebInspector.WorkerDispatcher.prototype._receiveMessage):
        (WebInspector.WorkerDispatcher.prototype.workerCreated):
        (WebInspector.WorkerDispatcher.prototype.dispatchMessageFromWorker):
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:
        (WebInspector.loaded):

2011-04-25  Annie Sullivan  <sullivan@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [Resources panel] Should be easy to copy data.
        https://bugs.webkit.org/show_bug.cgi?id=45662

        Adds context menu items to copy resource location, resource request headers, and resource response headers.

        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkPanel.prototype._contextMenu): Add new items to context menu.
        (WebInspector.NetworkPanel.prototype._exportLocation): Copy resource location to clipboard.
        (WebInspector.NetworkPanel.prototype._exportRequestHeaders): Copy resource request headers to clipboard.
        (WebInspector.NetworkPanel.prototype._exportResponseHeaders): Copy resource response headers to clipboard.
        * inspector/front-end/Resource.js:
        (WebInspector.Resource.prototype.get requestHeadersText): If _requestHeadersText is undefined, generate it from requestHeaders.
        (WebInspector.Resource.prototype.get responseHeadersText): If _responseHeadersText is undefined, generate it form responseHeaders.

2011-04-25  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: CSS is parsed improperly when saved in UTF-8 with a BOM
        https://bugs.webkit.org/show_bug.cgi?id=59322

        Use TextResourceDecoder to determine external stylesheet charsets correctly.

        Test: inspector/styles/parse-utf8-bom.html

        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::originalStyleSheetText):

2011-04-25  Pavel Feldman  <pfeldman@google.com>

        Not reviewed: Inspector.json cleanup.

        * inspector/Inspector.json:

2011-04-25  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: introduce InspectorWorkerAgent
        https://bugs.webkit.org/show_bug.cgi?id=59320

        InspectorWorkerAgent is responsible for routing inspector messages
        between worker context inspector agents and corresponding worker
        inspector front-end.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/CodeGeneratorInspector.pm:
        * inspector/Inspector.json:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        (WebCore::InspectorAgent::setFrontend):
        (WebCore::InspectorAgent::disconnectFrontend):
        * inspector/InspectorAgent.h:
        (WebCore::InspectorAgent::workerAgent):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::disconnectFrontend):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didStartWorkerContextImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::willStartWorkerContext):
        (WebCore::InspectorInstrumentation::didStartWorkerContext):
        * inspector/InspectorWorkerAgent.cpp: Added.
        (WebCore::InspectorWorkerAgent::WorkerFrontendChannel::WorkerFrontendChannel):
        (WebCore::InspectorWorkerAgent::WorkerFrontendChannel::~WorkerFrontendChannel):
        (WebCore::InspectorWorkerAgent::WorkerFrontendChannel::id):
        (WebCore::InspectorWorkerAgent::WorkerFrontendChannel::inspectorProxy):
        (WebCore::InspectorWorkerAgent::WorkerFrontendChannel::sendMessageToFrontend):
        (WebCore::InspectorWorkerAgent::create):
        (WebCore::InspectorWorkerAgent::InspectorWorkerAgent):
        (WebCore::InspectorWorkerAgent::~InspectorWorkerAgent):
        (WebCore::InspectorWorkerAgent::setFrontend):
        (WebCore::InspectorWorkerAgent::clearFrontend):
        (WebCore::InspectorWorkerAgent::dispatchMessageOnWorkerInspector):
        (WebCore::InspectorWorkerAgent::didStartWorkerContext):
        * inspector/InspectorWorkerAgent.h: Added.
        * inspector/InstrumentingAgents.h:
        (WebCore::InstrumentingAgents::InstrumentingAgents):
        (WebCore::InstrumentingAgents::inspectorWorkerAgent):
        (WebCore::InstrumentingAgents::setInspectorWorkerAgent):
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::connectFrontend):
        * inspector/generate-inspector-idl:
        * workers/Worker.cpp:
        (WebCore::Worker::notifyFinished):
        * workers/WorkerContextInspectorProxy.h: Added. Platform-specific transport for inspector
        messages sent from the inspected page worker agent to the worker context inspector agents.
        (WebCore::WorkerContextInspectorProxy::connectFrontend):
        (WebCore::WorkerContextInspectorProxy::disconnectFrontend):
        (WebCore::WorkerContextInspectorProxy::sendMessageToWorkerContextInspector):
        (WebCore::WorkerContextInspectorProxy::~WorkerContextInspectorProxy):
        * workers/WorkerContextProxy.h:
        (WebCore::WorkerContextProxy::inspectorProxy):

2011-04-25  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: move Frame and Resource Tree management into the Page agent.
        https://bugs.webkit.org/show_bug.cgi?id=59321

        Network agent should only handle network-related activities.
        Frame structure should be managed by the Page agent instead.

        * inspector/Inspector.json:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::InspectorDOMAgent):
        (WebCore::InspectorDOMAgent::setFrontend):
        (WebCore::InspectorDOMAgent::restore):
        (WebCore::InspectorDOMAgent::highlightFrame):
        * inspector/InspectorDOMAgent.h:
        (WebCore::InspectorDOMAgent::create):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::domContentLoadedEventFiredImpl):
        (WebCore::InspectorInstrumentation::loadEventFiredImpl):
        (WebCore::InspectorInstrumentation::frameDetachedFromParentImpl):
        (WebCore::InspectorInstrumentation::didCommitLoadImpl):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::create):
        (WebCore::InspectorPageAgent::resourceContent):
        (WebCore::InspectorPageAgent::resourceContentBase64):
        (WebCore::InspectorPageAgent::resourceData):
        (WebCore::InspectorPageAgent::cachedResource):
        (WebCore::InspectorPageAgent::resourceTypeString):
        (WebCore::InspectorPageAgent::cachedResourceType):
        (WebCore::InspectorPageAgent::cachedResourceTypeString):
        (WebCore::InspectorPageAgent::InspectorPageAgent):
        (WebCore::InspectorPageAgent::setFrontend):
        (WebCore::InspectorPageAgent::reload):
        (WebCore::InspectorPageAgent::open):
        (WebCore::InspectorPageAgent::getCookies):
        (WebCore::InspectorPageAgent::deleteCookie):
        (WebCore::InspectorPageAgent::getResourceTree):
        (WebCore::InspectorPageAgent::getResourceContent):
        (WebCore::InspectorPageAgent::restore):
        (WebCore::InspectorPageAgent::domContentEventFired):
        (WebCore::InspectorPageAgent::loadEventFired):
        (WebCore::InspectorPageAgent::frameNavigated):
        (WebCore::InspectorPageAgent::frameDetached):
        (WebCore::InspectorPageAgent::didClearWindowObjectInWorld):
        (WebCore::InspectorPageAgent::mainFrame):
        (WebCore::pointerAsId):
        (WebCore::InspectorPageAgent::frameForId):
        (WebCore::InspectorPageAgent::frameId):
        (WebCore::InspectorPageAgent::loaderId):
        (WebCore::InspectorPageAgent::buildObjectForFrame):
        (WebCore::InspectorPageAgent::buildObjectForFrameTree):
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::buildObjectForCachedResource):
        (WebCore::InspectorResourceAgent::willSendRequest):
        (WebCore::InspectorResourceAgent::didReceiveResponse):
        (WebCore::InspectorResourceAgent::didLoadResourceFromMemoryCache):
        (WebCore::InspectorResourceAgent::setInitialScriptContent):
        (WebCore::InspectorResourceAgent::setInitialXHRContent):
        (WebCore::InspectorResourceAgent::InspectorResourceAgent):
        * inspector/InspectorResourceAgent.h:
        (WebCore::InspectorResourceAgent::create):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::resourceStyleSheetText):
        * inspector/front-end/NetworkManager.js:
        (WebInspector.NetworkManager.prototype.requestContent):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkPanel):
        (WebInspector.NetworkPanel.prototype.frameNavigated):
        * inspector/front-end/ResourceTreeModel.js:
        (WebInspector.ResourceTreeModel):
        (WebInspector.ResourceTreeModel.prototype.frontendReused):
        (WebInspector.ResourceTreeModel.prototype.frameNavigated):
        (WebInspector.ResourceTreeModel.prototype.frameDetached):
        * inspector/front-end/inspector.js:
        (WebInspector.domContentEventFired):
        (WebInspector.loadEventFired):
        (WebInspector.frameNavigated):
        (WebInspector.frameDetached):

2011-04-25  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: few protocol improvements.
        https://bugs.webkit.org/show_bug.cgi?id=59319

        - Page domain is documented
        - setUserAgentOverride is moved to the Network agent
        - setSearchingForNode -> setInspectModeEnabled
        - highlightDOMNode -> highlightNode
        - reloadPage -> reload
        - openInNewWindow -> open with optional parameter

        * inspector/Inspector.json:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::setInspectModeEnabled):
        (WebCore::InspectorDOMAgent::highlightNode):
        * inspector/InspectorDOMAgent.h:
        (WebCore::InspectorDOMAgent::hideNodeHighlight):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::applyUserAgentOverrideImpl):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::clearFrontend):
        (WebCore::InspectorPageAgent::reload):
        (WebCore::InspectorPageAgent::open):
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::clearFrontend):
        (WebCore::InspectorResourceAgent::applyUserAgentOverride):
        (WebCore::InspectorResourceAgent::setUserAgentOverride):
        * inspector/InspectorResourceAgent.h:
        * inspector/front-end/AuditsPanel.js:
        (WebInspector.AuditsPanel.prototype._reloadResources):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.setSearchingForNode):
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype._onReload):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkDataGridNode.prototype._openInNewTab):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.FrameResourceTreeElement.prototype.ondblclick):
        * inspector/front-end/inspector.js:
        (WebInspector.highlightDOMNode):
        (WebInspector.openResource):
        (WebInspector.documentKeyDown):

2011-04-25  Jon Lee  <jonlee@apple.com>

        Reviewed by Maciej Stachowiak.

        Overlay scroller hard to see on pages with dark background (59183)
        https://bugs.webkit.org/show_bug.cgi?id=59183
        <rdar://problem/8975367>

        Switch the scrollbar's overlay style depending on its frame's background color.
        This refactors the getDocumentBackgroundColor method needed for gestures. The style
        is determined and set on every paint() call to the Mac scrollbar theme.

        * WebCore.exp.in: adding method to allow changing style
        * page/Frame.cpp:
        (WebCore::Frame::getDocumentBackgroundColor): moving code from WebFrame for reuse by FrameView
        * page/Frame.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::recommendedScrollbarOverlayStyle): overridden to suggest a style based on CSS background color
        * page/FrameView.h:
        * platform/ScrollTypes.h: new enum to represent different overlay scrollbar styles
        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::recommendedScrollbarOverlayStyle): new virtual function to return a suggested overlay style
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::paint):
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

2011-04-25  Dan Bernstein  <mitz@apple.com>

        Reviewed by Maciej Stachowiak.

        <rdar://problem/9113516> REGRESSION (WK2): Holding down Option while dragging scrollbar thumb has no effect (should make scroll distance equal mouse translation)
        https://bugs.webkit.org/show_bug.cgi?id=59315

        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::Scrollbar): Initialize new member variables.
        (WebCore::Scrollbar::moveThumb): Added a boolean draggingDocument parameter. When true, the document
        is scrolled a distance equal to the change in the mouse position.
        (WebCore::Scrollbar::mouseMoved): Check with the theme whether the mouse move event should drag
        the document rather than the thumb, and pass the result to moveThumb.
        (WebCore::Scrollbar::mouseUp): Reset m_draggingDocument.
        * platform/Scrollbar.h:
        * platform/ScrollbarTheme.h:
        (WebCore::ScrollbarTheme::shouldDragDocumentInsteadOfThumb): Added. The base class implementation
        returns false.
        * platform/mac/ScrollbarThemeMac.h:
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::shouldDragDocumentInsteadOfThumb): Overridden to return true if the
        Option key is down.

2011-04-24  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Removed a use of markDOMObjectWrapper: WebGL, XHR, workers; plus, more autogeneration
        https://bugs.webkit.org/show_bug.cgi?id=59307

        * WebCore.xcodeproj/project.pbxproj: Added Blob.idl, so it's easier to edit.

        * bindings/js/JSCSSRuleCustom.cpp:
        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        * bindings/js/JSCanvasRenderingContextCustom.cpp:
        * bindings/js/JSDOMApplicationCacheCustom.cpp: Autogenerate these instead
        of hand-coding them.

        * bindings/js/JSDOMBinding.h:
        (WebCore::root): Moved some GC helpers here from JSNodeCustom.h, because
        they're reasonably generic.

        * bindings/js/JSDOMImplementationCustom.cpp:
        * bindings/js/JSDOMStringMapCustom.cpp:
        * bindings/js/JSDOMTokenListCustom.cpp:
        * bindings/js/JSHTMLCollectionCustom.cpp:
        * bindings/js/JSMediaListCustom.cpp: Autogenerate these instead of
        hand-coding them.

        * bindings/js/JSMessageChannelCustom.cpp:
        (WebCore::JSMessageChannel::visitChildren):
        * bindings/js/JSMessagePortCustom.cpp:
        (WebCore::JSMessagePort::visitChildren): Use addOpaqueRoot instead of
        markDOMObjectWrapper. This is one of the few cases where a DOM object is
        considered a stand-alone root. It's not as efficient as the shared root
        case, but workers and message ports are very rare objects, so it's no
        big deal.

        * bindings/js/JSNamedNodeMapCustom.cpp: Autogenerate!

        * bindings/js/JSNodeCustom.h: Moved to JSDOMBinding.h.

        * bindings/js/JSSharedWorkerCustom.cpp:
        (WebCore::JSSharedWorker::visitChildren): Use addOpaqueRoot instead of
        markDOMObjectWrapper, as above. Once again, a stand-alone root.

        * bindings/js/JSStyleSheetCustom.cpp:
        * bindings/js/JSStyleSheetListCustom.cpp: Autogenerate!

        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::JSWebGLRenderingContext::visitChildren): Use the opaque roots
        system for marking WebGL contexts and their associated satellite objects.

        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::visitChildren):
        * bindings/js/JSXMLHttpRequestCustom.cpp: Use addOpaqueRoot instead of
        markDOMObjectWrapper, as above. Once again, stand-alone roots.

        (WebCore::JSXMLHttpRequest::visitChildren):
        * bindings/js/JSXMLHttpRequestUploadCustom.cpp: No need to mark our owner
        XHR because it is not reachable from us.

        * bindings/scripts/CodeGeneratorJS.pm: Added autogeneration support for a
        bunch of repetitive cases of isReachableFromOpaqueRoots callbacks.

        * css/CSSRule.idl:
        * css/CSSStyleDeclaration.idl:
        * css/MediaList.idl:
        * css/StyleMedia.idl:
        * css/StyleSheet.idl:
        * css/StyleSheetList.idl:
        * dom/DOMImplementation.idl:
        * dom/DOMStringMap.idl:
        * dom/MessagePort.idl:
        * dom/NamedNodeMap.idl:
        * fileapi/Blob.idl:
        * html/DOMTokenList.idl: Opt in to autogeneration.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext): Standardized on PassOwnPtr/OwnPtr
        usage, to reduce human error and make ownership rules more obvious.

        * html/HTMLCollection.idl:
        * html/canvas/ArrayBuffer.idl: Opt in to autogeneration.

        * html/canvas/CanvasRenderingContext.cpp:
        * html/canvas/CanvasRenderingContext.h:
        (WebCore::CanvasRenderingContext::ref):
        (WebCore::CanvasRenderingContext::deref):
        * html/canvas/CanvasRenderingContext2D.h:
        (WebCore::CanvasRenderingContext2D::create):
        (WebCore::CanvasRenderingContext2D::state): Standardized on PassOwnPtr/OwnPtr
        usage, to reduce human error and make ownership rules more obvious.
        
        Inlined some functions to match our standard idiom and to make the code
        in the header document itself.

        * html/canvas/CanvasRenderingContext.idl: Opt in to autogeneration.

        * html/canvas/OESStandardDerivatives.cpp:
        (WebCore::OESStandardDerivatives::OESStandardDerivatives):
        (WebCore::OESStandardDerivatives::create):
        * html/canvas/OESStandardDerivatives.h:
        * html/canvas/OESStandardDerivatives.idl:
        * html/canvas/OESTextureFloat.cpp:
        (WebCore::OESTextureFloat::OESTextureFloat):
        (WebCore::OESTextureFloat::create):
        * html/canvas/OESTextureFloat.h:
        * html/canvas/OESTextureFloat.idl:
        * html/canvas/OESVertexArrayObject.cpp:
        (WebCore::OESVertexArrayObject::OESVertexArrayObject):
        (WebCore::OESVertexArrayObject::create):
        * html/canvas/OESVertexArrayObject.h:
        * html/canvas/OESVertexArrayObject.idl:
        * html/canvas/WebGLExtension.cpp:
        (WebCore::WebGLExtension::WebGLExtension):
        * html/canvas/WebGLExtension.h:
        (WebCore::WebGLExtension::ref):
        (WebCore::WebGLExtension::deref):
        (WebCore::WebGLExtension::context):
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::~WebGLRenderingContext):
        (WebCore::WebGLRenderingContext::getExtension):
        * html/canvas/WebGLRenderingContext.h:
        * html/canvas/WebKitLoseContext.cpp:
        (WebCore::WebKitLoseContext::WebKitLoseContext):
        (WebCore::WebKitLoseContext::create):
        (WebCore::WebKitLoseContext::loseContext):
        * html/canvas/WebKitLoseContext.h:
        * html/canvas/WebKitLoseContext.idl: Updated the ownership model for WebGL
        canavs rendering contexts to match the model for 2D canvas rendering
        contexts. This makes garbage collection a lot more straightforward, but
        it also makes the behavior of these objects more reliable. (Previously,
        satellite objects would magically stop working when the last reference
        to their owner object was dropped. Now, satellite objects keep their owner
        alive through reference counting.)

        * loader/appcache/DOMApplicationCache.idl:
        * page/BarInfo.idl:
        * page/Console.idl:
        * page/DOMSelection.idl:
        * page/Geolocation.idl:
        * page/History.idl:
        * page/Location.idl:
        * page/Navigator.idl:
        * page/Screen.idl:
        * page/WorkerNavigator.idl:
        * plugins/DOMMimeTypeArray.h:
        (WebCore::DOMMimeTypeArray::frame):
        * plugins/DOMMimeTypeArray.idl:
        * plugins/DOMPluginArray.h:
        (WebCore::DOMPluginArray::frame):
        * plugins/DOMPluginArray.idl:
        * storage/Storage.idl:
        * workers/WorkerLocation.idl: Opt in to autogeneration.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::~XMLHttpRequest):
        * xml/XMLHttpRequest.h:
        * xml/XMLHttpRequestUpload.cpp:
        (WebCore::XMLHttpRequestUpload::scriptExecutionContext):
        * xml/XMLHttpRequestUpload.h:
        (WebCore::XMLHttpRequestUpload::create):
        (WebCore::XMLHttpRequestUpload::ref):
        (WebCore::XMLHttpRequestUpload::deref):
        (WebCore::XMLHttpRequestUpload::xmlHttpRequest):
        (WebCore::XMLHttpRequestUpload::toXMLHttpRequestUpload):
        * xml/XMLHttpRequestUpload.idl: Updated the ownership model for XHR and
        its associated upload object to match the model for canvas. This makes
        garbage collection a lot more straightforward, but it also makes the
        behavior of these objects more reliable.

2011-04-24  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r84759.
        http://trac.webkit.org/changeset/84759
        https://bugs.webkit.org/show_bug.cgi?id=59306

        Caused gc-shadow.html to start crashing in V8. (Requested by
        dglazkov|away on #webkit).

        * dom/Node.cpp:
        (WebCore::NodeRendererFactory::createRendererAndStyle):
        (WebCore::Node::styleForRenderer):

2011-04-24  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by George Staikos.

        Handling of URLs like http:/example.com/ is incorrect
        https://bugs.webkit.org/show_bug.cgi?id=59300
        <rdar://problem/9231956>

        URLs like http:/example.com/ or http:example.com/ are now correctly
        canonicalized as http://example.com/
        
        The code still doesn't quite match other browsers - at least some
        other browsers seem to base parsing behavior on whether they
        recongize a scheme from a fixed list, and ignore whether // is
        present in the URL or not.
        
        * platform/KURL.cpp:
        (WebCore::isNonFileHierarchicalScheme): New helper function.
        (WebCore::KURL::parse): For a particular list of whitelisted schemes,
        assume they are hierarchical and need an authority even if there is no //
        after the :/

2011-04-24  Dan Bernstein  <mitz@apple.com>

        LLVM Compiler build fix.

        * page/ContentSecurityPolicy.cpp: Removed an unused function.

2011-04-24  Dominic Cooney  <dominicc@chromium.org>

        Reviewed by Dimitri Glazkov.

        Crash when adding a text node to a shadow root
        https://bugs.webkit.org/show_bug.cgi?id=59304

        Text nodes need to consult their host element for style.

        Test: fast/dom/shadow/append-child-text.html

        * dom/Node.cpp:
        (WebCore::NodeRendererFactory::styleForRenderer):
        (WebCore::NodeRendererFactory::createRendererAndStyle):
        (WebCore::Node::styleForRenderer): forward to NodeRendererFactory

2011-04-24  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Update Content-Security-Policy syntax to match new version of spec
        https://bugs.webkit.org/show_bug.cgi?id=59291

        Brandon removed disable-xss-protection in favor of unsafe-inline and
        allow-eval in favor of unsafe-eval.  This change in syntax also means
        the options directive no longer exists.

        * page/ContentSecurityPolicy.cpp:
        (WebCore::CSPSourceList::allowInline):
        (WebCore::CSPSourceList::allowEval):
        (WebCore::CSPSourceList::CSPSourceList):
        (WebCore::CSPSourceList::parseSource):
        (WebCore::CSPSourceList::addSourceUnsafeInline):
        (WebCore::CSPSourceList::addSourceUnsafeEval):
        (WebCore::CSPDirective::allowInline):
        (WebCore::CSPDirective::allowEval):
        (WebCore::ContentSecurityPolicy::allowJavaScriptURLs):
        (WebCore::ContentSecurityPolicy::allowInlineEventHandlers):
        (WebCore::ContentSecurityPolicy::allowInlineScript):
        (WebCore::ContentSecurityPolicy::allowEval):
        (WebCore::ContentSecurityPolicy::addDirective):
        * page/ContentSecurityPolicy.h:

2011-04-24  Dan Bernstein  <mitz@apple.com>

        Reviewed by Maciej Stachowiak.

        Manual test for <rdar://problem/9329741> Reproducible crash in WebChromeClient::invalidateContentsAndWindow() on simonscat.com
        https://bugs.webkit.org/show_bug.cgi?id=59299

        * manual-tests/back-from-document-with-scrollbar.html: Added.

2011-04-24  Rik Cabanier  <cabanier@adobe.com>

        Reviewed by Simon Fraser.

        Tables are not rendered correctly
        https://bugs.webkit.org/show_bug.cgi?id=59138

        Test: fast/table/auto-100-percent-width.html

        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::computePreferredLogicalWidths):

2011-04-23  Simon Fraser  <simon.fraser@apple.com>

        Fix Windows build, which complains about unreachable code.

        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::hasLayerForHorizontalScrollbar):
        (WebCore::ScrollableArea::hasLayerForVerticalScrollbar):
        (WebCore::ScrollableArea::hasLayerForScrollCorner):

2011-04-23  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Area under composited scrollbars not repainted in WebKit2 on scrolling
        https://bugs.webkit.org/show_bug.cgi?id=59294
        <rdar://problem/9299062>
        
        When computing the rect that can be copied on scrolling, we normally
        exclude the areas occupied by overlay scrollbars to avoid smeared scrollbars;
        the assumption is that other code will repaint these areas. However, when
        scrollbars are in their own compositing layers, we can, and should
        copy the entire area.

        Not testable in DRT because it does not allow tests to use overlay scrollbars.

        * platform/ScrollView.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::rectToCopyOnScroll):
        New method, with code moved from scrollContents and fixed to look
        for scrollbars in layers.
        (WebCore::ScrollView::scrollContents):
        Call rectToCopyOnScroll().
        
        * platform/ScrollableArea.h:
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::hasLayerForHorizontalScrollbar):
        (WebCore::ScrollableArea::hasLayerForVerticalScrollbar):
        (WebCore::ScrollableArea::hasLayerForScrollCorner):
        Methods we can call outside of the ACCELERATED_COMPOSITING #ifdef.

2011-04-23  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r84740.
        http://trac.webkit.org/changeset/84740
        https://bugs.webkit.org/show_bug.cgi?id=59290

        change breaks apple internal builds and is incorrect
        (Requested by smfr on #webkit).

        * WebCore.exp.in:
        * page/FrameView.cpp:
        * page/FrameView.h:
        * platform/ScrollTypes.h:
        * platform/ScrollableArea.h:
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::paint):
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

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

        Reviewed by Simon Fraser.

        <rdar://problem/8970549> WebFindOptionsAtWordStarts fails with Japanese words
        https://bugs.webkit.org/show_bug.cgi?id=59288

        * platform/text/mac/TextBoundaries.mm:
        (WebCore::wordStringTokenizer): Added this helper function.
        (WebCore::findNextWordFromIndex): Changed to use a CFStringTokenizer with kCFStringTokenizerUnitWord,
        whose behavior is not locale-dependent.

2011-04-23  Dominic Cooney  <dominicc@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Nodes in shadow DOM should not be GCed while their hosts are alive
        https://bugs.webkit.org/show_bug.cgi?id=59284

        Test: fast/dom/shadow/gc-shadow.html

        * bindings/v8/V8GCController.cpp:
        (WebCore::calculateGroupId): group shadow nodes with their hosts

2011-04-23  MORITA Hajime <morrita@google.com>

        Reviewed by Dimitri Glazkov.

        [Refactoring] NodeRenderParentDetector should be NodeRenderFactory
        https://bugs.webkit.org/show_bug.cgi?id=59280
        
        - Rename NodeRenderParentDetector to NodeRendererFactory
        - move createRendererAndStyle() and createRendererIfNeeded to
          NodeRendererFactory

        No new test, no behavioral change.
        
        * dom/Node.cpp:
        (WebCore::NodeRendererFactory::NodeRendererFactory):
        (WebCore::NodeRendererFactory::document):
        (WebCore::NodeRendererFactory::nextRenderer):
        (WebCore::NodeRendererFactory::findVisualParent):
        (WebCore::NodeRendererFactory::shouldCreateRenderer):
        (WebCore::NodeRendererFactory::createRendererAndStyle):
        (WebCore::NodeRendererFactory::createRendererIfNeeded):
        (WebCore::Node::parentNodeForRenderingAndStyle):
        (WebCore::Node::createRendererIfNeeded):
        * dom/Node.h:
        * html/HTMLDetailsElement.cpp:
        (WebCore::DetailsSummaryElement::detailsElement): Added const_cast due to the chage on parentNodeForRenderingAndStyle() 

2011-04-23  MORITA Hajime  <morrita@google.com>

        Reviewed by Kent Tamura.

        REGRESSION: (non-Mac) <meter>'s bar part isn't rendered for with -webkit-writing-mode: vertical-lr from r82899
        https://bugs.webkit.org/show_bug.cgi?id=59281

        Styles for -webkit-meter-bar and -webkit-progress-bar missed width property, which caused unexpected layout results
        for vertical writing modes. This fix added a width property for each of them.
        
        Tests: fast/dom/HTMLMeterElement/meter-writing-mode.html
               fast/dom/HTMLProgressElement/progress-writing-mode.html

        * css/html.css:
        (meter::-webkit-meter-bar):
        (progress::-webkit-progress-bar):

2011-04-23  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fix. Added missing header.
        
        * platform/graphics/filters/FEDropShadow.h:

2011-04-23  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Maciej Stachowiak.

        REGRESSION (r80812): window.print();window.close() doesn't work in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=59241
        <rdar://problem/9150861>

        Covered by manual-tests/print-after-window-close.html.

        Re-fixing <https://bugs.webkit.org/show_bug.cgi?id=51357> in a way that doesn't cause the
        regression.

        * loader/MainResourceLoader.cpp: (WebCore::MainResourceLoader::didCancel): We shouldn't be
        doing complicated work while the loader is half-canceled.

        * manual-tests/print-after-window-close.html: Extended to actually print a non-empty page,
        thus being more practical.

        * page/Chrome.cpp: (WebCore::Chrome::print): Added a FIXME about a need for PageGroupLoadDeferrer.
        It's too scary for me to try now.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::DOMWindow):
        (WebCore::DOMWindow::finishedLoading):
        * page/DOMWindow.h:
        Reverted the previous fix for <https://bugs.webkit.org/show_bug.cgi?id=51357>.

2011-04-19  Vitaly Repeshko  <vitalyr@chromium.org>

        Reviewed by Adam Barth.

        [V8] Use implicit references for V8 listeners on DOM nodes.
        https://bugs.webkit.org/show_bug.cgi?id=58953

        Instead of allocating an auxiliary V8 array referencing V8
        listener objects associated with a DOM node and using an extra
        pointer in every DOM node wrapper, we can register implicit
        references between nodes and their listeners during GC. This also
        makes V8 bindings more aligned with JSC bindings.

        No new tests because this is a refactoring.

        * bindings/scripts/CodeGeneratorV8.pm: Stopped generating the
        listener cache internal field for DOM nodes.
        * bindings/v8/V8AbstractEventListener.h: Exposed the lister handle
        to the GC.
        (WebCore::V8AbstractEventListener::existingListenerObjectPeristentHandle):
        * bindings/v8/V8GCController.cpp: Started using implicit references.
        (WebCore::GrouperVisitor::visitDOMWrapper):
        * dom/EventTarget.h: Implemented an iterator over all listeners.
        (WebCore::EventListenerIterator):

2011-04-22  Jon Lee  <jonlee@apple.com>

        Reviewed by Beth Dakin.

        Overlay scroller hard to see on pages with dark background (59183)
        https://bugs.webkit.org/show_bug.cgi?id=59183
        <rdar://problem/8975367>

        * WebCore.exp.in: adding method to allow changing style
        * page/FrameView.cpp:
        (WebCore::FrameView::recommendedScrollbarOverlayStyle): overridden to suggest a style based on CSS background color
        * page/FrameView.h:
        * platform/ScrollTypes.h: new enum to represent different overlay scrollbar styles
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::recommendedScrollbarOverlayStyle): new virtual function to return a suggested overlay style
        * platform/ScrollableArea.h:
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::paint):
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

2011-04-22  Chris Evans  <cevans@chromium.org>

        Reviewed by Adam Barth.

        Upgrade CSS loads from mixed content warning (displayed) to mixed
        content error (ran)
        https://bugs.webkit.org/show_bug.cgi?id=59056

        Test: http/tests/security/mixedContent/insecure-css-in-iframe.html
        Test: http/tests/security/mixedContent/insecure-css-in-main-frame.html

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::canRequest): CSS loads are running rather than displaying content.

2011-04-22  Geoffrey Garen  <ggaren@apple.com>

        Fixed an upside-down conditional in my last check-in.

        * bindings/js/JSDOMApplicationCacheCustom.cpp:
        (WebCore::isObservable):

2011-04-22  Geoffrey Garen  <ggaren@apple.com>
        
        Rolled back in r84725 and r84728 with appcache crash fixed.

        Reviewed by Oliver Hunt.

        Removed a use of markDOMObjectWrapper: DOMWindow
        https://bugs.webkit.org/show_bug.cgi?id=59260

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::visitChildren): No need to mark explicitly, since
        we use the opaque roots system now.

        * bindings/js/JSNavigatorCustom.cpp: Ditto.

        * bindings/scripts/CodeGeneratorJS.pm: Added autogeneration for objects
        whose opaque roots are frames.

        * css/StyleMedia.h:
        (WebCore::StyleMedia::frame): Added an accessor for the sake of GC.

        * css/StyleMedia.idl:
        * loader/appcache/DOMApplicationCache.idl:
        * page/BarInfo.idl:
        * page/Console.idl:
        * page/DOMSelection.idl:
        * page/Geolocation.idl:
        * page/History.idl:
        * page/Location.idl:
        * page/Navigator.idl:
        * page/Screen.idl:
        * storage/Storage.idl: Updated to use the opaque roots system.

2011-04-22  Nate Chapin  <japhet@chromium.org>

        Reviewed by Adam Barth.

        Don't use XMLTreeViewer when script is disabled (it uses Javascript
        to build a prettified version of the xml document).
        https://bugs.webkit.org/show_bug.cgi?id=59113

        * xml/XMLTreeViewer.cpp:
        (WebCore::XMLTreeViewer::transformDocumentToTreeView):

2011-04-22  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r84725 and r84728.
        http://trac.webkit.org/changeset/84725
        http://trac.webkit.org/changeset/84728
        https://bugs.webkit.org/show_bug.cgi?id=59270

        It broke http/tests/appcache tests (Requested by Ossy on
        #webkit).

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::visitChildren):
        * bindings/js/JSNavigatorCustom.cpp:
        (WebCore::JSNavigator::visitChildren):
        * bindings/scripts/CodeGeneratorJS.pm:
        * css/StyleMedia.h:
        * css/StyleMedia.idl:
        * loader/appcache/DOMApplicationCache.idl:
        * page/BarInfo.idl:
        * page/Console.idl:
        * page/DOMSelection.idl:
        * page/DOMWindow.h:
        (WebCore::DOMWindow::optionalScreen):
        (WebCore::DOMWindow::optionalSelection):
        (WebCore::DOMWindow::optionalHistory):
        (WebCore::DOMWindow::optionalCrypto):
        (WebCore::DOMWindow::optionalLocationbar):
        (WebCore::DOMWindow::optionalMenubar):
        (WebCore::DOMWindow::optionalPersonalbar):
        (WebCore::DOMWindow::optionalScrollbars):
        (WebCore::DOMWindow::optionalStatusbar):
        (WebCore::DOMWindow::optionalToolbar):
        (WebCore::DOMWindow::optionalConsole):
        (WebCore::DOMWindow::optionalNavigator):
        (WebCore::DOMWindow::optionalLocation):
        (WebCore::DOMWindow::optionalMedia):
        (WebCore::DOMWindow::optionalSessionStorage):
        (WebCore::DOMWindow::optionalLocalStorage):
        (WebCore::DOMWindow::optionalPerformance):
        * page/Geolocation.idl:
        * page/History.idl:
        * page/Location.idl:
        * page/Navigator.h:
        (WebCore::Navigator::optionalGeolocation):
        * page/Navigator.idl:
        * page/Screen.idl:
        * storage/Storage.idl:

2011-04-22  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Kent Tamura.

        Change SVG-related shadow root checks to use isSVGShadowRoot.
        https://bugs.webkit.org/show_bug.cgi?id=59237

        Covered by existing tests, no behavior change.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::SelectorChecker::checkSelector): Use isSVGShadowRoot.
        * svg/SVGUseElement.cpp:
        (WebCore::ShadowTreeUpdateBlocker::while): Ditto.
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::insertedIntoDocument): Ditto.

2011-04-22  Geoffrey Garen  <ggaren@apple.com>

        Mac build fix.

        * page/DOMWindow.h:
        (WebCore::DOMWindow::optionalApplicationCache): Restored this function,
        which is used after all.

2011-04-22  Geoffrey Garen  <ggaren@apple.com>

        Mac build fix.

        * page/DOMWindow.h:
        (WebCore::DOMWindow::optionalApplicationCache): Restored this function,
        which is used after all.

2011-04-22  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Removed a use of markDOMObjectWrapper: DOMWindow
        https://bugs.webkit.org/show_bug.cgi?id=59260

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::visitChildren): No need to mark explicitly, since
        we use the opaque roots system now.

        * bindings/js/JSNavigatorCustom.cpp: Ditto.

        * bindings/scripts/CodeGeneratorJS.pm: Added autogeneration for objects
        whose opaque roots are frames.

        * css/StyleMedia.h:
        (WebCore::StyleMedia::frame): Added an accessor for the sake of GC.

        * css/StyleMedia.idl:
        * loader/appcache/DOMApplicationCache.idl:
        * page/BarInfo.idl:
        * page/Console.idl:
        * page/DOMSelection.idl:
        * page/Geolocation.idl:
        * page/History.idl:
        * page/Location.idl:
        * page/Navigator.idl:
        * page/Screen.idl:
        * storage/Storage.idl: Updated to use the opaque roots system.

2011-04-22  Xiaomei Ji  <xji@chromium.org>

        Reviewed by Ryosuke Niwa.

        move caret by word in visual order returns wrong result when caret itself is at word boundary.
        https://bugs.webkit.org/show_bug.cgi?id=58504.

        positionBeforeNextWord should take care that the current position is after current word.
        positionAfterPreviousWord should take care that the current positin is before current word.

        * editing/visible_units.cpp:
        (WebCore::positionBeforeNextWord):
        (WebCore::positionAfterPreviousWord):

2011-04-19  Jer Noble  <jer.noble@apple.com>

        Reviewed by Daniel Bates.

        Full Screen from within an <iframe> does not cause <iframe> to resize.
        https://bugs.webkit.org/show_bug.cgi?id=58638

        Tests: fullscreen/full-screen-frameset.html

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector): Add the 
            -webkit-full-screen pseudo class to frame elements which contain
            full screen elements.
        * css/fullscreen.css:
        (iframe:-webkit-full-screen): Add iframe-specific styling rules.
        * dom/Document.cpp:
        (WebCore::Document::setContainsFullScreenElementRecursively): Added.  Walk up each
            successive document owner element, calling setContainsFullScreenElement() if 
            owner is a frame element.
        (WebCore::Document::fullScreenIsAllowedForElement): Use the new Element::isFrameElementBase
            call instead of checking the element's tag name.
        (WebCore::Document::webkitWillEnterFullScreenForElement): Mark any containing
            iframes as containing a full screen element.
        (WebCore::Document::webkitWillExitFullScreenForElement): Ditto.
        * dom/Element.h:
        (WebCore::Element::isFrameElementBase): Added.
        * html/HTMLFrameElement.h:
        (WebCore::HTMLFrameElement::allowFullScreen): Disable full screen from within
            HTMLFrameElements.
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::setContainsFullScreenElement): Added.
        * html/HTMLFrameElementBase.h:
        (WebCore::HTMLFrameElementBase::containsFullScreenElement): Added.
        (WebCore::HTMLFrameElementBase::isFrameElementBase): Added.

2011-04-22  Michael Saboff  <msaboff@apple.com>

        Reviewed by Maciej Stachowiak.

        Creating copy of ContainerNode's when inserting or removing is inefficient
        https://bugs.webkit.org/show_bug.cgi?id=58695

        Eliminated node copying in willRemove() and insertedIntoDocument().

        No new tests as this is a more efficient implementation of
        existing code that is covered by existing tests.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::willRemove): Changed method to use
        RefPtr<> to protect against modification during removal.
        (WebCore::ContainerNode::insertedIntoDocument): Changed method to use
        RefPtr<> and two other deletion checks to protect against 
        modification during insertion.

2011-04-22  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        We have an autogenerator, so use it
        https://bugs.webkit.org/show_bug.cgi?id=59247

        * bindings/js/JSCSSRuleCustom.cpp:
        * bindings/js/JSCSSRuleListCustom.cpp:
        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        * bindings/js/JSCSSValueCustom.cpp:
        * bindings/js/JSCanvasRenderingContextCustom.cpp:
        * bindings/js/JSDOMImplementationCustom.cpp:
        * bindings/js/JSDOMStringMapCustom.cpp:
        * bindings/js/JSHTMLCollectionCustom.cpp:
        * bindings/js/JSNamedNodeMapCustom.cpp:
        * bindings/js/JSNodeCustom.h:
        * bindings/js/JSNodeListCustom.cpp:
        * bindings/js/JSStyleSheetCustom.cpp:
        * bindings/js/JSStyleSheetListCustom.cpp: Removed repetitive hand-written code.

        * bindings/scripts/CodeGeneratorJS.pm: Augmented autogenerator to do the job.

        * css/CSSRule.idl:
        * css/CSSRuleList.idl:
        * css/CSSStyleDeclaration.idl:
        * css/CSSValue.idl:
        * css/MediaList.idl:
        * css/StyleSheet.idl:
        * css/StyleSheetList.idl:
        * dom/DOMImplementation.idl:
        * dom/DOMStringMap.idl:
        * dom/NamedNodeMap.idl:
        * dom/Node.idl:
        * dom/NodeList.idl:
        * html/DOMTokenList.idl:
        * html/HTMLCollection.idl:
        * html/canvas/CanvasRenderingContext.idl: Updated attributes to plug into
        the autogenerator.

2011-04-22  Beth Dakin  <bdakin@apple.com>

        Reviewed by Maciej Stachowiak.

        https://bugs.webkit.org/show_bug.cgi?id=59223
        REGRESSION (r82185): iframe not displayed after navigation back to cached page

        Manual test added.
        * manual-tests/frame-layout-on-back.html: Added.
        * manual-tests/resources/empty-document-goes-back.html: Added.
        * manual-tests/resources/simple-iframe.html: Added.

2011-04-22  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Sam Weinig.

        HTMLFormControlElement::labels should allow custom attributes.
        https://bugs.webkit.org/show_bug.cgi?id=59128

        Cache the labels list when it is created and keep using it for future
        labels calls.

        Test: fast/forms/labels-custom-property.html

        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::labels):

2011-04-22  Adrienne Walker  <enne@google.com>

        Reviewed by James Robinson.

        [chromium] Remove minimum texture size for compositor tiling
        https://bugs.webkit.org/show_bug.cgi?id=59236

        This was mistakenly committed in r83915 and causes bad filtering
        on very small textures.

        Tests: compositing/images/content-image-change.html

        * platform/graphics/chromium/LayerTilerChromium.cpp:
        (WebCore::LayerTilerChromium::setTileSize):

2011-04-22  Beth Dakin  <bdakin@apple.com>

        Reviewed by Maciej Stachowiak.

        https://bugs.webkit.org/show_bug.cgi?id=59223
        REGRESSION (r82185): iframe not displayed after navigation back to cached page
        -and corresponding-
        <rdar://problem/9323763>

        Cache the scroll position in Document::setInPageCache() instead of 
        FrameView::resetScrollbarsAndClearContentsSize(), and only clear the contents size 
        for the mainFrame(). Still resetScrollbars() for other frames, which matches pre-
        r82185 code.
        * dom/Document.cpp:
        (WebCore::Document::setInPageCache):
        * page/FrameView.cpp:
        (WebCore::FrameView::resetScrollbarsAndClearContentsSize):

2011-04-22  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Kent Tamura.

        Let the RenderTheme decide if an input type should have a spinner
        https://bugs.webkit.org/show_bug.cgi?id=59246

        Whether an input should have a spinner or not should
        be a UI decision made by the RenderTheme. Remove
        WebCore's default hasSpinButton values and defer
        to the RenderTheme.

        No change in functionality, covered by existing tests.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::isRangeControl): expose isRangeControl
        for possible RenderTheme queries.
        * html/HTMLInputElement.h:

        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::createSubtreeIfNeeded):
        (WebCore::RenderTextControlSingleLine::createInnerTextStyle):
        For both of these ask the render theme if the input should
        have a spinner.

        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::shouldHaveSpinButtonForInputElement):
        Steppable inputs (number, date, and range) but not range
        should have spinners. This does not change existing behavior.
        * rendering/RenderTheme.h:

        * dom/InputElement.h:
        * html/BaseDateAndTimeInputType.cpp: remove hasSpinButton.
        * html/BaseDateAndTimeInputType.h: remove hasSpinButton.
        * html/InputType.cpp: remove hasSpinButton.
        * html/InputType.h: remove hasSpinButton.
        * html/NumberInputType.cpp: remove hasSpinButton.
        * html/NumberInputType.h: remove hasSpinButton.

2011-04-22  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Kent Tamura.

        Don't rely on hasSpinButton to check if an input type can be stepped
        https://bugs.webkit.org/show_bug.cgi?id=59224

        Add isSteppable to know for certain if an input type can
        be stepped or not. Previously we were checking if the input
        has a spin control or is the range input type. These are UI
        details, but the step functionality does not require there
        to be a UI.

        No change in behavior, covered by existing tests.

        * html/BaseDateAndTimeInputType.cpp:
        (WebCore::BaseDateAndTimeInputType::isSteppable):
        * html/BaseDateAndTimeInputType.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::isSteppable):
        (WebCore::HTMLInputElement::stepUpFromRenderer): remove the
        check for a spinner and range control and instead ASSERT
        that the type is steppable.
        * html/HTMLInputElement.h:
        * html/InputType.cpp:
        (WebCore::InputType::isSteppable):
        * html/InputType.h:
        * html/NumberInputType.cpp:
        (WebCore::NumberInputType::isSteppable):
        * html/NumberInputType.h:
        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::isSteppable):
        * html/RangeInputType.h:

2011-04-22  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        CSP frame-src is missing
        https://bugs.webkit.org/show_bug.cgi?id=58643

        In this patch, I've audited all the callers to
        SecurityOrigin::canDisplay to make sure they all the appropriate
        Content-Security-Policy method as well.  I'm not sure how to test all
        these cases, but making this changes fixed the frame-src test.

        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::loadMediaPlayerProxyPlugin):
        (WebCore::SubframeLoader::createJavaAppletWidget):
        (WebCore::SubframeLoader::loadSubframe):
        (WebCore::SubframeLoader::loadPlugin):
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::create):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::canRequest):
        (WebCore::CachedResourceLoader::requestResource):
            - While I was understanding this code, I fixed the FIXME here.
        * loader/cache/CachedResourceLoader.h:

2011-04-22  Adrienne Walker  <enne@google.com>

        Reviewed by Simon Fraser.

        Clear shared graphics context when destroying CanvasRenderingContext2D.
        https://bugs.webkit.org/show_bug.cgi?id=59212

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::~CanvasRenderingContext2D):

2011-04-22  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Ryosuke Niwa.

        End/Home keys do not work in a contentEditable element
        https://bugs.webkit.org/show_bug.cgi?id=50564

        Changing logical[Start/End]OfLine to return a valid VisiblePosition for for editable contexts that are
        inline and share a line with non-editable content.

        Test: editing/selection/modify-by-lineboundary-in-inline-editable-contexts.html

        * editing/visible_units.cpp:
        (WebCore::logicalStartOfLine):
        (WebCore::logicalEndOfLine):

2011-04-22  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Kent Tamura.

        Make showTree/showTreeForThis aware of the shadow DOM
        https://bugs.webkit.org/show_bug.cgi?id=52965

        No new tests, because this code is only compiled in DEBUG.

        * dom/Node.cpp:
        (WebCore::traverseTreeAndMark): Moved tree traversal logic here, adding
            recursive sub-traversal of the shadow tree.
        (WebCore::Node::showTreeAndMark): Changed to use the new tree traversal function.

2011-04-22  Sam Weinig  <sam@webkit.org>

        Reviewed by Gavin Barraclough and Oliver Hunt.

        Arrays should participate in global object forwarding fun
        https://bugs.webkit.org/show_bug.cgi?id=59215

        Change callers of constructArray to use the new variant that takes
        a global object.

        * bindings/js/JSClipboardCustom.cpp:
        (WebCore::JSClipboard::types):
        * bindings/js/JSConsoleCustom.cpp:
        (WebCore::JSConsole::profiles):
        * bindings/js/JSJavaScriptCallFrameCustom.cpp:
        (WebCore::JSJavaScriptCallFrame::scopeChain):
        * bindings/js/JSMessageEventCustom.cpp:
        (WebCore::JSMessageEvent::ports):
        * bindings/js/JSScriptProfileNodeCustom.cpp:
        (WebCore::JSScriptProfileNode::children):
        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::toJS):
        (WebCore::JSWebGLRenderingContext::getAttachedShaders):
        (WebCore::JSWebGLRenderingContext::getSupportedExtensions):

2011-04-22  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Unreviewed typo fix after r84522.

        * WebCore.pro:

2011-04-22  Daniel Bates  <dbates@rim.com>

        Fix misspelled word in comment; tagets => targets.

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

2011-04-21  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Removed a use of markDOMObjectWrapper: Element and Document
        https://bugs.webkit.org/show_bug.cgi?id=59178

        * GNUmakefile.list.am:
        * UseJSC.cmake:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp: Build!

        * bindings/js/JSDOMImplementationCustom.cpp:
        (WebCore::JSDOMImplementationOwner::isReachableFromOpaqueRoots):
        (WebCore::JSDOMImplementationOwner::finalize):
        (WebCore::wrapperOwner):
        (WebCore::wrapperContext):
        (WebCore::toJS): Use the opaque roots system for DOMImplementation. Also,
        DOMImplementation does not need to keep its document wrapper alive, since
        there's no DOM API for getting a DOMImplementation's document.

        * bindings/js/JSDOMStringMapCustom.cpp:
        (WebCore::JSDOMStringMapOwner::isReachableFromOpaqueRoots):
        (WebCore::JSDOMStringMapOwner::finalize):
        (WebCore::wrapperOwner):
        (WebCore::wrapperContext):
        (WebCore::toJS): Use the opaque roots system for DOMStringMap.

        * bindings/js/JSDOMTokenListCustom.cpp: Added.
        (WebCore::JSDOMTokenListOwner::isReachableFromOpaqueRoots):
        (WebCore::JSDOMTokenListOwner::finalize):
        (WebCore::wrapperOwner):
        (WebCore::wrapperContext):
        (WebCore::toJS): Use the opaque roots system for DOMTokenList.

        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::JSDocument::visitChildren):
        * bindings/js/JSElementCustom.cpp: No more need for explicit marking.

        * bindings/scripts/CodeGeneratorV8.pm: Boo on whoever made this design decision.

        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::DOMImplementation):
        (WebCore::DOMImplementation::createDocument):
        (WebCore::DOMImplementation::createHTMLDocument):
        * dom/DOMImplementation.h:
        (WebCore::DOMImplementation::create):
        (WebCore::DOMImplementation::ref):
        (WebCore::DOMImplementation::deref):
        (WebCore::DOMImplementation::document): Fixed the DOMImplementation
        ownership model to match other satellite objects in the DOM. This was
        necessary to fix some crashes due to incorrect reference counting.

        * dom/DOMImplementation.idl:
        * dom/DOMStringMap.idl:
        * dom/Document.cpp:
        (WebCore::Document::~Document):
        * dom/Document.h:
        * dom/Element.cpp:
        * dom/Element.h:
        * dom/Element.idl:
        * html/DOMTokenList.idl: Updated to match changes above.

2011-04-22  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Rounded corners don't looks smooth when background-image is a gradient
        https://bugs.webkit.org/show_bug.cgi?id=59213
        
        Add the "shrink background" behavior to the slow background
        drawing code path.

        Test: fast/backgrounds/gradient-background-leakage.html

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::backgroundRectAdjustedForBleedAvoidance):
        Utility function that returns a shrunk border rect based
        on the context scale.
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        Use backgroundRectAdjustedForBleedAvoidance() in both the fast
        and slow paths.

2011-04-22  Xiaomei Ji  <xji@chromium.org>

        Reviewed by David Hyatt.

        Local caret rectangle calculation should be relative to its containing block.
        https://bugs.webkit.org/show_bug.cgi?id=49508.

        InlineBox and caret rectangle are positioned relative to its containing block.
        So its left and right edge value should be relative to its containing block as well. 

        Test: fast/forms/cursor-at-editable-content-boundary.html

        * rendering/RenderText.cpp:
        (WebCore::RenderText::localCaretRect):

2011-04-22  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Darin Fisher.

        REGRESSION: left property broken with position:fixed elements in RTL documents
        https://bugs.webkit.org/show_bug.cgi?id=59204
        http://code.google.com/p/chromium/issues/detail?id=80216

        Test: fast/block/positioning/rtl-fixed-positioning.html
              fast/block/positioning/vertical-rl/fixed-positioning.html

        Returning the proper scroll offsets for fixed position content in RTL documents.
        We regressed to X and Y offsets not updating while scrolling when we clamped to zero,
        but RTL documents scroll in negative space.

        * page/FrameView.cpp:
        (WebCore::FrameView::scrollXForFixedPosition): Properly handling RTL documents where
        the scroll origin and offsets are negative.
        (WebCore::FrameView::scrollYForFixedPosition): Properly handling vertical writing-
        mode RTL documents, like above.
        * platform/ScrollView.h:
        (WebCore::ScrollView::scrollOrigin): Changing this accessor to const.

2011-04-22  Justin Schuh  <jschuh@chromium.org>

        Reviewed by Eric Seidel.

        Should assert on invalid type in FEComponentTransfer::apply
        https://bugs.webkit.org/show_bug.cgi?id=57959

        No functional change. No new tests needed.

        * platform/graphics/filters/FEComponentTransfer.cpp:
        (WebCore::FEComponentTransfer::apply):

2011-04-22  MORITA Hajime  <morrita@google.com>

        Unreviewed crash fix.

        * html/HTMLDetailsElement.cpp:
        (WebCore::DetailsSummaryElement::shouldInclude):

2011-04-22  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        Exclude scrollbars from the dirty rect passed to the document
        https://bugs.webkit.org/show_bug.cgi?id=59206

        No test added because functionality is unchanged.

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::paint): Compute a clip rectangle (analogous to the frame of the clip view
        in an NSScrollView) by subtracting non-overlay scrollbars, and intersect the document dirty rect
        with it. If the result is empty, avoid calling paintContents().

2011-04-22  Jer Noble  <jer.noble@apple.com>

        Reviewed by Maciej Stachowiak.

        Disable MediaPlayerPrivateAVFoundation when using old full screen mode.
        https://bugs.webkit.org/show_bug.cgi?id=59147

        Add a new isAVFoundationEnabled setting and check it before adding 
        MediaPlayerPrivateAVFoundationObjC to the media engine registry.

        * WebCore.exp.in:
        * page/Settings.cpp:
        * page/Settings.h:
        (WebCore::Settings::setAVFoundationEnabled): Added.
        (WebCore::Settings::isAVFoundationEnabled): Added.
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::installedMediaEngines): Check the settings added above.

2011-04-22  Sam Weinig  <sam@webkit.org>

        Reviewed by Gavin Barraclough.

        Remove remaining uses of deprecated version of toJS
        https://bugs.webkit.org/show_bug.cgi?id=59170

        * bindings/js/JSCanvasRenderingContext2DCustom.cpp:
        (WebCore::toJS):
        (WebCore::JSCanvasRenderingContext2D::strokeStyle):
        (WebCore::JSCanvasRenderingContext2D::fillStyle):
        (WebCore::JSCanvasRenderingContext2D::createPattern):
        * bindings/js/JSConsoleCustom.cpp:
        (WebCore::JSConsole::profiles):
        * bindings/js/JSCustomSQLStatementErrorCallback.cpp:
        (WebCore::JSSQLStatementErrorCallback::handleEvent):
        * bindings/js/JSDOMBinding.h:
        * bindings/js/JSDOMMimeTypeArrayCustom.cpp:
        (WebCore::JSDOMMimeTypeArray::nameGetter):
        * bindings/js/JSDOMPluginArrayCustom.cpp:
        (WebCore::JSDOMPluginArray::nameGetter):
        * bindings/js/JSDOMPluginCustom.cpp:
        (WebCore::JSDOMPlugin::nameGetter):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::namedItemGetter):
        (WebCore::JSDOMWindow::event):
        * bindings/js/JSEventTarget.cpp:
        (WebCore::toJS):
        * bindings/js/JSInjectedScriptHostCustom.cpp:
        Propagate stored global object down access chain.

        (WebCore::InjectedScriptHost::nodeAsScriptValue):
        Replace use of deprecated toJS overload with explicit call to deprecatedGlobalObjectForPrototype.

        (WebCore::JSInjectedScriptHost::currentCallFrame):
        (WebCore::JSInjectedScriptHost::inspectedNode):
        * bindings/js/JSNamedNodeMapCustom.cpp:
        (WebCore::JSNamedNodeMap::nameGetter):
        * bindings/js/JSNodeListCustom.cpp:
        (WebCore::callNodeList):
        (WebCore::JSNodeList::nameGetter):
        * bindings/js/JSScriptProfileNodeCustom.cpp:
        (WebCore::JSScriptProfileNode::children):
        * bindings/js/JSStyleSheetListCustom.cpp:
        (WebCore::JSStyleSheetList::nameGetter):
        * bindings/js/JSXSLTProcessorCustom.cpp:
        (WebCore::JSXSLTProcessor::transformToFragment):
        (WebCore::JSXSLTProcessor::transformToDocument):
        * bindings/scripts/CodeGeneratorJS.pm:
        Propagate stored global object down access chain.

        * css/MediaQueryListListener.cpp:
        (WebCore::MediaQueryListListener::queryChanged):
        Replace use of deprecated toJS overload with explicit call to deprecatedGlobalObjectForPrototype,
        we will want refactor this to match other callbacks so we can remove this.

2011-04-22  Naoki Takano  <takano.naoki@gmail.com>

        Reviewed by Eric Seidel.

        [Chromium]Mac UI polish to add left/right padding space for autofill popup window.
        https://bugs.webkit.org/show_bug.cgi?id=58960
        http://code.google.com/p/chromium/issues/detail?id=51077

        No new test because Chromium Autofill popup window doesn't have any test framework.
        This assumes only AutofillPopupMenuClient gives TexFieldPart appearance.
        Only if Autofill popup window has right/left padding.
        The code should be removed after Autofill popup window logic is separated from WebKit to Chromium.

        * rendering/RenderThemeChromiumMac.h: Add popupInternalPaddingRight() and popupInternalPaddingLeft().
        * rendering/RenderThemeChromiumMac.mm:
        (WebCore::RenderThemeChromiumMac::popupInternalPaddingLeft): Return padding size only if TextFieldPart is specified.
        (WebCore::RenderThemeChromiumMac::popupInternalPaddingRight): Return padding size only if TextFieldPart is specified.

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

        Add code to enumerate all the functions imported by a particular Windows binary

        PEImage is where all the logic starts. It represents a single Portable Executable (PE)
        binary. The various enumerator classes are used in conjunction with PEImage to enumerate the
        modules and functions imported by that image.

        I couldn't figure out how to write a test for this. :-(

        Part of <http://webkit.org/b/51063> <rdar://problem/8769281> REGRESSION (WebKit2): No
        context menu appears when right-clicking on windowless Flash plugin

        Reviewed by Sam Weinig, and given a good once-over by Jeff Miller.

        * WebCore.vcproj/WebCore.vcproj: Added the new files.

        * platform/win/PEImage.cpp: Added.
        (WebCore::PEImage::PEImage): Checks that the module contains the expected magic numbers,
        then initializes m_ntHeaders using the module.
        (WebCore::PEImage::convertRVAToAddress): Converts a relative virtual address (RVA) to a
        non-relative address, which can then be dereferenced. (The PE format uses RVAs in lots of
        places.)
        (WebCore::PEImage::dataDirectoryEntryAddress): Returns the address of the data associated
        with the given entry in the image's DataDirectory.

        * platform/win/PEImage.h: Added.
        (WebCore::PEImage::isValid): We're a valid image if the validation code in our constructor
        succeeded, in which case m_ntHeaders will be set.

        * platform/win/ImportedFunctionsEnumerator.cpp: Added. This class enumerates all the
        functions imported by the image from a single module by walking the Import Name Table (INT)
        and Import Address Table (IAT).
        (WebCore::ImportedFunctionsEnumerator::ImportedFunctionsEnumerator): Initialize our members.
        (WebCore::ImportedFunctionsEnumerator::isAtEnd): The INT and IAT are both 0-terminated
        arrays.
        (WebCore::ImportedFunctionsEnumerator::next): Step to the next entries in the INT and IAT.
        (WebCore::ImportedFunctionsEnumerator::currentFunctionName): Gets the address of the
        function's name, if possible, using the INT.
        (WebCore::ImportedFunctionsEnumerator::addressOfCurrentFunctionPointer): Returns the address
        of the function pointer for the current function. This function pointer is used whenever
        code in m_image calls the current function. (A future patch will take advantage of this by
        overwriting this function pointer with another, thereby redirecting calls to that function.)

        * platform/win/ImportedFunctionsEnumerator.h: Added.

        * platform/win/ImportedModulesEnumeratorBase.h: Added. This base class is used by
        ImportedModulesEnumerator and DelayLoadedModulesEnumerator, and allows code to be written
        that works with either one.

        * platform/win/ImportedModulesEnumerator.cpp: Added. This class enumerates all the
        non-delay-loaded modules imported by the image by walking the image's import array.
        (WebCore::ImportedModulesEnumerator::ImportedModulesEnumerator): Module import information
        is stored in the IMAGE_DIRECTORY_ENTRY_IMPORT entry of the image's DataDirectory.
        (WebCore::ImportedModulesEnumerator::isAtEnd): The import array is 0-terminated.
        (WebCore::ImportedModulesEnumerator::next): Steps along the import array.
        (WebCore::ImportedModulesEnumerator::currentModuleName): Gets the address of the module's
        name.
        (WebCore::ImportedModulesEnumerator::functionsEnumerator): Get's the addresses of the INT
        and IAT for this module and wraps them in an ImportedFunctionsEnumerator.

        * platform/win/ImportedModulesEnumerator.h: Added.

        * platform/win/DelayLoadedModulesEnumerator.cpp: Added. This class enumerates all the
        delay-loaded modules that are imported by the given PEImage by walking the image's
        ImageDelayDescr array.
        (WebCore::DelayLoadedModulesEnumerator::DelayLoadedModulesEnumerator): Delay-load
        information is stored in the IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT entry of the image's
        DataDirectory.
        (WebCore::DelayLoadedModulesEnumerator::isAtEnd): The delay-loaded modules array is
        0-terminated.
        (WebCore::DelayLoadedModulesEnumerator::next): Steps along the delay-loaded modules array.
        (WebCore::DelayLoadedModulesEnumerator::currentModuleName): Gets the address of the module's
        name out of the descriptor.
        (WebCore::DelayLoadedModulesEnumerator::functionsEnumerator): Gets the INT and IAT for the
        current module out of the descriptor and makes an ImportedFunctionsEnumerator from them.
        (WebCore::DelayLoadedModulesEnumerator::convertPotentialRVAToAddress): Pre-VC7.0 images
        stored non-relative addresses in the ImageDelayDescr structures, while VC7.0 and later
        images store RVAs. This function abstracts away the difference.

        * platform/win/DelayLoadedModulesEnumerator.h: Added.

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

        Add a shared do-nothing window class that anyone can use

        Fixes <http://webkit.org/b/59102> WebKit has too many dummy window classes

        Reviewed by Anders Carlsson.

        * WebCore.vcproj/WebCore.vcproj: Added DefWndProcWindowClass.{cpp,h}. Moved Arena.cpp out of
        platform/win and into platform. Let VS reorder other files.

        * platform/graphics/ca/win/CACFLayerTreeHost.cpp:
        (WebCore::CACFLayerTreeHost::acceleratedCompositingAvailable): Changed to use the shared
        dummy window class instead of creating our own.

        * platform/win/DefWndProcWindowClass.cpp: Added.
        (WebCore::registerClass): Register it!
        (WebCore::defWndProcWindowClassName): Register it and return it!

        * platform/win/DefWndProcWindowClass.h: Added.

2011-04-21  MORITA Hajime  <morrita@google.com>

        Reviewed by Dimitri Glazkov.
        
        Content of <details> should be forwarded through the shadow DOM
        https://bugs.webkit.org/show_bug.cgi?id=59055

        - Made ShadowContentElement abstract and added shouldInclude() pure virtual method.
        - Added SummaryContentElement, DetailsContentElement, DetailsSummaryElement as
          subclasses of ShadowContentElement.
        - Gave two shadow children for HTMLDetailsElement. One is DetailsContentElement, that
          handles non-summary contents of <details>. Another is SummaryContentElement, that
          handles the main summary element.
        - Removed most of RenderDetails custom layout mechanism, which is replaced by
          ShadowContentElement subclasses.

        Tests: fast/html/details-add-child-1.html
               fast/html/details-add-child-2.html
               fast/html/details-remove-child-1.html
               fast/html/details-remove-child-2.html

        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::contentContainerFor):
        (WebCore::ShadowRoot::hostChildrenChanged):
        (WebCore::ShadowRoot::hasContentElement):
        * dom/ShadowRoot.h:
        * html/HTMLDetailsElement.cpp:
        (WebCore::DetailsContentElement::DetailsContentElement):
        (WebCore::DetailsContentElement::create):
        (WebCore::DetailsContentElement::shouldInclude):
        (WebCore::DetailsSummaryElement::DetailsSummaryElement):
        (WebCore::DetailsSummaryElement::create):
        (WebCore::DetailsSummaryElement::shouldInclude):
        (WebCore::HTMLDetailsElement::create):
        (WebCore::HTMLDetailsElement::HTMLDetailsElement):
        (WebCore::HTMLDetailsElement::ensureShadowSubtreeOf):
        (WebCore::findSummaryFor):
        (WebCore::HTMLDetailsElement::ensureMainSummary):
        (WebCore::HTMLDetailsElement::refreshMainSummary):
        (WebCore::HTMLDetailsElement::createShadowSubtree):
        * html/HTMLDetailsElement.h:
        * html/HTMLSummaryElement.cpp:
        (WebCore::SummaryContentElement::SummaryContentElement):
        (WebCore::SummaryContentElement::shouldInclude):
        (WebCore::SummaryContentElement::create):
        (WebCore::HTMLSummaryElement::createShadowSubtree):
        * html/shadow/ShadowContentElement.h:
        * rendering/RenderDetails.cpp:
        (WebCore::RenderDetails::RenderDetails):
        (WebCore::RenderDetails::addChild):
        * rendering/RenderDetails.h:
        * rendering/RenderSummary.cpp:
        * rendering/RenderSummary.h:

2011-04-21  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Extra GraphicsContext::save() in InlineTextBox::paintDecoration()
        https://bugs.webkit.org/show_bug.cgi?id=59109
        
        Remove an extraneous GraphicsContext::save() in InlineTextBox::paintDecoration().
        
        Add an assertion that fires when a GraphicsContext() is destroyed with a non-
        empty state stack. Fix canvas to avoid this assertion, since bad content might
        trigger it.
        
        Also add an assertion that fires for mismatched begin/endTransparencyLayers.

        Test: fast/text/multiple-text-shadow-alpha.html

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::~HTMLCanvasElement):
        Make sure that the CanvasRenderingContext goes away before the ImageBuffer,
        so that CanvasRenderingContext2D has a chance to unwind the state stack in
        the ImageBuffer's GraphicsContext.
        
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::~CanvasRenderingContext2D):
        Balance unmatched state saves in the canvas context.
        
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::~GraphicsContext):
        Assert that the stack is empty.
        
        * platform/graphics/cg/GraphicsContextPlatformPrivateCG.h:
        (WebCore::GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate):
        (WebCore::GraphicsContextPlatformPrivate::~GraphicsContextPlatformPrivate):
        (WebCore::GraphicsContextPlatformPrivate::beginTransparencyLayer):
        (WebCore::GraphicsContextPlatformPrivate::endTransparencyLayer):
        Changes to allow for asserting for unmatched transparency layer begin/ends.
        
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintDecoration):
        Remove an unbalanced save().

2011-04-22  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: add Save As context menu item to the TextViewer.
        https://bugs.webkit.org/show_bug.cgi?id=59196

        * inspector/front-end/ResourceView.js:
        (WebInspector.ResourceSourceFrame.prototype.requestContent):
        (WebInspector.ResourceSourceFrame.prototype.suggestedFileName):
        (WebInspector.RevisionSourceFrame.prototype.requestContent):
        (WebInspector.RevisionSourceFrame.prototype.suggestedFileName):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._createSourceFrame):
        (WebInspector.SourceFrameDelegateForScriptsPanel):
        (WebInspector.SourceFrameDelegateForScriptsPanel.prototype.formatSourceFilesToggled):
        (WebInspector.SourceFrameDelegateForScriptsPanel.prototype.suggestedFileName):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._initializeTextViewer):
        (WebInspector.SourceFrame.prototype.populateTextAreaContextMenu):
        (WebInspector.SourceFrame.prototype.suggestedFileName):
        (WebInspector.SourceFrameDelegate.prototype.formatSourceFilesToggled):
        (WebInspector.SourceFrameDelegate.prototype.suggestedFileName):
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer.prototype._contextMenu):
        (WebInspector.TextViewerDelegate.prototype.cancelEditing):
        (WebInspector.TextViewerDelegate.prototype.populateLineGutterContextMenu):
        (WebInspector.TextViewerDelegate.prototype.populateTextAreaContextMenu):
        (WebInspector.TextViewerDelegate.prototype.suggestedFileName):

2011-04-22  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [Chromium] Move detailed heap snapshots storage and processing into workers.
        https://bugs.webkit.org/show_bug.cgi?id=59094

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * gyp/streamline-inspector-source.sh:
        * inspector/front-end/DetailedHeapshotGridNodes.js:
        (WebInspector.HeapSnapshotGridNode.prototype.dispose):
        (WebInspector.HeapSnapshotObjectNode.prototype._createProvider):
        (WebInspector.HeapSnapshotInstanceNode.prototype._createProvider):
        (WebInspector.HeapSnapshotConstructorNode.prototype._createNodesProvider):
        (WebInspector.HeapSnapshotIteratorsTuple.prototype.dispose):
        (WebInspector.HeapSnapshotDiffNode.prototype.calculateDiff.diffCalculated):
        (WebInspector.HeapSnapshotDiffNode.prototype._createNodesProvider.createProvider):
        (WebInspector.HeapSnapshotDiffNode.prototype._createNodesProvider):
        (WebInspector.HeapSnapshotDominatorObjectNode.prototype._createProvider):
        (MixInSnapshotNodeFunctions):
        * inspector/front-end/DetailedHeapshotView.js:
        (WebInspector.HeapSnapshotSortableDataGrid.prototype.dispose):
        (WebInspector.HeapSnapshotSortableDataGrid.prototype.resetSortingCache):
        (WebInspector.HeapSnapshotDiffDataGrid.prototype.setBaseDataSource):
        (WebInspector.HeapSnapshotRetainingPathsList.prototype.dispose):
        (WebInspector.HeapSnapshotRetainingPathsList.prototype._resetPaths):
        (WebInspector.HeapSnapshotRetainingPathsList.prototype.setDataSource):
        (WebInspector.HeapSnapshotRetainingPathsList.prototype.showNext):
        (WebInspector.HeapSnapshotRetainingPathsList.prototype.searchCancelled):
        (WebInspector.HeapSnapshotRetainingPathsList.prototype._setRootChildrenForFinder):
        (WebInspector.DetailedHeapshotView.prototype.dispose):
        (WebInspector.DetailedHeapshotView.prototype.get profileWrapper):
        (WebInspector.DetailedHeapshotView.prototype.get baseProfileWrapper):
        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshotLoader):
        (WebInspector.HeapSnapshotLoader.prototype.finishLoading):
        (WebInspector.HeapSnapshotLoader.prototype.pushJSONChunk):
        (WebInspector.HeapSnapshot.prototype.pushBaseIds):
        (WebInspector.HeapSnapshot.prototype.createDiff):
        (WebInspector.HeapSnapshot.prototype._parseFilter):
        (WebInspector.HeapSnapshot.prototype.createEdgesProvider):
        (WebInspector.HeapSnapshot.prototype.createNodesProvider):
        (WebInspector.HeapSnapshot.prototype.createPathFinder):
        (WebInspector.HeapSnapshot.prototype.updateStaticData):
        (WebInspector.HeapSnapshotPathFinder):
        (WebInspector.HeapSnapshotPathFinder.prototype.updateRoots):
        (WebInspector.HeapSnapshotPathFinder.prototype._reset):
        * inspector/front-end/HeapSnapshotProxy.js:
        (WebInspector.HeapSnapshotRealWorker):
        (WebInspector.HeapSnapshotRealWorker.prototype._messageReceived):
        (WebInspector.HeapSnapshotRealWorker.prototype.postMessage):
        (WebInspector.HeapSnapshotRealWorker.prototype.terminate):
        (WebInspector.HeapSnapshotFakeWorker):
        (WebInspector.HeapSnapshotFakeWorker.prototype.postMessage):
        (WebInspector.HeapSnapshotFakeWorker.prototype.terminate):
        (WebInspector.HeapSnapshotFakeWorker.prototype._postMessageFromWorker):
        (WebInspector.HeapSnapshotWorker):
        (WebInspector.HeapSnapshotWorker.prototype.createObject):
        (WebInspector.HeapSnapshotWorker.prototype.dispose):
        (WebInspector.HeapSnapshotWorker.prototype.disposeObject):
        (WebInspector.HeapSnapshotWorker.prototype.callGetter):
        (WebInspector.HeapSnapshotWorker.prototype.callFactoryMethod.wrapCallback):
        (WebInspector.HeapSnapshotWorker.prototype.callFactoryMethod):
        (WebInspector.HeapSnapshotWorker.prototype.callMethod):
        (WebInspector.HeapSnapshotWorker.prototype._findFunction):
        (WebInspector.HeapSnapshotWorker.prototype._messageReceived):
        (WebInspector.HeapSnapshotWorker.prototype._postMessage):
        (WebInspector.HeapSnapshotProxyObject):
        (WebInspector.HeapSnapshotProxyObject.prototype._callWorker):
        (WebInspector.HeapSnapshotProxyObject.prototype.dispose):
        (WebInspector.HeapSnapshotProxyObject.prototype.disposeWorker):
        (WebInspector.HeapSnapshotProxyObject.prototype.callFactoryMethod):
        (WebInspector.HeapSnapshotProxyObject.prototype.callGetter):
        (WebInspector.HeapSnapshotProxyObject.prototype.callMethod):
        (WebInspector.HeapSnapshotLoaderProxy):
        (WebInspector.HeapSnapshotLoaderProxy.prototype.finishLoading.callLoadCallbacks):
        (WebInspector.HeapSnapshotLoaderProxy.prototype.finishLoading.updateStaticData):
        (WebInspector.HeapSnapshotLoaderProxy.prototype.finishLoading):
        (WebInspector.HeapSnapshotLoaderProxy.prototype.get loaded):
        (WebInspector.HeapSnapshotLoaderProxy.prototype.startLoading):
        (WebInspector.HeapSnapshotLoaderProxy.prototype.pushJSONChunk):
        (WebInspector.HeapSnapshotProxy):
        (WebInspector.HeapSnapshotProxy.prototype.aggregates):
        (WebInspector.HeapSnapshotProxy.prototype.createDiff):
        (WebInspector.HeapSnapshotProxy.prototype.createEdgesProvider):
        (WebInspector.HeapSnapshotProxy.prototype.createNodesProvider):
        (WebInspector.HeapSnapshotProxy.prototype.createPathFinder):
        (WebInspector.HeapSnapshotProxy.prototype.dispose):
        (WebInspector.HeapSnapshotProxy.prototype.finishLoading):
        (WebInspector.HeapSnapshotProxy.prototype.get loaded):
        (WebInspector.HeapSnapshotProxy.prototype.get nodeCount):
        (WebInspector.HeapSnapshotProxy.prototype.nodeFieldValuesByIndex):
        (WebInspector.HeapSnapshotProxy.prototype.pushBaseIds):
        (WebInspector.HeapSnapshotProxy.prototype.get rootNodeIndex):
        (WebInspector.HeapSnapshotProxy.prototype.updateStaticData):
        (WebInspector.HeapSnapshotProxy.prototype.startLoading):
        (WebInspector.HeapSnapshotProxy.prototype.get totalSize):
        (WebInspector.HeapSnapshotProxy.prototype.get uid):
        (WebInspector.HeapSnapshotProviderProxy):
        (WebInspector.HeapSnapshotProviderProxy.prototype.isEmpty):
        (WebInspector.HeapSnapshotProviderProxy.prototype.serializeNextItems):
        (WebInspector.HeapSnapshotProviderProxy.prototype.sortAndRewind):
        (WebInspector.HeapSnapshotPathFinderProxy):
        (WebInspector.HeapSnapshotPathFinderProxy.prototype.findNext):
        (WebInspector.HeapSnapshotPathFinderProxy.prototype.updateRoots):
        (WebInspector.HeapSnapshotsDiffProxy):
        (WebInspector.HeapSnapshotsDiffProxy.prototype.calculate):
        (WebInspector.HeapSnapshotsDiffProxy.prototype.pushBaseIds):
        (WebInspector.HeapSnapshotsDiffProxy.prototype.pushBaseSelfSizes):
        * inspector/front-end/HeapSnapshotWorker.js: Added.
        (WebInspector.UIString):
        (postMessageWrapper):
        * inspector/front-end/HeapSnapshotWorkerDispatcher.js: Added.
        (WebInspector.HeapSnapshotWorkerDispatcher):
        (WebInspector.HeapSnapshotWorkerDispatcher.prototype._findFunction):
        (WebInspector.HeapSnapshotWorkerDispatcher.prototype.dispatchMessage):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype.loadHeapSnapshot):
        (WebInspector.ProfilesPanel.prototype._finishHeapSnapshot.else.parsed):
        (WebInspector.ProfilesPanel.prototype._finishHeapSnapshot):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:

2011-04-22  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: fix de-obfuscation of scripts inlined in html.
        https://bugs.webkit.org/show_bug.cgi?id=58538

        Use html tokenizer to find script boundaries instead of relying on scriptParsed events.

        Test: inspector/debugger/script-formatter.html

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/JavaScriptFormatter.js: Renamed from Source/WebCore/inspector/front-end/UglifyJS/JavaScriptFormatter.js.
        * inspector/front-end/ScriptFormatter.js:
        (WebInspector.ScriptFormatter):
        (WebInspector.ScriptFormatter.prototype.formatContent):
        (WebInspector.ScriptFormatter.prototype._didFormatContent):
        * inspector/front-end/ScriptFormatterWorker.js:
        (onmessage):
        (formatScript):
        (HTMLScriptFormatter):
        (HTMLScriptFormatter.prototype.format):
        (HTMLScriptFormatter.prototype.scriptStarted):
        (HTMLScriptFormatter.prototype.scriptEnded):
        (HTMLScriptFormatter.prototype.styleSheetStarted):
        (HTMLScriptFormatter.prototype.styleSheetEnded):
        * inspector/front-end/SourceFile.js:
        (WebInspector.FormattedSourceFile.prototype._didRequestContent):
        * inspector/front-end/SourceHTMLTokenizer.js:
        (WebInspector.SourceHTMLTokenizer.prototype.scriptStarted):
        (WebInspector.SourceHTMLTokenizer.prototype.scriptEnded):
        (WebInspector.SourceHTMLTokenizer.prototype.styleSheetStarted):
        (WebInspector.SourceHTMLTokenizer.prototype.styleSheetEnded):
        (WebInspector.SourceHTMLTokenizer.prototype.nextToken):
        * inspector/front-end/SourceHTMLTokenizer.re2js:
        * inspector/front-end/WebKit.qrc:

2011-04-22  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [Extensions API] misc API cleanup
        https://bugs.webkit.org/show_bug.cgi?id=59194

        * inspector/front-end/ExtensionAPISchema.json:
        * inspector/front-end/ExtensionPanel.js:
        (WebInspector.ExtensionSidebarPane.prototype._setObject):

2011-04-21  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: group content scripts in the scripts panel drop down.
        https://bugs.webkit.org/show_bug.cgi?id=59108

        * English.lproj/localizedStrings.js:
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._addOptionToFilesSelect.optionCompare):
        (WebInspector.ScriptsPanel.prototype._addOptionToFilesSelect):

2011-04-22  Mike West  <mkwst@google.com>

        Reviewed by Pavel Feldman.

        Web Inspector: Tiny improvement to UI for adding an XHR breakpoint
        https://bugs.webkit.org/show_bug.cgi?id=59100

        Improve web inspector UI around adding XHR breakpoints by adding
        a textual label to the input-like `span` used to specify which
        XHR requests the breakpoint ought to target.

        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.XHRBreakpointsSidebarPane.prototype._addButtonClicked.finishEditing):
        (WebInspector.XHRBreakpointsSidebarPane.prototype._addButtonClicked):
        * inspector/front-end/inspector.css:
        (#breakpoint-condition-input):

2011-04-22  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: js formatter should never insert new tokens or remove existing tokens and comments.
        https://bugs.webkit.org/show_bug.cgi?id=59191

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/ScriptFormatter.js:
        (WebInspector.ScriptFormatter.prototype.formatContent.didFormatChunks):
        (WebInspector.ScriptFormatter.prototype.formatContent):
        * inspector/front-end/ScriptFormatterWorker.js:
        (onmessage):
        * inspector/front-end/SourceFile.js:
        (WebInspector.SourceFile.prototype._loadResourceContent):
        (WebInspector.FormattedSourceFile.prototype._didRequestContent):
        (WebInspector.FormattedSourceMapping):
        (WebInspector.FormattedSourceMapping.prototype.scriptLocationToSourceLine):
        (WebInspector.FormattedSourceMapping.prototype.sourceLineToScriptLocation):
        (WebInspector.FormattedSourceMapping.prototype._convertPosition):
        * inspector/front-end/UglifyJS/JavaScriptFormatter.js: Added.
        (FormattedContentBuilder): Helper class for building formatted script content.
        (FormattedContentBuilder.prototype.addToken):
        (FormattedContentBuilder.prototype.addSpace):
        (FormattedContentBuilder.prototype.addNewLine):
        (FormattedContentBuilder.prototype.increaseNestingLevel):
        (FormattedContentBuilder.prototype.decreaseNestingLevel):
        (FormattedContentBuilder.prototype.content):
        (FormattedContentBuilder.prototype.mapping):
        (Tokenizer): Wrapper class for UglifyJS tokenizer.
        (Tokenizer.prototype.content):
        (Tokenizer.prototype.next):
        (Tokenizer.prototype._convertUglifyToken):
        (JavaScriptFormatter): New formatter based on UglifyJS tokenizer.
        (JavaScriptFormatter.prototype.format):
        * inspector/front-end/UglifyJS/process.js: Removed.
        * inspector/front-end/WebKit.qrc:

2011-04-22  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [Chromium] Refactor code prior to moving detailed heap snapshots into workers.
        https://bugs.webkit.org/show_bug.cgi?id=59189

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/BinarySearch.js: Added.
        * inspector/front-end/DetailedHeapshotGridNodes.js:
        (WebInspector.HeapSnapshotGridNode.prototype._populate.sorted):
        (WebInspector.HeapSnapshotGridNode.prototype._populate):
        (WebInspector.HeapSnapshotGridNode.prototype.populateChildren):
        (WebInspector.HeapSnapshotGridNode.prototype.sort.afterSort.afterPopulate):
        (WebInspector.HeapSnapshotGridNode.prototype.sort.afterSort):
        (WebInspector.HeapSnapshotGridNode.prototype.sort):
        (WebInspector.HeapSnapshotObjectNode):
        (WebInspector.HeapSnapshotObjectNode.prototype._createChildNode):
        (WebInspector.HeapSnapshotInstanceNode.prototype._createChildNode):
        (WebInspector.HeapSnapshotInstanceNode.prototype._enhanceData):
        (WebInspector.HeapSnapshotInstanceNode.prototype.get isDeletedNode):
        (WebInspector.HeapSnapshotDiffNode.prototype.calculateDiff.diffCalculated):
        (WebInspector.HeapSnapshotDiffNode.prototype.calculateDiff.baseIdsReceived):
        (WebInspector.HeapSnapshotDiffNode.prototype.get data):
        * inspector/front-end/DetailedHeapshotView.js:
        (WebInspector.HeapSnapshotSortableDataGrid.prototype.sortingChanged.sort):
        (WebInspector.HeapSnapshotSortableDataGrid.prototype.sortingChanged):
        (WebInspector.HeapSnapshotSortableDataGrid.prototype._performSorting):
        (WebInspector.HeapSnapshotSortableDataGrid.prototype.recursiveSortingEnter):
        (WebInspector.HeapSnapshotSortableDataGrid.prototype.recursiveSortingLeave):
        (WebInspector.HeapSnapshotContainmentDataGrid):
        (WebInspector.HeapSnapshotContainmentDataGrid.prototype._defaultPopulateCount.100.setDataSource):
        (WebInspector.HeapSnapshotContainmentDataGrid.prototype.sortingChanged):
        (WebInspector.HeapSnapshotDiffDataGrid.prototype.setBaseDataSource):
        (WebInspector.HeapSnapshotDiffDataGrid.prototype.populateChildren.baseAggregatesReceived.aggregatesReceived.addNodeIfNonZeroDiff):
        (WebInspector.HeapSnapshotDiffDataGrid.prototype.populateChildren.baseAggregatesReceived.aggregatesReceived):
        (WebInspector.HeapSnapshotDiffDataGrid.prototype.populateChildren):
        (WebInspector.HeapSnapshotDominatorsDataGrid):
        (WebInspector.HeapSnapshotDominatorsDataGrid.prototype._defaultPopulateCount.25.setDataSource):
        (WebInspector.HeapSnapshotDominatorsDataGrid.prototype.sortingChanged):
        (WebInspector.HeapSnapshotRetainingPathsList.prototype._performSorting):
        (WebInspector.DetailedHeapshotView.prototype._changeBase.baseProfileLoaded):
        (WebInspector.DetailedHeapshotView.prototype._changeBase):
        (WebInspector.DetailedHeapshotView.prototype._changeView):
        (WebInspector.DetailedHeapshotView.prototype._showStringContentPopup.displayString):
        (WebInspector.DetailedHeapshotView.prototype._showStringContentPopup):
        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshot.prototype.dispose):
        (WebInspector.HeapSnapshot.prototype.pushBaseNodeIds):
        (WebInspector.HeapSnapshotFilteredOrderedIterator.prototype.serializeNextItems):
        (WebInspector.HeapSnapshotFilteredOrderedIterator.prototype.sortAndRewind):
        (WebInspector.HeapSnapshotEdgesProvider.prototype._serialize):
        (WebInspector.HeapSnapshotNodesProvider.prototype._serialize):
        (WebInspector.HeapSnapshotsDiff.prototype.calculate):
        (WebInspector.HeapSnapshotsDiff.prototype.pushBaseIds):
        (WebInspector.HeapSnapshotsDiff.prototype.pushBaseSelfSizes):
        * inspector/front-end/HeapSnapshotProxy.js:
        (WebInspector.HeapSnapshotProxy.prototype.createEdgesProvider):
        (WebInspector.HeapSnapshotProxy.prototype.createNodesProvider):
        (WebInspector.HeapSnapshotProxy.prototype.pushBaseIds):
        (WebInspector.HeapSnapshotProviderProxy):
        (WebInspector.HeapSnapshotProviderProxy.prototype.serializeNextItems):
        (WebInspector.HeapSnapshotProviderProxy.prototype.sortAndRewind):
        (WebInspector.HeapSnapshotsDiffProxy.prototype.pushBaseIds):
        (WebInspector.HeapSnapshotsDiffProxy.prototype.pushBaseSelfSizes):
        * inspector/front-end/PleaseWaitMessage.js:
        (WebInspector.PleaseWaitMessage.prototype.showAndWaitFor):
        (WebInspector.PleaseWaitMessage.prototype.unlistenAndHide):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:
        * inspector/front-end/utilities.js:

2011-04-22  Mikhail Naganov  <mnaganov@chromium.org>

        Unreviewed fix after r84484 -- conditional statement was inverted incorrectly.

        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype.handleShortcut):

2011-04-22  Annie Sullivan  <sullivan@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Timeline is too narrow
        https://bugs.webkit.org/show_bug.cgi?id=58399

        Changed Network Panel widths so that Timeline is 50%.
        Added titles to the values in the other columns, so that a tooltip will show the value if the column is too narrow.

        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkPanel.prototype._createTable):  Changed column widths.
        (WebInspector.NetworkPanel.prototype._toggleGridMode): Changed column widths.
        (WebInspector.NetworkDataGridNode.prototype.refreshResource): Added titles to column values.
        (WebInspector.NetworkDataGridNode.prototype._refreshStatusCell): Ditto
        (WebInspector.NetworkDataGridNode.prototype._refreshSizeCell): Ditto
        (WebInspector.NetworkDataGridNode.prototype._refreshTimeCell): Ditto
        * inspector/front-end/utilities.js:
        (Element.prototype.setTextAndTitle): Added new method to set the textContent and title of an Element at the same time, so that it can have a tooltip.

2011-04-22  Dan Bernstein  <mitz@apple.com>

        Reviewed by Maciej Stachowiak.

        <rdar://problem/9322486> REGRESSION (r83397): Default controls fade out when playing audio-only media
        https://bugs.webkit.org/show_bug.cgi?id=59180

        Test: media/audio-controls-do-not-fade-out.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::playbackProgressTimerFired): Only start fading out the controls if there is
        a video track.

2011-04-22  Luke Macpherson   <macpherson@chromium.org>

        Reviewed by Eric Seidel.

        Add FontItalics and FontSmallCaps enums to be used instead of boolean values.
        https://bugs.webkit.org/show_bug.cgi?id=59080

        No new tests as no new functionality added.

        * css/CSSPrimitiveValueMappings.h:
        Add casts to/from FontItalics and FontSmallCaps
        * css/CSSStyleSelector.cpp:
        Use new casts defined in PrimitiveValueMappings.h
        * platform/graphics/Font.h:
        Use FontItalics enum.
        * platform/graphics/FontDescription.h:
        Define and use FontItalics and FontSmallCaps enums.

2011-04-21  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: exception in front-end when user selects resource info for resource that does not have response headers yet
        https://bugs.webkit.org/show_bug.cgi?id=59123

        * inspector/front-end/ResourceCookiesView.js:
        (WebInspector.ResourceCookiesView):
        (WebInspector.ResourceCookiesView.prototype.show):
        (WebInspector.ResourceCookiesView.prototype.get _gotCookies):
        (WebInspector.ResourceCookiesView.prototype._buildCookiesTable):

2011-04-21  Beth Dakin  <bdakin@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=57898
        REGRESSION (r82185): Scroll position not restored on navigation back to a page in 
        the page cache
        -and corresponding-
        <rdar://problem/9226652>

        The original fix for this change broke scroll-position restore for pages that are 
        *not* in the page cache. This patch fixes both cached and non-cached pages by 
        using the cachedScrollPosition() only for cached pages.
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::saveScrollPositionAndViewStateToItem):

2011-04-21  Luke Macpherson   <macpherson@chromium.org>

        Reviewed by Eric Seidel.

        Remove redundant calls to RenderStyle::setDisplay()
        https://bugs.webkit.org/show_bug.cgi?id=59060

        No new tests / no new functionality added.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        Remove redundant calls to RenderStyle::setDisplay()

2011-04-21  John Bauman  <jbauman@chromium.org>

        Reviewed by Kenneth Russell.

        WebGL context drawing buffer may not be cleared if FBO bound
        https://bugs.webkit.org/show_bug.cgi?id=58956

        Clear the drawing buffer even if it's not currently bound, by
        switching between FBOs around the clear. Also, make sure that we
        handle depth and stencil masks properly.

        No new tests, because testing this under DRT doesn't work.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::initializeNewContext):
        (WebCore::WebGLRenderingContext::clearIfComposited):
        (WebCore::WebGLRenderingContext::depthMask):
        * html/canvas/WebGLRenderingContext.h:
        *
2011-04-21  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        WebKit is erroneously modifying the DOM; adding 'aria-selected' to tables
        https://bugs.webkit.org/show_bug.cgi?id=59140

        WebKit should not modify the DOM when the screen reader requests certain things be set. There is no
        specification that allows this behavior yet, but we are working on something for the future.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::setARIAGrabbed):
        (WebCore::AccessibilityRenderObject::setIsExpanded):
        (WebCore::AccessibilityRenderObject::setSelected):
        (WebCore::AccessibilityRenderObject::setValue):

2011-04-21  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        AX: order AccessibilityRole alphabetically
        https://bugs.webkit.org/show_bug.cgi?id=31524

        * accessibility/AccessibilityObject.h:

2011-04-21  Jia Pu  <jpu@apple.com>

        Reviewed by Maciej Stachowiak.

        [Mac] correctionPanelTimerFired() crashes due to rangeToBeReplaced being cleared.
        https://bugs.webkit.org/show_bug.cgi?id=59155
        <rdar://problem/9261698>

        Make sure the range isn't cleared before calling windowRectForRange() on it. Also removed unused functions in Editor.h,
        and fixed a typo in function name.

        * editing/Editor.h:
        * editing/SpellingCorrectionController.cpp:
        (WebCore::SpellingCorrectionController::correctionPanelTimerFired):
        (WebCore::SpellingCorrectionController::respondToChangedSelection):
        * editing/SpellingCorrectionController.h:
        (WebCore::SpellingCorrectionController::shouldStartTimerFor):

2011-04-21  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Adam Roben.

        Add a feature define to allow <details> and <summary> to be disabled
        https://bugs.webkit.org/show_bug.cgi?id=59118
        <rdar://problem/9257045>

        No new tests; no behavior change.

        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.make:
        * GNUmakefile.am:
        * features.pri:
        * html/HTMLDetailsElement.cpp:
        * html/HTMLSummaryElement.cpp:
        * html/HTMLTagNames.in:
        * html/shadow/DetailsMarkerControl.cpp:
        * rendering/RenderBlock.cpp:
        (WebCore::canMergeContiguousAnonymousBlocks):
        * rendering/RenderDetails.cpp:
        * rendering/RenderDetails.h:
        * rendering/RenderDetailsMarker.cpp:
        * rendering/RenderDetailsMarker.h:
        * rendering/RenderObject.h:
        * rendering/RenderSummary.cpp:
        * rendering/RenderSummary.h:
        * rendering/RenderTreeAsText.cpp:
        (WebCore::RenderTreeAsText::writeRenderObject):

2011-04-21  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Adele Peterson.

        REGRESSION (r83386): Typing in WSJ.com search field doesn't clear placeholder text
        https://bugs.webkit.org/show_bug.cgi?id=59053

        Turns out, the relatedTarget of an event could be also an ancestor of an event,
        not just its parent. Duh.

        * dom/EventDispatcher.cpp:
        (WebCore::EventDispatcher::adjustToShadowBoundaries): Changed to use shadowHost
            explicitly.

2011-04-21  Michael Saboff  <msaboff@apple.com>

        Reviewed by Maciej Stachowiak.

        Qualified names used for all TagName access, yet namespace usage is rare
        https://bugs.webkit.org/show_bug.cgi?id=58997

        The methods getElementsByTagName and getElementsByTagNameNS where
        always creating and using QualifiedNames.  QualifiedName::init
        was consistently in the top 3 routines when running the Dromaeo
        DOM-query benchmark.  Split out the functionality so that
        getElementsByTagName uses just the local name, an implied "*"
        namespace and a separate TagNodeListCache keyed by an atomic name
        instead of a QualifiedName.  Access to elements via
        getElementsByTagNameNS that have "*" namespace are forwarded to
        getElementsByTagName as well.  This provides ~10% speed up in that
        Dromaeo test.

        No new tests added, existing tests have coverage.  The changes are
        an optimization of existing functionality.

        * dom/Node.cpp:
        (WebCore::Node::removeCachedTagNodeList):
        (WebCore::Node::getElementsByTagName):
        (WebCore::Node::getElementsByTagNameNS):
        (WebCore::NodeListsNodeData::invalidateCaches):
        (WebCore::NodeListsNodeData::isEmpty):
        * dom/Node.h:
        * dom/NodeRareData.h:
        * dom/TagNodeList.cpp:
        (WebCore::TagNodeList::~TagNodeList):

2011-04-21  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Removed a use of markDOMObjectWrapper: more style- and node-related stuff
        https://bugs.webkit.org/show_bug.cgi?id=59127

        * bindings/js/JSCanvasRenderingContextCustom.cpp:
        * bindings/js/JSCanvasRenderingContextCustom.cpp:
        (WebCore::JSCanvasRenderingContextOwner::isReachableFromOpaqueRoots):
        (WebCore::JSCanvasRenderingContextOwner::finalize):
        (WebCore::wrapperOwner):
        (WebCore::wrapperContext): Use opaque roots for marking canvas rendering
        contexts, so JSNode isn't responsible for it.

        * bindings/js/JSElementCustom.cpp:
        (WebCore::JSElement::markChildren):
        * bindings/js/JSHTMLCanvasElementCustom.cpp:
        * bindings/js/JSHTMLLinkElementCustom.cpp:
        * bindings/js/JSHTMLStyleElementCustom.cpp: Removed obsolete marking code.

        * bindings/js/JSNodeCustom.cpp:
        (WebCore::isObservable):
        (WebCore::isReachableFromDOM):
        (WebCore::JSNodeOwner::isReachableFromOpaqueRoots): Removed a bunch of
        CSS object model related special cases, since the CSS object model
        now tracks its own lifetime through the opaque roots system. Removed
        canvas special case, covered above.

        * bindings/js/JSProcessingInstructionCustom.cpp:
        * bindings/js/JSWebKitAnimationListCustom.cpp:
        * dom/ProcessingInstruction.idl:
        * html/HTMLCanvasElement.idl:
        * html/HTMLLinkElement.idl:
        * html/HTMLStyleElement.idl:
        * page/WebKitAnimationList.idl: Removed obsolete marking code.

2011-04-21  Vangelis Kokkevis  <vangelis@chromium.org>

        Reviewed by James Robinson.

        [chromium] Only update the contents of layers that are going to
        be drawn. Remove individual texture unreserves that happen
        after the layer draw calls with a single unreserve for all the
        textures in the texture manager.
        https://bugs.webkit.org/show_bug.cgi?id=59129

        Tests: No new functionality.  Covered by existing layout tests.

        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::draw):
        * platform/graphics/chromium/ContentLayerChromium.h:
        * platform/graphics/chromium/ImageLayerChromium.cpp:
        (WebCore::ImageLayerChromium::paintContentsIfDirty):
        (WebCore::ImageLayerChromium::updateCompositorResources):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::drawRootLayer):
        (WebCore::LayerRendererChromium::updateAndDrawLayers):
        (WebCore::LayerRendererChromium::updateLayers):
        (WebCore::LayerRendererChromium::paintLayerContents):
        * platform/graphics/chromium/LayerRendererChromium.h:
        * platform/graphics/chromium/LayerTexture.cpp:
        * platform/graphics/chromium/LayerTexture.h:
        * platform/graphics/chromium/LayerTilerChromium.cpp:
        * platform/graphics/chromium/LayerTilerChromium.h:
        * platform/graphics/chromium/RenderSurfaceChromium.cpp:
        (WebCore::RenderSurfaceChromium::drawSurface):
        * platform/graphics/chromium/TextureManager.cpp:
        (WebCore::TextureManager::unprotectAllTextures):
        * platform/graphics/chromium/TextureManager.h:
        * platform/graphics/chromium/cc/CCHeadsUpDisplay.cpp:
        (WebCore::CCHeadsUpDisplay::draw):
        * platform/graphics/chromium/cc/CCLayerImpl.h:
        (WebCore::CCLayerImpl::owner):

2011-04-21  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Sam Weinig.

        Add Frame* to the argument lists of canCopyCut and canPaste
        https://bugs.webkit.org/show_bug.cgi?id=59153

        canCopyCut and canPaste now takes Frame* for which supportedCopyCut and supportedPaste are called.
        This allows editor client to grant copy/cut and paste permissions per origin.

        * editing/EditorCommand.cpp:
        (WebCore::supportedCopyCut):
        (WebCore::supportedPaste):
        * loader/EmptyClients.h:
        (WebCore::EmptyEditorClient::canCopyCut):
        (WebCore::EmptyEditorClient::canPaste):
        * page/EditorClient.h:

2011-04-21  Oliver Hunt  <oliver@apple.com>

        Whoops, change lost during merge

        * bindings/js/JSEventListener.h:

2011-04-21  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Fixed a failure seen in fast/dom/prototype-inheritance-2.html due to
        wrong global object use.

        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::nameGetter):
        (WebCore::JSHTMLDocument::all):
        * bindings/js/JSHTMLFormElementCustom.cpp:
        (WebCore::JSHTMLFormElement::nameGetter): Use the right global object.

2011-04-21  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        Start moving to a general visitor pattern for GC traversal
        https://bugs.webkit.org/show_bug.cgi?id=59141

        This is just a rename:
            markChildren -> visitChildren
            markAggregate -> visitAggregate
            markStack -> visitor
            MarkStack -> typedef'd to SlotVisitor

        * bindings/js/JSAttrCustom.cpp:
        (WebCore::JSAttr::visitChildren):
        * bindings/js/JSAudioConstructor.cpp:
        (WebCore::constructAudio):
        * bindings/js/JSCSSRuleCustom.cpp:
        (WebCore::JSCSSRule::visitChildren):
        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::JSCSSStyleDeclaration::visitChildren):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::visitActiveObjectsForContext):
        (WebCore::markDOMObjectWrapper):
        * bindings/js/JSDOMBinding.h:
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::visitChildren):
        * bindings/js/JSDOMGlobalObject.h:
        * bindings/js/JSDOMImplementationCustom.cpp:
        (WebCore::JSDOMImplementation::visitChildren):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::visitChildren):
        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::visitChildren):
        * bindings/js/JSDOMWindowShell.h:
        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::JSDocument::visitChildren):
        * bindings/js/JSElementCustom.cpp:
        (WebCore::JSElement::visitChildren):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::markJSFunction):
        * bindings/js/JSEventListener.h:
        * bindings/js/JSHTMLCanvasElementCustom.cpp:
        (WebCore::JSHTMLCanvasElement::visitChildren):
        * bindings/js/JSHTMLLinkElementCustom.cpp:
        (WebCore::JSHTMLLinkElement::visitChildren):
        * bindings/js/JSHTMLStyleElementCustom.cpp:
        (WebCore::JSHTMLStyleElement::visitChildren):
        * bindings/js/JSImageConstructor.cpp:
        (WebCore::constructImage):
        * bindings/js/JSJavaScriptAudioNodeCustom.cpp:
        (WebCore::JSJavaScriptAudioNode::visitChildren):
        * bindings/js/JSMessageChannelCustom.cpp:
        (WebCore::JSMessageChannel::visitChildren):
        * bindings/js/JSMessagePortCustom.cpp:
        (WebCore::JSMessagePort::visitChildren):
        * bindings/js/JSNamedNodeMapCustom.cpp:
        (WebCore::JSNamedNodeMapOwner::isReachableFromOpaqueRoots):
        (WebCore::JSNamedNodeMap::visitChildren):
        * bindings/js/JSNavigatorCustom.cpp:
        (WebCore::JSNavigator::visitChildren):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::isObservable):
        (WebCore::isReachableFromDOM):
        (WebCore::JSNodeOwner::isReachableFromOpaqueRoots):
        (WebCore::JSNode::visitChildren):
        * bindings/js/JSNodeCustom.h:
        * bindings/js/JSNodeFilterCondition.cpp:
        (WebCore::JSNodeFilterCondition::WeakOwner::isReachableFromOpaqueRoots):
        * bindings/js/JSNodeFilterCondition.h:
        * bindings/js/JSNodeFilterCustom.cpp:
        (WebCore::JSNodeFilter::visitChildren):
        * bindings/js/JSNodeIteratorCustom.cpp:
        (WebCore::JSNodeIterator::visitChildren):
        * bindings/js/JSNodeListCustom.cpp:
        (WebCore::JSNodeListOwner::isReachableFromOpaqueRoots):
        * bindings/js/JSProcessingInstructionCustom.cpp:
        (WebCore::JSProcessingInstruction::visitChildren):
        * bindings/js/JSSVGElementInstanceCustom.cpp:
        (WebCore::JSSVGElementInstance::visitChildren):
        * bindings/js/JSSharedWorkerCustom.cpp:
        (WebCore::JSSharedWorker::visitChildren):
        * bindings/js/JSStyleSheetCustom.cpp:
        (WebCore::JSStyleSheet::visitChildren):
        * bindings/js/JSTreeWalkerCustom.cpp:
        (WebCore::JSTreeWalker::visitChildren):
        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::JSWebGLRenderingContext::visitChildren):
        * bindings/js/JSWebKitAnimationListCustom.cpp:
        (WebCore::JSWebKitAnimationList::visitChildren):
        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::visitChildren):
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::visitChildren):
        * bindings/js/JSXMLHttpRequestUploadCustom.cpp:
        (WebCore::JSXMLHttpRequestUpload::visitChildren):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtRuntimeObject::visitChildren):
        (JSC::Bindings::QtInstance::markAggregate):
        * bridge/qt/qt_instance.h:
        * bridge/qt/qt_pixmapruntime.cpp:
        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::QtRuntimeMetaMethod::visitChildren):
        * bridge/qt/qt_runtime.h:
        * dom/EventListener.h:
        (WebCore::EventListener::visitJSFunction):
        * dom/EventTarget.h:
        (WebCore::EventTarget::visitJSEventListeners):
        * dom/Node.h:
        * dom/NodeFilterCondition.h:
        (WebCore::NodeFilterCondition::visitAggregate):
        * page/DOMWindow.h:
        * workers/WorkerContext.h:

2011-04-21  Beth Dakin  <bdakin@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=59048
        Need to track whether overlay scrollbar is currently visible and in lower-
        righthand corner
        -and corresponding-
        <rdar://problem/9211232>

        Whenever we start a new ScrollbarPartAnimation, check if the scrollbar is vertical 
        and showing (alpha of 1), and if so, call setVisibleScrollerThumbRect with the 
        knob rect, otherwise with an empty rect. ScrollAnimatorMac has a local rect to 
        track this value so that it can avoid sending messages across the ChromeClient to 
        the UIProcess if the rect has not changed.
        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollAnimatorMac.mm:
        (-[ScrollbarPainterDelegate setUpAnimation:scrollerPainter:part:WebCore::animateAlphaTo:duration:]):
        (WebCore::ScrollAnimatorMac::ScrollAnimatorMac):
        (WebCore::ScrollAnimatorMac::setVisibleScrollerThumbRect):

        Plumbing for the chrome client.
        * page/ChromeClient.h:
        (WebCore::ChromeClient::notifyScrollerThumbIsVisibleInRect):
        * page/FrameView.cpp:
        (WebCore::FrameView::setVisibleScrollerThumbRect):
        * page/FrameView.h:
        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::setVisibleScrollerThumbRect):

        New WebCoreSystemInterface function to get the knob rect.
        * WebCore.exp.in:
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

2011-04-21  Nat Duca  <nduca@chromium.org>

        Reviewed by James Robinson.

        [chromium] Fix artefacts in compositor HUD when resizing
        https://bugs.webkit.org/show_bug.cgi?id=58969

        HUD was using the tiler program and not setting the texture
        transform. The HUD would thus draw with a texture transform based
        on the last tile drawn, leading sometimes to distortion.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::initializeSharedObjects):
        (WebCore::LayerRendererChromium::cleanupSharedObjects):
        * platform/graphics/chromium/LayerRendererChromium.h:
        (WebCore::LayerRendererChromium::headsUpDisplayProgram):
        * platform/graphics/chromium/cc/CCHeadsUpDisplay.cpp:
        (WebCore::CCHeadsUpDisplay::draw):
        * platform/graphics/chromium/cc/CCHeadsUpDisplay.h:

2011-04-21  Mike Reed  <reed@google.com>

        Reviewed by Kenneth Russell.

        only return false if we actually in a skia-gpu accelerated canvas for isNativeFontRenderingAllowed
        https://bugs.webkit.org/show_bug.cgi?id=59024

        No new tests. The bug (and fix) depend on enabling SKIA_GPU. When that is enabled, the bug
        shows all text w/o lcd rendering. This is a regression from a recent CL when we switch to
        calling skia::SupportsPlatformPaint. This CL fixes that.
        There should be no change for the default builds when SKIA_GPU is not enabled.

        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::isNativeFontRenderingAllowed):

2011-04-21  Adrienne Walker  <enne@google.com>

        Reviewed by James Robinson.

        [chromium] Don't upload partially drawn tiles in the compositor
        https://bugs.webkit.org/show_bug.cgi?id=59112

        Use the same set of tiles for painting as is used for updating.
        Before, a larger set of tiles were being uploaded, causing some to
        only be partially undirtied because they were not fully painted.
        As tiles are clear their dirty rect after being unpainted, this caused
        artifacts to appear when scrolling.

        Unfortunately, no layout test can test this behavior yet because
        scrolling invalidations are done differently in test shell.

        * platform/graphics/chromium/ImageLayerChromium.cpp:
        (WebCore::ImageLayerChromium::updateCompositorResources):
        * platform/graphics/chromium/LayerTilerChromium.cpp:
        (WebCore::LayerTilerChromium::update):
        (WebCore::LayerTilerChromium::uploadCanvas):
        (WebCore::LayerTilerChromium::updateFromPixels):
        * platform/graphics/chromium/LayerTilerChromium.h:

2011-04-21  Ben Taylor  <bentaylor.solx86@gmail.com>

        Reviewed by Alexey Proskuryakov.

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

        Fix a compile issue on Solaris 10 with Sun Studio 12,
        ternary operators (?:) must have the same types

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::popArchiveForSubframe):
        * loader/archive/ArchiveFactory.cpp:
        (WebCore::ArchiveFactory::create):
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::setIconDataForIconURL):
        * page/animation/AnimationBase.cpp:
        (WebCore::blendFunc):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateScrollCornerStyle):
        (WebCore::RenderLayer::updateResizerStyle):
        * rendering/RenderScrollbar.cpp:
        (WebCore::RenderScrollbar::updateScrollbarPart):
        * rendering/RenderTextFragment.cpp:
        (WebCore::RenderTextFragment::RenderTextFragment):

2011-04-21  Mike Reed  <reed@google.com>

        Reviewed by Kenneth Russell.

        [chromium, win] Multiple failures of shadow rendering layout tests
        https://bugs.webkit.org/show_bug.cgi?id=58772

        No new tests. This CL fixes a regression in the following tests
        fast/multicol/shadow-breaking.html
        fast/repaint/shadow-multiple-horizontal.html
        fast/repaint/shadow-multiple-strict-horizontal.html
        fast/repaint/shadow-multiple-strict-vertical.html
        fast/repaint/shadow-multiple-vertical.html
        fast/text/shadow-translucent-fill.html
        fast/transforms/shadows.html
        svg/css/group-with-shadow.svg
        svg/css/shadow-changes.svg
        svg/css/text-shadow-multiple.xhtml
        transitions/svg-text-shadow-transition.html
        svg/css/composite-shadow-text.svg
 

        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::setPlatformShadow):

2011-04-21  Geoffrey Garen  <ggaren@apple.com>

        Try to fix the Qt build.

        * UseJSC.cmake:
        * WebCore.pro: Use correct file name.

2011-04-21  Dirk Schulze  <krit@webkit.org>

        Unreviewed Qt build fix.

        SVG feDropShadow implementation of SVG Filters 1.2
        https://bugs.webkit.org/show_bug.cgi?id=52513

        * CodeGenerators.pri:

2011-04-21  Adrienne Walker  <enne@google.com>

        Reviewed by James Robinson.

        [chromium] Clamp dirty regions on content layers to layer bounds
        https://bugs.webkit.org/show_bug.cgi?id=58933

        This prevents garbage being rendered when layers are resized and a
        previous invalidation (now off-layer) is no longer valid.

        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::paintContentsIfDirty):

2011-04-21  Roland Steiner  <rolandsteiner@chromium.org>

        Reviewed by Kent Tamura.

        Bug 59012 - Shadows should be imported along with their host nodes
        https://bugs.webkit.org/show_bug.cgi?id=59012

        Copy the shadow tree of an element (even on a shallow copy!).

        Test: fast/dom/shadow/import-shadowroot.html

        * dom/Element.cpp:
        (WebCore::Element::copyNonAttributeProperties):
        * dom/Element.h:

2011-04-20  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Removed a use of markDOMObjectWrapper: CSS Object Model
        https://bugs.webkit.org/show_bug.cgi?id=59057

        This is 24 hours of my life I will never get back. Thank you, W3C.

        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj: Build!

        * bindings/js/JSCSSFontFaceRuleCustom.cpp:
        * bindings/js/JSCSSImportRuleCustom.cpp:
        * bindings/js/JSCSSMediaRuleCustom.cpp:
        * bindings/js/JSCSSPageRuleCustom.cpp:
        * bindings/js/JSCSSRuleCustom.cpp:
        (WebCore::JSCSSRuleOwner::isReachableFromOpaqueRoots):
        (WebCore::JSCSSRuleOwner::finalize):
        (WebCore::wrapperOwner):
        (WebCore::wrapperContext):
        (WebCore::JSCSSRule::markChildren):
        * bindings/js/JSCSSRuleListCustom.cpp:
        (WebCore::JSCSSRuleListOwner::isReachableFromOpaqueRoots):
        (WebCore::JSCSSRuleListOwner::finalize):
        (WebCore::wrapperOwner):
        (WebCore::wrapperContext):
        (WebCore::toJS):
        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::JSCSSStyleDeclarationOwner::isReachableFromOpaqueRoots):
        (WebCore::JSCSSStyleDeclarationOwner::finalize):
        (WebCore::wrapperOwner):
        (WebCore::wrapperContext):
        (WebCore::JSCSSStyleDeclaration::markChildren): Removed custom mark functions,
        and replaced with use of the opaque roots system. This has the nice benefit
        of allowing us to eagerly recycle far more CSS wrappers and their associated
        DOM wrappers.

        (WebCore::JSCSSStyleDeclaration::getPropertyCSSValue): Made this function
        custom because it must maintain the sorrowful invariant that primitive
        values can be mapped back to objects that are reachable through the DOM.
        We maintain this invariant through an external hash table because
        making all primitive values bigger would be a too-large memory use
        penalty. Luckily, nobody uses this feature, so the cost of the hash table
        is no big deal.

        (WebCore::toJS): We need a custom toJS so we can specify our own WeakHandleOwner.

        * bindings/js/JSCSSStyleRuleCustom.cpp: Removed custom mark, as above.

        * bindings/js/JSCSSValueCustom.cpp:
        (WebCore::cssValueRoots):
        (WebCore::JSCSSValueOwner::isReachableFromOpaqueRoots):
        (WebCore::JSCSSValueOwner::finalize):
        (WebCore::wrapperOwner):
        (WebCore::wrapperContext): Use the opaque roots system. Piggy-back on
        the external hash table filled by JSCSSStyleDeclaration::getPropertyCSSValue.

        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::JSDocument::markChildren): No need to mark our stylesheet list,
        since all style-related objects can use our opaque root to determine
        liveness.

        * bindings/js/JSMediaListCustom.cpp: Added.
        (WebCore::JSMediaListOwner::isReachableFromOpaqueRoots):
        (WebCore::JSMediaListOwner::finalize):
        (WebCore::wrapperOwner):
        (WebCore::wrapperContext):
        (WebCore::toJS): Use the opaque roots system.

        * bindings/js/JSNodeCustom.h:
        (WebCore::root): Added helpers for computing style-related roots.

        * bindings/js/JSStyleSheetCustom.cpp:
        (WebCore::JSStyleSheetOwner::isReachableFromOpaqueRoots):
        (WebCore::JSStyleSheetOwner::finalize):
        (WebCore::wrapperOwner):
        (WebCore::wrapperContext):
        (WebCore::JSStyleSheet::markChildren): Use the opaque roots system instead
        of direct marking.
        
        * bindings/js/JSStyleSheetListCustom.cpp:
        (WebCore::JSStyleSheetListOwner::isReachableFromOpaqueRoots):
        (WebCore::JSStyleSheetListOwner::finalize):
        (WebCore::wrapperOwner):
        (WebCore::wrapperContext):
        (WebCore::toJS): Ditto.

        * bindings/js/JSWebKitCSSKeyframeRuleCustom.cpp:
        * bindings/js/JSWebKitCSSKeyframesRuleCustom.cpp:
        * css/CSSFontFaceRule.idl:
        * css/CSSImportRule.idl: No more custom mark, since we use the opaque
        roots system instead.

        * css/CSSMediaRule.cpp:
        (WebCore::CSSMediaRule::CSSMediaRule): Fixed a bug where a media rule
        would incorrectly have no parent, since this got in the way of correctly
        computing the media rule's root.

        * css/CSSMediaRule.idl:
        * css/CSSPageRule.idl:
        * css/CSSRuleList.idl:
        * css/CSSStyleDeclaration.idl:
        * css/CSSStyleRule.idl:
        * css/MediaList.idl: Match behavior changes above.

        * css/StyleBase.cpp:
        (WebCore::StyleBase::node): Helper function for computing roots of the
        style system. This object model is pretty weird and not very well factored,
        but I'm pretty sure this covers all the relevant cases.

        * css/StyleBase.h:
        * css/StyleSheetList.idl:
        * css/WebKitCSSKeyframeRule.idl:
        * css/WebKitCSSKeyframesRule.idl: Updated to match the behavior changes above.

2011-04-21  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        SVG feDropShadow implementation of SVG Filters 1.2
        https://bugs.webkit.org/show_bug.cgi?id=52513

        This is the implementation of feDropShadow, a shorthand filter and a combination of feGaussianBlur,
        feOffset, feFlood and feComposite to create a drop shadow of an input effect.
        Creating this new filter effect makes it possible to optimize the often used workflow. ShadowBlur, with its
        fast blurring algorithm, is used to blur the shadow and composite operators are responsible for combining the
        source with different colored shadows.
        Shadow color and opacity can be set with the properties flood-color and flood-opacity.

        Tests: svg/dynamic-updates/SVGFEDropShadowElement-dom-dx-attr.html
               svg/dynamic-updates/SVGFEDropShadowElement-dom-dy-attr.html
               svg/dynamic-updates/SVGFEDropShadowElement-dom-in-attr.html
               svg/dynamic-updates/SVGFEDropShadowElement-dom-shadow-color-attr.html
               svg/dynamic-updates/SVGFEDropShadowElement-dom-shadow-opacity-attr.html
               svg/dynamic-updates/SVGFEDropShadowElement-dom-stdDeviation-attr.html
               svg/dynamic-updates/SVGFEDropShadowElement-svgdom-dx-prop.html
               svg/dynamic-updates/SVGFEDropShadowElement-svgdom-dy-prop.html
               svg/dynamic-updates/SVGFEDropShadowElement-svgdom-in-prop.html
               svg/dynamic-updates/SVGFEDropShadowElement-svgdom-shadow-color-prop.html
               svg/dynamic-updates/SVGFEDropShadowElement-svgdom-shadow-opacity-prop.html
               svg/dynamic-updates/SVGFEDropShadowElement-svgdom-stdDeviation-prop.html
               svg/filters/feDropShadow.svg

        * Android.mk:
        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.list.am:
        * WebCore.exp.in:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOM.mm:
        (WebCore::createElementClassMap):
        * bindings/objc/DOMSVG.h:
        * page/DOMWindow.idl:
        * platform/graphics/ShadowBlur.cpp: Added missing copyright after r84410.
        * platform/graphics/ShadowBlur.h: Made blurLayerImage public.
        * platform/graphics/filters/FEDropShadow.cpp: Added.
        (WebCore::FEDropShadow::FEDropShadow):
        (WebCore::FEDropShadow::create):
        (WebCore::FEDropShadow::determineAbsolutePaintRect):
        (WebCore::FEDropShadow::apply):
        (WebCore::FEDropShadow::dump):
        (WebCore::FEDropShadow::externalRepresentation):
        * platform/graphics/filters/FEDropShadow.h: Added.
        (WebCore::FEDropShadow::stdDeviationX):
        (WebCore::FEDropShadow::setStdDeviationX):
        (WebCore::FEDropShadow::stdDeviationY):
        (WebCore::FEDropShadow::setStdDeviationY):
        (WebCore::FEDropShadow::dx):
        (WebCore::FEDropShadow::setDx):
        (WebCore::FEDropShadow::dy):
        (WebCore::FEDropShadow::setDy):
        (WebCore::FEDropShadow::shadowColor):
        (WebCore::FEDropShadow::setShadowColor):
        (WebCore::FEDropShadow::shadowOpacity):
        (WebCore::FEDropShadow::setShadowOpacity):
        * platform/graphics/filters/FEGaussianBlur.cpp:
        (WebCore::FEGaussianBlur::calculateKernelSize): Make kernel calculations accessible for feDropShadow.
        * platform/graphics/filters/FEGaussianBlur.h:
        * svg/SVGAllInOne.cpp:
        * svg/SVGFEDropShadowElement.cpp: Added.
        (WebCore::SVGFEDropShadowElement::SVGFEDropShadowElement):
        (WebCore::SVGFEDropShadowElement::create):
        (WebCore::SVGFEDropShadowElement::stdDeviationXIdentifier):
        (WebCore::SVGFEDropShadowElement::stdDeviationYIdentifier):
        (WebCore::SVGFEDropShadowElement::setStdDeviation):
        (WebCore::SVGFEDropShadowElement::parseMappedAttribute):
        (WebCore::SVGFEDropShadowElement::svgAttributeChanged):
        (WebCore::SVGFEDropShadowElement::synchronizeProperty):
        (WebCore::SVGFEDropShadowElement::build):
        * svg/SVGFEDropShadowElement.h: Added.
        * svg/SVGFEDropShadowElement.idl: Added.
        * svg/svgtags.in:

2011-04-21  Roland Steiner  <rolandsteiner@chromium.org>

        Reviewed by Dimitri Glazkov.

        Bug 58704 - Decide on node type for ShadowRoot
        https://bugs.webkit.org/show_bug.cgi?id=58704

        Add a new node type SHADOW_ROOT_NODE.
        Adapt all calling sites of nodeType(). 

        Test: fast/dom/shadow/nodetype.html

        * bindings/js/JSNodeCustom.cpp:
        (WebCore::createWrapperInline):
        * bindings/objc/DOM.mm:
        (kitClass):
        * bindings/v8/custom/V8NodeCustom.cpp:
        (WebCore::toV8Slow):
        * dom/Document.cpp:
        (WebCore::Document::importNode):
        (WebCore::Document::childTypeAllowed):
        (WebCore::Document::canReplaceChild):
        * dom/Node.cpp:
        (WebCore::Node::dumpStatistics):
        (WebCore::Node::isDefaultNamespace):
        (WebCore::Node::lookupPrefix):
        (WebCore::Node::lookupNamespaceURI):
        (WebCore::appendTextContent):
        (WebCore::Node::setTextContent):
        * dom/Node.h:
        * dom/Range.cpp:
        (WebCore::lengthOfContentsInNode):
        (WebCore::Range::processContentsBetweenOffsets):
        (WebCore::Range::insertNode):
        (WebCore::Range::checkNodeWOffset):
        (WebCore::Range::checkNodeBA):
        (WebCore::Range::selectNode):
        (WebCore::Range::selectNodeContents):
        (WebCore::Range::surroundContents):
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::nodeType):
        * dom/Traversal.cpp:
        (WebCore::Traversal::acceptNode):
        * editing/MarkupAccumulator.cpp:
        (WebCore::MarkupAccumulator::appendStartMarkup):
        * html/parser/HTMLElementStack.cpp:
        (WebCore::HTMLNames::isRootNode):
        (WebCore::HTMLElementStack::pushRootNode):
        * html/parser/HTMLElementStack.h:
        (WebCore::isInHTMLNamespace):
        * xml/XPathUtil.cpp:
        (WebCore::XPath::isValidContextNode):

2011-04-20  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Kent Tamura.

        REGRESSION (r75543): Styles bleed into new shadow DOM (like slider and video)
        https://bugs.webkit.org/show_bug.cgi?id=52917

        In order to determine whether a rule should apply inside of a shadow DOM subtree,
        we collect three pieces of information:

        1) Are we parsing UA sheets?
        2) Does the current tree scope allows applying author sheets?
        3) Does the rule explicitly reach into shadow DOM (using pseudo-elements, for example)?

        If the answer to all of these is no, we ignore the rule.

        Test: fast/css/shadow-dom-scope.html

        * css/CSSStyleSelector.cpp:
        (WebCore::MatchingUARulesScope::MatchingUARulesScope): Added a scope helper to
            track whether we are currently matching UA rules.
        (WebCore::CSSStyleSelector::matchRulesForList): Added the check for three
            conditions mentioned above.
        (WebCore::CSSStyleSelector::SelectorChecker::SelectorChecker): Added
            initializer for the flag, which helps us determine whether the rule
            explicitly reaches into shadow DOM.
        (WebCore::CSSStyleSelector::matchUARules): Started using the scope helper.
        (WebCore::CSSStyleSelector::checkSelector): Added initializing of the
            flag.
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector): Added setting
            of the flag when we encounter unknown pseudo-elements.
        * css/CSSStyleSelector.h: Adjusted decls.
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::applyAuthorSheets): Added.
        * dom/ShadowRoot.h: Adjusted decls.
        * dom/TreeScope.cpp:
        (WebCore::TreeScope::applyAuthorSheets): Added.
        * dom/TreeScope.h: Adjusted decls.

2011-04-21  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Simon Fraser.

        position fixed element does not render properly when dynamically updated via javascript
        https://bugs.webkit.org/show_bug.cgi?id=54297

        Disabling the LayoutState fast-path for fixed-position content.

        Tests: fast/repaint/fixed-contents-changed-after-scroll.html
               fast/repaint/transformed-contents-changed-after-scroll.html

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

2011-04-20  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Maciej Stachowiak.

        arc() should add a circle to the path when start and end angles are far enough apart
        https://bugs.webkit.org/show_bug.cgi?id=58934

        Test: fast/canvas/canvas_arc_largeangles.html

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::arc):

2011-04-20  MORITA Hajime  <morrita@google.com>

        Reviewed by Dimitri Glazkov.

        Content of <summary> should be forwarded through the shadow DOM
        https://bugs.webkit.org/show_bug.cgi?id=58914

        - Introduced ShadowContentElement which hosts forwarded children of <summary>
        - Encapsulated Node::parentNodeForRenderingAndStyle() and shouldCreateRendererFor()
          into NodeVisualParentLookupResult class.
        - The parent lookup is also aware of node forwarding. If the visual parent node has
          a shadow root, the node is possibly forwarded to ShadowContentElement
        - ShadowContentElement lookup is implemented inside ShadowRoot.
        
        Tests: fast/html/details-add-summary-child-1.html
               fast/html/details-add-summary-child-2.html
               fast/html/details-remove-summary-child-1.html
               fast/html/details-remove-summary-child-2.html

        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Element.cpp:
        (WebCore::Element::childrenChanged):
        * dom/Node.cpp:
        (WebCore::NodeRenderParentDetector::NodeRenderParentDetector):
        (WebCore::NodeRenderParentDetector::parentNodeForRenderingAndStyle):
        (WebCore::NodeRenderParentDetector::findVisualParent):
        (WebCore::NodeRenderParentDetector::shouldCreateRenderer):
        (WebCore::Node::parentNodeForRenderingAndStyle):
        (WebCore::Node::createRendererAndStyle):
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::contentContainerFor):
        (WebCore::ShadowRoot::hostChildrenChanged):
        (WebCore::ShadowRoot::firstContentElement):
        * dom/ShadowRoot.h:
        * html/HTMLSummaryElement.cpp:
        (WebCore::HTMLSummaryElement::createShadowSubtree):
        * html/HTMLSummaryElement.h:
        * html/shadow/ShadowContentElement.h: Copied from Source/WebCore/dom/ShadowRoot.h.
        (WebCore::ShadowContentElement::ShadowContentElement):
        (WebCore::ShadowContentElement::isShadowBoundary):
        (WebCore::ShadowContentElement::createRenderer):
        (WebCore::ShadowContentElement::create):

2011-04-21  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: fix calls to WebInspector.ObjectPropertiesSection constructor
        https://bugs.webkit.org/show_bug.cgi?id=59105

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype._formatobject):
        * inspector/front-end/ExtensionPanel.js:
        (WebInspector.ExtensionSidebarPane.prototype._setObject):
        * inspector/front-end/ResourceJSONView.js:
        (WebInspector.ResourceJSONView.parseJSON.WebInspector.ResourceJSONView.prototype._initialize):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._showPopup.showObjectPopup):
        (WebInspector.SourceFrame.prototype._showPopup):

2011-04-21  Adam Barth  <abarth@webkit.org>

        Remove support for CSP's frame-src.  This approach causes too many
        extra console messages to be logged.  I'm leaving in the test (which
        now shows failure).

        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::isURLAllowed):

2011-04-21  Eunsol Park  <eunsol47.park@samsung.com>

        Reviewed by Antonio Gomes.

        [EFL] Scroll doesn't work on tiled backing store.
        https://bugs.webkit.org/show_bug.cgi?id=55021

        It was added from Changeset 72242, but it worked wrong in EFL port.
        The visible rect should not be returned as content rect for scrolling in EFL tiled backing store, 
        because it works differently from QT.

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::visibleContentRect):

2011-04-21  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Eric Seidel.

        Create RIAA class for GraphicsContext::save() and restore()
        https://bugs.webkit.org/show_bug.cgi?id=58807

        Use GraphicsContextStateSaver in a lot more places.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawImage):
        (WebCore::CanvasRenderingContext2D::drawTextInternal):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::wheelEvent):
        * platform/graphics/GeneratedImage.cpp:
        (WebCore::GeneratedImage::draw):
        * platform/graphics/GraphicsContext.h:
        (WebCore::GraphicsContextStateSaver::save):
        (WebCore::GraphicsContextStateSaver::restore):
        * platform/graphics/ShadowBlur.cpp:
        (WebCore::ShadowBlur::drawShadowBuffer):
        (WebCore::ShadowBlur::drawRectShadowWithoutTiling):
        (WebCore::ShadowBlur::drawInsetShadowWithoutTiling):
        (WebCore::ShadowBlur::drawInsetShadowWithTiling):
        (WebCore::ShadowBlur::drawRectShadowWithTiling):
        (WebCore::ShadowBlur::drawLayerPieces):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::paint):
        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::BitmapImage::draw):
        (WebCore::Image::drawPattern):
        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::PDFDocumentImage::draw):
        * platform/graphics/filters/FEComposite.cpp:
        (WebCore::FEComposite::apply):
        * platform/graphics/filters/SourceAlpha.cpp:
        (WebCore::SourceAlpha::apply):
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::paint):
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::paint):
        * platform/mac/ThemeMac.mm:
        (WebCore::paintCheckbox):
        (WebCore::paintRadio):
        (WebCore::paintStepper):
        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::paintSelection):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paintFillLayer):
        (WebCore::InlineFlowBox::paintBoxDecorations):
        (WebCore::InlineFlowBox::paintMask):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::paintSelection):
        (WebCore::InlineTextBox::paintCompositionBackground):
        (WebCore::InlineTextBox::paintDecoration):
        (WebCore::InlineTextBox::paintTextMatchMarker):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintColumnContents):
        (WebCore::RenderBlock::paintSelection):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintBoxDecorationsWithSize):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        (WebCore::RenderBoxModelObject::paintBorder):
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::paintReplaced):
        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::paintBoxDecorations):
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::paintObject):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintResizer):
        (WebCore::RenderLayer::paintLayer):
        (WebCore::RenderLayer::paintChildLayerIntoColumns):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::paint):
        * rendering/RenderMediaControls.cpp:
        (WebCore::RenderMediaControls::paintMediaControlsPart):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::paintBackgroundsBehindCell):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::paintPlaceholder):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintMenuList):
        (WebCore::RenderThemeMac::paintMeter):
        (WebCore::RenderThemeMac::paintProgressBar):
        (WebCore::RenderThemeMac::paintMenuListButtonGradients):
        (WebCore::RenderThemeMac::paintMenuListButton):
        (WebCore::RenderThemeMac::paintSliderTrack):
        (WebCore::RenderThemeMac::paintSliderThumb):
        (WebCore::RenderThemeMac::paintSearchField):
        (WebCore::RenderThemeMac::paintSearchFieldCancelButton):
        (WebCore::RenderThemeMac::paintSearchFieldResultsButton):
        (WebCore::RenderThemeMac::paintMediaSliderTrack):
        (WebCore::RenderThemeMac::paintMediaCurrentTime):
        (WebCore::RenderThemeMac::paintMediaTimeRemaining):
        * rendering/mathml/RenderMathMLBlock.cpp:
        (WebCore::RenderMathMLBlock::paint):
        * rendering/mathml/RenderMathMLFraction.cpp:
        (WebCore::RenderMathMLFraction::paint):
        * rendering/mathml/RenderMathMLRoot.cpp:
        (WebCore::RenderMathMLRoot::paint):
        * rendering/mathml/RenderMathMLSquareRoot.cpp:
        (WebCore::RenderMathMLSquareRoot::paint):
        * rendering/svg/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::paint):
        * rendering/svg/RenderSVGForeignObject.cpp:
        (WebCore::RenderSVGForeignObject::paint):
        * rendering/svg/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::paint):
        * rendering/svg/RenderSVGPath.cpp:
        (WebCore::RenderSVGPath::fillAndStrokePath):
        (WebCore::RenderSVGPath::paint):
        * rendering/svg/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::applyClippingToContext):
        * rendering/svg/RenderSVGResourceMarker.cpp:
        (WebCore::RenderSVGResourceMarker::draw):
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::paint):
        * rendering/svg/SVGInlineFlowBox.cpp:
        (WebCore::SVGInlineFlowBox::paint):
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::paintSelectionBackground):
        (WebCore::SVGInlineTextBox::paint):
        (WebCore::SVGInlineTextBox::paintDecorationWithStyle):
        * rendering/svg/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBox::paint):
        * svg/SVGFont.cpp:
        (WebCore::Font::drawTextUsingSVGFont):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::draw):

2011-04-20  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [Extensions API] console API is not exposed to code evaluated by sidebar.setExpression()
        https://bugs.webkit.org/show_bug.cgi?id=59006

        * inspector/front-end/ExtensionPanel.js:
        (WebInspector.ExtensionSidebarPane.prototype.setExpression):

2011-04-21  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Split SVGGlyphIdentifier class out of SVGGlyphElement.h
        https://bugs.webkit.org/show_bug.cgi?id=59101

        Move SVGGlyphIdentifier class out of SVGGlyphElement.h, place it in platform/graphics/SVGGlyph.h
        and rename the contained struct to SVGGlyph. It will be used in follow-up patches that will integrate SVGGlyph & GlyphPage.

        Several utility functions are moved from SVGFont.cpp to SVGGlyph.cpp, as that's the place where they really belong to.
        Renamed nameLength to unicodeStringLength in the SVGGlyph struct for clarity.

        * Android.mk: Add SVGGlyph.cpp/h to build.
        * CMakeLists.txt: Ditto.
        * GNUmakefile.list.am: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * platform/graphics/SVGGlyph.cpp: Copied from svg/SVGFont.cpp. Removed everything except the methods listed below, that belong here.
        (WebCore::processArabicFormDetection):
        (WebCore::charactersWithArabicForm):
        (WebCore::isCompatibleArabicForm):
        (WebCore::isCompatibleGlyph):
        * platform/graphics/SVGGlyph.h: Copied from svg/SVGGlyphElement.h. Renamed SVGGlyphIdentifier to SVGGlyph.
        (WebCore::SVGGlyph::SVGGlyph):
        (WebCore::SVGGlyph::operator==):
        * platform/graphics/SimpleFontData.cpp: Adapt for SVGGlyphIdentifier -> SVGGlyph and nameLength -> unicodeStringLength rename.
        (WebCore::SimpleFontData::SimpleFontData):
        * svg/SVGFont.cpp: Ditto. Remove helper functions that are now living in SVGGlyph.cpp
        (WebCore::SVGTextRunWalker::walk):
        (WebCore::floatWidthUsingSVGFontCallback):
        (WebCore::drawTextUsingSVGFontCallback):
        (WebCore::drawTextMissingGlyphCallback):
        (WebCore::Font::drawTextUsingSVGFont):
        * svg/SVGFontElement.cpp: Ditto.
        (WebCore::SVGFontElement::getGlyphIdentifiersForString):
        * svg/SVGFontElement.h: Ditto.
        * svg/SVGGlyphElement.cpp: Ditto.
        (WebCore::parseArabicForm):
        (WebCore::parseOrientation):
        (WebCore::SVGGlyphElement::inheritUnspecifiedAttributes):
        (WebCore::parseSVGGlyphAttribute):
        (WebCore::SVGGlyphElement::buildGenericGlyphIdentifier):
        (WebCore::SVGGlyphElement::buildGlyphIdentifier):
        * svg/SVGGlyphElement.h: Ditto.
        * svg/SVGGlyphMap.h: Ditto.
        (WebCore::SVGGlyphMap::add):
        (WebCore::SVGGlyphMap::compareGlyphPriority):
        (WebCore::SVGGlyphMap::get):

2011-04-21  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Dan Bernstein.

        Live streams won't play with AVFoundation backend
        https://bugs.webkit.org/show_bug.cgi?id=58961
        rdar://problem/9284748

        Tested manually because we don't have any live streams to test in DRT.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::seek): Do nothing when asked to seek to the
            current time.
        (WebCore::MediaPlayerPrivateAVFoundation::updateStates): If the readyState is HaveEnoughData,
            don't revert when the new state is "ready to play" or "buffer full".
        (WebCore::MediaPlayerPrivateAVFoundation::movieLoadType): Use new convenience function isLiveStream.
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        (WebCore::MediaPlayerPrivateAVFoundation::isLiveStream): New.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::tracksChanged): Don't use AVAsset's
            tracksWithMediaCharacteristic because it doesn't give us what we need with live
            streams.

2011-04-21  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Cookies section in empty on page re-launch.
        https://bugs.webkit.org/show_bug.cgi?id=59095

        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype._reset):
        (WebInspector.ResourcesPanel.prototype._frameNavigated):

2011-04-21  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: rename De-obfuscate to Pretty print.
        https://bugs.webkit.org/show_bug.cgi?id=59093

        * English.lproj/localizedStrings.js:
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._populateTextAreaContextMenu):

2011-04-21  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: following Image URL link in the network panel does nothing.
        https://bugs.webkit.org/show_bug.cgi?id=59092

        * inspector/front-end/ImageView.js:
        (WebInspector.ImageView.prototype._createContentIfNeeded.onImageLoad):
        (WebInspector.ImageView.prototype._createContentIfNeeded):
        * inspector/front-end/inspector.js:
        (WebInspector.linkifyURLAsNode):

2011-04-21  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: implement Go To Line for network panel.
        https://bugs.webkit.org/show_bug.cgi?id=59090

        * inspector/front-end/GoToLineDialog.js:
        (WebInspector.GoToLineDialog.prototype._highlightSelectedLine):
        * inspector/front-end/NetworkItemView.js:
        (WebInspector.NetworkItemView.prototype._tabSelected):
        (WebInspector.NetworkItemView.prototype._installHighlightSupport):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkPanel):
        * inspector/front-end/TabbedPane.js:
        (WebInspector.TabbedPane.prototype.appendTab):
        (WebInspector.TabbedPane.prototype.selectTab):
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer.prototype.highlightLine):

2011-04-21  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Split GlyphPage from GlyphPageTreeNode.h into its own header
        https://bugs.webkit.org/show_bug.cgi?id=59096

        * GNUmakefile.list.am: Add GlyphPage.h to build.
        * WebCore.gypi: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * platform/graphics/GlyphPage.h: Copied from platform/graphics/GlyphPageTreeNode.h. Removed GlyphPageTreeNode class, leaving only GlyphPage.
        * platform/graphics/GlyphPageTreeNode.h: Removed GlyphPage class.

2011-04-21  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Centralize typedef unsigned short Glyph in Glyph.h
        https://bugs.webkit.org/show_bug.cgi?id=59087

        * GNUmakefile.list.am: Add Glyph.h to build.
        * WebCore.gypi: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * platform/graphics/Glyph.h: Added.
        * platform/graphics/GlyphBuffer.h: Include Glyph.h instead of duplicating the Glyph typedef.
        * platform/graphics/GlyphMetricsMap.h: Ditto.
        * platform/graphics/GlyphPageTreeNode.h: Ditto.

2011-04-21  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: toolbar background is blank on Mac Chromium port.
        https://bugs.webkit.org/show_bug.cgi?id=59089

        * inspector/front-end/inspector.css:
        (body.detached.platform-mac-snowleopard:not(.remote) #toolbar):

2011-04-21  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: add support for Go To Line in Resources panel.
        https://bugs.webkit.org/show_bug.cgi?id=59077

        * inspector/front-end/CallStackSidebarPane.js:
        (WebInspector.CallStackSidebarPane.prototype.registerShortcuts):
        * inspector/front-end/GoToLineDialog.js:
        (WebInspector.GoToLineDialog.show):
        (WebInspector.GoToLineDialog.createShortcut):
        (WebInspector.GoToLineDialog.prototype._onKeyDown):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkPanel.prototype.handleShortcut):
        * inspector/front-end/Panel.js:
        (WebInspector.Panel):
        (WebInspector.Panel.prototype._restoreScrollPositions):
        (WebInspector.Panel.prototype.handleShortcut):
        (WebInspector.Panel.prototype.registerShortcuts):
        (WebInspector.Panel.prototype._showGoToLineDialog):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype.handleShortcut):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._registerShortcuts):
        (WebInspector.ScriptsPanel.prototype.jumpToPreviousSearchResult):
        * inspector/front-end/inspector.js:
        (WebInspector._registerShortcuts):
        (WebInspector.documentKeyDown):

2011-04-21  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: persist local resource history between inspector / browser launches.
        https://bugs.webkit.org/show_bug.cgi?id=58993

        * inspector/front-end/Resource.js:
        (WebInspector.Resource.prototype._restoreRevisions):

2011-04-20  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Metrics pane editing and visual feedback improvements
        https://bugs.webkit.org/show_bug.cgi?id=58992

        Added visual feedback when hovering over the box model components of the Metrics pane
        and handling of the [Page]Up/Down keys when editing the box model values.

        * inspector/DOMNodeHighlighter.cpp:
        (WebCore::DOMNodeHighlighter::DrawNodeHighlight):
        * inspector/DOMNodeHighlighter.h:
        * inspector/Inspector.json:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::mouseDidMoveOverElement):
        (WebCore::InspectorDOMAgent::highlight):
        (WebCore::InspectorDOMAgent::highlightDOMNode):
        (WebCore::InspectorDOMAgent::highlightFrame):
        (WebCore::InspectorDOMAgent::drawNodeHighlight):
        * inspector/InspectorDOMAgent.h:
        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSProperty.prototype.setText.callback):
        (WebInspector.CSSProperty.prototype.setText):
        (WebInspector.CSSProperty.prototype.setValue):
        (WebInspector.CSSProperty.prototype.setDisabled.callback):
        (WebInspector.CSSProperty.prototype.setDisabled):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.startEditingStyle):
        (WebInspector.ElementsPanel.prototype.endEditingStyle):
        (WebInspector.ElementsPanel.prototype._attributesUpdated):
        * inspector/front-end/MetricsSidebarPane.js:
        (WebInspector.MetricsSidebarPane):
        (WebInspector.MetricsSidebarPane.prototype._highlightDOMNode):
        (WebInspector.MetricsSidebarPane.prototype._highlightDOMNode.getBoxRectangleElement):
        (WebInspector.MetricsSidebarPane.prototype._update.createBoxPartElement):
        (WebInspector.MetricsSidebarPane.prototype._update):
        (WebInspector.MetricsSidebarPane.prototype.startEditing):
        (WebInspector.MetricsSidebarPane.prototype._handleKeyDown):
        (WebInspector.MetricsSidebarPane.prototype.editingEnded):
        (WebInspector.MetricsSidebarPane.prototype.editingCancelled):
        (WebInspector.MetricsSidebarPane.prototype._applyUserInput.callback):
        (WebInspector.MetricsSidebarPane.prototype._applyUserInput):
        (WebInspector.MetricsSidebarPane.prototype.editingCommitted):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.alteredFloatNumber):
        (WebInspector.StylesSidebarPane.alteredHexNumber):
        (WebInspector.StylePropertyTreeElement.prototype):
        (WebInspector.StylePropertyTreeElement.prototype.element.userInput.previousContent.context.moveDirection):
        * inspector/front-end/inspector.css:
        (.metrics .hovered > .label):
        (.metrics .position):
        (.metrics .margin):
        (.metrics .margin.hovered):
        (.metrics .border):
        (.metrics .border.hovered):
        (.metrics .padding):
        (.metrics .padding.hovered):
        (.metrics .content):
        (.metrics .content.hovered):
        * inspector/front-end/inspector.js:
        (WebInspector.highlightDOMNode):

2011-04-21  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        CSP report-uri is missing
        https://bugs.webkit.org/show_bug.cgi?id=58639

        Our implementation of report-uri differs from what's currently in the
        spec.  I sent the working group an email explaining why.  Generally,
        we're using normal form encoding instead of JSON and we're sending less
        information to a wider set of URLs.  Specifically, we send the current
        document's URL as well as the directive that was violated.  The spec
        (currently) tells us to send the raw HTTP headers and the URL that
        caused the violation, but both of these pieces of data could contain
        information that's sensitive, so we omit them for now.

        Test: http/tests/security/contentSecurityPolicy/report-uri.html

        * loader/PingLoader.cpp:
        (WebCore::PingLoader::reportContentSecurityPolicyViolation):
        * loader/PingLoader.h:
        * page/ContentSecurityPolicy.cpp:
        (WebCore::CSPDirective::CSPDirective):
        (WebCore::CSPDirective::text):
        (WebCore::ContentSecurityPolicy::reportViolation):
        (WebCore::ContentSecurityPolicy::allowJavaScriptURLs):
        (WebCore::ContentSecurityPolicy::allowInlineEventHandlers):
        (WebCore::ContentSecurityPolicy::allowInlineScript):
        (WebCore::ContentSecurityPolicy::allowEval):
        (WebCore::ContentSecurityPolicy::allowScriptFromSource):
        (WebCore::ContentSecurityPolicy::allowObjectFromSource):
        (WebCore::ContentSecurityPolicy::allowChildFrameFromSource):
        (WebCore::ContentSecurityPolicy::allowImageFromSource):
        (WebCore::ContentSecurityPolicy::allowStyleFromSource):
        (WebCore::ContentSecurityPolicy::allowFontFromSource):
        (WebCore::ContentSecurityPolicy::allowMediaFromSource):
        (WebCore::ContentSecurityPolicy::parseReportURI):
        (WebCore::ContentSecurityPolicy::addDirective):
        * page/ContentSecurityPolicy.h:

2011-04-21  Jon Lee  <jonlee@apple.com>

        Reviewed by Maciej Stachowiak.

        remove unneeded function from graphicscontext3d.cpp (59076)
        https://bugs.webkit.org/show_bug.cgi?id=59076
        <rdar://problem/9315681>

        * platform/graphics/GraphicsContext3D.cpp: removing unused function unpackOneRowOfRGBA8ToRGBA8

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

        Reviewed by Dan Bernstein.

        REGRESSION: Korean encoding alias KSC5601 does not work
        https://bugs.webkit.org/show_bug.cgi?id=59075
        <rdar://problem/9303233>

        * platform/text/TextCodecICU.cpp: (WebCore::TextCodecICU::registerEncodingNames): Added a
        KSC5601 alias for KSC_5601, which effectively makes it windows-949.

2011-04-20  Dominic Cooney  <dominicc@chromium.org>

        Reviewed by Dimitri Glazkov.

        layoutTestController can create and destroy shadow DOM
        https://bugs.webkit.org/show_bug.cgi?id=59058

        Test: fast/dom/shadow/layout-tests-can-access-shadow.html

        * WebCore.exp.in: Mac DRT needs to see Element::ensure/removeShadowRoot

2011-04-20  Pratik Solanki  <psolanki@apple.com>

        Reviewed by Ryosuke Niwa.

        Follow on fix for https://bugs.webkit.org/show_bug.cgi?id=58926

        Fix assertions in Chromium builds.

        * platform/graphics/Image.cpp:
        (WebCore::Image::drawTiled): Skia and Wx do not have proper implementations of
        BitmapImage::checkForSolidColor() so we shouldn't assert on those platforms.

2011-04-20  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Reviewed by Eric Seidel.

        [EFL] Add timeline to mediaControlsEfl.css
        https://bugs.webkit.org/show_bug.cgi?id=58865

        Add timeline to mediaControlsEfl.css in order to show playing time of media
        content.

        * css/mediaControlsEfl.css:
        (audio):
        (audio::-webkit-media-controls-panel, video::-webkit-media-controls-panel):
        (audio::-webkit-media-controls-mute-button, video::-webkit-media-controls-mute-button):
        (audio::-webkit-media-controls-play-button, video::-webkit-media-controls-play-button):
        (audio::-webkit-media-controls-timeline-container, video::-webkit-media-controls-timeline-container):
        (audio::-webkit-media-controls-current-time-display, video::-webkit-media-controls-current-time-display):
        (audio::-webkit-media-controls-timeline, video::-webkit-media-controls-timeline):
        (audio::-webkit-media-controls-seek-back-button, video::-webkit-media-controls-seek-back-button):
        (audio::-webkit-media-controls-seek-forward-button, video::-webkit-media-controls-seek-forward-button):
        (audio::-webkit-media-controls-fullscreen-button, video::-webkit-media-controls-fullscreen-button):
        (audio::-webkit-media-controls-toggle-closed-captions-button, video::-webkit-media-controls-toggle-closed-captions-button):

2011-04-20  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Eric Seidel.

        Create RIAA class for GraphicsContext::save() and restore()
        https://bugs.webkit.org/show_bug.cgi?id=58807
        
        Make a stack-based class that can be used to save and restore
        the graphics state. It has conditional behavior to deal with the many cases
        where we decide to save/restore based on some runtime condition.

        Change RenderBoxModelObject to use it for now; it can be used more widely
        once committed.

        * platform/graphics/GraphicsContext.h:
        (WebCore::GraphicsContextStateSaver::GraphicsContextStateSaver):
        (WebCore::GraphicsContextStateSaver::~GraphicsContextStateSaver):
        (WebCore::GraphicsContextStateSaver::saveState):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        (WebCore::RenderBoxModelObject::paintOneBorderSide):
        (WebCore::RenderBoxModelObject::paintBorder):
        (WebCore::RenderBoxModelObject::drawBoxSideFromPath):
        (WebCore::RenderBoxModelObject::paintBoxShadow):

2011-04-20  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        CSP frame-src is missing
        https://bugs.webkit.org/show_bug.cgi?id=58643

        This is a first cut at an implementation of frame-src.  There are a
        couple things that will need to be improved:

          1) I don't think we're handling in-frame navigation properly.  This
             patch only covers setting the src attribute of the frame, but I
             think the intent of the spec is to cover navigation as well.

          2) The console message is printed twice, once when we try to load the
             frame and again when we attach the frame to the render tree.

        I'll file bugs about these issues (blocking
        https://bugs.webkit.org/show_bug.cgi?id=53572) once this patch lands.

        Tests: http/tests/security/contentSecurityPolicy/frame-src-allowed.html
               http/tests/security/contentSecurityPolicy/frame-src-blocked.html

        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::isURLAllowed):
        * page/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::allowChildFrameFromSource):
        (WebCore::ContentSecurityPolicy::addDirective):
        * page/ContentSecurityPolicy.h:

2011-04-20  Jia Pu  <jpu@apple.com>

        Reviewed by Maciej Stachowiak.

        [Mac] Correction panel shows up at incorrect location after webpage is scrolled.
        https://bugs.webkit.org/show_bug.cgi?id=59052
        <rdar://problem/9312513>
        
        Fixed a regression caused by interaction between patch for bug 57353 and patch for bug 55571.
        See bug webpage for detail.

        * editing/Editor.cpp:
        (WebCore::Editor::selectionStartHasMarkerFor):
        * editing/SpellingCorrectionController.cpp:
        (WebCore::SpellingCorrectionController::windowRectForRange):

2011-04-20  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        CSP policy violations should log to the console
        https://bugs.webkit.org/show_bug.cgi?id=58646

        We now log policy violations to the JavaScript console to help
        developers debug what's going on with their Content-Security-Policy.

        Tests: http/tests/security/contentSecurityPolicy/inline-script-blocked-javascript-url.html
               http/tests/security/contentSecurityPolicy/javascript-url-allowed.html
               http/tests/security/contentSecurityPolicy/javascript-url-blocked.html
               http/tests/security/contentSecurityPolicy/object-src-none-allowed.html
               http/tests/security/contentSecurityPolicy/object-src-none-blocked.html
               http/tests/security/contentSecurityPolicy/script-src-self-blocked-01.html
               http/tests/security/contentSecurityPolicy/script-src-self-blocked-02.html
               http/tests/security/contentSecurityPolicy/script-src-self-blocked-03.html

        * dom/Document.cpp:
        (WebCore::Document::initSecurityContext):
        * page/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::ContentSecurityPolicy):
        (WebCore::ContentSecurityPolicy::allowJavaScriptURLs):
        (WebCore::ContentSecurityPolicy::allowInlineEventHandlers):
        (WebCore::ContentSecurityPolicy::allowInlineScript):
        (WebCore::ContentSecurityPolicy::allowEval):
        (WebCore::ContentSecurityPolicy::allowScriptFromSource):
        (WebCore::ContentSecurityPolicy::allowObjectFromSource):
        (WebCore::ContentSecurityPolicy::allowImageFromSource):
        (WebCore::ContentSecurityPolicy::allowStyleFromSource):
        (WebCore::ContentSecurityPolicy::allowFontFromSource):
        (WebCore::ContentSecurityPolicy::allowMediaFromSource):
        (WebCore::ContentSecurityPolicy::addDirective):
        * page/ContentSecurityPolicy.h:
        (WebCore::ContentSecurityPolicy::create):

2011-04-20  Dan Bernstein  <mitz@apple.com>

        Reviewed by Maciej Stachowiak.

        <rdar://problem/9095366> With a non-1 page scale, scrolling to reveal selection fails
        https://bugs.webkit.org/show_bug.cgi?id=59046

        Test: fast/transforms/selection-bounds-in-transformed-view.html

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::repaintUsingContainer): If the repaint container is the RenderView, and
        it has a composited layer that paints straight to the window, then translate from view coordinates
        to window coordinates here.
        * rendering/RenderView.cpp:
        (WebCore::RenderView::mapLocalToContainer): Do not apply our transform if we are the painting root.
        (WebCore::RenderView::computeRectForRepaint): Ditto. Applying the transform here was compensating
        for not applying it in RenderObject::repaintUsingContainer(), but for purposes other than repainting,
        such as computing selection bounds, this function was returning the wrong results.

2011-04-20  Dan Bernstein  <mitz@apple.com>

        Reviewed by Eric Carlson.

        <rdar://problem/9304956> media/broken-video.html crashes

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::nextMediaEngine): Fixed an off-by-one error.

2011-04-20  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Split out isIteratorTarget from bidiNext and bidiFirst
        https://bugs.webkit.org/show_bug.cgi?id=59033

        This is the first (tiny) step of many.  When I tried to
        make larger changes to this function I broke stuff, so
        doing this in tiny pieces so we know it's right.

        * rendering/InlineIterator.h:
        (WebCore::isIteratorTarget):
        (WebCore::bidiNext):
        (WebCore::bidiFirstSkippingInlines):
        (WebCore::bidiFirstNotSkippingInlines):

2011-04-20  Alexey Marinichev  <amarinichev@chromium.org>

        Reviewed by Kenneth Russell.

        Check for null m_context in WebGLLayerChromium and add resetting platform layer's context in the destructor of GraphicsContext3D.
        https://bugs.webkit.org/show_bug.cgi?id=59045

        Lose context extension test might not catch this bug, more reliable
        way is forcing the crash of the GPU process, which is done by Chromium
        browser tests.

        * platform/graphics/chromium/WebGLLayerChromium.cpp:
        (WebCore::WebGLLayerChromium::updateCompositorResources):
        (WebCore::WebGLLayerChromium::setContext):
        * platform/graphics/chromium/WebGLLayerChromium.h:

2011-04-20  Jia Pu  <jpu@apple.com>

        Reviewed by Maciej Stachowiak.

        [Mac]Regression: extending word that is already marked misspelled doesn't remove misspelling underline.
        https://bugs.webkit.org/show_bug.cgi?id=59032
        <rdar://problem/9312444>

        This fixes a regression introduced in recent refactoring work in Editor. See bug webpage for detail.

        manual test: Source/WebCore/manual-tests/autocorrection/remove-misspelling-marker-after-appending-letter.html

        * editing/Editor.cpp:
        (WebCore::Editor::insertTextWithoutSendingTextEvent):
        * manual-tests/autocorrection/remove-misspelling-marker-after-appending-letter.html: Added.

2011-04-20  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        CrashTracer: 301 crashes in Safari at com.apple.WebCore: WebCore::AccessibilityRenderObject::visiblePositionForPoint const + 297
        https://bugs.webkit.org/show_bug.cgi?id=57405

        The offending line in this crash was a null pointer access in
           m_renderer->document()->topDocument()->renderer()->view()->frameView();
        It seems likely that one of those calls was invalid. I could not reproduce and there was no
        information on reproducible steps, hence the absence of a layout test.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::topRenderer):
        (WebCore::AccessibilityRenderObject::topDocument):
        (WebCore::AccessibilityRenderObject::topDocumentFrameView):
        (WebCore::AccessibilityRenderObject::visiblePositionForPoint):
        * accessibility/AccessibilityRenderObject.h:

2011-04-20  Andy Estes  <aestes@apple.com>

        Reviewed by Maciej Stachowiak.

        REGRESSION (WK2): Animated GIF stops when navigating forward, back
        https://bugs.webkit.org/show_bug.cgi?id=59042
        
        When loading the page from the b/f cache,
        document()->view()->isOffscreen() returns true in
        RenderObject::willRenderImage(), so BitmapImage::startAnimation()
        returns without actually kicking off the animation.
        
        In WebKit1, the ScrollView is a platform widget, so
        ScrollView::isOffscreen() calls [NSWindow isVisible]. In WebKit2, the
        ScrollView isn't a platform widget so it asks the WebCore Widget
        whether or not it is visible. It always returns false since
        setParentVisible(false) was called on the old ScrollView before
        navigating to a new page, but setParentVisible(true) is never called
        when restoring it from the back/forward cache. This is probably a
        long-standing bug.
        
        Fix this by calling setParentVisible(true) when a cached main frame is
        being restored.

        Test: fast/images/animated-gif-restored-from-bfcache.html

        * history/CachedFrame.cpp:
        (WebCore::CachedFrameBase::restore): If the cached frame is the main
        frame, call setParentVisible(true) on the frame's view.

2011-04-20  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        WebKit2: Can't scroll page after printing on Yahoo.com and other sites
        <rdar://problem/9233291>
        https://bugs.webkit.org/show_bug.cgi?id=59049

        * page/Frame.cpp:
        (WebCore::Frame::setPrinting): Match Mac WebKit1 code when ending printing,
        and call forceLayout() instead of forceLayoutForPagination().

2011-04-20  Kenneth Russell  <kbr@google.com>

        Reviewed by James Robinson.

        Reduce size of GraphicsContext3D's compiled code
        https://bugs.webkit.org/show_bug.cgi?id=59029

        Changed format conversion operations to work line-by-line instead
        of pixel-by-pixel, and passed them as function pointers rather
        than template parameters. Simplified computation of source
        increment, since elements per row is now all that is needed.

        These changes reduce the size of GraphicsContext3D.o in release
        mode on Linux from 299 KB to 53 KB.

        No new tests. Existing layout tests cover these format conversions
        well, and caught one typo in the restructuring. Also ran WebGL
        conformance suite and other demos.

        * platform/graphics/GraphicsContext3D.cpp:
        (WebCore::doUnpackingAndPacking):
        (WebCore::computeSourceElementsPerRow):
        (WebCore::doPacking):
        (WebCore::doFloatingPointPacking):
        (WebCore::GraphicsContext3D::packPixels):

2011-04-20  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Kent Tamura.

        REGRESSION(r82376): Clicking on a label, associated with a disabled input element changes state of the element.
        https://bugs.webkit.org/show_bug.cgi?id=59037

        Test: fast/events/simulated-click-disabled.html

        * dom/EventDispatcher.cpp:
        (WebCore::EventDispatcher::dispatchSimulatedClick): Added check for disabled element.

2011-04-20  Eric Seidel  <eric@webkit.org>

        Reviewed by Ryosuke Niwa.

        Split bidiFirst into two functions
        https://bugs.webkit.org/show_bug.cgi?id=59025

        I don't have a full understanding of the skipInlines case yet
        (hence it's not as pretty as the non-skipping case), but
        this is clearly a win, as both functions are much simpler
        than their combined version.

        Both of these functions still have bad names.  However the
        bidiNext/bidiFirst names date all the way back to revision 1
        of the WebKit repository. :)  So I don't feel too bad keeping
        them for the moment.

        * rendering/InlineIterator.h:
        (WebCore::bidiNext):
        (WebCore::bidiFirstSkippingInlines):
        (WebCore::bidiFirstNotSkippingInlines):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::simplifiedNormalFlowLayout):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::layoutInlineChildren):
        (WebCore::RenderBlock::determineStartPosition):

2011-04-20  Jia Pu  <jpu@apple.com>

        Reviewed by Adele Peterson.
    
        [Mac] Like autocorrection, other types of substitution need to respect undo.
        https://bugs.webkit.org/show_bug.cgi?id=59009
        <rdar://problem/8601537>

        Similar to autocorrection, we use SpellingCorrectionCommand to carry out other types of text substitution, so that
        if user undoes the substitution, it will not be applied again. For CreateLinkCommand,  we add marker when it's undone
        so that we won't automatically add link again.

        * editing/CreateLinkCommand.h:
        (WebCore::CreateLinkCommand::isCreateLinkCommand):
        * editing/EditCommand.cpp:
        (WebCore::EditCommand::isCreateLinkCommand):
        * editing/EditCommand.h:
        * editing/Editor.cpp:
        (WebCore::Editor::unappliedEditing):
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges):
        * editing/SpellingCorrectionController.cpp:
        (WebCore::SpellingCorrectionController::respondToAppliedEditing):
        (WebCore::SpellingCorrectionController::respondToUnappliedEditing):
        * editing/SpellingCorrectionController.h:
        (WebCore::SpellingCorrectionController::UNLESS_ENABLED):

2011-04-20  Steve Lacey  <sjl@chromium.org>

        Reviewed by Eric Carlson.

        [chromium] Move Chromium media controls into own root element.
        https://bugs.webkit.org/show_bug.cgi?id=59018

        No new tests as there is no functional change

        * WebCore.gypi:
        * css/mediaControlsChromium.css:
        (audio::-webkit-media-controls-timeline-container, video::-webkit-media-controls-timeline-container):
        * html/shadow/MediaControlRootElementChromium.cpp: Added.
        Clone of html/shadow/MediaControlRootElement.cpp with all unused code removed.
        * html/shadow/MediaControlRootElementChromium.h: Added.

2011-04-20  Charlie Lee  <chocobo@chromium.org>

        Reviewed by Dirk Schulze.

        LEFilter change doesn't compile on ARM neon targets
        https://bugs.webkit.org/show_bug.cgi?id=58671

        Build fix for Chromium ARM/NEON platform. Added platform/graphics/filters/arm directory to build system.

        * WebCore.gyp/WebCore.gyp:

2011-04-20  Xiaomei Ji  <xji@chromium.org>

        Reviewed by Ryosuke Niwa.

        Continue (3rd) experiment with moving caret by word in visual order.
        https://bugs.webkit.org/show_bug.cgi?id=58294

        This patch along with r82588 and r83483 implements moving caret by
        word in visual order.
        
        The overall algorithm is:
        1. First get the InlineBox and offset of the pass-in VisiblePosition.
        2. Based on the position (left boundary, middle, right boundary) of the offset and the
           direction of the movement, look for visually adjacent word breaks.
        2.1 If the offset is the minimum offset of the box,
            return the rightmost word boundary in previous boxes if moving left.
            return the leftmost word boundary in box and next boxes if moving right.
        2.2 Similar for the case when offset is at the maximum offset of the box.
        2.3 When offset is inside the box (not at boundaries), first find the previousWordPosition 
            or nextWordPosition based on the directionality of the box. If this word break position 
            is also inside the same box, return it. Otherwise (the nextWordPosition or 
            previousWordPosition is not in the same box or is at the box boundary), collect all the 
            word breaks in the box and search for the one closest to the input "offset" based on 
            box directionality, block directionality, and movement direction. Continue search in 
            adjacent boxes if needed.

        Notes:
        1. Word boundaries are collected one box at a time. Only when a boundary that is closest to 
           the input position (in the moving direction) is not available in current box, word 
           boundaries in adjacent box will be collected. So, there is no need to save InlineBox in 
           word boundaries. Instead, the word boundaries are saved as a pair 
           (VisiblePosition, offset) to avoid recomputing VisiblePosition.
 
        2. We only collect boundaries of the right kind (i.e. left boundary of a word in LTR block
           and right boundary of a word in RTL block). And word boundaries are collected using 
           previousWordPosition() and nextWordPosition(). So when box directionality is the same as 
           block directionality, word boundaries are collected from right to left visually in a LTR 
           box, and word boundaries are collected from left to right visually in a RTL box. It is
           the other way around when box directionality is different from block directionality.

        3. To find the right kinds of word boundaries, we must move back and forth between words
           in some situations. For example, if we're moving to the right in a LTR box in LTR block,
           we cannot simply return nextWordPosition() because it would return the right boundary
           of a word. Instead, we return nextWordPosition()'s nextWordPosition()'s previousWordPosition().

        4. When collecting word breaks inside a box, it first computes a start position, then
           collect the right kind of word breaks until it reaches the end of (or beyond) the box.
           In the meanwhile, it might need special handling on the rightmost or leftmost position 
           based on the directionality of the box and block. These computations do not consider the 
           box's bidi level.

        * editing/visible_units.cpp:
        (WebCore::nextWordBreakInBoxInsideBlockWithDifferentDirectionality):
        (WebCore::collectWordBreaksInBox):
        (WebCore::previousWordBoundaryInBox):
        (WebCore::nextWordBoundaryInBox):
        (WebCore::visuallyLastWordBoundaryInBox):
        (WebCore::leftWordBoundary):
        (WebCore::rightWordBoundary):
        (WebCore::leftWordPosition):
        (WebCore::rightWordPosition):

2011-04-20  Cris Neckar  <cdn@chromium.org>

        Reviewed by Dirk Schulze.

        Return early when the paint rect and the source rect do not overlap as no bytes need to be copied.
        https://bugs.webkit.org/show_bug.cgi?id=57885

        Test: svg/filters/svg-transform-blur-crash.xhtml

        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::copyImageBytes):

2011-04-20  Jian Li  <jianli@chromium.org>

        Reviewed by Kenneth Russell.

        Support DataView in workers
        https://bugs.webkit.org/show_bug.cgi?id=59014

        Test: fast/canvas/webgl/worker-data-view-test.html

        * workers/WorkerContext.idl: Expose DataView constructor.

2011-04-20  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Adam Roben.

        REGRESSION (WebKit2): CSS animations on pages that use accelerated compositing stop after switching tabs
        https://bugs.webkit.org/show_bug.cgi?id=57868
        
        Running CACFAnimations aren't remembered when layer tree is unparented and 
        then reparented. Added a new ensureAnimationsSubmitted function to 
        PlatformCALayer to traverse the tree and resubmit animations, setting the 
        beginTime to the original start time of the animation. This is called in WK2
        when layer tree is newly parented.
        
        I also consolidated currentTimeToMediaTime into PlatformCALayer so it can be shared
        between PlatformCALayer and GraphicsLayerCA.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        * platform/graphics/ca/PlatformCAAnimation.h:
            Remember actual animation start time in CACFAnimation beginTime property
        * platform/graphics/ca/PlatformCALayer.h:
            New ensureAnimationsSubmitted function which traverses layers and resubmits all animations
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        * platform/graphics/ca/win/PlatformCALayerWin.cpp:

2011-04-20  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Dan Bernstein.

        Adopt QTKit API for listing and deleting file in its media cache.
        <rdar://problem/9130029> 
        https://bugs.webkit.org/show_bug.cgi?id=58795

        Not possible to test automatically, verified manually.

        * WebCore.exp.in: Export new media download cache functions.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::registerMediaEngine): Register cache management functions.
        (WebCore::MediaPlayerPrivateQTKit::getSitesInMediaCache): New, return cache origins.
        (WebCore::MediaPlayerPrivateQTKit::clearMediaCache): New, empty the media cache.
        (WebCore::MediaPlayerPrivateQTKit::clearMediaCacheForSite): New, delete files in the media
            cache for one origin.

        * platform/mac/WebCoreSystemInterface.h: Add new WKSI functions.
        * platform/mac/WebCoreSystemInterface.mm: Ditto.

2011-04-20  Dirk Schulze  <krit@webkit.org>

        Reviewed by Simon Fraser.

        SVG feDropShadow implementation of SVG Filters 1.2
        https://bugs.webkit.org/show_bug.cgi?id=52513

        Support different radii for horizontal and vertical blurring in ShadowBlur. This is a preperation for feDropShadow.
        feDropShadow is a new shorthand filter effect for the up-comming Filter 1.0 specification and will use ShadowBlur.
        feGaussianBlur might make use of ShadowBlur as well later (on SourceAlpha input).
        Added ShadowBlur to remaining platforms.

        The changes can't be tested before the changes in feGaussianBlur or feDropShadow. Current behavior is not affected.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.pro:
        * platform/graphics/FloatSize.h:
        (WebCore::FloatSize::scale):
        * platform/graphics/ShadowBlur.cpp:
        (WebCore::ScratchBuffer::ScratchBuffer):
        (WebCore::ScratchBuffer::setLastShadowValues):
        (WebCore::ScratchBuffer::setLastInsetShadowValues):
        (WebCore::ScratchBuffer::matchesLastShadow):
        (WebCore::ScratchBuffer::matchesLastInsetShadow):
        (WebCore::ScratchBuffer::clearScratchBuffer):
        (WebCore::ShadowBlur::ShadowBlur):
        (WebCore::calculateLobes):
        (WebCore::ShadowBlur::blurLayerImage):
        (WebCore::ShadowBlur::adjustBlurRadius):
        (WebCore::ShadowBlur::calculateLayerBoundingRect):
        (WebCore::computeSliceSizesFromRadii):
        (WebCore::ShadowBlur::templateSize):
        (WebCore::ShadowBlur::drawInsetShadowWithTiling):
        (WebCore::ShadowBlur::drawRectShadowWithTiling):
        (WebCore::ShadowBlur::drawLayerPieces):
        * platform/graphics/ShadowBlur.h:
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::fillRoundedRect):
        (WebCore::GraphicsContext::fillRectWithRoundedHole):

2011-04-19  Roland Steiner  <rolandsteiner@chromium.org>

        Reviewed by Dimitri Glazkov.

        Bug 52963 - Enable O(1) access to root from any node in shadow DOM subtree
        https://bugs.webkit.org/show_bug.cgi?id=52963

        .) Change base class of ShadowRoot from DocumentFragment to TreeScope.
        .) Re-enable tree scope handling in Node (had ASSERT_NOT_REACHED, etc.).
        .) Merged setTreeScope() with setTreeScopeRecursively()
        .) Call setTreeScopeRecursively in DOM manipulation functions where applicable.
        .) Adapt JavaScript Node wrappers (temporary code - see https://bugs.webkit.org/show_bug.cgi?id=58704).

        No new tests. (refactoring)

        * bindings/js/JSNodeCustom.cpp:
        (WebCore::createWrapperInline):
        * bindings/v8/custom/V8NodeCustom.cpp:
        (WebCore::toV8Slow):
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::takeAllChildrenFrom):
        (WebCore::ContainerNode::removeBetween):
        (WebCore::ContainerNode::removeChildren):
        (WebCore::ContainerNode::parserAddChild):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::~Document):
        (WebCore::Document::setDocType):
        * dom/Element.h:
        * dom/Node.cpp:
        (WebCore::Node::treeScope):
        (WebCore::Node::setTreeScopeRecursively):
        * dom/Node.h:
        (WebCore::Node::document):
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::ShadowRoot):
        (WebCore::ShadowRoot::~ShadowRoot):
        (WebCore::ShadowRoot::nodeType):
        (WebCore::ShadowRoot::cloneNode):
        (WebCore::ShadowRoot::childTypeAllowed):
        * dom/ShadowRoot.h:
        (WebCore::toShadowRoot):
        * dom/TreeScope.cpp:
        (WebCore::TreeScope::TreeScope):
        (WebCore::TreeScope::setParentTreeScope):
        * dom/TreeScope.h:
        * rendering/RenderSlider.cpp:

2011-04-20  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Update front-end files list in WebCore.vcproj
        https://bugs.webkit.org/show_bug.cgi?id=58896

        * WebCore.vcproj/WebCore.vcproj:

2011-04-20  Dimitri Glazkov  <dglazkov@chromium.org>

        Qt build fix after r84380.

        * css/CSSPrimitiveValueMappings.h: Moved EBorderCollapse-related casts from under ENABLE(SVG) guard.

2011-04-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Build libWebCore with the gtk sources too
        https://bugs.webkit.org/show_bug.cgi?id=58968

        In some cases webcore files are compiled twice, so it improves the
        build time.

        * GNUmakefile.am: Add webcore gtk sources to libWebCore sources.

2011-04-20  Luke Macpherson   <macpherson@chromium.org>

        Reviewed by Dimitri Glazkov.

        Allow casting between CSSPrimitiveValue and EBorderCollapse to remove special-case logic from CSSStyleSelector.
        https://bugs.webkit.org/show_bug.cgi?id=58964

        No new tests as no new functionality added.

        * css/CSSPrimitiveValueMappings.h:
        Support casting to/from EBorderCollapse.
        * css/CSSStyleSelector.cpp:
        Use new casting ability to simplify code.
        * rendering/style/RenderStyle.h:
        Use EBorderCollapse instead of a bool for representing border collapse member variable.
        * rendering/style/RenderStyleConstants.h:
        Added EBorderCollapse enum.

2011-04-19  Stephen White  <senorblanco@chromium.org>

        Reviewed by Kenneth Russell.

        Move and rename GLES2Canvas.
        https://bugs.webkit.org/show_bug.cgi?id=58927

        Move GLES2Canvas to platform/graphcs/gpu, where all the other
        gpu-related files live, and rename it to GraphicsContextGPU to better
        reflect its purpose.

        Covered by existing tests.

        * WebCore.gypi:
        * platform/graphics/chromium/GLES2Canvas.cpp:
        * platform/graphics/chromium/GLES2Canvas.h:
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::setPlatformShadow):
        * platform/graphics/skia/ImageBufferSkia.cpp:
        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::drawBitmapGLES2):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::setSharedGraphicsContext3D):
        * platform/graphics/skia/PlatformContextSkia.h:
        (WebCore::PlatformContextSkia::gpuCanvas):

2011-04-20  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Clean the style of our cookie methods
        https://bugs.webkit.org/show_bug.cgi?id=58987

        Got rid of the variables named "u" in favor just converting the url when needed.

        * platform/qt/CookieJarQt.cpp:
        (WebCore::setCookies): The variable p was unused.
        The ::toAscii() depends on the default codec, use toLatin1() instead.
        (WebCore::cookies): foreach() should use const reference.
        (WebCore::cookieRequestHeaderFieldValue):

2011-04-19  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Adam Barth.

        ScriptController.h is included in too many places
        https://bugs.webkit.org/show_bug.cgi?id=58963

        Remove ScriptController.h #includes from a bunch of .cpp files where it
        doesn't appear to be necessary.

        * bindings/js/JSCustomPositionCallback.cpp:
        * bindings/js/JSCustomPositionErrorCallback.cpp:
        * bindings/js/JSCustomVoidCallback.cpp:
        * bindings/js/JSCustomXPathNSResolver.cpp:
        * bindings/js/JSDOMWindowBase.cpp:
        * bindings/js/JSDOMWindowShell.cpp:
        * bindings/js/JSDocumentCustom.cpp:
        * bindings/js/ScriptDebugServer.cpp:
        * bindings/v8/NPV8Object.cpp:
        * bindings/v8/ScriptCachedFrameData.cpp:
        * bindings/v8/V8DOMWindowShell.cpp:
        * bindings/v8/V8DOMWrapper.cpp:
        * bindings/v8/V8IsolatedContext.cpp:
        * bindings/v8/V8Proxy.cpp:
        * bindings/v8/custom/V8LocationCustom.cpp:
        * dom/Node.cpp:
        * dom/ScriptElement.cpp:
        * dom/XMLDocumentParser.cpp:
        * dom/XMLDocumentParserQt.cpp:
        * html/HTMLEmbedElement.cpp:
        * html/HTMLObjectElement.cpp:
        * html/HTMLPlugInElement.cpp:
        * html/parser/HTMLConstructionSite.cpp:
        * html/parser/HTMLTreeBuilder.cpp:
        * inspector/InspectorProfilerAgent.cpp:
        * loader/icon/IconDatabase.cpp:
        * page/Chrome.cpp:
        * page/Navigator.cpp:
        * page/Page.cpp:
        * plugins/PluginView.cpp:
        * plugins/gtk/PluginViewGtk.cpp:
        * plugins/qt/PluginViewQt.cpp:
        * plugins/symbian/PluginViewSymbian.cpp:
        * plugins/win/PluginViewWin.cpp:
        * svg/SVGDocumentExtensions.cpp:
        * xml/XMLTreeViewer.cpp:

2011-04-20  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: add Save As to the Resources panel context menu.
        https://bugs.webkit.org/show_bug.cgi?id=58983

        * English.lproj/localizedStrings.js:
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.FrameResourceTreeElement.prototype.onattach):
        (WebInspector.FrameResourceTreeElement.prototype._handleContextMenuEvent.save):
        (WebInspector.FrameResourceTreeElement.prototype._handleContextMenuEvent):
        (WebInspector.ResourceRevisionTreeElement.prototype._handleContextMenuEvent.save):
        (WebInspector.ResourceRevisionTreeElement.prototype._handleContextMenuEvent):

2011-04-20  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Csaba Osztrogonác.

        [Qt] Cleanup includepath adjustment for generated files
        https://bugs.webkit.org/show_bug.cgi?id=58869

        Build cleanup, no new tests.

        * WebCore.pri: Add the directory of generated files to the include path
        with absolute path to make it valid in the final build step. Remove
        unnecessary logic.

2011-04-20  Mariusz Grzegorczyk  <mariusz.g@samsung.com>

        Reviewed by Andreas Kling.

        [EFL] Initializing m_window member field in PluginView.cpp for efl port
        https://bugs.webkit.org/show_bug.cgi?id=58311

        No new tests needed: only initializing class member.

        * plugins/PluginView.cpp:
        (WebCore::PluginView::PluginView):

2011-04-20  Pavel Feldman  <pfeldman@google.com>

        Not reviewed: fix Leopard compile.

        * inspector/InspectorFrontendClient.h:
        * inspector/InspectorFrontendClientLocal.h:
        (WebCore::InspectorFrontendClientLocal::saveAs):

2011-04-20  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: add saveAs into the InspectorFrontendHost binding.
        https://bugs.webkit.org/show_bug.cgi?id=58979

        * English.lproj/localizedStrings.js:
        * inspector/InspectorFrontendClient.h:
        (WebCore::InspectorFrontendClient::saveAs):
        (WebCore::InspectorFrontendClient::saveSessionSetting):
        (WebCore::InspectorFrontendClient::loadSessionSetting):
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::saveAs):
        * inspector/InspectorFrontendHost.h:
        * inspector/InspectorFrontendHost.idl:
        * inspector/front-end/InspectorFrontendHostStub.js:
        (.WebInspector.InspectorFrontendHostStub.prototype.saveAs.fr.onload):
        (.WebInspector.InspectorFrontendHostStub.prototype.saveAs):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkPanel.prototype._contextMenu):
        (WebInspector.NetworkPanel.prototype._copyAll):
        (WebInspector.NetworkPanel.prototype._copyResource):
        (WebInspector.NetworkPanel.prototype._exportAll):
        (WebInspector.NetworkPanel.prototype._exportResource):
        * inspector/front-end/Settings.js:
        * inspector/front-end/utilities.js:
        ():

2011-04-20  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Tony Gentilcore.

        Error event in <script> element shouldn't bubble
        https://bugs.webkit.org/show_bug.cgi?id=51040

        Test: svg/dom/SVGScriptElement/script-onerror-bubbling.svg

        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::dispatchErrorEvent): the method now has same implementation for all script
        elements, script load error event doesn' bubble.
        * dom/ScriptElement.h:
        * html/HTMLScriptElement.cpp:
        * html/HTMLScriptElement.h:
        * html/parser/HTMLScriptRunner.cpp:
        (WebCore::HTMLScriptRunner::executePendingScriptAndDispatchEvent):
        * svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::parseMappedAttribute): SVG script element now supports onerror
        hanlder which behaves the same way as onerror in HTML script element: it's invoked when
        script loading fails and the event doesn't bubble.
        * svg/SVGScriptElement.h:

2011-04-20  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: minor protocol cleanups (refined types).
        https://bugs.webkit.org/show_bug.cgi?id=58970

        * inspector/InjectedScriptSource.js:
        * inspector/Inspector.json:

2011-04-20  Leo Yang  <leo.yang@torchmobile.com.cn>

        Reviewed by Eric Seidel.

        Leaks beneath RenderSVGShadowTreeRootContainer::updateFromElement seen on SnowLeopard Intel Leaks
        https://bugs.webkit.org/show_bug.cgi?id=56672

        ~RenderSVGShadowTreeRootContainer() cleared shadow host only if
        the shadow root is attached. This is wrong because it will
        leak shadow root when the root is not attached. For example, it
        leaks shadow root of <use> element which is pending on resource.

        This patch is clearing shadow host if m_shadowRoot is valid to
        prevent leaking.

        Fixing leaking, no new tests.

        * rendering/svg/RenderSVGShadowTreeRootContainer.cpp:
        (WebCore::RenderSVGShadowTreeRootContainer::~RenderSVGShadowTreeRootContainer):

2011-04-19  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Antti Koivisto.

        Reproducible crash two-finger zooming at multiple sites in WebCore::RenderLayer::isTransparent
        https://bugs.webkit.org/show_bug.cgi?id=58868

        I could not figure out how to make a test.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayer): Check for existence of a
        parent before calling a method on it.

2011-04-20  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Reviewed by Daniel Bates.

        [EFL] Add current time to media control panel.
        https://bugs.webkit.org/show_bug.cgi?id=58866

        Implement paintMediaCurrentTime() to show playing time of media content.

        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::RenderThemeEfl):
        (WebCore::RenderThemeEfl::formatMediaControlsCurrentTime):
        (WebCore::RenderThemeEfl::paintMediaCurrentTime):
        * platform/efl/RenderThemeEfl.h:

2011-04-19  Jungshik Shin  <jshin@chromium.org>

        Reviewed by Adam Barth

        Update the list of Unicode blocks to treat as complex scripts
        per Unicode 6.0. Also, make [U+02E5..U+02E9] (IPA tone marks)
        go through the complex script code path.

        Test: fast/text/ipa-tone-letters.html

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

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

2011-04-19  Pratik Solanki  <psolanki@apple.com>

        Reviewed by Simon Fraser.

        Follow on fix for https://bugs.webkit.org/show_bug.cgi?id=58926

        Move the assert from Image::drawPattern() to Image::drawTiled() so we don't hit it when
        trying to paint GeneratedImages.

        * platform/graphics/Image.cpp:
        (WebCore::Image::drawTiled):
        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::Image::drawPattern):

2011-04-19  Simon Fraser  <simon.fraser@apple.com>

        Fix 32-bit builds.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::determineBackgroundBleedAvoidance):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):

2011-04-19  Naoki Takano  <takano.naoki@gmail.com>

        Reviewed by Kent Tamura.

        [Chromium]UI polishes and tweaks to Autofill dropdown menu.
        https://bugs.webkit.org/show_bug.cgi?id=58505
        http://code.google.com/p/chromium/issues/detail?id=51077

        No new tests. Because this is autofill looking problem in Chromium.
        Add m_menuType as PopupMenuStyle to change popup style change.
        Put kLinePaddingHeight at the top and bottom of each line if m_menuType is AutofillPopup.
        Change separator color to #dcdcdc and remove sparatorPadding at the edge if m_menuType is AutofillPopup.
        Change the line height of separator as only the piece if m_menuType is AutofillPopup.
        Change the label font size 0.9 time smaller than regular font size if m_menuType is AutofillPopup.

        * platform/PopupMenuStyle.h: Add enum PopupMenuType;
        (WebCore::PopupMenuStyle::PopupMenuStyle): Add m_menuType.
        (WebCore::PopupMenuStyle::menuType): Add to change the style according to the return value.
        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupListBox::paintRow):Change the separator color to #dcdcdc.
        Change the edge padding according to menuStyle().
        (WebCore::PopupListBox::getRowHeight): Add kLineHeightMargin*2 for each line height.

2011-04-19  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        background color of elements with border-radius shows around outer edge of border at corners
        https://bugs.webkit.org/show_bug.cgi?id=21819
        
        When drawing a background followed by a border with the same rounded
        clip, some border color leaks out because of antialiasing.
        
        Fix this by using two different strategies depending on the colors.
        If the border is opaque on all sides, we can inset the background by
        a device pixel. If not, then we have to draw the unclipped background
        and border into a transparency layer, and then clip that.
        
        A futher possible solution is mentioned in a comment in
        determineBackgroundBleedAvoidance() but not yet implemented.
        
        Also don't try to paint shadows with zero offset, spread and blur.

        Test: fast/backgrounds/background-leakage.html,
              fast/backgrounds/background-leakage-transforms.html

        * rendering/RenderBoxModelObject.h:
        Add a BackgroundBleedAvoidance enum with a value for each
        strategy.
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        Pass BackgroundBleedAvoidance, bail early if the border rect is empty.
        If using the transparency layer solution, don't bother to clip
        to the rounded rect for the background. If the strategy is to
        shrink the background, do that.
        (WebCore::BorderEdge::BorderEdge):
        (WebCore::BorderEdge::obscuresBackgroundEdge):
        Helper method to determine if this border side will totally
        obscured by the border edge, allowing us to inset it.
        (WebCore::RenderBoxModelObject::paintOneBorderSide):
        Pass BackgroundBleedAvoidance through.
        (WebCore::RenderBoxModelObject::paintBorderSides):
        Ditto.
        (WebCore::RenderBoxModelObject::paintTranslucentBorderSides):
        Ditto.
        (WebCore::RenderBoxModelObject::paintBorder):
        Fill BorderEdges using getBorderEdgeInfo now.
        Don't clip to the rounded border if we are using the
        transparency layer solution.
        (WebCore::RenderBoxModelObject::drawBoxSideFromPath):
        Pass bleedAvoidance through, and use it for double borders.
        (WebCore::RenderBoxModelObject::getBorderEdgeInfo):
        Helper to fill in the BorderEdge array.
        (WebCore::RenderBoxModelObject::borderObscuresBackgroundEdge):
        Used to determine if we can use the background shrinkage solution.
        (WebCore::RenderBoxModelObject::paintBoxShadow):
        Don't paint shadows that should not be visible.

        * rendering/RenderBox.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintRootBoxFillLayers):
        Pass BackgroundBleedNone for the root box.
        
        (WebCore::RenderBox::determineBackgroundBleedAvoidance):
        Determine which bleed strategy we can use.
        
        (WebCore::RenderBox::paintBoxDecorationsWithSize):
        Based on the bleedAvoidance, make a transparency layer
        which will be clipped to the rounded border outside edge,
        and pass bleedAvoidance to the background and border-painting
        methods.        
        (WebCore::RenderBox::paintMaskImages):
        Use BackgroundBleedNone.
        (WebCore::RenderBox::paintFillLayers):
        (WebCore::RenderBox::paintFillLayer):
        Pass bleedAvoidance through.

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paintFillLayer):
        (WebCore::InlineFlowBox::paintBoxDecorations):
        Pass BackgroundBleedNone. At some point we may want to do the right
        thing for split inlines.

        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::paintBoxDecorations):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::paintBackgroundsBehindCell):
        Pass BackgroundBleedNone.

2011-04-19  Yuta Kitamura  <yutak@chromium.org>

        Reviewed by Alexey Proskuryakov.

        WebSocket: Add assertion for SocketStreamError::failingURL.
        https://bugs.webkit.org/show_bug.cgi?id=58765

        No new tests, because an existing test http/tests/inspector/console-websocket-error.html should cover this.

        * websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::didFail): If error.failingURL() is provided, it must be the same as
        m_handshake.url(). failingURL may be null if SocketStreamHandle has created a SocketStreamError
        using zero- or one-argument constructor (which is old version but some ports are still using it).
        In that case, m_handshake.url() is passed to addMessage().

2011-04-19  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Dimitri Glazkov.

        Media controls status display should not be hidden for live streams
        https://bugs.webkit.org/show_bug.cgi?id=58952

        Tested manually because we don't have any live streams to test in DRT.

        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlStatusDisplayElement::update): Set the status to "Loading" only until
            there is something to display (readyState exceeds HAVE_METADATA).
        * html/shadow/MediaControlRootElement.cpp:
        (WebCore::MediaControlRootElement::loadedMetadata): Don't hide the status display for
            live streams.

2011-04-19  Julien Chaffraix  <jchaffraix@codeaurora.org>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=45425
        HTMLLinkElement.disabled does not forward value to the Stylesheet's disabled attribute on setting

        Test: fast/html/htmllink-disable.html
        Test: fast/dom/HTMLLinkElement/disabled-attribute.html

        Match the HTML5 specification by forwarding the 'disabled' attribute to our stylesheet.

        Based on previous work by Bijan Amirzada <bijana@codeaurora.org>.

        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::disabled): Return our stylesheet's 'disabled' value or
        false if we don't have a stylesheet.
        (WebCore::HTMLLinkElement::setDisabled): Set our stylesheet's 'disabled' value or
        ignore the call if we don't have a stylesheet.
        * html/HTMLLinkElement.h:
        * html/HTMLLinkElement.idl: Remove 'Reflect' as it is not a reflected attribute anymore in HTML5.
        This matches the way FF4, Opera and IE9 handle the attribute.

2011-04-19  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        Remove calls to deprecatedOffset and deprecatedNode in TypingCommand
        https://bugs.webkit.org/show_bug.cgi?id=58569

        Removed all calls to deprecatedOffset and deprecatedNode.

        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::insertText):
        (WebCore::TypingCommand::deleteKeyPressed):
        (WebCore::TypingCommand::forwardDeleteKeyPressed):

2011-04-19  Adrienne Walker  <enne@google.com>

        Reviewed by Kenneth Russell.

        [chromium] Initialize depth mask to known value before getBooleanv call
        https://bugs.webkit.org/show_bug.cgi?id=58948

        This trips an assert in the GPU command buffer client code if the
        pointed-to value is not initialized to 0 or -1.

        * platform/graphics/gpu/DrawingBuffer.cpp:
        (WebCore::DrawingBuffer::clearFramebuffer):

2011-04-19  Pratik Solanki  <psolanki@apple.com>

        Reviewed by Simon Fraser.

        BitmapImage::destroyMetadataAndNotify should clear m_checkedForSolidColor
        https://bugs.webkit.org/show_bug.cgi?id=58926

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::destroyMetadataAndNotify): Set m_checkedForSolidColor to false.
        * platform/graphics/BitmapImage.h:
        (WebCore::BitmapImage::assertNotSolidColor):
        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::Image::drawPattern): Add assert to make sure this is not called for a 1x1 image.

2011-04-19  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Ojan Vafai.

        REGRESSION(r83967): Crash in selectionExtentRespectingEditingBoundary
        https://bugs.webkit.org/show_bug.cgi?id=58910

        The crash was caused by selectionExtentRespectingEditingBoundary's incorrectly assuming that
        targetNode always have renderer when there selection has an editable root and the target node
        is outside of the editable root.
        
        Fixed the bug by adding an early exit when the target node is null.

        No new tests are added since we don't have a reduction for this crash.

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

2011-04-19  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Removed a use of markDOMObjectWrapper: NodeLists
        https://bugs.webkit.org/show_bug.cgi?id=58939

        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::JSDocument::markChildren): No need to mark node lists, because
        now they use the opaque roots system to decide their lifetimes.

        * bindings/js/JSNamedNodeMapCustom.cpp: Removed stray newline.

        * bindings/js/JSNodeListCustom.cpp:
        (WebCore::JSNodeListOwner::isReachableFromOpaqueRoots):
        (WebCore::JSNodeListOwner::finalize):
        (WebCore::wrapperOwner):
        (WebCore::wrapperContext):
        (WebCore::toJS): Use the opaque roots system to avoid relying on
        markDOMObjectWrapper.

        * dom/DynamicNodeList.cpp:
        (WebCore::DynamicNodeList::isDynamicNodeList):
        * dom/DynamicNodeList.h:
        (WebCore::DynamicNodeList::rootNode): Added the ability to get the node
        backing a NodeList, for use in the opaque roots system.

        * dom/Node.cpp:
        * dom/Node.h:
        * dom/NodeList.h:
        (WebCore::NodeList::isDynamicNodeList): Ditto. Removed cruft related
        to the old way of marking NodeLists.

        * dom/NodeList.idl: We need a custom toJS so we can specify a custom
        WeakHandleOwner at construction time.

2011-04-19  Antoine Labour  <piman@chromium.org>

        Reviewed by James Robinson.

        For invisible iframes, propagate compositing to parent instead of setting self
        as root.
        https://bugs.webkit.org/show_bug.cgi?id=58414

        Tests: compositing/iframes/invisible-iframe.html
               compositing/iframes/invisible-nested-iframe-hide.html
               compositing/iframes/invisible-nested-iframe-show.html
               compositing/iframes/invisible-nested-iframe.html

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::shouldPropagateCompositingToEnclosingFrame):
        Propagate compositing to parent even if frame owner has no renderer.

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

        Reviewed by Beth Dakin.

        <rdar://problem/9271848> Crash when the document element is removed

        Test: fast/events/overflow-viewport-renderer-deleted.html

        * page/FrameView.cpp:
        (WebCore::FrameView::calculateScrollbarModesForLayout): Reset m_viewportRenderer, in case this
        function takes a code path that doesn’t call applyOverflowToViewport().
        (WebCore::FrameView::layout): Whitespace change.

2011-04-19  Beth Dakin  <bdakin@apple.com>

        Reviewed by Maciej Stachowiak.

        https://bugs.webkit.org/show_bug.cgi?id=57898
        REGRESSION (r82185): Scroll position not restored on navigation back to a page in 
        the page cache
        -and corresponding-
        <rdar://problem/9226652>

        Setting the contentsSize of a ScrollView to (0, 0) necessarily causes the scroll 
        position to be lost. (The scroll position is computed based on the 
        visibleContentSize.) This patch provides a mechanism to cache the current scroll 
        position, and then the HistoryController accesses only the cached position rather 
        than calling scrollPosition() which does a computation based on the 
        visibleContentSize. 

        * loader/HistoryController.cpp:
        (WebCore::HistoryController::saveScrollPositionAndViewStateToItem):
        * page/FrameView.cpp:
        (WebCore::FrameView::resetScrollbarsAndClearContentsSize):
        * platform/ScrollView.h:
        (WebCore::ScrollView::cacheCurrentScrollPosition):
        (WebCore::ScrollView::cachedScrollPosition):

2011-04-19  Renata Hodovan  <reni@webkit.org>

        Reviewed by Eric Seidel.

        Move the alignment related macros in Vector.h to new Alignment.h.
        https://bugs.webkit.org/show_bug.cgi?id=56000

        Adding the new file to the forwarding headers of WebCore.

        * ForwardingHeaders/wtf/Alignment.h: Added.

2011-04-19  Oliver Hunt  <oliver@apple.com>

        Reviewed by Andreas Kling.

        [Qt] QtInstance method cache ownership rules are unclear
        https://bugs.webkit.org/show_bug.cgi?id=58820

        Make the QtInstance method cache use WriteBarrier, and handle
        ownership properly.

        * bridge/qt/qt_class.cpp:
        (JSC::Bindings::QtClass::fallbackObject):
        (JSC::Bindings::QtClass::fieldNamed):
        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtInstance::~QtInstance):
        (JSC::Bindings::QtInstance::removeCachedMethod):
        (JSC::Bindings::QtInstance::newRuntimeObject):
        (JSC::Bindings::QtInstance::markAggregate):
        * bridge/qt/qt_instance.h:

2011-04-19  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/57867> Re-order enum ResourceLoadPriority to make Unresolved value less important

        Reviewed by Antti Koivisto.

        * platform/network/ResourceLoadPriority.h:
        (enum ResourceLoadPriority): Moved Unresolved enum to the top of
        the list and set to -1 to emphasize the fact that this is an
        unresolved priority (rather than one higher than the highest
        priority).  Removed whitespace from the end of all enum lines.

2011-04-19  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by David Hyatt.

        Background radius is wrong for split inline
        https://bugs.webkit.org/show_bug.cgi?id=58843
        
        When computing the radii for a segment of a split inline, we have to
        constrain those radii for the current segment, while still drawing
        using the entire logical width.

        Tests: fast/backgrounds/border-radius-split-background-image.html
               fast/backgrounds/border-radius-split-background.html

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paintFillLayer):
        Pass height and width for this box only to paintFillLayer()
        
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintFillLayer):
        Pass 0 for unused inlineBox height and width.

        * rendering/RenderBoxModelObject.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::getBackgroundRoundedRect):
        When computing the rounded background rect, we have to take the size of
        this segment of the inline box into account for radius constraining.
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        Call getBackgroundRoundedRect() in two places.

2011-04-19  Simon Fraser  <simon.fraser@apple.com>

        Build fix. For some reason RenderBoxModelObject.cpp
        was missing from my last commit.

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::borderWillArcInnerEdge):
        (WebCore::edgeFlagForSide):
        (WebCore::includesEdge):
        (WebCore::BorderEdge::BorderEdge):
        (WebCore::BorderEdge::hasVisibleColorAndStyle):
        (WebCore::BorderEdge::shouldRender):
        (WebCore::BorderEdge::presentButInvisible):
        (WebCore::BorderEdge::usedWidth):
        (WebCore::BorderEdge::getDoubleBorderStripeWidths):
        (WebCore::edgesShareColor):
        (WebCore::styleRequiresClipPolygon):
        (WebCore::borderStyleFillsBorderArea):
        (WebCore::borderStyleHasInnerDetail):
        (WebCore::borderStyleIsDottedOrDashed):
        (WebCore::borderStyleHasUnmatchedColorsAtCorner):
        (WebCore::colorsMatchAtCorner):
        (WebCore::willBeOverdrawn):
        (WebCore::borderStylesRequireMitre):
        (WebCore::joinRequiresMitre):
        (WebCore::RenderBoxModelObject::paintOneBorderSide):
        (WebCore::RenderBoxModelObject::paintBorderSides):
        (WebCore::RenderBoxModelObject::paintTranslucentBorderSides):
        (WebCore::RenderBoxModelObject::paintBorder):
        (WebCore::RenderBoxModelObject::drawBoxSideFromPath):
        (WebCore::findInnerVertex):
        (WebCore::RenderBoxModelObject::clipBorderSidePolygon):
        (WebCore::RenderBoxModelObject::paintBoxShadow):

2011-04-19  Stephen White  <senorblanco@chromium.org>

        Reviewed by Kenneth Russell.

        Refactor GLES2Canvas state application out into its own function.
        https://bugs.webkit.org/show_bug.cgi?id=58906

        Covered by existing tests in fast/canvas and canvas/philip.

        * platform/graphics/chromium/GLES2Canvas.cpp:
        (WebCore::GLES2Canvas::applyState):
        New function to apply compositing and clipping state.
        (WebCore::GLES2Canvas::fillPath):
        (WebCore::GLES2Canvas::fillRect):
        (WebCore::GLES2Canvas::beginShadowDraw):
        (WebCore::GLES2Canvas::endShadowDraw):
        Refactor calls to applyState().
        * platform/graphics/chromium/GLES2Canvas.h:

2011-04-19  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt.

        Fix multiple border rendering issues
        https://bugs.webkit.org/show_bug.cgi?id=58761
        
        Fix various border-drawing bugs, and optimize some common cases.
        Also refactors a lot of the border-drawing code to be more maintainable.
        
            Rounded border rendering with different border widths looks strange
            https://bugs.webkit.org/show_bug.cgi?id=17468
            
            paintBorder in RenderObject paint two times the corners
            https://bugs.webkit.org/show_bug.cgi?id=20495
            
            Overdraw at box corners when using RGBA colors with alpha
            https://bugs.webkit.org/show_bug.cgi?id=21835
            
            Enable antialiasing for border drawing, when transformed
            https://bugs.webkit.org/show_bug.cgi?id=22746
            
            Drawing border-radius from path sometimes fails to round outer border in the double style when it should
            https://bugs.webkit.org/show_bug.cgi?id=41301
            
            Drawing border-radius from path doesn't appear to always match up border edges correctly
            https://bugs.webkit.org/show_bug.cgi?id=41302
            
        Also fixes
            Should be able to create Path from RoundedIntRect
            https://bugs.webkit.org/show_bug.cgi?id=58809

        Tests: fast/borders/border-radius-different-width-001.html
               fast/borders/border-radius-inset-outset.html
               fast/borders/table-borders.html

        * platform/graphics/FloatPoint.h:
        * platform/graphics/FloatPoint.cpp:
        (WebCore::findSlope):
        (WebCore::findIntersection):
        New geometry helper functions (should eventually move into a new
        GeometryUtilities file).
        
        * platform/graphics/Path.h:
        * platform/graphics/Path.cpp:
        (WebCore::Path::addRoundedRect):
        Add an overload of addRoundedRect() that takes a RoundedIntRect.

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::addRoundedRectClip):
        (WebCore::GraphicsContext::clipOutRoundedRect):
        (WebCore::GraphicsContext::fillRectWithRoundedHole):
        Can now add a RoundedIntRect to a Path directly.
        
        * platform/graphics/IntRect.h:
        (WebCore::IntRect::minXMinYCorner):
        (WebCore::IntRect::maxXMinYCorner):
        (WebCore::IntRect::minXMaxYCorner):
        (WebCore::IntRect::maxXMaxYCorner):
        Convenience functions to get the rect corners, in a writing-mode-
        friendly way.

        * platform/graphics/RoundedIntRect.h:
        * platform/graphics/RoundedIntRect.cpp:
        (WebCore::RoundedIntRect::isRenderable):
        We need to know when Path::addRoundedRect() will fail because
        the sum of the radii exceed the height or width. This method tells
        us that.
        
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::fillRectWithRoundedHole):
        Can now add a RoundedIntRect to a Path directly.

        * rendering/RenderBoxModelObject.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::borderWillArcInnerEdge):
        This can just to see if there are inner radii now.
        
        (WebCore::edgeFlagForSide):
        (WebCore::includesEdge):
        Convenience functions for the BorderEdgeFlags bitmask.
        
        (WebCore::BorderEdge::BorderEdge):
        (WebCore::BorderEdge::hasVisibleColorAndStyle):
        (WebCore::BorderEdge::shouldRender):
        (WebCore::BorderEdge::presentButInvisible):
        (WebCore::BorderEdge::usedWidth):
        (WebCore::BorderEdge::getDoubleBorderStripeWidths):
        Convenience class to hold data about how a single edge
        is drawn, and to contain some commonly used width-related methods.
        
        (WebCore::edgesShareColor):
        (WebCore::styleRequiresClipPolygon):
        (WebCore::borderStyleFillsBorderArea):
        (WebCore::borderStyleHasInnerDetail):
        (WebCore::borderStyleIsDottedOrDashed):
        (WebCore::borderStyleHasUnmatchedColorsAtCorner):
        (WebCore::colorsMatchAtCorner):
        (WebCore::willBeOverdrawn):
        (WebCore::borderStylesRequireMitre):
        (WebCore::joinRequiresMitre):
        Functions used to make the border drawing code more readable,
        which are used to determine when corners need a mitre, and
        need antialiasing.
        
        (WebCore::RenderBoxModelObject::paintOneBorderSide):
        Code to paint one side of a border, either via the path, or
        using rects/polygons, the appropriate mitres and antialiasing
        at the corners. includeLogicalLeftEdge and includeLogicalRightEdge need
        to be passed all the way down here so that when we recompute the
        path for double and ridge/groove borders, we correctly handle split box
        borders.
        
        (WebCore::RenderBoxModelObject::paintBorderSides):
        Paints the 4 border sides (if present).
        
        (WebCore::RenderBoxModelObject::paintTranslucentBorderSides):
        Called when one or more of the borders has a non-opaque color,
        and uses a transparency layer for each set of same-colored
        sides to avoid overdraw at the corners.
        
        (WebCore::RenderBoxModelObject::paintBorder):
        Builds an array of BorderEdge so we can iterate over them to 
        detect different border compbinations, and optimizations. Has
        a fast path for all-solid borders.
        
        (WebCore::RenderBoxModelObject::drawBoxSideFromPath):
        Moved from RenderObject, since all callers are in RenderBoxModelObject.
        Has the following changes:
          * Don't attempt to draw dashes if there is only space for a few,
            since it looks bad.
          * Handle double and groove borders on split inlines correctly,
            making use of includeLogicalLeftEdge, includeLogicalRightEdge

        (WebCore::findInnerVertex):
        For borders with a radiused inner edge, the per-side clip polygon
        has to project inside the padding box to avoid clipping the inner edge.
        This function computes a reasonable inner corner for the clipping
        polygon.
        (WebCore::RenderBoxModelObject::clipBorderSidePolygon):
        Have the corner joins pass through the corners of the inner and outer
        border rectangles, ensure we don't clip the inside if necessary,
        and handle antialiasing on the two mitres.
        
        (WebCore::RenderBoxModelObject::paintBoxShadow):
        Use RenderStyle::getRoundedInnerBorderFor() rather than computeBorderInnerRect()
        etc.

        * rendering/RenderObject.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::drawLineForBoxSide):
        Moved to RenderBoxModelObject.
        
        * rendering/style/RenderStyle.h:
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::getRoundedBorderFor):
        (WebCore::RenderStyle::getRoundedInnerBorderFor):
        There was some very clumsy code that computed a rounded rect
        given the border rect and side widths. Cleaned this up by moving
        some code into RenderStyle. The overloaded getRoundedInnerBorderFor()
        which takes the border widths is used by the double and groove drawing
        code.

2011-04-19  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Dimitri Glazkov.

        REGRESSION(r74228-75294): removing nodes is 200+ times slower when selection is inside a shadow DOM
        https://bugs.webkit.org/show_bug.cgi?id=57061

        The bug was caused by Range::compareNode's incorrectly returning NODE_INSIDE when the selection is inside
        a shadow DOM and the node is outside of the shadow DOM. This caused respondToNodeModification to call
        RenderView::clearSelection every time a node is removed when selection is in a shadow DOM and resulted in
        a significant performance regression.

        Fixed Ranged::compareNode by making Range::compareBoundaryPoints throw a WRONG_DOCUMENT_ERR when there are
        no common ancestors between containerA and containerB. This will force compareNode to also throw an exception
        and prevents respondToNodeModification from clearing selection.

        No new tests because this is a performance improvement and the fix in Range cannot be tested since shadow DOM
        isn't exposed to JavaScript.

        * dom/Range.cpp:
        (WebCore::Range::setStart): Calls compareBoundaryPoints; since we ensures that the root container noes of
        start and end nodes are same, we should never get an exception from compareBoundaryPoints.
        (WebCore::Range::setEnd): Ditto.
        (WebCore::Range::isPointInRange): Calls compareBoundaryPoints; returns false when compareBoundaryPoints
        throws an exception.
        (WebCore::Range::comparePoint): Calls compareBoundaryPoints; exit early when an exception is thrown by
        compareBoundaryPoints.
        (WebCore::Range::compareBoundaryPoints): Throws an exception when two containers do not have a common ancestor.
        (WebCore::Range::boundaryPointsValid): Calls compareBoundaryPoints and checks that it didn't throw an exception.
        * dom/Range.h:
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::respondToNodeModification):
        * editing/htmlediting.cpp:
        (WebCore::comparePositions): Calls compareBoundaryPoints.
        * editing/markup.cpp:
        (WebCore::createMarkup): Calls compareBoundaryPoints; since startNode and pastEnd are both in the same document
        and neither are in a shadow DOM, it should never throw an exception.
        * page/DOMSelection.cpp:
        (WebCore::DOMSelection::containsNode): Calls compareBoundaryPoints; node is fully selected only if no exception
        was thrown.

2011-04-19  Jungshik Shin  <jshin@chromium.org>

        Reviewed by David Levin

        Make U+FEFF be treated as a zero-width character in both
        simple script and complex script code paths. In Chromium
        Windows, UniscribeHelper needs a rather extensive changes
        summarized below.  Other ports need minor changes.

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

        Test: fast/text/zero-width-characters-complex-script.html

        * platform/graphics/Font.h:
        (WebCore::Font::treatAsZeroWidthSpace): U+FEFF is added to the list
        (WebCore::Font::treatAsZeroWidthSpaceInComplexScript): Added. Same as the above except that ZWNJ and ZWJ are excluded.
        * platform/graphics/GlyphPageTreeNode.cpp:
        (WebCore::GlyphPageTreeNode::initializePage): U+FEFF is made to have zero-width characters in simple script (fast) code path.
        * platform/graphics/chromium/FontUtilsChromiumWin.cpp:
        (WebCore::FontMap::getSpaceGlyph): Added to get the gid for space glyph to use in adjustSpaceAdvance when zero-width glyph character has a non-zero width and potentially 'visible' glyph.
        (WebCore::FontMap::FontData::FontData): spaceGlyph member added.
        (WebCore::getDerivedFontData): spaceGlyph is retrieved as well.
        * platform/graphics/chromium/FontUtilsChromiumWin.h:
        * platform/graphics/chromium/UniscribeHelper.cpp:
        (WebCore::UniscribeHelper::UniscribeHelper): m_spaceGlyph added.
        (WebCore::UniscribeHelper::shape): spaceGlyph is obtained stored for a font tried for each item.
        (WebCore::UniscribeHelper::adjustSpaceAdvances): For zero-width complex script characters, set the advance width to zero and replace a non-zero-width/visible glyph with a space glyph.
        (WebCore::UniscribeHelper::applySpacing):
        (WebCore::UniscribeHelper::containsMissingGlyphs): turned to a member function because it cannot work on glyphs alone any more but need to take into account a character corresponding to a glyph
        * platform/graphics/chromium/UniscribeHelper.h: 
        (WebCore::UniscribeHelper::Shaping::Shaping): m_spaceGlyph is added
        * platform/graphics/chromium/UniscribeHelperTextRun.cpp:
        (WebCore::UniscribeHelperTextRun::UniscribeHelperTextRun): When calling UniscriberHelper, add a new argument for spaceGlyph.

2011-04-19  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Adam Roben.

        Extend the DIBPixelData class with the facility for writing the
        bitmap representation to disk for debugging purposes.
        https://bugs.webkit.org/show_bug.cgi?id=58862.

        * platform/graphics/win/DIBPixelData.cpp:
        (WebCore::DIBPixelData::writeToFile): New function.
        * platform/graphics/win/DIBPixelData.h:

2011-04-19  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Rename lengthReceived to encodedDataLength/dataLength
        https://bugs.webkit.org/show_bug.cgi?id=58883

        * fileapi/FileReaderLoader.cpp:
        (WebCore::FileReaderLoader::didReceiveData):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didReceiveContentLengthImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didReceiveContentLength):
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::didReceiveContentLength):
        * inspector/InspectorResourceAgent.h:
        * inspector/front-end/NetworkManager.js:
        (WebInspector.NetworkDispatcher.prototype.dataReceived):
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::didReceiveData):
        (WebCore::DocumentThreadableLoader::didReceiveCachedMetadata):
        * loader/DocumentThreadableLoader.h:
        * loader/FrameLoaderClient.h:
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::didReceiveData):
        * loader/MainResourceLoader.h:
        * loader/NetscapePlugInStreamLoader.cpp:
        (WebCore::NetscapePlugInStreamLoader::didReceiveData):
        * loader/NetscapePlugInStreamLoader.h:
        * loader/ResourceLoadNotifier.cpp:
        (WebCore::ResourceLoadNotifier::didReceiveData):
        (WebCore::ResourceLoadNotifier::dispatchDidReceiveContentLength):
        (WebCore::ResourceLoadNotifier::sendRemainingDelegateMessages):
        * loader/ResourceLoadNotifier.h:
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::didReceiveData):
        * loader/ResourceLoader.h:
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didReceiveData):
        * loader/SubresourceLoader.h:
        * loader/SubresourceLoaderClient.h:
        (WebCore::SubresourceLoaderClient::didReceiveData):
        (WebCore::SubresourceLoaderClient::didReceiveCachedMetadata):
        * loader/WorkerThreadableLoader.cpp:
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didReceiveData):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didReceiveCachedMetadata):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::didReceiveData):
        * loader/appcache/ApplicationCacheGroup.h:
        * loader/appcache/ApplicationCacheHost.h:
        * notifications/Notification.cpp:
        (WebCore::Notification::didReceiveData):
        * notifications/Notification.h:
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (StreamingClient::didReceiveData):
        * platform/network/BlobResourceHandle.cpp:
        * platform/network/ResourceHandleClient.h:
        (WebCore::ResourceHandleClient::didReceiveData):
        * platform/network/android/ResourceHandleAndroid.cpp:
        (WebCore::SyncLoader::didReceiveData):
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::WebCoreSynchronousLoaderClient::didReceiveData):
        * platform/network/curl/ResourceHandleCurl.cpp:
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCoreSynchronousLoaderClient::didReceiveData):
        * platform/network/soup/ResourceHandleSoup.cpp:
        * platform/network/win/ResourceHandleWin.cpp:
        * workers/WorkerScriptLoader.h:
        * xml/XMLHttpRequest.h:

2011-04-19  Stephen White  <senorblanco@chromium.org>

        Reviewed by Eric Seidel.

        Pull framebuffer clearing out into its own function.
        https://bugs.webkit.org/show_bug.cgi?id=58897

        Covered by fast/canvas and canvas/philip tests.

        * platform/graphics/gpu/DrawingBuffer.cpp:
        (WebCore::DrawingBuffer::clearFramebuffer):
        (WebCore::DrawingBuffer::reset):
        * platform/graphics/gpu/DrawingBuffer.h:

2011-04-19 Brian Salomon <bsalomon@google.com>

        Reviewed by Eric Seidel.

        When flushing GrContext in ~PlatformContextSkia be sure correct GL context is set
        https://bugs.webkit.org/show_bug.cgi?id=58788

        Chromium browser test will be added that loads canvas page and then an 
        acclerated-composited page. Test must trigger ~PlatformContextSkia() 
        followed by invocation of GL compositor.

        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::~PlatformContextSkia):

2011-04-19  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] REGRESSION(84176): http/tests/xmlhttprequest/event-listener-gc.html fails
        https://bugs.webkit.org/show_bug.cgi?id=58871

        Unreviewed, rolling out r84176, r84178, r84186, r84212 and r84231.
        http://trac.webkit.org/changeset/84176 (original patch)
        http://trac.webkit.org/changeset/84178 (original patch - part 2)
        http://trac.webkit.org/changeset/84186 (build fix)
        http://trac.webkit.org/changeset/84212
        http://trac.webkit.org/changeset/84231 (skip failing test)

        original bugs:
         - https://bugs.webkit.org/show_bug.cgi?id=58718
         - https://bugs.webkit.org/show_bug.cgi?id=58853

        * bridge/qt/qt_class.cpp:
        (JSC::Bindings::QtClass::fallbackObject):
        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtInstance::removeCachedMethod):
        (JSC::Bindings::QtInstance::markAggregate):
        * bridge/qt/qt_instance.h:

2011-04-19  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r84050.
        http://trac.webkit.org/changeset/84050
        https://bugs.webkit.org/show_bug.cgi?id=58892

        fast/dom/HTMLKeygenElement/keygen.html is crashing on Chromium
        (Requested by jknotten on #webkit).

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::takeAllChildrenFrom):
        (WebCore::ContainerNode::removeBetween):
        (WebCore::ContainerNode::removeChildren):
        (WebCore::ContainerNode::parserAddChild):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::~Document):
        (WebCore::Document::setDocType):
        * dom/Element.h:
        * dom/Node.cpp:
        (WebCore::Node::treeScope):
        (WebCore::Node::setTreeScope):
        (WebCore::Node::setTreeScopeRecursively):
        * dom/Node.h:
        (WebCore::Node::document):
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::ShadowRoot):
        * dom/ShadowRoot.h:
        * dom/TreeScope.cpp:
        (WebCore::TreeScope::TreeScope):
        (WebCore::TreeScope::setParentTreeScope):
        * dom/TreeScope.h:
        * rendering/RenderSlider.cpp:

2011-04-19  Kinuko Yasuda  <kinuko@chromium.org>

        Not reviewed; windows build fix attempt.

        * storage/StorageInfo.cpp:
        (WebCore::StorageInfo::~StorageInfo):
        * storage/StorageInfo.h:

2011-04-19  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by David Levin.

        [Chromium] Enable QUOTA API at runtime if enable-quota flag is given
        https://bugs.webkit.org/show_bug.cgi?id=58784

        No new tests as this does not change any functionality.

        * bindings/generic/RuntimeEnabledFeatures.cpp:
        * bindings/generic/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::quotaEnabled):
        (WebCore::RuntimeEnabledFeatures::setQuotaEnabled):
        * page/DOMWindow.idl:

2011-04-19  John Gregg  <johnnyg@google.com>

        Reviewed by Darin Fisher.

        Enable folder drag-n-drop when using a "webkitdirectory" file input
        https://bugs.webkit.org/show_bug.cgi?id=58401

        This uses a new ChromeClient API to enumerate the directory and 
        return all the files, as if the user had selected that directory
        by clicking the control in the normal way.

        * loader/EmptyClients.h:
        (WebCore::EmptyChromeClient::enumerateChosenDirectory):
        * page/Chrome.cpp:
        (WebCore::Chrome::enumerateChosenDirectory):
        * page/Chrome.h:
        * page/ChromeClient.h:
        * platform/network/FormData.cpp:
        (WebCore::FormData::appendKeyValuePairItems):
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::receiveDropForDirectoryUpload):
        (WebCore::RenderFileUploadControl::receiveDroppedFiles):
        * rendering/RenderFileUploadControl.h:

2011-04-19  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r84150.
        http://trac.webkit.org/changeset/84150
        https://bugs.webkit.org/show_bug.cgi?id=58875

        Broken backspace in Search box of Web Inspector (Requested by
        apavlov on #webkit).

        * inspector/front-end/inspector.js:
        (WebInspector.documentKeyDown):

2011-04-19  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Pavel Feldman.

        Web Inspector: NPE in TextEditorModel
        https://bugs.webkit.org/show_bug.cgi?id=58870

        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype._frameAdded):
        * inspector/front-end/TextEditorModel.js:
        (WebInspector.TextEditorModel.prototype.setText):

2011-04-19  Hans Wennborg  <hans@chromium.org>

        Reviewed by Tony Gentilcore.

        IndexedDB: Remove accidental header include directive from LevelDB backend.
        https://bugs.webkit.org/show_bug.cgi?id=58872

        No new functionality, no new tests.

        * storage/IDBLevelDBBackingStore.cpp:

2011-04-19  Herczeg Zoltan  <zherczeg@webkit.org>

        Build fix.

        LEFilter change doesn't compile on ARM neon targets
        https://bugs.webkit.org/show_bug.cgi?id=58671

        Thanks for Charlie Lee to fixing this.

        * WebCore.gypi:

2011-04-19  Daniel Bates  <dbates@webkit.org>

        Attempt to fix the Qt Linux Release Minimal build after changeset 84225
        <http://trac.webkit.org/changeset/84225> (https://bugs.webkit.org/show_bug.cgi?id=52788).

        * dom/EventDispatcher.cpp:
        (WebCore::EventDispatcher::ensureEventAncestors): Add ENABLE(SVG) guards around call
        to Node::svgShadowHost() since this method is only defined when building with SVG enabled.

2011-04-18  Dominic Cooney  <dominicc@chromium.org>

        Reviewed by Dimitri Glazkov.

        Makes SVG shadow roots and DOM shadow roots distinct.
        https://bugs.webkit.org/show_bug.cgi?id=52788

        Not a functional change. Covered by existing SVG tests.

        * dom/EventDispatcher.cpp:
        (WebCore::findElementInstance):
        (WebCore::EventDispatcher::adjustToShadowBoundaries):
        (WebCore::EventDispatcher::adjustRelatedTarget):
        (WebCore::EventDispatcher::ensureEventAncestors):
        * dom/Node.cpp:
        (WebCore::Node::setShadowHost):
        (WebCore::Node::svgShadowHost):
        (WebCore::Node::shadowTreeRootNode):
        * dom/Node.h:
        (WebCore::Node::isSVGShadowRoot):
        (WebCore::Node::parentNode):
        (WebCore::Node::parentNodeGuaranteedHostFree):
        * rendering/svg/RenderSVGShadowTreeRootContainer.cpp:
        (WebCore::RenderSVGShadowTreeRootContainer::~RenderSVGShadowTreeRootContainer):
        (WebCore::RenderSVGShadowTreeRootContainer::updateFromElement):
        * rendering/svg/SVGShadowTreeElements.cpp:
        (WebCore::SVGShadowTreeRootElement::SVGShadowTreeRootElement):
        (WebCore::SVGShadowTreeRootElement::create):
        (WebCore::SVGShadowTreeRootElement::attachElement):
        (WebCore::SVGShadowTreeRootElement::clearSVGShadowHost):
        * rendering/svg/SVGShadowTreeElements.h:
        (WebCore::SVGShadowTreeRootElement::isSVGShadowRoot):
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::title):

2011-04-18  Taiju TSUIKI  <develop@tzik.jp>

        Reviewed by Darin Fisher.

        Vendor-prefix requestFileSystem in FileSystem API
        https://bugs.webkit.org/show_bug.cgi?id=58517

        Prefix from:
        - window.requestFileSystem to window.webkitRequestFileSystem
        - window.resolveLocalFileSystemURL to window.webkitResolveLocalFileSystemURL
        - window.Flags to window.WebKitFlags
        - WorkerContext.requestFileSystem to WorkerContext.webkitRequestFileSystem
        - WorkerContext.resolveLocalFileSystemURL to WorkerContext.webkitResolveLocalFileSystemURL
        - WorkerContext.Flags to WorkerContext.WebKitFlags

        * CMakeLists.txt:
        * CodeGenerators.pri:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDirectoryEntryCustom.cpp:
        (WebCore::JSDirectoryEntry::getFile):
        (WebCore::JSDirectoryEntry::getDirectory):
        * bindings/js/JSDirectoryEntrySyncCustom.cpp:
        (WebCore::getFlags):
        (WebCore::JSDirectoryEntrySync::getFile):
        (WebCore::JSDirectoryEntrySync::getDirectory):
        * bindings/v8/custom/V8DirectoryEntryCustom.cpp:
        (WebCore::V8DirectoryEntry::getDirectoryCallback):
        (WebCore::V8DirectoryEntry::getFileCallback):
        * bindings/v8/custom/V8DirectoryEntrySyncCustom.cpp:
        (WebCore::getFlags):
        (WebCore::V8DirectoryEntrySync::getDirectoryCallback):
        (WebCore::V8DirectoryEntrySync::getFileCallback):
        * fileapi/DOMFileSystemBase.cpp:
        (WebCore::DOMFileSystemBase::getFile):
        (WebCore::DOMFileSystemBase::getDirectory):
        * fileapi/DOMFileSystemBase.h:
        * fileapi/DirectoryEntry.cpp:
        (WebCore::DirectoryEntry::getFile):
        (WebCore::DirectoryEntry::getDirectory):
        * fileapi/DirectoryEntry.h:
        * fileapi/DirectoryEntry.idl:
        * fileapi/DirectoryEntrySync.cpp:
        (WebCore::DirectoryEntrySync::getFile):
        (WebCore::DirectoryEntrySync::getDirectory):
        * fileapi/DirectoryEntrySync.h:
        * fileapi/DirectoryEntrySync.idl:
        * fileapi/WebKitFlags.h: Renamed from Source/WebCore/fileapi/Flags.h.
        (WebCore::WebKitFlags::create):
        (WebCore::WebKitFlags::isCreate):
        (WebCore::WebKitFlags::setCreate):
        (WebCore::WebKitFlags::isExclusive):
        (WebCore::WebKitFlags::setExclusive):
        (WebCore::WebKitFlags::WebKitFlags):
        * fileapi/WebKitFlags.idl: Renamed from Source/WebCore/fileapi/Flags.idl.
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::webkitRequestFileSystem):
        (WebCore::DOMWindow::webkitResolveLocalFileSystemURL):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::webkitRequestFileSystem):
        (WebCore::WorkerContext::webkitRequestFileSystemSync):
        (WebCore::WorkerContext::webkitResolveLocalFileSystemURL):
        (WebCore::WorkerContext::webkitResolveLocalFileSystemSyncURL):
        * workers/WorkerContext.h:
        * workers/WorkerContext.idl:

2011-04-18  Steve Lacey  <sjl@chromium.org>

        Reviewed by Dimitri Glazkov.

        Decouple media controls usage from implementation.
        This allows each port to implement thier own controls in a different
        manner to the default webkit implementation.

        Convert media controls hooks to a client interface
        https://bugs.webkit.org/show_bug.cgi?id=58346

        No new tests as there is no functional change.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaControls):
        (WebCore::HTMLMediaElement::ensureMediaControls):
        (WebCore::HTMLMediaElement::preDispatchEventHandler):
        * html/HTMLMediaElement.h:
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlPanelMuteButtonElement::MediaControlPanelMuteButtonElement):
        (WebCore::MediaControlPanelMuteButtonElement::create):
        (WebCore::MediaControlTimelineElement::MediaControlTimelineElement):
        (WebCore::MediaControlTimelineElement::create):
        (WebCore::MediaControlFullscreenButtonElement::MediaControlFullscreenButtonElement):
        (WebCore::MediaControlFullscreenButtonElement::create):
        * html/shadow/MediaControlElements.h:
        * html/shadow/MediaControlRootElement.cpp:
        (WebCore::MediaControlRootElement::MediaControlRootElement):
        (WebCore::MediaControls::create):
        * html/shadow/MediaControlRootElement.h:
        * html/shadow/MediaControls.cpp: Added.
        (WebCore::MediaControls::MediaControls):
        * html/shadow/MediaControls.h: Added.
        (WebCore::MediaControls::~MediaControls):

2011-04-18  Pascal Massimino  <pascal.massimino@gmail.com>

        Reviewed by Adam Barth.

        Add incremental decoding to WebP decoder
        https://bugs.webkit.org/show_bug.cgi?id=58851

        No new tests, as it's not possible for the layout test framework to
        force the decoders to decode incrementally.

        * platform/image-decoders/webp/WEBPImageDecoder.cpp:
        (WebCore::WEBPImageDecoder::WEBPImageDecoder):
        (WebCore::WEBPImageDecoder::decode):
        * platform/image-decoders/webp/WEBPImageDecoder.h:

2011-04-18  Daniel Bates  <dbates@rim.com>

        Reviewed by Adam Roben.

        With PAN_SCROLLING, mousedown events for a mouse button aren't dispatched while
        pressing-and-holding another mouse button
        https://bugs.webkit.org/show_bug.cgi?id=58700

        Fixes an issue where mousedown events weren't dispatched when pressing a mouse button A
        while pressing and holding a mouse button B, where A != B. This issue only affects builds
        that enable PAN_SCROLLING.

        On mouse press with autoscroll in progress (m_autoscrollInProgress == true) we stopped
        the autoscroll timer, invalidated the click, and swallowed the mouse press. Instead, we
        should only stop the autoscroll timer.

        Test: fast/events/fire-mousedown-while-pressing-mouse-button.html

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

2011-04-18  Jon Lee  <jonlee@apple.com>

        Reviewed by Maciej Stachowiak.

        With overlay scrollbars, textarea resize corner gains borders when the textarea becomes scrollable
        https://bugs.webkit.org/show_bug.cgi?id=58617
        <rdar://problem/9048012>

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintResizer): Check for overlay scrollbars first, and then if the bars were created, before displaying the borders

2011-04-18  Jon Lee  <jonlee@apple.com>

        Reviewed by Maciej Stachowiak.

        Selected item background in list box gets rendered on top of overlay scrollbar knob (58824)
        https://bugs.webkit.org/show_bug.cgi?id=58824
        <rdar://problem/9292680>

        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::paintObject): Moving the stage of painting the scrollbars to the foreground if using overlay scrollbars

2011-04-18  John Bauman  <jbauman@chromium.org>

        Reviewed by Kenneth Russell.

        Don't cast BitmapImageSingleFrameSkia to BitmapImage
        https://bugs.webkit.org/show_bug.cgi?id=58821

        BitmapImageSingleFrameSkia has isBitmap return true, but
        can't be cast to a BitmapImage. Instead of using BitmapImage,
        use isOpaque from SkBitmap to determine if the image has alpha.

        No new tests.

        * platform/graphics/skia/GraphicsContext3DSkia.cpp:
        (WebCore::GraphicsContext3D::getImageData):

2011-04-18  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Steve Falkenburg.

        If deleting the StorageTracker.db file fails, local storage is left in a strange state.
        https://bugs.webkit.org/show_bug.cgi?id=58805

        * storage/StorageTracker.cpp:
        (WebCore::StorageTracker::syncFileSystemAndTrackerDatabase):
        When cleaning up the StorageTracker.db file, is not enough to call syncDeleteOrigin.
        deleteOrigin itself must be called to update the data structures that syncDeleteOrigin
        depends on and to prevent clashes between a theoretical web page editing local storage
        at the same time this method is called.
        (WebCore::StorageTracker::syncDeleteAllOrigins):
        If it is not possible to delete the StorageTracker.db file, empty it.
        (WebCore::StorageTracker::deleteOriginOnMainThread):
        Wrapper for deleteOrigin.
        * storage/StorageTracker.h:

2011-04-18  Geoffrey Garen  <ggaren@apple.com>

        Build fix.

        Added back missing #include.

        * bindings/js/DOMWrapperWorld.cpp:

2011-04-18  Enrica Casucci  <enrica@apple.com>

        Reviewed by Maciej Stachowiak.

        Dropping a file in a WKView (WebKit2) doesn't load the file.
        https://bugs.webkit.org/show_bug.cgi?id=58842
        <rdar://problem/8514409>
        
        The URL string for the file contains an extra %00 at the end
        that causes the network framework to fail to load the file.
        
        * platform/win/ClipboardUtilitiesWin.cpp:
        (WebCore::getURL):

2011-04-18  Geoffrey Garen  <ggaren@apple.com>

        Discovered and rubber-stamped by Stephanie Lewis.

        Restored some code I accidentally deleted in <http://trac.webkit.org/changeset/83990>

        * bindings/js/DOMWrapperWorld.cpp:
        (WebCore::DOMWrapperWorld::~DOMWrapperWorld):
        (WebCore::DOMWrapperWorld::clearWrappers): Do clear / destroy all our
        window shells when clearing / destroying ourselves. r83990 removed this
        behavior for documents since there are no per-document maps anymore,
        but removing this behavior for window shells too was a typo.

2011-04-18  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Made DOM handle ownership customizable, and customized it for Nodes and NamedAttrMaps
        https://bugs.webkit.org/show_bug.cgi?id=58828

        * WebCore.exp.in: Blah.

        * bindings/js/DOMWrapperWorld.cpp: Moved code related to JSNode ownership
        to JSNodeCustom, where other custom JSNode-related code goes.

        (WebCore::JSDOMWrapperOwner::finalize):
        (WebCore::DOMWrapperWorld::DOMWrapperWorld):
        * bindings/js/DOMWrapperWorld.h:
        (WebCore::JSDOMWrapperOwner::JSDOMWrapperOwner):
        (WebCore::DOMWrapperWorld::defaultWrapperOwner): Renamed DOMObjectHandleOwner
        to JSDOMWrapperOwner, to match the name of JSDOMWrapper.

        * bindings/js/JSArrayBufferViewHelper.h:
        (WebCore::toJSArrayBufferView):
        * bindings/js/JSCSSRuleCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSCSSValueCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSCanvasRenderingContextCustom.cpp:
        (WebCore::toJS): Removed "DOMObject" and "Node" from the names of wrapper-
        related functions, since there is no meaningful distinction between the
        two anymore -- they both use the same extensible interface.
        
        * bindings/js/JSDOMBinding.cpp: Removed some now-unused functions.

        * bindings/js/JSDOMBinding.h:
        (WebCore::getInlineCachedWrapper):
        (WebCore::setInlineCachedWrapper):
        (WebCore::clearInlineCachedWrapper):
        (WebCore::wrapperOwner):
        (WebCore::wrapperContext):
        (WebCore::getCachedWrapper):
        (WebCore::cacheWrapper):
        (WebCore::uncacheWrapper):
        (WebCore::createWrapper):
        (WebCore::wrap): Created a generic, extensible mechanism for creating,
        caching, retrieving, marking, and destroying DOM wrappers. This eliminates
        the difference between DOM object wrappers and DOM node wrappers, and
        lays the groundwork for getting rid of MarkStack::deprecatedAppend usage
        for marking the remainder of our DOM objects.
        
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::history):
        (WebCore::JSDOMWindow::location):
        * bindings/js/JSDataViewCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::JSDocument::location):
        (WebCore::toJS):
        * bindings/js/JSElementCustom.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/js/JSEventCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSHTMLCollectionCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSImageDataCustom.cpp:
        (WebCore::toJS): Updated for renames mentioned above.

        * bindings/js/JSNamedNodeMapCustom.cpp:
        (WebCore::JSNamedNodeMapOwner::isReachableFromOpaqueRoots):
        (WebCore::JSNamedNodeMapOwner::finalize):
        (WebCore::wrapperOwner):
        (WebCore::wrapperContext):
        (WebCore::JSNamedNodeMap::markChildren):
        (WebCore::toJS): Updated to use our new interface for customizing wrapper
        lifetime management through function overloading without using
        MarkStack::deprecatedAppend.

        * bindings/js/JSNodeCustom.cpp:
        (WebCore::isObservable):
        (WebCore::isReachableFromDOM):
        (WebCore::JSNodeOwner::isReachableFromOpaqueRoots):
        (WebCore::JSNodeOwner::finalize):
        (WebCore::createWrapperInline): Moved node-related code from JSDOMBinding
        to here. Removed special case marking code for JSNamedNodeMap because
        JSNamedNodeMap now knows how to maintain its own lifetime invariants.

        * bindings/js/JSNodeCustom.h:
        (WebCore::wrapperOwner):
        (WebCore::wrapperContext):
        (WebCore::getInlineCachedWrapper):
        (WebCore::setInlineCachedWrapper):
        (WebCore::clearInlineCachedWrapper):
        (WebCore::toJS): Updated to use our new interface for customizing wrapper
        lifetime management through function overloading without using
        MarkStack::deprecatedAppend or special-case code for nodes.
        
        * bindings/js/JSSVGPathSegCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSStyleSheetCustom.cpp:
        (WebCore::toJS): Updated for renames mentioned above.

        * bindings/scripts/CodeGeneratorJS.pm: Fixed up newlines. Updated for
        renames mentioned above.

        * dom/NamedNodeMap.idl: NamedNodeMap needs a custom toJS function now
        because it needs to provide a custom WeakHandleOwner at wrapper creation time.

2011-04-18  Jessie Berlin  <jberlin@apple.com>

        Rubber-stamped by Sam Weinig.

        REGRESSION (r84094): Many tests failing assertions in WebCore::localizedString on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=58747

        Copy the WebCore Localizable.strings file into the output directory.

        * WebCore.vcproj/WebCoreGenerated.vcproj:
        * WebCore.vcproj/WebCoreGeneratedCairo.vsprops:
        * WebCore.vcproj/WebCoreGeneratedCommon.vsprops:
        * WebCore.vcproj/copyInspectorFiles.cmd: Removed.
        * WebCore.vcproj/copyWebCoreResourceFiles.cmd: Copied from Source/WebCore/WebCore.vcproj/copyInspectorFiles.cmd.

2011-04-18  Robert Hogan  <robert@webkit.org>

        Reviewed by Andreas Kling.

        [Qt] PluginViewQt needs to update geometry of plugin widget before scheduling a repaint

        When scheduling a repaint for the plugin's widget, PluginViewQt
        needs to make sure the widget's geometry is up to date. Otherwise
        the paint event happens on the widget's old location.

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

        Added a manual test. 

        * manual-tests/qt/plugin-painting.html: Added.
        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::updatePluginWidget):
        (WebCore::PluginView::invalidateRect):

2011-04-18  Oliver Hunt  <oliver@apple.com>

        Fix Qt build

        * bridge/qt/qt_class.cpp:
        (JSC::Bindings::QtClass::fallbackObject):
        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtInstance::removeCachedMethod):
        * bridge/qt/qt_instance.h:

2011-04-18  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Remove DeprecatedPtr
        https://bugs.webkit.org/show_bug.cgi?id=58718

        Replace use of DeprecatedPtr<> with Global<> as ownership rules
        aren't obvious, have filed bug #58820 on seeing if this is safe.

        * bridge/qt/qt_class.cpp:
        (JSC::Bindings::QtClass::fallbackObject):
        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtInstance::removeCachedMethod):
        (JSC::Bindings::QtInstance::markAggregate):
        * bridge/qt/qt_instance.h:

2011-04-14  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Simon Fraser.

        [CG] Use vImage (un)premultiplyImageData functions for get/putImageData with IOSurfaces
        https://bugs.webkit.org/show_bug.cgi?id=58088

        * platform/graphics/cg/ImageBufferDataCG.cpp:
        (WebCore::convertScanline): un/premultiplies and converts a scanline of image data from/to BGRA to/from RGBA
        (WebCore::unpremultitplyScanline):
        (WebCore::premultitplyScanline):
        (WebCore::ImageBufferData::getData):
        (WebCore::ImageBufferData::putData):

2011-04-18  Jeff Miller  <jeffm@apple.com>

        Reviewed by Dan Bernstein.

        Allow all log channels to be initialized from WebCoreLogLevel Windows environment variable
        https://bugs.webkit.org/show_bug.cgi?id=58811

        * platform/win/LoggingWin.cpp:
        (WebCore::InitializeLoggingChannelsIfNecessary): Support initializing LogResourceLoading, LogProgress, and LogFileAPI from WebCoreLogLevel Windows environment variable.

2011-04-18  Andrew Scherkus  <scherkus@chromium.org>

        Reviewed by Eric Seidel.

        Reset fullscreen element reference when leaving fullscreen mode and some other cleanup.

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

        Test: fullscreen/full-screen-cancel.html

        * dom/Document.cpp:
        (WebCore::Document::Document): Remove m_isFullscreen.
        (WebCore::Document::webkitWillEnterFullScreenForElement):
        (WebCore::Document::webkitWillExitFullScreenForElement): Remove duplicate call to setAnimating().
        (WebCore::Document::webkitDidExitFullScreenForElement): Reset m_fullScreenElement reference.
        * dom/Document.h:
        (WebCore::Document::webkitIsFullScreen): Use m_fullScreenElement instead of m_isFullscreen.
        (WebCore::Document::webkitFullScreenKeyboardInputAllowed): Ditto.

2011-04-18  Dan Bernstein  <mitz@apple.com>

        Reviewed by Eric Seidel.

        <rdar://problem/9282486> REGRESSION (r81992): Facebook photo tags can get cut off when moving the mouse.
        https://bugs.webkit.org/show_bug.cgi?id=58500

        Test: fast/repaint/text-in-relative-positioned-inline.html

        * rendering/RenderText.cpp:
        (WebCore::RenderText::clippedOverflowRectForRepaint): Use the container’s repaint rect, not
        the containing block’s. This matters when the containing block is outside the RenderText’s
        enclosing layer, as is the case here.

2011-04-15  Stephen White  <senorblanco@chromium.org>

        Reviewed by Kenneth Russell.

        Speed up DrawingBuffer::reset().
        https://bugs.webkit.org/show_bug.cgi?id=58706

        When DrawingBuffer::reset() is called, it should not reallocate
        the FBOs if the size has not changed.  It should just do a glClear().

        Covered by tests in fast/canvas and canvas/philip.

        * platform/graphics/chromium/DrawingBufferChromium.cpp:
        (WebCore::DrawingBuffer::DrawingBuffer):
        Initialize the size to -1, -1, so the size change check will work on
        first reset.
        * platform/graphics/gpu/DrawingBuffer.cpp:
        (WebCore::DrawingBuffer::reset):
        If the size hasn't changed, don't resize the FBOs.  Just clear the
        relevant buffers.

2011-04-18  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: group resources by type in the resources panel.
        https://bugs.webkit.org/show_bug.cgi?id=58796

        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype._frameAdded):
        (WebInspector.ResourcesPanel.prototype._resourceAdded):
        (WebInspector.BaseStorageTreeElement):
        (WebInspector.BaseStorageTreeElement.prototype.onattach):
        (WebInspector.StorageCategoryTreeElement):
        (WebInspector.FrameTreeElement):
        (WebInspector.FrameTreeElement.prototype.setTitles):
        (WebInspector.FrameTreeElement.prototype.set hovered):
        (WebInspector.FrameTreeElement.prototype.appendResource):
        (WebInspector.FrameTreeElement.prototype.appendChild):
        (WebInspector.FrameTreeElement.prototype._insertInPresentationOrder):
        (WebInspector.FrameTreeElement.prototype._insertInPresentationOrder.compare):

2011-04-18  Timothy Hatcher  <timothy@apple.com>

        Make update-webkit-localizable-strings put WebKit/win strings in WebCore
        now that all localized strings in WebKit/win use WEB_UI_STRING.

        https://webkit.org/b/58747

        Reviewed by Dan Bernstein.

        * English.lproj/Localizable.strings: Updated with strings from WebKit/win.

2011-04-15  MORITA Hajime  <morrita@google.com>

        Reviewed by Adam Barth.

        REGRESSION: <progress> doesn't animate if it doesn't have value
        https://bugs.webkit.org/show_bug.cgi?id=58693

        The initial value of RenderProgress::m_position is accidentally same as
        the indeterminate value, that makes update code on updateFromElement() skipped.
        This change set unique invalid value for the initial value of m_position.
        
        No new tests. Testing animated bar is not possible with DRT.

        * html/HTMLProgressElement.cpp:
        (WebCore::HTMLProgressElement::position):
        * html/HTMLProgressElement.h:
        * rendering/RenderProgress.cpp:
        (WebCore::RenderProgress::RenderProgress):
        (WebCore::RenderProgress::isDeterminate):

2011-04-18  MORITA Hajime  <morrita@google.com>

        Reviewed by Eric Seidel.

        REGRESSION: [Chromium Win] details-add-summary-1.html start crashing after r84039
        https://bugs.webkit.org/show_bug.cgi?id=58791
        
        On refreshMainSummary(), findMainSummary() possibly releases oldSummary.
        We should guard it again RefPtr.

        * html/HTMLDetailsElement.cpp:
        (WebCore::HTMLDetailsElement::refreshMainSummary):

2011-04-18  Antti Koivisto  <antti@apple.com>

        Reviewed by Simon Fraser.

        CSSSelector double frees
        https://bugs.webkit.org/show_bug.cgi?id=56124
        <rdar://problem/9119036>

        In all stacks this is occuring when the document is kept alive by the guard ref only
        and the node holding it is deleted.

        As a speculative fix, clear the document stylesheets when it turns into a guard ref zombie.
        This has a pretty good chance of fixing the actual bug. At minimum it will move the
        crash to an earlier, more easily traceble point.

        No tests, crash stacks only, no idea how to reproduce.

        * dom/Document.cpp:
        (WebCore::Document::removedLastRef):

2011-04-18  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Backspace in the Console is broken
        https://bugs.webkit.org/show_bug.cgi?id=58764

        * inspector/front-end/inspector.js:
        (WebInspector.documentKeyDown):

2011-04-18  Hans Wennborg  <hans@chromium.org>

        Reviewed by Steve Block.

        LevelDB backend for IndexedDB
        https://bugs.webkit.org/show_bug.cgi?id=57372

        Only available behind a run-time flag. Covered by existing layout
        tests.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/leveldb/LevelDBComparator.h: Added.
        (WebCore::LevelDBComparator::~LevelDBComparator):
        * platform/leveldb/LevelDBDatabase.cpp: Added.
        (WebCore::makeSlice):
        (WebCore::makeLevelDBSlice):
        (WebCore::makeVector):
        (WebCore::LevelDBDatabase::LevelDBDatabase):
        (WebCore::LevelDBDatabase::~LevelDBDatabase):
        (WebCore::LevelDBDatabase::open):
        (WebCore::LevelDBDatabase::put):
        (WebCore::LevelDBDatabase::remove):
        (WebCore::LevelDBDatabase::get):
        (WebCore::LevelDBDatabase::newIterator):
        * platform/leveldb/LevelDBDatabase.h: Added.
        * platform/leveldb/LevelDBIterator.cpp: Added.
        (WebCore::LevelDBIterator::~LevelDBIterator):
        (WebCore::LevelDBIterator::LevelDBIterator):
        (WebCore::makeSlice):
        (WebCore::makeLevelDBSlice):
        (WebCore::LevelDBIterator::isValid):
        (WebCore::LevelDBIterator::seekToLast):
        (WebCore::LevelDBIterator::seek):
        (WebCore::LevelDBIterator::next):
        (WebCore::LevelDBIterator::prev):
        (WebCore::LevelDBIterator::key):
        (WebCore::LevelDBIterator::value):
        * platform/leveldb/LevelDBIterator.h: Added.
        * platform/leveldb/LevelDBSlice.h: Added.
        (WebCore::LevelDBSlice::LevelDBSlice):
        (WebCore::LevelDBSlice::~LevelDBSlice):
        (WebCore::LevelDBSlice::begin):
        (WebCore::LevelDBSlice::end):
        * storage/IDBLevelDBBackingStore.cpp:
        (WebCore::encodeByte):
        (WebCore::maxIDBKey):
        (WebCore::minIDBKey):
        (WebCore::encodeInt):
        (WebCore::decodeInt):
        (WebCore::encodeVarInt):
        (WebCore::decodeVarInt):
        (WebCore::encodeString):
        (WebCore::decodeString):
        (WebCore::encodeStringWithLength):
        (WebCore::decodeStringWithLength):
        (WebCore::encodeDouble):
        (WebCore::decodeDouble):
        (WebCore::encodeIDBKey):
        (WebCore::decodeIDBKey):
        (WebCore::extractEncodedIDBKey):
        (WebCore::compareEncodedIDBKeys):
        (WebCore::getInt):
        (WebCore::putInt):
        (WebCore::getString):
        (WebCore::putString):
        (WebCore::KeyPrefix::SchemaVersionKey::encode):
        (WebCore::KeyPrefix::MaxDatabaseIdKey::encode):
        (WebCore::KeyPrefix::DatabaseFreeListKey::DatabaseFreeListKey):
        (WebCore::KeyPrefix::DatabaseFreeListKey::decode):
        (WebCore::KeyPrefix::DatabaseFreeListKey::encode):
        (WebCore::KeyPrefix::DatabaseFreeListKey::databaseId):
        (WebCore::KeyPrefix::DatabaseFreeListKey::compare):
        (WebCore::KeyPrefix::DatabaseNameKey::decode):
        (WebCore::KeyPrefix::DatabaseNameKey::encode):
        (WebCore::KeyPrefix::DatabaseNameKey::origin):
        (WebCore::KeyPrefix::DatabaseNameKey::databaseName):
        (WebCore::KeyPrefix::DatabaseNameKey::compare):
        (WebCore::KeyPrefix::DatabaseMetaDataKey::encode):
        (WebCore::KeyPrefix::ObjectStoreMetaDataKey::ObjectStoreMetaDataKey):
        (WebCore::KeyPrefix::ObjectStoreMetaDataKey::decode):
        (WebCore::KeyPrefix::ObjectStoreMetaDataKey::encode):
        (WebCore::KeyPrefix::ObjectStoreMetaDataKey::objectStoreId):
        (WebCore::KeyPrefix::ObjectStoreMetaDataKey::metaDataType):
        (WebCore::KeyPrefix::ObjectStoreMetaDataKey::compare):
        (WebCore::KeyPrefix::IndexMetaDataKey::IndexMetaDataKey):
        (WebCore::KeyPrefix::IndexMetaDataKey::decode):
        (WebCore::KeyPrefix::IndexMetaDataKey::encode):
        (WebCore::KeyPrefix::IndexMetaDataKey::compare):
        (WebCore::KeyPrefix::IndexMetaDataKey::indexId):
        (WebCore::KeyPrefix::IndexMetaDataKey::metaDataType):
        (WebCore::KeyPrefix::ObjectStoreFreeListKey::ObjectStoreFreeListKey):
        (WebCore::KeyPrefix::ObjectStoreFreeListKey::decode):
        (WebCore::KeyPrefix::ObjectStoreFreeListKey::encode):
        (WebCore::KeyPrefix::ObjectStoreFreeListKey::objectStoreId):
        (WebCore::KeyPrefix::ObjectStoreFreeListKey::compare):
        (WebCore::KeyPrefix::IndexFreeListKey::IndexFreeListKey):
        (WebCore::KeyPrefix::IndexFreeListKey::decode):
        (WebCore::KeyPrefix::IndexFreeListKey::encode):
        (WebCore::KeyPrefix::IndexFreeListKey::compare):
        (WebCore::KeyPrefix::IndexFreeListKey::objectStoreId):
        (WebCore::KeyPrefix::IndexFreeListKey::indexId):
        (WebCore::KeyPrefix::ObjectStoreNamesKey::decode):
        (WebCore::KeyPrefix::ObjectStoreNamesKey::encode):
        (WebCore::KeyPrefix::ObjectStoreNamesKey::compare):
        (WebCore::KeyPrefix::ObjectStoreNamesKey::objectStoreName):
        (WebCore::KeyPrefix::IndexNamesKey::IndexNamesKey):
        (WebCore::KeyPrefix::IndexNamesKey::decode):
        (WebCore::KeyPrefix::IndexNamesKey::encode):
        (WebCore::KeyPrefix::IndexNamesKey::compare):
        (WebCore::KeyPrefix::IndexNamesKey::indexName):
        (WebCore::KeyPrefix::ObjectStoreDataKey::decode):
        (WebCore::KeyPrefix::ObjectStoreDataKey::encode):
        (WebCore::KeyPrefix::ObjectStoreDataKey::compare):
        (WebCore::KeyPrefix::ObjectStoreDataKey::userKey):
        (WebCore::KeyPrefix::ExistsEntryKey::decode):
        (WebCore::KeyPrefix::ExistsEntryKey::encode):
        (WebCore::KeyPrefix::ExistsEntryKey::compare):
        (WebCore::KeyPrefix::ExistsEntryKey::userKey):
        (WebCore::KeyPrefix::IndexDataKey::IndexDataKey):
        (WebCore::KeyPrefix::IndexDataKey::decode):
        (WebCore::KeyPrefix::IndexDataKey::encode):
        (WebCore::KeyPrefix::IndexDataKey::encodeMaxKey):
        (WebCore::KeyPrefix::IndexDataKey::compare):
        (WebCore::KeyPrefix::IndexDataKey::databaseId):
        (WebCore::KeyPrefix::IndexDataKey::objectStoreId):
        (WebCore::KeyPrefix::IndexDataKey::indexId):
        (WebCore::KeyPrefix::IndexDataKey::userKey):
        (WebCore::KeyPrefix::realCompare):
        (WebCore::KeyPrefix::compareKeys):
        (WebCore::KeyPrefix::compareIndexKeys):
        (WebCore::KeyPrefix::Comparator::compare):
        (WebCore::KeyPrefix::Comparator::name):
        (WebCore::setUpMetadata):
        (WebCore::IDBLevelDBBackingStore::IDBLevelDBBackingStore):
        (WebCore::IDBLevelDBBackingStore::open):
        (WebCore::IDBLevelDBBackingStore::extractIDBDatabaseMetaData):
        (WebCore::getNewDatabaseId):
        (WebCore::IDBLevelDBBackingStore::setIDBDatabaseMetaData):
        (WebCore::IDBLevelDBBackingStore::getObjectStores):
        (WebCore::getNewObjectStoreId):
        (WebCore::IDBLevelDBBackingStore::createObjectStore):
        (WebCore::deleteRange):
        (WebCore::IDBLevelDBBackingStore::deleteObjectStore):
        (WebCore::IDBLevelDBBackingStore::getObjectStoreRecord):
        (WebCore::getNewVersionNumber):
        (WebCore::IDBLevelDBBackingStore::putObjectStoreRecord):
        (WebCore::IDBLevelDBBackingStore::clearObjectStore):
        (WebCore::IDBLevelDBBackingStore::createInvalidRecordIdentifier):
        (WebCore::IDBLevelDBBackingStore::deleteObjectStoreRecord):
        (WebCore::IDBLevelDBBackingStore::nextAutoIncrementNumber):
        (WebCore::IDBLevelDBBackingStore::keyExistsInObjectStore):
        (WebCore::IDBLevelDBBackingStore::forEachObjectStoreRecord):
        (WebCore::IDBLevelDBBackingStore::getIndexes):
        (WebCore::getNewIndexId):
        (WebCore::IDBLevelDBBackingStore::createIndex):
        (WebCore::IDBLevelDBBackingStore::deleteIndex):
        (WebCore::IDBLevelDBBackingStore::putIndexDataForRecord):
        (WebCore::findGreatestKeyLessThan):
        (WebCore::IDBLevelDBBackingStore::deleteIndexDataForRecord):
        (WebCore::IDBLevelDBBackingStore::getObjectViaIndex):
        (WebCore::versionExists):
        (WebCore::IDBLevelDBBackingStore::getPrimaryKeyViaIndex):
        (WebCore::IDBLevelDBBackingStore::keyExistsInIndex):
        (WebCore::findLastIndexKeyEqualTo):
        (WebCore::IDBLevelDBBackingStore::openObjectStoreCursor):
        (WebCore::IDBLevelDBBackingStore::openIndexKeyCursor):
        (WebCore::IDBLevelDBBackingStore::openIndexCursor):
        (WebCore::IDBLevelDBBackingStore::createTransaction):
        * storage/IDBLevelDBBackingStore.h:

2011-04-18  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: add test for CSS-resource binding.
        https://bugs.webkit.org/show_bug.cgi?id=58786

        Test: inspector/styles/styles-history.html

        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::setPropertyText):
        (WebCore::InspectorCSSAgent::toggleProperty):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyle::setPropertyText):
        (WebCore::InspectorStyle::toggleProperty):
        (WebCore::InspectorStyleSheet::setPropertyText):
        (WebCore::InspectorStyleSheet::toggleProperty):
        * inspector/InspectorStyleSheet.h:
        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleModel.prototype._fireStyleSheetChanged.if):
        (WebInspector.CSSStyleModel.prototype._fireStyleSheetChanged.mycallback):
        (WebInspector.CSSStyleModel.prototype._fireStyleSheetChanged):
        (WebInspector.CSSStyleModel.prototype.setStyleSheetText):
        (WebInspector.CSSStyleDeclaration.prototype.insertPropertyAt):
        (WebInspector.CSSProperty.prototype.setText.callback):
        (WebInspector.CSSProperty.prototype.setText):

2011-04-18  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r83996.
        http://trac.webkit.org/changeset/83996
        https://bugs.webkit.org/show_bug.cgi?id=58790

        layout test editing/selection/move-by-word-visually.html is
        failing (Requested by jknotten on #webkit).

        * editing/visible_units.cpp:
        (WebCore::nextWordBreakInBoxInsideBlockWithDifferentDirectionality):
        (WebCore::collectWordBreaksInBoxInsideBlockWithDifferntDirectionality):
        (WebCore::previousWordBreakInBox):
        (WebCore::leftWordBoundary):
        (WebCore::rightWordBoundary):
        (WebCore::leftWordPosition):
        (WebCore::rightWordPosition):

2011-04-18  Adam Bergkvist  <adam.bergkvist@ericsson.com>

        Reviewed by Daniel Bates.

        Modify make_names.pl to not include conditional includes unconditionally
        https://bugs.webkit.org/show_bug.cgi?id=53672

        Fixed conditional includes being unconditionally included.

        No new tests (no change in functionality)

        * dom/make_names.pl:
            - Modified printJSElementIncludes() to only print unconditional element includes.
            - Modified printElementIncludes() to only print unconditional element includes.
            - Added printConditionalElementIncludes() which takes care of printing conditional element includes.

2011-04-18  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r83803.
        http://trac.webkit.org/changeset/83803
        https://bugs.webkit.org/show_bug.cgi?id=58782

        Caused focus rings to appear in youtube videos (Requested by
        inferno-sec on #webkit).

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

2011-04-18  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Need a workaround for bug 58422
        https://bugs.webkit.org/show_bug.cgi?id=58780

        Instead of the A:before content, the link text is displayed as the A tag content.

        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertiesSection.linkifyUncopyable):
        (WebInspector.StylePropertiesSection):
        * inspector/front-end/inspector.css:

2011-04-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix WebKit2 GTK build after 82465.

        * platform/gtk/LocalizedStringsGtk.cpp:
        (WebCore::localizedString):

2011-04-18  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: TAB should not move focus from the text editor while live editing
        https://bugs.webkit.org/show_bug.cgi?id=58537

        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer.prototype._registerShortcuts):
        (WebInspector.TextViewer.prototype._cancelEditing):
        (WebInspector.TextEditorMainPanel.prototype.handleUndoRedo):
        (WebInspector.TextEditorMainPanel.prototype.handleTabKeyPress):
        (WebInspector.TextEditorMainPanel.prototype._setCaretLocation):
        (WebInspector.TextEditorMainPanel.prototype._applyDomUpdates):
        (WebInspector.TextEditorMainPanel.prototype._setText):

2011-04-18  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Incorrect content area dimensions in Metrics pane for box-sizing: border-box
        https://bugs.webkit.org/show_bug.cgi?id=58551

        Test: inspector/styles/metrics-box-sizing.html

        * inspector/front-end/MetricsSidebarPane.js:
        (WebInspector.MetricsSidebarPane.prototype._getPropertyValueAsPx):
        (WebInspector.MetricsSidebarPane.prototype._getBox):
        (WebInspector.MetricsSidebarPane.prototype._update.getContentAreaWidthPx):
        (WebInspector.MetricsSidebarPane.prototype._update.getContentAreaHeightPx):
        (WebInspector.MetricsSidebarPane.prototype._update):
        (WebInspector.MetricsSidebarPane.prototype.startEditing):
        (WebInspector.MetricsSidebarPane.prototype.editingCommitted.setEnabledValueCallback):
        (WebInspector.MetricsSidebarPane.prototype.editingCommitted):

2011-04-18  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Database agent stops to propagate it's events after navigation.
        https://bugs.webkit.org/show_bug.cgi?id=58776

        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        (WebCore::InspectorAgent::restoreInspectorStateFromCookie):
        * inspector/InspectorDatabaseAgent.cpp:
        (WebCore::InspectorDatabaseAgent::InspectorDatabaseAgent):
        (WebCore::InspectorDatabaseAgent::clearFrontend):
        (WebCore::InspectorDatabaseAgent::enable):
        (WebCore::InspectorDatabaseAgent::disable):
        (WebCore::InspectorDatabaseAgent::restore):
        * inspector/InspectorDatabaseAgent.h:
        (WebCore::InspectorDatabaseAgent::create):

2011-04-18  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r83968.
        http://trac.webkit.org/changeset/83968
        https://bugs.webkit.org/show_bug.cgi?id=58769

        Breaks Backspace in Web Inspector console (Requested by
        apavlov on #webkit).

        * inspector/front-end/inspector.js:
        (WebInspector.documentKeyDown):

2011-04-15  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: introduce WorkerInspectorController
        https://bugs.webkit.org/show_bug.cgi?id=58668

        WorkerInspectorController will be owned by WorkerContext and will hold all inspector
        agents and will also manage connection to the inspector frontend.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/ScriptState.cpp:
        (WebCore::scriptStateFromWorkerContext):
        * bindings/js/ScriptState.h:
        * bindings/v8/ScriptState.cpp:
        (WebCore::scriptStateFromWorkerContext):
        * bindings/v8/ScriptState.h:
        * inspector/InspectorState.cpp:
        (WebCore::InspectorState::updateCookie):
        * inspector/WorkerInspectorController.cpp: Added.
        (WebCore::WorkerInspectorController::WorkerInspectorController):
        (WebCore::WorkerInspectorController::~WorkerInspectorController):
        (WebCore::WorkerInspectorController::connectFrontend):
        (WebCore::WorkerInspectorController::disconnectFrontend):
        (WebCore::WorkerInspectorController::dispatchMessageFromFrontend):
        * inspector/WorkerInspectorController.h: Copied from Source/WebCore/bindings/js/ScriptState.h.
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::WorkerContext):
        * workers/WorkerContext.h:
        (WebCore::WorkerContext::workerInspectorController):

2011-04-17  Thierry Reding  <thierry.reding@avionic-design.de>

        Reviewed by Adam Barth.

        Fix build with GCC 4.6.

        * dom/make_names.pl: Execute preprocessor without the -P option. The
        preprocessor in GCC 4.6 eats empty lines, effectively breaking the
        parsing performed by this script. Dropping the -P option when invoking
        the preprocessor keeps the empty lines but as a side-effect also adds
        additional linemarkers.

        From the cpp manpage:

          -P  Inhibit generation of linemarkers in the output from the
              preprocessor. This might be useful when running the preprocessor
              on something that is not C code, and will be sent to a program
              which might be confused by the linemarkers.

        The linemarkers are not problematic, however, because the script
        properly handles them by ignoring all lines starting with a #.

2011-04-17  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/58463> Switch HTTP pipelining from user default to private setting
        <rdar://problem/9268729>

        Reviewed by Dan Bernstein.

        This replaces support for the WebKitEnableHTTPPipelining user
        default with methods on the WebCore::ResourceRequest class in
        WebCore, the WebView class in WebKit1, and the WebContext class
        in WebKit2.  It also removes support for the
        WebKitForceHTTPPipeliningPriorityHigh user default which was not
        needed.

        Run these commands if you set the user defaults previously,
        replacing "BUNDLE.ID" with your application's bundle ID:

            defaults delete BUNDLE.ID WebKitEnableHTTPPipelining
            defaults delete BUNDLE.ID WebKitForceHTTPPipeliningPriorityHigh

        * WebCore.exp.in: Export ResourceRequest::httpPipeliningEnabled()
        and ResourceRequest::setHTTPPipeliningEnabled().

        * platform/network/ResourceRequestBase.h:
        (WebCore::isHTTPPipeliningEnabled): Removed declaration.
        (WebCore::shouldForceHTTPPipeliningPriorityHigh): Removed declaration.

        * platform/network/cf/ResourceRequest.h:
        (WebCore::ResourceRequest::httpPipeliningEnabled): Added declaration.
        (WebCore::ResourceRequest::setHTTPPipeliningEnabled): Added declaration.
        (WebCore::ResourceRequest::s_httpPipeliningEnabled): Added declaration.

        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::s_httpPipeliningEnabled): Added.
        (WebCore::ResourceRequest::httpPipeliningEnabled): Added.
        (WebCore::ResourceRequest::setHTTPPipeliningEnabled): Added.
        (WebCore::initializeMaximumHTTPConnectionCountPerHost): Switched
        to use ResourceRequest::httpPipeliningEnabled().
        (WebCore::readBooleanPreference): Removed.
        (WebCore::isHTTPPipeliningEnabled): Removed.
        (WebCore::shouldForceHTTPPipeliningPriorityHigh): Removed.

        * platform/network/mac/ResourceRequestMac.mm:
        (WebCore::ResourceRequest::doUpdateResourceRequest): Switched to
        use ResourceRequest::httpPipeliningEnabled().  Removed check for
        shouldForceHTTPPipeliningPriorityHigh().
        (WebCore::ResourceRequest::doUpdatePlatformRequest): Ditto.

2011-04-17  Dan Bernstein  <mitz@apple.com>

        Reviewed by Maciej Stachowiak.

        REGRESSION (r84096): <br> moved to the right in fast/block/float/032.html
        https://bugs.webkit.org/show_bug.cgi?id=58736

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::appendFloatingObjectToLastLine): It is enough to extend the float so
        that it touches the bottom of the previous line, since RenderBlock::markLinesDirtyInBlockRange()
        always dirties the line after the last one in the range.

2011-04-17  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed. Add missing include to fix build without precompiled header.

        * rendering/RenderMediaControls.cpp:

2011-04-17  Daniel Bates  <dbates@webkit.org>

        Attempt to fix the Chromium build after changeset 84110 <http://trac.webkit.org/changeset/84110>
        (https://bugs.webkit.org/show_bug.cgi?id=57842).

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::canRequest): Rename CachedResource::LinkPrefetch to CachedResource::LinkResource.

2011-04-17  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Eric Seidel.

        Remove pthread dependency of GCController
        https://bugs.webkit.org/show_bug.cgi?id=54833

        * bindings/js/GCController.cpp:
        (WebCore::GCController::garbageCollectOnAlternateThreadForDebugging):

2011-04-17  Gavin Peters  <gavinp@chromium.org>

        Reviewed by Adam Barth.

        Add support for link rel type "subresource"
        https://bugs.webkit.org/show_bug.cgi?id=57842

        Link rel=prefetch is great for cache warming for resources on
        subsequent pages, but it launches requests at too low a priority
        to use for subresources of the current page.

        Particularly after https://bugs.webkit.org/show_bug.cgi?id=51940
        is implemented, a rel type that launches requests at an higher
        priority is going to be very useful.  This rel type is in the
        HTML5 spec at http://wiki.whatwg.org/wiki/RelExtensions .  An
        expected use case will be for servers to provide subresource hints
        in link headers, which will allow servers to help make the web
        faster.

        This feature continues my implementation of the Link header, which
        we've talked about in WebKit-dev in
        https://lists.webkit.org/pipermail/webkit-dev/2011-February/016034.html.

        Tests: fast/dom/HTMLLinkElement/subresource.html
               http/tests/misc/link-rel-prefetch-and-subresource.html

        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::~HTMLLinkElement):
        (WebCore::HTMLLinkElement::tokenizeRelAttribute):
        (WebCore::HTMLLinkElement::process):
        (WebCore::HTMLLinkElement::onloadTimerFired):
        (WebCore::HTMLLinkElement::notifyFinished):
        * html/HTMLLinkElement.h:
        (WebCore::HTMLLinkElement::RelAttribute::RelAttribute):
        * loader/cache/CachedResource.cpp:
        (WebCore::defaultPriorityForResourceType):
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::isLinkResource):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::createResource):
        (WebCore::CachedResourceLoader::requestLinkResource):
        (WebCore::CachedResourceLoader::canRequest):
        (WebCore::CachedResourceLoader::incrementRequestCount):
        (WebCore::CachedResourceLoader::decrementRequestCount):
        * loader/cache/CachedResourceLoader.h:
        * loader/cache/CachedResourceRequest.cpp:
        (WebCore::cachedResourceTypeToTargetType):
        (WebCore::CachedResourceRequest::load):

2011-04-17  Dan Bernstein  <mitz@apple.com>

        Reviewed by Joseph Pecoraro.

        <rdar://problem/9296211> REGRESSION (r83514): Failing fast/repaint/trailing-floats-root-line-box-overflow.html
        https://bugs.webkit.org/show_bug.cgi?id=58745

        This is really a regression from r82611, but it went unnoticed due to a mistake in r73385,
        which was fixed in r83514.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::layoutInlineChildren): Actually assign the bottom visual overflow to the
        variable so named, not the top layout overflow.

2011-04-17  Geoffrey Garen  <ggaren@apple.com>

        Strongly suggested, but not necessarily reviewed, by
        Sam Weinig and Maciej Stachowiak.

        Renamed DOMObject* => JSDOMWrapper*.

        * bindings/js/DOMWrapperWorld.cpp:
        (WebCore::isObservable):
        (WebCore::DOMObjectHandleOwner::finalize):
        * bindings/js/DOMWrapperWorld.h:
        * bindings/js/JSArrayBufferViewHelper.h:
        (WebCore::toJSArrayBufferView):
        * bindings/js/JSCSSRuleCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSCSSValueCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSDOMBinding.h:
        (WebCore::JSDOMWrapperWithGlobalPointer::globalObject):
        (WebCore::JSDOMWrapperWithGlobalPointer::JSDOMWrapperWithGlobalPointer):
        (WebCore::DOMConstructorObject::DOMConstructorObject):
        (WebCore::createDOMObjectWrapper):
        (WebCore::getDOMObjectWrapper):
        * bindings/js/JSDOMWrapper.cpp:
        (WebCore::JSDOMWrapper::~JSDOMWrapper):
        * bindings/js/JSDOMWrapper.h:
        (WebCore::JSDOMWrapper::JSDOMWrapper):
        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::JSDocument::location):
        (WebCore::toJS):
        * bindings/js/JSEventCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSHTMLCollectionCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSImageDataCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSSVGPathSegCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSStyleSheetCustom.cpp:
        (WebCore::toJS):
        * bindings/js/ScriptWrappable.h:
        (WebCore::ScriptWrappable::wrapper):
        (WebCore::ScriptWrappable::setWrapper):
        * bindings/scripts/CodeGeneratorJS.pm:

2011-04-17  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Barth.

        Rename PLATFORM(CA) to USE(CA)
        https://bugs.webkit.org/show_bug.cgi?id=58742

        * config.h:
        * platform/graphics/ca/TransformationMatrixCA.cpp:
        * platform/graphics/cg/ImageBufferDataCG.h:
        * platform/graphics/transforms/TransformationMatrix.h:
        * platform/mac/WebCoreSystemInterface.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::containsPaintedContent):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateBacking):

2011-04-17  Young Han Lee  <joybro@company100.net>

        Reviewed by Benjamin Poulain.

        [Texmap] [Qt] Improve readability by using gInVertexAttributeIndex instead of 0.
        https://bugs.webkit.org/show_bug.cgi?id=58739

        gInVertexAttributeIndex is a constant variable to point the location of
        "InVertex" attribute of the vertex shaders.

        * platform/graphics/opengl/TextureMapperGL.cpp:
        (WebCore::TextureMapperGL::drawTexture):
        (WebCore::TextureMapperGL::paintToTarget):

2011-04-17  Kinuko Yasuda  <kinuko@chromium.org>

        Not reviewed: Fix copyright (I had submitted the file with wrong
        copyright line).

        * storage/StorageInfo.idl:

2011-04-17  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Barth.

        Rename PLATFORM(CG) to USE(CG)
        https://bugs.webkit.org/show_bug.cgi?id=58729

        * config.h:
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::toDataURL):
        * html/HTMLCanvasElement.h:
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setShadow):
        (WebCore::CanvasRenderingContext2D::drawTextInternal):
        * html/canvas/CanvasRenderingContext2D.h:
        * html/canvas/CanvasStyle.cpp:
        (WebCore::CanvasStyle::applyStrokeColor):
        (WebCore::CanvasStyle::applyFillColor):
        * loader/cache/CachedFont.cpp:
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::createImage):
        * platform/FloatConversion.h:
        * platform/MIMETypeRegistry.cpp:
        (WebCore::initializeSupportedImageMIMETypes):
        (WebCore::initializeSupportedImageMIMETypesForEncoding):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/Color.h:
        * platform/graphics/DashArray.h:
        * platform/graphics/FloatPoint.h:
        * platform/graphics/FloatRect.h:
        * platform/graphics/FloatSize.h:
        * platform/graphics/FontPlatformData.h:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::hash):
        * platform/graphics/GlyphBuffer.h:
        (WebCore::GlyphBuffer::advanceAt):
        (WebCore::GlyphBuffer::add):
        (WebCore::GlyphBuffer::expandLastAdvance):
        * platform/graphics/Gradient.h:
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::setLegacyShadow):
        * platform/graphics/GraphicsContext.h:
        (WebCore::GraphicsContextState::GraphicsContextState):
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/Image.cpp:
        * platform/graphics/Image.h:
        * platform/graphics/ImageBuffer.cpp:
        * platform/graphics/ImageBuffer.h:
        * platform/graphics/ImageBufferData.h:
        * platform/graphics/ImageSource.h:
        * platform/graphics/IntPoint.h:
        * platform/graphics/IntRect.h:
        * platform/graphics/IntSize.h:
        * platform/graphics/Path.h:
        * platform/graphics/Pattern.h:
        * platform/graphics/SimpleFontData.h:
        * platform/graphics/cg/ColorCG.cpp:
        * platform/graphics/cg/FloatPointCG.cpp:
        * platform/graphics/cg/FloatRectCG.cpp:
        * platform/graphics/cg/FloatSizeCG.cpp:
        * platform/graphics/cg/ImageCG.cpp:
        * platform/graphics/cg/ImageSourceCG.cpp:
        * platform/graphics/cg/IntPointCG.cpp:
        * platform/graphics/cg/IntRectCG.cpp:
        * platform/graphics/cg/IntSizeCG.cpp:
        * platform/graphics/cg/PDFDocumentImage.cpp:
        * platform/graphics/cg/PDFDocumentImage.h:
        * platform/graphics/cg/PathCG.cpp:
        * platform/graphics/cg/TransformationMatrixCG.cpp:
        * platform/graphics/chromium/ImageLayerChromium.h:
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        * platform/graphics/chromium/LayerRendererChromium.h:
        * platform/graphics/chromium/PlatformCanvas.cpp:
        (WebCore::PlatformCanvas::resize):
        (WebCore::PlatformCanvas::AutoLocker::AutoLocker):
        (WebCore::PlatformCanvas::Painter::Painter):
        * platform/graphics/chromium/PlatformCanvas.h:
        * platform/graphics/chromium/PlatformImage.cpp:
        (WebCore::PlatformImage::updateFromImage):
        * platform/graphics/opentype/OpenTypeUtilities.cpp:
        * platform/graphics/transforms/AffineTransform.h:
        * platform/graphics/transforms/TransformationMatrix.h:
        * platform/graphics/win/DIBPixelData.h:
        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::FontCache::platformInit):
        (WebCore::createGDIFont):
        (WebCore::FontCache::createFontPlatformData):
        * platform/graphics/win/FontPlatformDataWin.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        * platform/graphics/win/GraphicsContextWin.cpp:
        * platform/graphics/win/MediaPlayerPrivateFullscreenWindow.cpp:
        * platform/graphics/win/SimpleFontDataWin.cpp:
        * platform/image-decoders/ImageDecoder.cpp:
        * platform/image-decoders/ImageDecoder.h:
        * rendering/RenderObject.h:
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::postApplyResource):
        * rendering/svg/RenderSVGResourceGradient.cpp:
        (WebCore::RenderSVGResourceGradient::RenderSVGResourceGradient):
        (WebCore::RenderSVGResourceGradient::applyResource):
        * rendering/svg/RenderSVGResourceGradient.h:
        * rendering/svg/RenderSVGResourceMasker.cpp:
        (WebCore::RenderSVGResourceMasker::drawContentIntoMaskImage):
        * rendering/svg/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::applyResource):

2011-04-16  Adam Barth  <abarth@webkit.org>

        Reviewed by Sam Weinig.

        about:blank documents in new tabs can XHR anywhere
        https://bugs.webkit.org/show_bug.cgi?id=58712

        Empty security origins have supposed to be low-privilege, we should
        mark them as having a unique origin.

        * manual-tests/about-blank-xhr.html: Added.
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::SecurityOrigin):
        * page/SecurityOrigin.h:

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

        Reviewed by Simon Fraser.

        <rdar://problem/9190108> Crash when hiding a float

        Test: fast/block/float/overhanging-tall-block.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::addOverhangingFloats): Moved the call to childLogicalTop() out of the loop.
        Capped the logical bottom so that we get the correct maximum.
        * rendering/RenderBlock.h: Decleared appendFloatingObjectToLastLine().
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::appendFloatingObjectToLastLine): Added. Ensures correct bookkeeping by
        extending the float if needed so that it touches the line.
        (WebCore::RenderBlock::layoutInlineChildren): Changed to call appendFloatingObjectToLastLine().
        (WebCore::RenderBlock::checkFloatsInCleanLine): Capped the float height so the we mark the right
        range of lines as dirty.
        * rendering/RootInlineBox.h:
        (WebCore::RootInlineBox::appendFloat): Replaced the floats() accessor with this function, which
        allows the creation of the vector to be combined with appending the first float.

2011-04-16  Sam Weinig  <sam@webkit.org>

        Reviewed by Simon Fraser.

        Pages in the PageCache don't have the correct visited link coloring after being restored
        https://bugs.webkit.org/show_bug.cgi?id=58721

        * WebCore.exp.in:
        Add export of markPagesForVistedLinkStyleRecalc for use by WebKit2.

        * history/CachedPage.cpp:
        (WebCore::CachedPage::CachedPage):
        (WebCore::CachedPage::restore):
        (WebCore::CachedPage::clear):
        * history/CachedPage.h:
        (WebCore::CachedPage::markForVistedLinkStyleRecalc):
        Add bit, set by calling markForVistedLinkStyleRecalc, which forces a visited link
        style recalc when being restored.

        * history/PageCache.h:
        * history/PageCache.cpp:
        (WebCore::PageCache::markPagesForVistedLinkStyleRecalc):
        Mark all pages in the page cache as requiring visited link style recalc.

        * page/PageGroup.cpp:
        (WebCore::PageGroup::addVisitedLink):
        (WebCore::PageGroup::removeVisitedLinks):
        (WebCore::PageGroup::removeAllVisitedLinks):
        Set dirty bit when changing any visited link information.
        

2011-04-16  Leo Yang  <leoyang.webkit@gmail.com>

        Reviewed by Nikolas Zimmermann.

        ASSERT failure when svg <use> element changes href
        https://bugs.webkit.org/show_bug.cgi?id=58726

        m_resourceId was not empty after the pending resource
        becomes available. This will trigger the assertion at
        line 509 of SVGUseElement.cpp when the <use> element's
        href becomes empty or invalid.

        This patch makes m_resourceId be empty after the pending
        resource becomes available to avoid assertion failure.

        Test: svg/custom/use-crash-when-href-change.svg

        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::buildPendingResource):

2011-04-16  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Eric Seidel.

        Rename PLATFORM(CAIRO) to USE(CAIRO)
        https://bugs.webkit.org/show_bug.cgi?id=55192

        * CMakeListsEfl.txt:
        * config.h:
        * platform/MIMETypeRegistry.cpp:
        (WebCore::initializeSupportedImageMIMETypesForEncoding):
        * platform/graphics/ContextShadow.h:
        * platform/graphics/DashArray.h:
        * platform/graphics/FloatRect.h:
        * platform/graphics/FontPlatformData.h:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::hash):
        (WebCore::FontPlatformData::isHashTableDeletedValue):
        * platform/graphics/GlyphBuffer.h:
        (WebCore::GlyphBuffer::glyphAt):
        (WebCore::GlyphBuffer::add):
        * platform/graphics/Gradient.cpp:
        * platform/graphics/Gradient.h:
        * platform/graphics/GraphicsContext.cpp:
        * platform/graphics/GraphicsContext.h:
        (WebCore::GraphicsContextState::GraphicsContextState):
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/ImageBufferData.h:
        * platform/graphics/ImageSource.h:
        * platform/graphics/Path.h:
        * platform/graphics/Pattern.h:
        * platform/graphics/SimpleFontData.h:
        * platform/graphics/cairo/DrawErrorUnderline.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        * platform/graphics/cairo/ImageCairo.cpp:
        * platform/graphics/gstreamer/ImageGStreamer.h:
        * platform/graphics/transforms/AffineTransform.h:
        * platform/graphics/transforms/TransformationMatrix.h:
        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::createGDIFont):
        (WebCore::FontCache::createFontPlatformData):
        * platform/graphics/win/FontPlatformDataWin.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        * platform/graphics/win/GraphicsContextWin.cpp:
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::paintWindowedPluginIntoContext):
        * rendering/RenderObject.h:

2011-04-16  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed WinCE build fix for r84033.

        * platform/win/LocalizedStringsWin.cpp:
        (WebCore::localizedString):

2011-04-16  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Nikolas Zimmermann.

        Only allow inline child for SVG text since we cannot
        handle block childs.
        https://bugs.webkit.org/show_bug.cgi?id=58678

        Test: svg/text/text-block-child-crash.xhtml

        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::isChildAllowed):
        * rendering/svg/RenderSVGText.h:

2011-04-15  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: The list of Database entries is empty if the page opens a database just before Web Inspector.
        https://bugs.webkit.org/show_bug.cgi?id=57833

        * inspector/Inspector.json:
        * inspector/InspectorDatabaseAgent.cpp:
        (WebCore::InspectorDatabaseAgent::didOpenDatabase):
        (WebCore::InspectorDatabaseAgent::InspectorDatabaseAgent):
        (WebCore::InspectorDatabaseAgent::setFrontend):
        (WebCore::InspectorDatabaseAgent::clearFrontend):
        (WebCore::InspectorDatabaseAgent::enable):
        (WebCore::InspectorDatabaseAgent::disable):
        (WebCore::InspectorDatabaseAgent::getDatabaseTableNames):
        (WebCore::InspectorDatabaseAgent::executeSQL):
        * inspector/InspectorDatabaseAgent.h:
        * inspector/front-end/inspector.js:

2011-04-15  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        CSP media-src is missing
        https://bugs.webkit.org/show_bug.cgi?id=58642

        Yay HTMLMediaElement for having the exact hook we need!

        Tests: http/tests/security/contentSecurityPolicy/media-src-allowed.html
               http/tests/security/contentSecurityPolicy/media-src-blocked.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::isSafeToLoadURL):
            - Although it's tempting to add this branch to the previous
              if-block, that results in the wrong error message being logged to
              the console (covered by the "blocked" test).
        * page/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::allowMediaFromSource):
        (WebCore::ContentSecurityPolicy::addDirective):
        * page/ContentSecurityPolicy.h:
            - These changes are routine.

2011-04-15  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        CSP should block string arguments to setTimeout and setInterval unless options eval-script
        https://bugs.webkit.org/show_bug.cgi?id=58610

        It's somewhat sadness that the JSC and V8 code for setTimeout and
        setInterval are so different.  I struggled for a while with how to
        handle the worker case, but I decided to punt on it for now.

        Tests: http/tests/security/contentSecurityPolicy/eval-scripts-setInterval-allowed.html
               http/tests/security/contentSecurityPolicy/eval-scripts-setInterval-blocked.html
               http/tests/security/contentSecurityPolicy/eval-scripts-setTimeout-allowed.html
               http/tests/security/contentSecurityPolicy/eval-scripts-setTimeout-blocked.html

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::setTimeout):
        (WebCore::JSDOMWindow::setInterval):
        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::setTimeout):
        (WebCore::JSWorkerContext::setInterval):
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::create):
        * bindings/js/ScheduledAction.h:
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::WindowSetTimeoutImpl):
        * page/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::allowEval):
        * page/ContentSecurityPolicy.h:

2011-04-15  Shishir Agrawal  <shishir@chromium.org>

        Reviewed by James Robinson.

        Add a flag to guard Page Visibility API changes.
        https://bugs.webkit.org/show_bug.cgi?id=58464

        * Configurations/FeatureDefines.xcconfig:

2011-04-15  Fridrich Strba  <fridrich.strba@bluewin.ch>

        Reviewed by Martin Robinson.

        Make plugins compile during WebKit GTK Windows build.
        Ifdef properly relevant parts so that the PluginViewGtk compiles on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=58580

        * plugins/PluginView.cpp:
        (WebCore::PluginView::stop):
        * plugins/PluginView.h:
        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::platformGetValue):
        (WebCore::PluginView::platformStart):

2011-04-15  MORITA Hajime  <morrita@google.com>

        Reviewed by Simon Fraser.

        Calls to WebCore::Document::mayCauseFlashOfUnstyledContent make frequently-run drawing methods slower
        https://bugs.webkit.org/show_bug.cgi?id=58512
        
        Manually rolled out r72367 at which mayCauseFlashOfUnstyledContent() was introduced.
        This change keeps an small refactoring on
        FrameView::shouldUpdate(), which doesn't affect on the behavior.

        * dom/Document.cpp:
        * dom/Document.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::invalidateRect):
        (WebCore::FrameView::shouldUpdate):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintContents):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayer):

2011-04-15  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Reduce default kernel size of SincResampler to favor better speed over quality
        https://bugs.webkit.org/show_bug.cgi?id=58710

        No new tests since audio API is not yet implemented.

        * platform/audio/SincResampler.h:

2011-04-15  Fridrich Strba  <fridrich.strba@bluewin.ch>

        Reviewed by Martin Robinson.

        Expand the ntohs, ntohl, htons and htonl defines for OS(WINDOWS)
        These have to be defined for Windows in general, since win32 API
        does not provide them.
        https://bugs.webkit.org/show_bug.cgi?id=58582

        * platform/graphics/WOFFFileFormat.cpp:

2011-04-15  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Adam Barth.

        Show a console message when X-Frame-Options blocks a load
        https://bugs.webkit.org/show_bug.cgi?id=39087

        Added console message when X-Frame-Options headers block resource loading

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

2011-04-15  Fridrich Strba  <fridrich.strba@bluewin.ch>

        Reviewed by Martin Robinson.

        Evaluate PLATFORM(GTK) before the all-encompassing OS(WINDOWS)
        test. This allows Windows build of WebKit GTK to chose the right
        path.
        https://bugs.webkit.org/show_bug.cgi?id=58576

        * platform/FileSystem.h:

2011-04-08  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] QWebPage MIME type handling inconsistency with other web browsers
        https://bugs.webkit.org/show_bug.cgi?id=46968

        Implementing mime type sniffing based on
        http://tools.ietf.org/html/draft-abarth-mime-sniff-06.

        * WebCore.pro:
        * platform/network/MIMESniffing.cpp: Added.
        (MagicNumbers::dataSizeNeededForImageSniffing):
        (MagicNumbers::maskedCompare):
        (MagicNumbers::checkSpaceOrBracket):
        (MagicNumbers::compare):
        (MagicNumbers::findMIMEType):
        (MagicNumbers::findSimpleMIMEType):
        (MagicNumbers::textOrBinaryTypeSniffingProcedure):
        (MagicNumbers::unknownTypeSniffingProcedure):
        (MagicNumbers::imageTypeSniffingProcedure):
        (MagicNumbers::checkText):
        (MagicNumbers::checkRDF):
        (MagicNumbers::skipTag):
        (MagicNumbers::feedTypeSniffingProcedure):
        (MIMESniffer::MIMESniffer):
        * platform/network/MIMESniffing.h: Added.
        (MIMESniffer::dataSize):
        (MIMESniffer::sniff):
        (MIMESniffer::isValid):
        * platform/network/NetworkingContext.h:
        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyWrapper::QNetworkReplyWrapper):
        (WebCore::QNetworkReplyWrapper::release):
        (WebCore::QNetworkReplyWrapper::receiveMetaData):
        (WebCore::QNetworkReplyWrapper::receiveSniffedMIMEType):
        (WebCore::QNetworkReplyWrapper::emitMetaDataChanged):
        (WebCore::QNetworkReplyHandler::sendResponseIfNeeded):
        (WebCore::QNetworkReplyHandler::sendNetworkRequest):
        (WebCore::QNetworkReplyHandler::start):
        * platform/network/qt/QNetworkReplyHandler.h:
        (WebCore::QNetworkReplyWrapper::advertisedMIMEType):
        (WebCore::QNetworkReplyWrapper::mimeType):
        * platform/network/qt/QtMIMETypeSniffer.cpp: Added.
        (QtMIMETypeSniffer::QtMIMETypeSniffer):
        (QtMIMETypeSniffer::sniff):
        (QtMIMETypeSniffer::trySniffing):
        * platform/network/qt/QtMIMETypeSniffer.h: Added.
        (QtMIMETypeSniffer::mimeType):
        (QtMIMETypeSniffer::isFinished):

2011-04-15  Emil A Eklund  <eae@chromium.org>

        Reviewed by Dimitri Glazkov.

        input field with focus makes appendChild operation ~42x slower
        https://bugs.webkit.org/show_bug.cgi?id=57059

        Change ContainerNode::cloneChildNodes to only disable the
        deleteButtonController if the container itself (or any of its children)
        is being edited. Thus avoiding a reflow in cases where it's not.

        Test: perf/clone-with-focus.html

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::cloneChildNodes):

2011-04-15  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by David Levin.

        Expose unified Quota API if QUOTA build flag is enabled
        https://bugs.webkit.org/show_bug.cgi?id=58648

        Test: storage/storageinfo-query-usage.html

        * CMakeLists.txt: Added new file entries.
        * DerivedSources.cpp: Added new file entries.
        * DerivedSources.make: Added new file entries.
        * GNUmakefile.am: Added new file entries.
        * WebCore.gypi: Added new file entries.
        * WebCore.vcproj/WebCore.vcproj: Added new file entries.
        * WebCore.xcodeproj/project.pbxproj: Added new file entries.
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::webkitStorageInfo): Added.
        * page/DOMWindow.h:
        * page/DOMWindow.idl:
        * storage/StorageInfo.h: Added storage type enum.
        * storage/StorageInfo.idl: Added.
        * storage/StorageInfoErrorCallback.idl: Added.
        * storage/StorageInfoUsageCallback.idl: Added.

2011-04-15  Oliver Hunt  <oliver@apple.com>

        GC allocate Structure
        https://bugs.webkit.org/show_bug.cgi?id=58483

        Rolling r83894 r83827 r83810 r83809 r83808 back in with
        a workaround for the gcc bug seen by the gtk bots

        * WebCore.exp.in:
        * bindings/js/JSAudioConstructor.h:
        (WebCore::JSAudioConstructor::createStructure):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::cacheDOMStructure):
        * bindings/js/JSDOMBinding.h:
        (WebCore::DOMObjectWithGlobalPointer::createStructure):
        (WebCore::DOMObjectWithGlobalPointer::DOMObjectWithGlobalPointer):
        (WebCore::DOMConstructorObject::createStructure):
        (WebCore::DOMConstructorObject::DOMConstructorObject):
        (WebCore::DOMConstructorWithDocument::DOMConstructorWithDocument):
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::JSDOMGlobalObject):
        (WebCore::JSDOMGlobalObject::markChildren):
        * bindings/js/JSDOMGlobalObject.h:
        (WebCore::JSDOMGlobalObject::createStructure):
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::JSDOMWindowBase):
        * bindings/js/JSDOMWindowBase.h:
        (WebCore::JSDOMWindowBase::createStructure):
        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::JSDOMWindowShell):
        (WebCore::JSDOMWindowShell::setWindow):
        * bindings/js/JSDOMWindowShell.h:
        (WebCore::JSDOMWindowShell::createStructure):
        * bindings/js/JSDOMWrapper.h:
        (WebCore::DOMObject::DOMObject):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::JSEventListener):
        * bindings/js/JSImageConstructor.h:
        (WebCore::JSImageConstructor::createStructure):
        * bindings/js/JSImageDataCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSOptionConstructor.h:
        (WebCore::JSOptionConstructor::createStructure):
        * bindings/js/JSWorkerContextBase.cpp:
        (WebCore::JSWorkerContextBase::JSWorkerContextBase):
        * bindings/js/JSWorkerContextBase.h:
        (WebCore::JSWorkerContextBase::createStructure):
        * bindings/js/ScriptCachedFrameData.h:
        * bindings/js/SerializedScriptValue.h:
        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::~WorkerScriptController):
        (WebCore::WorkerScriptController::initScript):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/c/CRuntimeObject.h:
        (JSC::Bindings::CRuntimeObject::createStructure):
        * bridge/c/c_instance.cpp:
        (JSC::Bindings::CRuntimeMethod::createStructure):
        * bridge/jni/jsc/JavaInstanceJSC.cpp:
        (JavaRuntimeMethod::createStructure):
        * bridge/jni/jsc/JavaRuntimeObject.h:
        (JSC::Bindings::JavaRuntimeObject::createStructure):
        * bridge/objc/ObjCRuntimeObject.h:
        (JSC::Bindings::ObjCRuntimeObject::createStructure):
        * bridge/objc/objc_instance.mm:
        (ObjCRuntimeMethod::createStructure):
        * bridge/objc/objc_runtime.h:
        (JSC::Bindings::ObjcFallbackObjectImp::createStructure):
        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtRuntimeObject::createStructure):
        * bridge/qt/qt_pixmapruntime.cpp:
        (JSC::Bindings::QtPixmapRuntimeObject::createStructure):
        * bridge/qt/qt_runtime.h:
        (JSC::Bindings::QtRuntimeMethod::createStructure):
        * bridge/runtime_array.cpp:
        (JSC::RuntimeArray::RuntimeArray):
        * bridge/runtime_array.h:
        (JSC::RuntimeArray::createStructure):
        * bridge/runtime_method.cpp:
        (JSC::RuntimeMethod::RuntimeMethod):
        * bridge/runtime_method.h:
        (JSC::RuntimeMethod::createStructure):
        * bridge/runtime_object.cpp:
        (JSC::Bindings::RuntimeObject::RuntimeObject):
        * bridge/runtime_object.h:
        (JSC::Bindings::RuntimeObject::createStructure):
        * history/HistoryItem.h:

2011-04-15  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Brian Weinstein.

        Hang underneath ApplicationCacheStorage::writeDataToUniqueFileInDirectory when loading
        http://www.webkit.org/demos/calendar.
        https://bugs.webkit.org/show_bug.cgi?id=58698

        * platform/win/FileSystemWin.cpp:
        (WebCore::openFile):
        Add breaks to the case statement.
        (WebCore::directoryName):
        Remove any trailing slash in directoryName. After closer inspection of all callers, it
        appears the that callers do not need the trailing slash, and those that use the length do
        so only to change the direction of the slashes throughout the length of the path.

2011-04-15  Roland Steiner  <rolandsteiner@chromium.org>

        Reviewed by Dimitri Glazkov.

        Bug 52963 - Enable O(1) access to root from any node in shadow DOM subtree
        https://bugs.webkit.org/show_bug.cgi?id=52963

        .) Change base class of ShadowRoot from DocumentFragment to TreeScope.
        .) Re-enable tree scope handling in Node (had ASSERT_NOT_REACHED, etc.).
        .) Merged setTreeScope() with setTreeScopeRecursively()
        .) Call setTreeScopeRecursively in DOM manipulation functions where applicable.

        No new tests. (refactoring)

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::takeAllChildrenFrom):
        (WebCore::ContainerNode::removeBetween):
        (WebCore::ContainerNode::removeChildren):
        (WebCore::ContainerNode::parserAddChild):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::~Document):
        (WebCore::Document::setDocType):
        * dom/Element.h:
        * dom/Node.cpp:
        (WebCore::Node::treeScope):
        (WebCore::Node::setTreeScopeRecursively):
        * dom/Node.h:
        (WebCore::Node::document):
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::ShadowRoot):
        (WebCore::ShadowRoot::~ShadowRoot):
        (WebCore::ShadowRoot::nodeType):
        (WebCore::ShadowRoot::cloneNode):
        (WebCore::ShadowRoot::childTypeAllowed):
        * dom/ShadowRoot.h:
        (WebCore::toShadowRoot):
        * dom/TreeScope.cpp:
        (WebCore::TreeScope::TreeScope):
        (WebCore::TreeScope::setParentTreeScope):
        * dom/TreeScope.h:
        * rendering/RenderSlider.cpp:

2011-04-15  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        DOM object handles are never removed from cache
        https://bugs.webkit.org/show_bug.cgi?id=58707

        We were trying to remove hash table items by value instead of by key.

        * bindings/js/DOMWrapperWorld.cpp:
        (WebCore::JSNodeHandleOwner::finalize): Changed to work more like
        DOMObjectHandleOwner::finalize because I'm going to merge them.

        (WebCore::DOMObjectHandleOwner::finalize): Remove hash table items
        by key, not value. (Oops!) Use a helper function to make sure we get
        this right.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::cacheDOMObjectWrapper): Store the hash table key as our weak
        handle context, so we can use it at destruction time.

        * bindings/js/JSDOMBinding.h: Removed unnecessary include.

        * bindings/js/JSNodeCustom.h:
        (WebCore::cacheDOMNodeWrapper): Store the hash table key as our weak
        handle context, so we can use it at destruction time.

        * bindings/js/ScriptWrappable.h:
        (WebCore::ScriptWrappable::setWrapper): Forward context parameter, to
        support the above.

2011-04-15  Kenneth Russell  <kbr@google.com>

        Unreviewed. Chromium Linux Release build fix due to unused variables.

        * platform/audio/mkl/FFTFrameMKL.cpp:
        (WebCore::FFTFrame::doFFT):
        (WebCore::FFTFrame::doInverseFFT):
        (WebCore::FFTFrame::cleanup):

2011-04-15  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed build change after r83945.

        New 'PlatformPathCairo.cpp' was not added to the WinCairo build.

        * WebCore.vcproj/WebCore.vcproj: Add missing file to WinCairo
          build.  Exclude for standard Apple build.

2011-04-15  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Fade the find page overlay
        https://bugs.webkit.org/show_bug.cgi?id=58697

        Add a symbol that WebKit2 needs.

        * WebCore.exp.in:

2011-04-15  MORITA Hajime  <morrita@google.com>

        Reviewed by Dimitri Glazkov.

        RenderDetailsMarker should belong to shadow element.
        https://bugs.webkit.org/show_bug.cgi?id=58591

        - Introduced DetailsMarkerControl element, which is a shadow element of <summary>, creates RenderDetailsMarker.
        - Removed custom layout code from RenderDetails, RenderDetailsMarker, which is now done by usual CSS layout.
          Note that marker size is given via style for -webkit-details-marker pseudo class.
        - Converted default summary implementation from pure-renderer style to shadow of HTMLDetailsElement.
          Now RenderDetails knows nothing about default summary.
        - Moved event handling code from HTMLDetailsElement to HTMLSummaryElement because now the marker is always child of 
          <summary>, and the clickable area is now <summary> itself.

        - Note that the rendering result is changed due to the conversion from custom layout code to usual CSS styling.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/html.css:
        (summary::-webkit-details-marker):
        * dom/Element.cpp:
        (WebCore::Element::attach):
        * dom/Node.cpp:
        (WebCore::shouldCreateRendererFor):
        * dom/Node.h:
        (WebCore::Node::canHaveLightChildRendererWithShadow):
        * html/HTMLDetailsElement.cpp:
        (WebCore::HTMLDetailsElement::findSummaryFor):
        (WebCore::HTMLDetailsElement::findMainSummary):
        (WebCore::HTMLDetailsElement::refreshMainSummary):
        (WebCore::HTMLDetailsElement::createShadowSubtree):
        (WebCore::HTMLDetailsElement::childrenChanged):
        (WebCore::HTMLDetailsElement::finishParsingChildren):
        (WebCore::HTMLDetailsElement::toggleOpen):
        * html/HTMLDetailsElement.h:
        (WebCore::HTMLDetailsElement::canHaveLightChildRendererWithShadow):
        * html/HTMLSummaryElement.cpp:
        (WebCore::HTMLSummaryElement::create):
        (WebCore::HTMLSummaryElement::createShadowSubtree):
        (WebCore::HTMLSummaryElement::detailsElement):
        (WebCore::HTMLSummaryElement::isMainSummary):
        (WebCore::HTMLSummaryElement::defaultEventHandler):
        * html/HTMLSummaryElement.h:
        (WebCore::HTMLSummaryElement::canHaveLightChildRendererWithShadow):
        * html/shadow/DetailsMarkerControl.cpp: Added.
        (WebCore::DetailsMarkerControl::DetailsMarkerControl):
        (WebCore::DetailsMarkerControl::createRenderer):
        (WebCore::DetailsMarkerControl::rendererIsNeeded):
        (WebCore::DetailsMarkerControl::shadowPseudoId):
        (WebCore::DetailsMarkerControl::summaryElement):
        * html/shadow/DetailsMarkerControl.h: Added.
        (WebCore::DetailsMarkerControl::create):
        * rendering/RenderDetails.cpp:
        (WebCore::RenderDetails::RenderDetails):
        (WebCore::RenderDetails::styleDidChange):
        (WebCore::RenderDetails::moveSummaryToContents):
        (WebCore::RenderDetails::checkMainSummary):
        (WebCore::RenderDetails::layout):
        * rendering/RenderDetails.h:
        * rendering/RenderDetailsMarker.cpp:
        (WebCore::RenderDetailsMarker::RenderDetailsMarker):
        (WebCore::RenderDetailsMarker::isOpen):
        (WebCore::RenderDetailsMarker::getPath):
        (WebCore::RenderDetailsMarker::paint):
        (WebCore::RenderDetailsMarker::details):
        * rendering/RenderDetailsMarker.h:

2011-04-15  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Implement localize strings for windows WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=58688

        * platform/win/LocalizedStringsWin.cpp:
        (WebCore::createWebKitBundle):
        (WebCore::webKitBundle):
        (WebCore::localizedString):
        Add implementation of localizedString for Windows.

2011-04-15  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Some mechanical DOM wrapper cleanup
        https://bugs.webkit.org/show_bug.cgi?id=58689

        * WebCore.exp.in: Export!

        * bindings/js/DOMWrapperWorld.cpp:
        (WebCore::isReachableFromDOM): Inverted the inDocument test to make the
        relationship of the special cases to the normal case clearer.

        * bindings/js/JSArrayBufferViewHelper.h:
        (WebCore::toJSArrayBufferView):
        * bindings/js/JSCSSRuleCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSCSSValueCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::getCachedDOMObjectWrapper):
        (WebCore::cacheDOMObjectWrapper):
        * bindings/js/JSDOMBinding.h:
        (WebCore::createDOMObjectWrapper):
        (WebCore::getDOMObjectWrapper):
        (WebCore::createDOMNodeWrapper):
        (WebCore::getDOMNodeWrapper): Changed DOM wrapper functions to operate
        in terms of DOMWrapperWorlds instead of ExecStates. This is clearer,
        and ever-so-slightly faster.
        
        Removed hasCachedXXX functions, now that they're unused.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::history):
        (WebCore::JSDOMWindow::location):
        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::JSDocument::location):
        (WebCore::toJS):
        * bindings/js/JSElementCustom.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/js/JSEventCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSHTMLCollectionCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSImageDataCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::createWrapperInline):
        * bindings/js/JSNodeCustom.h:
        (WebCore::getCachedDOMNodeWrapper):
        (WebCore::cacheDOMNodeWrapper):
        (WebCore::toJS):
        * bindings/js/JSSVGPathSegCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSStyleSheetCustom.cpp:
        (WebCore::toJS): Updated for changes above.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::dropProtection): Removed use of hasCachedDOMObjectWrapper
        because XHR is almost always created and used by JavaScript, so it's
        simpler to just always report extra cost.

2011-04-15  Andreas Kling  <kling@webkit.org>

        Rolling out accidental part of r84010.

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::computeSizeBasedOnStyle):
        (WebCore::RenderThemeQt::setButtonPadding):

2011-04-15  Oliver Hunt  <oliver@apple.com>

        Forgot windows build fix.

        * bindings/js/JSNodeFilterCondition.cpp:
        (WebCore::JSNodeFilterCondition::WeakOwner::isReachableFromOpaqueRoots):

2011-04-15  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Yury Semikhatsky.

        Frontend Part of Web Inspector: Remote Web Inspector - Cross Platform InspectorServer
        https://bugs.webkit.org/show_bug.cgi?id=51364

        The front end should not use a transparent background when
        loaded as a web page (remote debugging) but should when loaded
        regularly in a custom window. This adds a "remote" style class
        onto the document body when the page is loaded remotely.

        * inspector/front-end/inspector.css:
        (body.detached.platform-mac-snowleopard:not(.remote) #toolbar): respect the "remote" class.
        * inspector/front-end/inspector.js: add a "remote" class on the body when loaded remotely.

2011-04-15  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by David Kilzer.

        JSLock ASSERT seen often when using the inspector for long
        periods of time. We should take the JSLock whenever we
        might allocate memory in the JavaScript Heap.

        JSC InjectedScriptHost::nodeAsScriptValue should take JSLock before possible JavaScript Allocations
        https://bugs.webkit.org/show_bug.cgi?id=58674

        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::InjectedScriptHost::nodeAsScriptValue): take the JSLock.

2011-04-14  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        Make JSNodeFilterCondition handle its lifetime correctly
        https://bugs.webkit.org/show_bug.cgi?id=58622

        Switch over to a WeakHandle and external roots to keep the
        condition value live.

        * bindings/js/JSNodeFilterCondition.cpp:
        (WebCore::JSNodeFilterCondition::JSNodeFilterCondition):
        (WebCore::JSNodeFilterCondition::markAggregate):
        (WebCore::JSNodeFilterCondition::acceptNode):
        (WebCore::JSNodeFilterCondition::WeakOwner::isReachableFromOpaqueRoots):
        * bindings/js/JSNodeFilterCondition.h:
        (WebCore::JSNodeFilterCondition::create):
        * bindings/js/JSNodeFilterCustom.cpp:
        (WebCore::toNodeFilter):
        * bindings/scripts/CodeGeneratorJS.pm:

2011-04-13  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Andreas Kling.

        [Qt] QNetworkReplyHandler refactoring: some adjustments
        https://bugs.webkit.org/show_bug.cgi?id=57092

        - Removing flag m_redirected from QNetworkReplyHandler and using m_redirectionTargetUrl.isValid() instead.
        - Moving flag m_responseContainsData from QNetworkReplyHandler to the reply wrapper and removing the connection of
        signal metaDataChanged for m_responseContainsData to be consistent.
        - Using an OwnPtr to keep the reference to the QNetworkReplyWrapper.

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyWrapper::QNetworkReplyWrapper):
        (WebCore::QNetworkReplyWrapper::receiveMetaData):
        (WebCore::QNetworkReplyWrapper::didReceiveReadyRead):
        (WebCore::QNetworkReplyHandler::QNetworkReplyHandler):
        (WebCore::QNetworkReplyHandler::release):
        (WebCore::shouldIgnoreHttpError):
        (WebCore::QNetworkReplyHandler::finish):
        (WebCore::QNetworkReplyHandler::sendResponseIfNeeded):
        (WebCore::QNetworkReplyHandler::redirect):
        (WebCore::QNetworkReplyHandler::forwardData):
        * platform/network/qt/QNetworkReplyHandler.h:
        (WebCore::QNetworkReplyWrapper::responseContainsData):
        (WebCore::QNetworkReplyWrapper::redirected):

2011-04-15  Alexey Proskuryakov  <ap@apple.com>

        Chromium build fix.

        * platform/SecureTextInput.h: CARBON_SECURE_INPUT_MODE no longer exists.

2011-04-15  Mike Reed  <reed@google.com>

        Reviewed by Darin Fisher.

        hide unused static function when SKIA_GPU is enabled
        https://bugs.webkit.org/show_bug.cgi?id=58670

        No new tests. Just fixes a warning (treated as an error) when SKIA_GPU is enabled

        * platform/graphics/skia/ImageSkia.cpp:

2011-04-15  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Beth Dakin.

        Some borders with border-radius do not have rounded inner edges
        https://bugs.webkit.org/show_bug.cgi?id=58457
        
        Improve the logic used to compute the inner radii on curved
        borders, to maintain borders of even thickness around the curve.
        
        Tests: fast/borders/mixed-border-styles-radius.html
               fast/borders/mixed-border-styles.html

        * rendering/RenderBoxModelObject.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::computeBorderOuterRect):
        (WebCore::RenderBoxModelObject::computeBorderInnerRect):
        Two new utility functions to share some code that was in both paintBorder()
        and paintBoxShaadow().
        getRoundedInnerBorderWithBorderWidths() now takes the outer border box
        as well as the inner box.
        
        (WebCore::RenderBoxModelObject::paintBorder): Call new methods.
        (WebCore::RenderBoxModelObject::paintBoxShadow): Ditto.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::drawBoxSideFromPath):
        getRoundedInnerBorderWithBorderWidths() now takes the outer border box
        as well as the inner box.

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::getRoundedInnerBorderWithBorderWidths):
        * rendering/style/RenderStyle.h:
        Compute the inner radii by starting with teh radii used for the
        outer box, and then shrinking them down based on the border thickness.

2011-04-14  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Dan Bernstein.

        WebKit2: Password field input does not switch to ASCII-compatible source
        https://bugs.webkit.org/show_bug.cgi?id=58583
        <rdar://problem/9059651>

        * platform/SecureTextInput.cpp:
        (WebCore::enableSecureTextInput):
        (WebCore::disableSecureTextInput):
        This is now only used by Chromium. There is no need to change TSMDocument properties in
        renderer process (and really, all secure text input logic in WebCore should be eliminated).

2011-04-13  Xiaomei Ji  <xji@chromium.org>

        Reviewed by Ryosuke Niwa.

        Continue (3rd) experiment with moving caret by word in visual order.
        https://bugs.webkit.org/show_bug.cgi?id=58294

        This patch along with r82588 and r83483 implements moving caret by
        word in visual order.
        
        The overall algorithm is:
        1. First get the InlineBox and offset of the pass-in VisiblePosition.
        2. Based on the position (left boundary, middle, right boundary) of the offset and the
           direction of the movement, look for visually adjacent word breaks.
        2.1 If the offset is the minimum offset of the box,
            return the rightmost word boundary in previous boxes if moving left.
            return the leftmost word boundary in box and next boxes if moving right.
        2.2 Similar for the case when offset is at the maximum offset of the box.
        2.3 When offset is inside the box (not at boundaries), first find the previousWordPosition 
            or nextWordPosition based on the directionality of the box. If this word break position 
            is also inside the same box, return it. Otherwise (the nextWordPosition or 
            previousWordPosition is not in the same box or is at the box boundary), collect all the 
            word breaks in the box and search for the one closest to the input "offset" based on 
            box directionality, block directionality, and movement direction. Continue search in 
            adjacent boxes if needed.

        Notes:
        1. Word boundaries are collected one box at a time. Only when a boundary that is closest to 
           the input position (in the moving direction) is not available in current box, word 
           boundaries in adjacent box will be collected. So, there is no need to save InlineBox in 
           word boundaries. Instead, the word boundaries are saved as a pair 
           (VisiblePosition, offset) to avoid recomputing VisiblePosition.
 
        2. We only collect boundaries of the right kind (i.e. left boundary of a word in LTR block
           and right boundary of a word in RTL block). And word boundaries are collected using 
           previousWordPosition() and nextWordPosition(). So when box directionality is the same as 
           block directionality, word boundaries are collected from right to left visually in a LTR 
           box, and word boundaries are collected from left to right visually in a RTL box. It is
           the other way around when box directionality is different from block directionality.

        3. To find the right kinds of word boundaries, we must move back and forth between words
           in some situations. For example, if we're moving to the right in a LTR box in LTR block,
           we cannot simply return nextWordPosition() because it would return the right boundary
           of a word. Instead, we return nextWordPosition()'s nextWordPosition()'s previousWordPosition().

        4. When collecting word breaks inside a box, it first computes a start position, then
           collect the right kind of word breaks until it reaches the end of (or beyond) the box.
           In the meanwhile, it might need special handling on the rightmost or leftmost position 
           based on the directionality of the box and block. These computations do not consider the 
           box's bidi level.

        * editing/visible_units.cpp:
        (WebCore::nextWordBreakInBoxInsideBlockWithDifferentDirectionality):
        (WebCore::collectWordBreaksInBox):
        (WebCore::previousWordBoundaryInBox):
        (WebCore::nextWordBoundaryInBox):
        (WebCore::visuallyLastWordBoundaryInBox):
        (WebCore::leftWordBoundary):
        (WebCore::rightWordBoundary):
        (WebCore::leftWordPosition):
        (WebCore::rightWordPosition):

2011-04-14  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        Use HTMLImageElement in Canvas 2D / WebGL before response is ready causes crash
        https://bugs.webkit.org/show_bug.cgi?id=58501

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::texImage2D): Call validateHTMLImageElement().
        (WebCore::WebGLRenderingContext::texSubImage2D): Ditto.
        (WebCore::WebGLRenderingContext::validateHTMLImageElement): Make sure image is ready.
        * html/canvas/WebGLRenderingContext.h:

2011-04-07  MORITA Hajime  <morrita@google.com>

        Reviewed by Ryosuke Niwa.

        DocumentMaker::AllMarkers should not be a part of DocumentMarker::MarkerType
        https://bugs.webkit.org/show_bug.cgi?id=58112
        
        - Converted DocumentMarker::MarkerTypes from unsigned int to a class.
        - Converted DocumentMarker::AllMarkers from an enum entry to a subclass of MarkerTypes.
        - Changed type of some MarkerType argument on DocumentMarkerController API to MarkerTypes
          which should allow a combination of MarkerType constansts.
        - Removed some MarkerType arguments on DocumentMarkerController API
          which only received AllMarkers.
        
        No new tests, no behavior change.

        * WebCore.exp.in:
        * dom/DocumentMarker.h:
        (WebCore::DocumentMarker::MarkerTypes::MarkerTypes):
        (WebCore::DocumentMarker::MarkerTypes::contains):
        (WebCore::DocumentMarker::MarkerTypes::intersects):
        (WebCore::DocumentMarker::MarkerTypes::operator==):
        (WebCore::DocumentMarker::MarkerTypes::add):
        (WebCore::DocumentMarker::MarkerTypes::remove):
        (WebCore::DocumentMarker::AllMarkers::AllMarkers):
        * dom/DocumentMarkerController.cpp:
        (WebCore::DocumentMarkerController::possiblyHasMarkers):
        (WebCore::DocumentMarkerController::addMarker):
        (WebCore::DocumentMarkerController::copyMarkers):
        (WebCore::DocumentMarkerController::removeMarkers):
        (WebCore::DocumentMarkerController::markerContainingPoint):
        (WebCore::DocumentMarkerController::markersInRange):
        (WebCore::DocumentMarkerController::renderedRectsForMarkers):
        (WebCore::DocumentMarkerController::removeMarkersFromMarkerMapVectorPair):
        (WebCore::DocumentMarkerController::repaintMarkers):
        (WebCore::DocumentMarkerController::shiftMarkers):
        (WebCore::DocumentMarkerController::setMarkersActive):
        (WebCore::DocumentMarkerController::hasMarkers):
        (WebCore::DocumentMarkerController::clearDescriptionOnMarkersIntersectingRange):
        * dom/DocumentMarkerController.h:

2011-04-14  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Complicated hash table is complicated
        https://bugs.webkit.org/show_bug.cgi?id=58631
        
        Now that we use the opaque roots system to track node wrapper lifetime,
        we can remove a lot of complicated hash-tablery that used to do the same.
        
        Now normal world node wrappers are just set as direct properties of
        ScriptWrappable, while isolated world node wrappers and other DOM object
        wrappers are stored in a shared, per-world hash table.

        In addition to reducing complexity, this makes DOM wrapper allocation
        1.6X faster (tested with scratch-gc-dom3.html), and it reduces the memory
        footprint of normal world wrappers by ~2/3, and isolated world wrappers
        by ~1/3.

        * WebCore.exp.in: Paying the patch tithe.

        * bindings/js/DOMWrapperWorld.cpp:
        (WebCore::DOMWrapperWorld::~DOMWrapperWorld):
        (WebCore::DOMWrapperWorld::clearWrappers): No more per-document hash tables.

        (WebCore::JSNodeHandleOwner::finalize): Changed to call a helper function,
        so the code to destroy a wrapper can live next to the code to create one.

        * bindings/js/DOMWrapperWorld.h: No more per-document hash tables.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::uncacheDOMObjectWrapper):
        * bindings/js/JSDOMBinding.h:
        (WebCore::createDOMNodeWrapper):
        (WebCore::getDOMNodeWrapper): No more per-document hash tables.
        Added uncacheDOMObjectWrapper to be symmetrical with cacheDOMObjectWrapper.

        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSElementCustom.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::createWrapperInline): Ditto.

        * bindings/js/JSNodeCustom.h:
        (WebCore::getCachedDOMNodeWrapper):
        (WebCore::cacheDOMNodeWrapper):
        (WebCore::uncacheDOMNodeWrapper):
        (WebCore::toJS): Implemented the scheme described above.

        * bindings/js/ScriptWrappable.h:
        (WebCore::ScriptWrappable::wrapper):
        (WebCore::ScriptWrappable::setWrapper):
        (WebCore::ScriptWrappable::clearWrapper): ScriptWrappable needs a handle
        owner now, since we don't have an extra handle living in a hash table
        to maintain ownership for us.

        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::~Document):
        * dom/Document.h:
        * dom/Node.cpp:
        (WebCore::Node::setDocument): No more per-document hash tables.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::createImageBuffer): Removed call to
        hasCachedDOMNodeWrapperUnchecked because that was the old way of doing
        things, and I was in the mood for getting rid of the old way. It's
        debatable whether the check was ever a good idea. Even when a <canvas>
        doesn't have a direct JS wrapper, other JS references can still keep
        the <canvas> alive. So, it's probably best always to report extra cost.

2011-04-15  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Rename rawRequestHeadersText and RawResponseHeadersText to requestHeadersText and responseHeadersText
        https://bugs.webkit.org/show_bug.cgi?id=58650

        * inspector/Inspector.json:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::buildObjectForResourceResponse):
        * inspector/front-end/NetworkManager.js:
        (WebInspector.NetworkDispatcher.prototype._updateResourceWithResponse):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource.prototype.get requestHeadersText):
        (WebInspector.Resource.prototype.set requestHeadersText):
        (WebInspector.Resource.prototype.get requestHeadersSize):
        (WebInspector.Resource.prototype.get responseHeadersText):
        (WebInspector.Resource.prototype.set responseHeadersText):
        (WebInspector.Resource.prototype.get responseHeadersSize):
        (WebInspector.Resource.prototype._headersSize):
        * inspector/front-end/ResourceHeadersView.js:
        (WebInspector.ResourceHeadersView):
        (WebInspector.ResourceHeadersView.prototype._refreshRequestHeaders):
        (WebInspector.ResourceHeadersView.prototype._refreshResponseHeaders):
        (WebInspector.ResourceHeadersView.prototype._refreshHeadersTitle):
        (WebInspector.ResourceHeadersView.prototype._refreshHeadersText):
        (WebInspector.ResourceHeadersView.prototype._toggleRequestHeadersText):
        (WebInspector.ResourceHeadersView.prototype._toggleResponseHeadersText):
        (WebInspector.ResourceHeadersView.prototype._createHeadersToggleButton):
        * inspector/front-end/networkPanel.css:
        (.resource-headers-view .outline-disclosure li.headers-text):
        * platform/network/ResourceLoadInfo.h:

2011-04-15  Luke Macpherson   <macpherson@chromium.org>

        Reviewed by Dimitri Glazkov.

        Implement css overflow properties in CSSStyleApplyProperty
        https://bugs.webkit.org/show_bug.cgi?id=58633

        No new tests required as no functionality changes.

        * css/CSSStyleApplyProperty.cpp:
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
        Add initializers for CSSPropertyOverflowX, CSSPropertyOverflowY and CSSPropertyOverflow.
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        Delete existing implementations.

2011-04-15  Sam Weinig  <sam@webkit.org>

        Reviewed by Maciej Stachowiak.

        Make mac WebKit1 use the default localization strategy
        https://bugs.webkit.org/show_bug.cgi?id=58628

        * English.lproj/Localizable.strings:
        Update by running update-webkit-localizable-strings.

        * platform/DefaultLocalizationStrategy.cpp:
        (WebCore::DefaultLocalizationStrategy::contextMenuItemTagLookUpInDictionary):
        (WebCore::DefaultLocalizationStrategy::keygenKeychainItemName):
        (WebCore::DefaultLocalizationStrategy::imageTitle):
        Match the WebKit1 versions of these functions by special casing CF platforms.

2011-04-15  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: No console message and headers in inspector when X-Frame-Options header blocks a load
        https://bugs.webkit.org/show_bug.cgi?id=58136

        Passed response info to inspector when X-Frame-Options header blocks resource loading.

        Test: http/tests/inspector/network/x-frame-options-deny.html

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::continueAfterXFrameOptionsDeniedImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::continueAfterXFrameOptionsDenied):
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::didReceiveResponse):

2011-04-15  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Pavel Feldman.

        Web Inspector: TextViewer and TextEditorModel must support both \n and \r\n as line separators
        https://bugs.webkit.org/show_bug.cgi?id=58449

        Test: inspector/editor/text-editor-model.html

        * inspector/front-end/TextEditorModel.js:
        (WebInspector.TextEditorModel):
        (WebInspector.TextEditorModel.prototype.get text):
        (WebInspector.TextEditorModel.prototype.setText):
        (WebInspector.TextEditorModel.prototype._innerSetText):
        (WebInspector.TextEditorModel.prototype.copyRange):

2011-04-15  Sergey Vorobyev  <sergeyvorobyev@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Network events don't preserves,
        when inspector frontend closed and open again
        https://bugs.webkit.org/show_bug.cgi?id=58064

        Added InspectorFrontendProxy and EventsCollector.
        They allow captured messages from InspectorResourceAgent
        to frontend (or mockFrontend if frontend disabled) and
        push collected data when frontend reconnect.
        This functionality is disabled by default.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/EventsCollector.cpp: Added.
        (WebCore::EventsCollector::EventsCollector):
        (WebCore::EventsCollector::addEvent):
        (WebCore::EventsCollector::sendCollectedEvents):
        * inspector/EventsCollector.h: Added.
        (WebCore::EventsCollector::~EventsCollector):
        * inspector/Inspector.json:
        * inspector/InspectorFrontendProxy.cpp: Added.
        (WebCore::InspectorFrontendProxy::InspectorFrontendProxy):
        (WebCore::InspectorFrontendProxy::setInspectorFrontendChannel):
        (WebCore::InspectorFrontendProxy::setEventsCollector):
        (WebCore::InspectorFrontendProxy::sendMessageToFrontend):
        * inspector/InspectorFrontendProxy.h: Added.
        (WebCore::InspectorFrontendProxy::~InspectorFrontendProxy):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::domContentLoadedEventFiredImpl):
        (WebCore::InspectorInstrumentation::loadEventFiredImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::willSendRequest):
        (WebCore::InspectorInstrumentation::willReceiveResourceResponse):
        (WebCore::InspectorInstrumentation::didReceiveContentLength):
        (WebCore::InspectorInstrumentation::didFinishLoading):
        (WebCore::InspectorInstrumentation::domContentLoadedEventFired):
        (WebCore::InspectorInstrumentation::loadEventFired):
        (WebCore::InspectorInstrumentation::frameDetachedFromParent):
        (WebCore::InspectorInstrumentation::didCreateWebSocket):
        (WebCore::InspectorInstrumentation::willSendWebSocketHandshakeRequest):
        (WebCore::InspectorInstrumentation::didReceiveWebSocketHandshakeResponse):
        (WebCore::InspectorInstrumentation::didCloseWebSocket):
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::setFrontend):
        (WebCore::InspectorResourceAgent::resourceContent):
        (WebCore::InspectorResourceAgent::~InspectorResourceAgent):
        (WebCore::InspectorResourceAgent::didReceiveResponse):
        (WebCore::InspectorResourceAgent::domContentEventFired):
        (WebCore::InspectorResourceAgent::loadEventFired):
        (WebCore::InspectorResourceAgent::enabledBackgoundEventsCoollection):
        (WebCore::InspectorResourceAgent::enable):
        (WebCore::InspectorResourceAgent::InspectorResourceAgent):
        * inspector/InspectorResourceAgent.h:
        * inspector/front-end/NetworkManager.js:
        (WebInspector.NetworkDispatcher.prototype.domContentEventFired):
        (WebInspector.NetworkDispatcher.prototype.loadEventFired):
        * inspector/front-end/inspector.js:
        (WebInspector.domContentEventFired):
        (WebInspector.loadEventFired):

2011-04-15  Alexis Menard  <alexis.menard@openbossa.org>

        Reviewed by Dimitri Glazkov.

        REGRESSION(r83397) [Qt] When clicking on the media elements they grow 2 pixels.
        https://bugs.webkit.org/show_bug.cgi?id=58477

        Since r83397 the media controls elements are actual DOM elements.
        Therefore the global style-sheet applies to them. html.css defines
        input[type="button"]:active to be border-style: inset which means
        that when the buttons are active they grow by their border size. Therefore
        ports which are not using the borders must explicitly disable them in their custom
        stylesheet.

        * css/mediaControlsQt.css:
        (audio::-webkit-media-controls-mute-button):
        (video::-webkit-media-controls-mute-button):
        (audio::-webkit-media-controls-play-button):
        (video::-webkit-media-controls-play-button):
        (video::-webkit-media-controls-fullscreen-button):
        * css/mediaControlsQuickTime.css:
        (audio::-webkit-media-controls-mute-button, video::-webkit-media-controls-mute-button):
        (audio::-webkit-media-controls-play-button, video::-webkit-media-controls-play-button):
        (audio::-webkit-media-controls-seek-back-button, video::-webkit-media-controls-seek-back-button):
        (audio::-webkit-media-controls-seek-forward-button, video::-webkit-media-controls-seek-forward-button):
        (audio::-webkit-media-controls-fullscreen-button, video::-webkit-media-controls-fullscreen-button):
        (audio::-webkit-media-controls-rewind-button, video::-webkit-media-controls-rewind-button):
        (audio::-webkit-media-controls-return-to-realtime-button, video::-webkit-media-controls-return-to-realtime-button):
        (audio::-webkit-media-controls-toggle-closed-captions-button, video::-webkit-media-controls-toggle-closed-captions-button):
        (audio::-webkit-media-controls-volume-slider-mute-button, video::-webkit-media-controls-volume-slider-mute-button):

2011-04-15  Zelidrag Hornung  <zelidrag@chromium.org>

        Reviewed by Darin Fisher.

        Added enums for external file system type.
        https://bugs.webkit.org/show_bug.cgi?id=58456

        * fileapi/DOMFileSystemBase.cpp:
        (WebCore::DOMFileSystemBase::crackFileSystemURL):
        * fileapi/DOMFileSystemBase.h:
        * fileapi/EntryBase.cpp:
        (WebCore::EntryBase::toURL):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::requestFileSystem):
        * page/DOMWindow.h:
        * platform/AsyncFileSystem.h:
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::requestFileSystem):
        (WebCore::WorkerContext::requestFileSystemSync):
        * workers/WorkerContext.h:

2011-04-15  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: make resource revisions use dedicated type (not Resource clone).
        https://bugs.webkit.org/show_bug.cgi?id=58659

        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleModel.prototype.setStyleSheetText):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource.prototype.addRevision):
        (WebInspector.Resource.prototype._innerRequestContent.onResourceContent):
        (WebInspector.Resource.prototype._innerRequestContent):
        (WebInspector.ResourceRevision):
        (WebInspector.ResourceRevision.prototype.get resource):
        (WebInspector.ResourceRevision.prototype.get timestamp):
        (WebInspector.ResourceRevision.prototype.get content):
        (WebInspector.ResourceRevision.prototype.revertToThis):
        (WebInspector.ResourceRevision.prototype.requestContent.mycallback):
        (WebInspector.ResourceRevision.prototype.requestContent):
        * inspector/front-end/ResourceView.js:
        (WebInspector.ResourceView.resourceViewTypeMatchesResource):
        (WebInspector.ResourceView.resourceViewForResource):
        (WebInspector.ResourceView.recreateResourceView):
        (WebInspector.ResourceView.existingResourceViewForResource):
        (WebInspector.RevisionSourceFrame):
        (WebInspector.RevisionSourceFrame.prototype.get resource):
        (WebInspector.RevisionSourceFrame.prototype.isContentEditable):
        (WebInspector.RevisionSourceFrame.prototype.requestContent):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype._showResourceView):
        (WebInspector.ResourcesPanel.prototype._showRevisionView):
        (WebInspector.ResourcesPanel.prototype._fetchAndApplyDiffMarkup.step1):
        (WebInspector.ResourcesPanel.prototype._fetchAndApplyDiffMarkup.step2):
        (WebInspector.ResourcesPanel.prototype._fetchAndApplyDiffMarkup):
        (WebInspector.ResourceRevisionTreeElement):
        (WebInspector.ResourceRevisionTreeElement.prototype.get itemURL):
        (WebInspector.ResourceRevisionTreeElement.prototype.onselect):
        (WebInspector.ResourceRevisionTreeElement.prototype._ondragstart):
        (WebInspector.ResourceRevisionTreeElement.prototype._handleContextMenuEvent):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._ensureContentLoaded):
        (WebInspector.SourceFrame.prototype.requestContent):
        (WebInspector.SourceFrame.prototype.commitEditing.didEditContent):
        (WebInspector.SourceFrame.prototype.commitEditing):

2011-04-15  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Prevent Backspace keypresses from routing into the inspected page
        https://bugs.webkit.org/show_bug.cgi?id=58653

        * inspector/front-end/inspector.js:
        (WebInspector.documentKeyDown):

2011-04-15  Alice Boxhall  <aboxhall@chromium.org>

        Reviewed by Ryosuke Niwa.

        Text selection changes unexpectedly when dragging out of the <input>
        https://bugs.webkit.org/show_bug.cgi?id=55552

        Tests: editing/selection/select-out-of-editable.html
               editing/selection/select-out-of-floated-contenteditable.html
               editing/selection/select-out-of-floated-input.html
               editing/selection/select-out-of-floated-textarea.html

        * page/EventHandler.cpp:
        (WebCore::selectionExtentRespectingEditingBoundary): When dragging from an editable element, check that
        the endpoint is not outside the element. If it is, translate the point into a local point within
        the editable element.
        (WebCore::EventHandler::updateSelectionForMouseDrag): Call targetPositionForSelectionEndpoint() to
        calculate the selection endpoint.

2011-04-15  Adam Roben  <aroben@apple.com>

        Roll out r83954

        It was causing fast/dom/Window/timer-null-script-execution-context.html to crash on multiple
        bots.

        See <http://webkit.org/b/58610>.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::setTimeout):
        (WebCore::JSDOMWindow::setInterval):
        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::setTimeout):
        (WebCore::JSWorkerContext::setInterval):
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::create):
        * bindings/js/ScheduledAction.h:
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::WindowSetTimeoutImpl):
        * page/ContentSecurityPolicy.cpp:
        * page/ContentSecurityPolicy.h:

2011-04-15  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: refactor resource setContent / revisions infrastructure to get
        rid of onRevert callback.
        https://bugs.webkit.org/show_bug.cgi?id=58649

        Instead, we will have DomainModel/Resource binding responsible for changing
        underlying model upon resource changes and vice versa.

        * inspector/Inspector.json:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::getStyleSheet):
        (WebCore::InspectorCSSAgent::getStyleSheetText):
        (WebCore::InspectorCSSAgent::setStyleSheetText):
        (WebCore::InspectorCSSAgent::setPropertyText):
        (WebCore::InspectorCSSAgent::toggleProperty):
        (WebCore::InspectorCSSAgent::setRuleSelector):
        (WebCore::InspectorCSSAgent::assertStyleSheetForId):
        * inspector/InspectorCSSAgent.h:
        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleModel):
        (WebInspector.CSSStyleModel.prototype.setRuleSelector):
        (WebInspector.CSSStyleModel.prototype.addRule):
        (WebInspector.CSSStyleModel.prototype._fireStyleSheetChanged.callback):
        (WebInspector.CSSStyleModel.prototype._fireStyleSheetChanged):
        (WebInspector.CSSStyleModel.prototype.setStyleSheetText):
        (WebInspector.CSSStyleDeclaration.prototype.insertPropertyAt):
        (WebInspector.CSSProperty.prototype.setText):
        (WebInspector.CSSProperty.prototype.setText.callback):
        (WebInspector.CSSProperty.prototype.setDisabled.callback):
        (WebInspector.CSSProperty.prototype.setDisabled):
        (WebInspector.CSSStyleSheet.prototype.setText):
        (WebInspector.CSSStyleModelResourceBinding):
        (WebInspector.CSSStyleModelResourceBinding.prototype.setContent):
        (WebInspector.CSSStyleModelResourceBinding.prototype._frameNavigated):
        (WebInspector.CSSStyleModelResourceBinding.prototype._innerSetContent):
        (WebInspector.CSSStyleModelResourceBinding.prototype._loadStyleSheetHeaders):
        (WebInspector.CSSStyleModelResourceBinding.prototype._styleSheetChanged.setContent):
        (WebInspector.CSSStyleModelResourceBinding.prototype._styleSheetChanged):
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel):
        (WebInspector.DebuggerPresentationModel.prototype.editScriptSource.didEditScriptSource):
        (WebInspector.DebuggerPresentationModel.prototype.editScriptSource.didReceiveSource):
        (WebInspector.DebuggerPresentationModel.prototype.editScriptSource):
        (WebInspector.DebuggerPresentationModelResourceBinding):
        (WebInspector.DebuggerPresentationModelResourceBinding.prototype.canSetContent):
        (WebInspector.DebuggerPresentationModelResourceBinding.prototype.setContent):
        * inspector/front-end/Object.js:
        (WebInspector.Object.prototype.hasEventListeners):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource):
        (WebInspector.Resource.registerDomainModelBinding):
        (WebInspector.Resource.prototype.isEditable):
        (WebInspector.Resource.prototype.setContent):
        (WebInspector.Resource.prototype.addRevision):
        (WebInspector.Resource.prototype.revertToThis.callback):
        (WebInspector.Resource.prototype.revertToThis):
        (WebInspector.ResourceDomainModelBinding):
        (WebInspector.ResourceDomainModelBinding.prototype.canSetContent):
        (WebInspector.ResourceDomainModelBinding.prototype.setContent):
        * inspector/front-end/ResourceView.js:
        (WebInspector.ResourceView.createResourceView):
        (WebInspector.ResourceView.resourceViewTypeMatchesResource):
        (WebInspector.ResourceSourceFrame.prototype.isContentEditable):
        (WebInspector.ResourceSourceFrame.prototype.editContent):
        (WebInspector.ResourceSourceFrame.prototype.endEditing):
        (WebInspector.ResourceSourceFrame.prototype._clearIncrementalUpdateTimer):
        (WebInspector.ResourceSourceFrame.prototype._requestContent):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype._resourceAdded):
        (WebInspector.FrameResourceTreeElement):
        (WebInspector.FrameResourceTreeElement.prototype._populateRevisions):
        (WebInspector.FrameResourceTreeElement.prototype._revisionAdded):
        (WebInspector.FrameResourceTreeElement.prototype._appendRevision):
        * inspector/front-end/inspector.html:

2011-04-15  Andrey Kosyakov  <caseq@chromium.org>

        Unreviewed, rolling out r83949.
        http://trac.webkit.org/changeset/83949
        https://bugs.webkit.org/show_bug.cgi?id=57960

        broke 31 tests in chromium win & linux

        * platform/graphics/chromium/GLES2Canvas.cpp:
        (WebCore::GLES2Canvas::drawTexturedRect):
        * platform/graphics/chromium/GLES2Canvas.h:
        * platform/graphics/gpu/Texture.cpp:
        (WebCore::copySubRect):
        (WebCore::Texture::load):
        (WebCore::Texture::updateSubRect):
        * platform/graphics/gpu/Texture.h:
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::getImageData):
        (WebCore::putImageData):
        (WebCore::ImageBuffer::putUnmultipliedImageData):
        (WebCore::ImageBuffer::putPremultipliedImageData):

2011-04-15  Ben Taylor  <bentaylor.solx86@gmail.com>

        Reviewed by Alexey Proskuryakov.

        Fix building with Sun Studio 12: function pointers for extern "C" are treated differently
        https://bugs.webkit.org/show_bug.cgi?id=58508

        Since extern "C" makes a different type (although most compilers ignore that),
        we should be more careful when passing NPAPI callback functions.

        * plugins/npapi.cpp:
        (NPN_PluginThreadAsyncCall):

2011-04-15  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        CSP should block string arguments to setTimeout and setInterval unless options eval-script
        https://bugs.webkit.org/show_bug.cgi?id=58610

        It's somewhat sadness that the JSC and V8 code for setTimeout and
        setInterval are so different.  I struggled for a while with how to
        handle the worker case, but I decided to punt on it for now.

        Tests: http/tests/security/contentSecurityPolicy/eval-scripts-setInterval-allowed.html
               http/tests/security/contentSecurityPolicy/eval-scripts-setInterval-blocked.html
               http/tests/security/contentSecurityPolicy/eval-scripts-setTimeout-allowed.html
               http/tests/security/contentSecurityPolicy/eval-scripts-setTimeout-blocked.html

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::setTimeout):
        (WebCore::JSDOMWindow::setInterval):
        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::setTimeout):
        (WebCore::JSWorkerContext::setInterval):
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::create):
        * bindings/js/ScheduledAction.h:
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::WindowSetTimeoutImpl):
        * page/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::allowEval):
        * page/ContentSecurityPolicy.h:

2011-04-15  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add support for CSP's 'self' source
        https://bugs.webkit.org/show_bug.cgi?id=58604

        This change is now trivially easy.

        Test: http/tests/security/contentSecurityPolicy/script-src-self.html

        * page/ContentSecurityPolicy.cpp:
        (WebCore::CSPSourceList::addSourceSelf):

2011-04-15  Anna Cavender  <annacc@chromium.org>

        Reviewed by Eric Carlson.

        Renaming TRACK feature define to VIDEO_TRACK
        https://bugs.webkit.org/show_bug.cgi?id=53556

        No new tests. No new functionality.

        * CMakeLists.txt:
        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.make:
        * GNUmakefile.am:
        * features.pri:
        * html/HTMLTagNames.in:
        * html/HTMLTrackElement.cpp:
        * html/HTMLTrackElement.h:
        * html/HTMLTrackElement.idl:

2011-04-14  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Pavel Feldman.

        Web Inspector: Ctrl+Left/Right switch panels during live editing
        https://bugs.webkit.org/show_bug.cgi?id=58521

        Disable Ctrl+Left/Right keyboard shortcuts while in live edit.

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.readOnlyStateChanged):
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer.prototype.set readOnly):
        (WebInspector.TextViewer.prototype.get readOnly):
        (WebInspector.TextViewer.prototype._doubleClick):
        (WebInspector.TextViewer.prototype._commitEditing.didCommitEditing):
        (WebInspector.TextViewer.prototype._commitEditing):
        (WebInspector.TextViewer.prototype._cancelEditing):
        (WebInspector.TextViewerDelegate.prototype.readOnlyStateChanged):
        (WebInspector.TextEditorMainPanel.prototype.set readOnly):
        * inspector/front-end/inspector.js:
        (WebInspector.markBeingEdited):
        (WebInspector.isEditingAnyField):
        (WebInspector.startEditing.cleanUpAfterEditing):

2011-04-14  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Enable raw HTTP headers support
        https://bugs.webkit.org/show_bug.cgi?id=58259

        Added raw headers text support to inspector.

        * English.lproj/localizedStrings.js:
        * inspector/Inspector.json:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::buildObjectForResourceResponse):
        * inspector/front-end/NetworkManager.js:
        (WebInspector.NetworkDispatcher.prototype._updateResourceWithResponse):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource):
        (WebInspector.Resource.prototype.get transferSize):
        (WebInspector.Resource.prototype.set requestHeaders):
        (WebInspector.Resource.prototype.get rawRequestHeadersText):
        (WebInspector.Resource.prototype.set rawRequestHeadersText):
        (WebInspector.Resource.prototype.get requestHeadersSize):
        (WebInspector.Resource.prototype.set responseHeaders):
        (WebInspector.Resource.prototype.get rawResponseHeadersText):
        (WebInspector.Resource.prototype.set rawResponseHeadersText):
        (WebInspector.Resource.prototype.get responseHeadersSize):
        (WebInspector.Resource.prototype._headersSize):
        * inspector/front-end/ResourceHeadersView.js:
        (WebInspector.ResourceHeadersView):
        (WebInspector.ResourceHeadersView.prototype._refreshParms):
        (WebInspector.ResourceHeadersView.prototype._refreshRequestHeaders):
        (WebInspector.ResourceHeadersView.prototype._refreshResponseHeaders):
        (WebInspector.ResourceHeadersView.prototype._refreshHeadersTitle):
        (WebInspector.ResourceHeadersView.prototype._refreshHeaders):
        (WebInspector.ResourceHeadersView.prototype._refreshRawHeadersText):
        (WebInspector.ResourceHeadersView.prototype._toggleRawRequestHeadersText):
        (WebInspector.ResourceHeadersView.prototype._toggleRawResponseHeadersText):
        (WebInspector.ResourceHeadersView.prototype._createToggleButton):
        (WebInspector.ResourceHeadersView.prototype._createHeadersToggleButton):
        * inspector/front-end/networkPanel.css:
        (.resource-headers-view .outline-disclosure li .header-toggle):
        (.resource-headers-view .outline-disclosure li.expanded .header-toggle):
        (.resource-headers-view .outline-disclosure li .header-toggle:hover):
        (.resource-headers-view .outline-disclosure li.raw-headers-text):
        * platform/network/ResourceLoadInfo.h:

2011-04-14  Justin Novosad  <junov@chromium.org>

        Reviewed by Kenneth Russell.

        [Chromium] Accelerated 2D Canvas is slow to execute putImageData
        https://bugs.webkit.org/show_bug.cgi?id=57960

        * platform/graphics/chromium/GLES2Canvas.cpp:
        (WebCore::GLES2Canvas::drawTexturedRect):
        Added an option for using the blend ops for alpha multiplication
        instead of compositing.
        (WebCore::GLES2Canvas::applyClipping):
        (WebCore::GLES2Canvas::putImageData):
        New method for drawing raw pixel data from memory to the canvas
        (WebCore::GLES2Canvas::putUnmultipliedImageData):
        Wrapper for putImageData
        (WebCore::GLES2Canvas::putPremultipliedImageData):
        Wrapper for putImageData
        * platform/graphics/chromium/GLES2Canvas.h:
        * platform/graphics/gpu/Texture.cpp:
        (WebCore::copySubRect):
        (WebCore::Texture::load):
        (WebCore::Texture::updateSubRect):
        Added an overload of the updateSubRect method that can receive a pixel 
        of a size that is different from texture size. Improved the performance
        of updateSubrect by avoiding the allocation of a temporary buffer when
        not required.
        * platform/graphics/gpu/Texture.h:
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::getImageData):
        In the unmultiplied path, division by alpha now performs proper
        rounding in order to avoid generational degradation with putImageData
        (WebCore::putImageData):
        Alpha multiplication now performs proper rounding in order to be
        consistent with the hardware rendering path: OpenGL always rounds when
        converting to fixed point representation.
        (WebCore::ImageBuffer::putUnmultipliedImageData):
        Now supports a hardware rendering path, which eliminates the need
        for a readback from the GPU
        (WebCore::ImageBuffer::putPremultipliedImageData):
        Now supports a hardware rendering path, which eliminates the need
        for a readback from the GPU

2011-04-14  Joone Hur  <joone.hur@collabora.co.uk>

        Reviewed by Martin Robinson.

        Creating a CairoPath instance is not thread safe
        https://bugs.webkit.org/show_bug.cgi?id=58514

        This patch allows a cairo surface to be created just one time in order to 
        guarantee thread safety.
        In addition, CairoPath.{h,cpp} is renamed to PlatformPathCairo.{h,cpp} to 
        prevent confusing them with PathCairo.cpp

        * CMakeListsEfl.txt: Added PlatformPathCairo.cpp
        * GNUmakefile.list.am: Added PlatformPathCairo.{h,cpp} instead of CairoPath.h.
        * platform/graphics/cairo/CairoPath.h: Removed.
        * platform/graphics/cairo/CairoUtilities.cpp: Include PlatformPathCairo.h instead of CairoPath.h.
        * platform/graphics/cairo/GraphicsContextCairo.cpp: Ditto.
        * platform/graphics/cairo/PathCairo.cpp: Ditto.
        * platform/graphics/cairo/PlatformPathCairo.cpp: Added.
        (WebCore::getPathSurface): Getting a static cairo surface.
        (WebCore::CairoPath::CairoPath): Moved the implementation of the constructor 
        into the CPP file.
        * platform/graphics/cairo/PlatformPathCairo.h: Renamed CairoPath.h to this.
        (WebCore::CairoPath::~CairoPath):
        (WebCore::CairoPath::context):

2011-04-14  Nat Duca  <nduca@chromium.org>

        Reviewed by Darin Fisher.

        [chromium] Add lowpass filter and graph to fps indicator
        https://bugs.webkit.org/show_bug.cgi?id=58186

        * platform/graphics/chromium/cc/CCHeadsUpDisplay.cpp:
        (WebCore::CCHeadsUpDisplay::CCHeadsUpDisplay):
        (WebCore::CCHeadsUpDisplay::drawHudContents):
        (WebCore::CCHeadsUpDisplay::drawFPSCounter):
        (WebCore::CCHeadsUpDisplay::drawPlatformLayerTree):
        (WebCore::CCHeadsUpDisplay::onPresent):
        * platform/graphics/chromium/cc/CCHeadsUpDisplay.h:

2011-04-14  Beth Dakin  <bdakin@apple.com>

        Reviewed by Adele Peterson.

        https://bugs.webkit.org/show_bug.cgi?id=58612
        Crash switching overlay/non-overlay scrollbar preference 
        (WebCore::Page::setNeedsRecalcStyleInAllFrames + 9)
        -and corresponding-
        <rdar://problem/9241920> 

        Speculative fix: Page could definitely be null here. 
        * page/FrameView.cpp:
        (WebCore::FrameView::scrollbarStyleChanged):

2011-04-14  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: ResourceResponse should have encodedDataLength field for synchronous requests transfer size
        https://bugs.webkit.org/show_bug.cgi?id=58447

        FrameLoader now takes encoded data length for synchronous requests from the field with the same name.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadResourceSynchronously):
        * platform/network/ResourceLoadInfo.h:
        (WebCore::ResourceLoadInfo::ResourceLoadInfo):

2011-04-14  Alok Priyadarshi  <alokp@chromium.org>

        Reviewed by James Robinson.

        Remove dependency on chromium skia::PlatformCanvas
        https://bugs.webkit.org/show_bug.cgi?id=57563

        This patch does not change any functionality, just the type of object skia::PlatformCanvas -> SkCanvas. The object is still being created by a factory method skia::CreateBitmapCanvas defined in Chromium. We will eventually define an API that every port using skia will define.

        * platform/graphics/chromium/FontChromiumWin.cpp:
        (WebCore::TransparencyAwareFontPainter::TransparencyAwareFontPainter::initializeForGDI):
        (WebCore::TransparencyAwareFontPainter::TransparencyAwareFontPainter::~TransparencyAwareFontPainter):
        (WebCore::Font::drawComplexText):
        * platform/graphics/chromium/ImageBufferDataSkia.h:
        * platform/graphics/chromium/LayerChromium.h:
        * platform/graphics/chromium/LayerRendererChromium.h:
        * platform/graphics/chromium/PlatformCanvas.cpp:
        (WebCore::PlatformCanvas::resize):
        * platform/graphics/chromium/PlatformCanvas.h:
        * platform/graphics/chromium/TransparencyWin.cpp:
        (WebCore::TransparencyWin::compositeTextComposite):
        (WebCore::TransparencyWin::makeLayerOpaque):
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::paintSkBitmap):
        (WebCore::Image::drawPattern):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::PlatformContextSkia):
        (WebCore::PlatformContextSkia::setCanvas):
        (WebCore::PlatformContextSkia::isNativeFontRenderingAllowed):
        * platform/graphics/skia/PlatformContextSkia.h:
        (WebCore::PlatformContextSkia::canvas):
        (WebCore::PlatformContextSkia::printing):
        (WebCore::PlatformContextSkia::setPrinting):

2011-04-14  Eric Seidel  <eric@webkit.org>

        Reviewed by Simon Fraser.

        PumpSession should not call currentTime() in the constructor
        https://bugs.webkit.org/show_bug.cgi?id=55211

        currentTime() is expensive.  So we avoid calling it in the constructor
        and instead set startTime on the first check for a yield
        (which in the synchronous case never happens, and in the yielding
        case will happen immediately after the first token due to
        processedTokens being set to INT_MAX).

        This ended up being a large win on (my local copy of)
        peacekeeper's domDynamicCreationCreateElement:

        Before:
        avg 366.3333333333333
        median 366
        stdev 2.712112747574399
        min 362
        max 377

        After:
        avg 345.96666666666664
        median 346
        stdev 1.6829207415152454
        min 343
        max 349

        * html/parser/HTMLDocumentParser.cpp:
        * html/parser/HTMLParserScheduler.h:
        (WebCore::PumpSession::PumpSession):
        (WebCore::HTMLParserScheduler::checkForYieldBeforeToken):

2011-04-14  Ami Fischman  <fischman@google.com>

        Reviewed by Eric Carlson.

        Remove unnecessary bottom margin of controls in video elements on media documents.
        This makes the cases of media documents and non-media documents consistent,
        and makes it possible to reason about the height of a rendered media document
        (needed e.g. for sizing iframes).

        This change is covered by (the currently Skipped, but soon-to-be-un-Skipped)
        media/video-controls-in-media-document.html layouttest (see bug 54634 for
        the un-Skipping).

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

        * css/mediaControls.css:
        (video:-webkit-full-page-media::-webkit-media-controls-panel):
        * css/mediaControlsEfl.css:
        (video:-webkit-full-page-media::-webkit-media-controls-panel):
        * css/mediaControlsQuickTime.css:
        (video:-webkit-full-page-media::-webkit-media-controls-panel):

2011-04-14  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Use opaque roots instead of direct marking for nodes in the DOM
        https://bugs.webkit.org/show_bug.cgi?id=58624

        A node treats the root of its tree (usually the document) as its opaque
        root during GC.
        
        This is needed for correctness in a generational GC world, but it also
        happens to be a 3.5X speedup in a DOM-heavy GC test (scratch-gc-dom2.html).

        * bindings/js/DOMWrapperWorld.cpp:
        (WebCore::isObservable):
        (WebCore::isReachableFromDOM): Moved a helper function from JSDOMBinding.
        We use this function to determine whether a node is observable.

        (WebCore::JSNodeHandleOwner::isReachableFromOpaqueRoots): Start using
        our weak handle callback to determine reachability, instead of direct
        marking traversal through the DOM.

        * bindings/js/JSAttrCustom.cpp:
        (WebCore::JSAttr::markChildren): Updated to use the opaque roots mechanism
        instead of direct marking.

        * bindings/js/JSDOMBinding.cpp:
        * bindings/js/JSDOMBinding.h: Moved code mentioned above. Removed
        markDOMNodeWrapper because it is now unused. This is a good thing because
        markDOMNodeWrapper used deprecatedAppend, which is not compatible
        with generational GC.

        * bindings/js/JSDOMImplementationCustom.cpp:
        (WebCore::JSDOMImplementation::markChildren): Updated to use opaque roots.

        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::JSDocument::markChildren): No need to mark our child nodes directly,
        since they will take care of themselves through the opaque roots mechanism.

        * bindings/js/JSNamedNodeMapCustom.cpp:
        (WebCore::JSNamedNodeMap::markChildren): Updated to use opaque roots.

        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNode::markChildren): No need to mark our tree or our document
        directly, since they will take care of themselves through the opaque
        roots mechanism.

        * bindings/js/JSNodeCustom.h:
        (WebCore::root): Helper function for accessing the root of a node tree.
        This is O(1) while you're in the document, O(log(N)) when you're in a
        reasonably balanced disconnected tree, and O(N) in the pathological case
        of a disconnected tree that's shaped like a linked list. If average case
        O(long(N)) turns out to be too slow, we can optimize through use of
        rare data or an external hash table, but it is so uncommon that I have
        ignored it for now.

        * bindings/js/JSSVGElementInstanceCustom.cpp:
        (WebCore::JSSVGElementInstance::markChildren): Updated to use opaque roots.

2011-04-14  Mike Reed  <reed@google.com>

        Reviewed by Kenneth Russell.

        fix shadows with gradients
        https://bugs.webkit.org/show_bug.cgi?id=58376

        No new tests. Existing tests exercise this
        LayoutTests/fast/canvas/canvas-fillPath-gradient-shadow.html

        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::setPlatformShadow):

2011-04-14  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: No headers information in network panel for downloads.
        https://bugs.webkit.org/show_bug.cgi?id=58139

        Passed resource response to inspector for PolicyDownload and PolicyIgnore requests.

        Test: http/tests/inspector/network/download.html

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didReceiveResourceResponseButCanceledImpl):
        (WebCore::InspectorInstrumentation::continueWithPolicyDownloadImpl):
        (WebCore::InspectorInstrumentation::continueWithPolicyIgnoreImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::continueWithPolicyDownload):
        (WebCore::InspectorInstrumentation::continueWithPolicyIgnore):
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::continueAfterContentPolicy):

2011-04-14  Joone Hur  <joone.hur@collabora.co.uk>

        Reviewed by Martin Robinson.

        Convert use of raw pointers to RefPtr in using Cairo
        https://bugs.webkit.org/show_bug.cgi?id=57717

        No new tests added becaue of just replacing raw pointers with smart pointers.

        * platform/graphics/cairo/ContextShadowCairo.cpp: Use a RefPtr<cairo_surface_t> instead of raw pointer.
        (WebCore::purgeScratchBuffer):
        (WebCore::getScratchBuffer):
        * platform/graphics/cairo/ImageBufferCairo.cpp: Use a RefPtr<cairo_t> instead of raw pointer.
        (copySurface):

2011-04-14  Naoki Takano  <takano.naoki@gmail.com>

        Reviewed by Eric Seidel.

        [Chromium]Change menu list background fallback value to transparent to work background:none for HTML select tag.
        https://bugs.webkit.org/show_bug.cgi?id=57818

        Test: fast/forms/select-background-none.html

        This fix is only for Chromium on Linux. Chromium on Mac already works fine.
        But Windows has the same problem. This change doesn't include Windows part.

        * rendering/RenderThemeChromiumLinux.cpp:
        (WebCore::RenderThemeChromiumLinux::paintMenuList): Change the default color to transparent.

2011-04-14  Luke Macpherson   <macpherson@chromium.org>

        Reviewed by Dimitri Glazkov.

        Implement border style css properties in CSSStyleApplyProperty
        https://bugs.webkit.org/show_bug.cgi?id=58506

        No new functionality added.

        * css/CSSStyleApplyProperty.cpp:
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
        Added new property initializers.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        Removed old property handlers.

2011-04-14  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Ojan Vafai.

        Presence of shadow DOM should suppress rendering of ordinary child nodes
        https://bugs.webkit.org/show_bug.cgi?id=58073

        Test: fast/dom/shadow/no-renderers-for-light-children.html

        * dom/Node.cpp:
        (WebCore::shadowRoot): Added a helper function.
        (WebCore::Node::setDocumentRecursively): Changed to use the helper.
        (WebCore::shouldCreateRendererFor): Expanded a long condition check into a helper function,
            added a check for children of an element with a shadow DOM.
        (WebCore::Node::createRendererAndStyle): Changed to use the helper.

2011-04-14  Adrienne Walker  <enne@google.com>

        Reviewed by James Robinson.

        [chromium] Tile content and image layers
        https://bugs.webkit.org/show_bug.cgi?id=57113

        Layers tile by default if any dimension is larger than 512.  Smaller
        layers are contained within a single texture but still use the tiler
        infrastructure so that there's only one code path.

        Remove large layer support from content layers.  Content layers no
        longer own a platform canvas--they own a tiler.  Refactor tiler to
        allow for better separation of update/upload/paint.  Add rect
        parameter to update and draw functions on layers for the layer-space
        rect of interest.  This is necessary to know which tiles need to be
        drawn.

        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::ContentLayerChromium):
        (WebCore::ContentLayerChromium::~ContentLayerChromium):
        (WebCore::ContentLayerPainter::ContentLayerPainter):
        (WebCore::ContentLayerPainter::paint):
        (WebCore::ContentLayerChromium::paintContentsIfDirty):
        (WebCore::ContentLayerChromium::setLayerRenderer):
        (WebCore::ContentLayerChromium::tilingTransform):
        (WebCore::ContentLayerChromium::visibleLayerRect):
        (WebCore::ContentLayerChromium::layerBounds):
        (WebCore::ContentLayerChromium::updateLayerSize):
        (WebCore::ContentLayerChromium::draw):
        (WebCore::ContentLayerChromium::createTilerIfNeeded):
        (WebCore::ContentLayerChromium::updateCompositorResources):
        (WebCore::ContentLayerChromium::setTilingOption):
        (WebCore::ContentLayerChromium::bindContentsTexture):
        (WebCore::ContentLayerChromium::unreserveContentsTexture):
        (WebCore::ContentLayerChromium::setIsMask):
        (WebCore::ContentLayerChromium::dumpLayerProperties):
        * platform/graphics/chromium/ContentLayerChromium.h:
        (WebCore::ContentLayerChromium::drawsContent):
        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::setMaskLayer):
        * platform/graphics/chromium/ImageLayerChromium.cpp:
        (WebCore::ImageLayerChromium::paintContentsIfDirty):
        (WebCore::ImageLayerChromium::updateCompositorResources):
        (WebCore::ImageLayerChromium::layerBounds):
        (WebCore::ImageLayerChromium::tilingTransform):
        * platform/graphics/chromium/ImageLayerChromium.h:
        * platform/graphics/chromium/LayerChromium.h:
        (WebCore::LayerChromium::invalidateRect):
        (WebCore::LayerChromium::paintContentsIfDirty):
        (WebCore::LayerChromium::setIsMask):
        (WebCore::LayerChromium::draw):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::drawRootLayer):
        (WebCore::LayerRendererChromium::drawLayers):
        (WebCore::LayerRendererChromium::paintContentsRecursive):
        (WebCore::LayerRendererChromium::copyOffscreenTextureToDisplay):
        (WebCore::LayerRendererChromium::drawLayer):
        (WebCore::LayerRendererChromium::initializeSharedObjects):
        (WebCore::LayerRendererChromium::cleanupSharedObjects):
        * platform/graphics/chromium/LayerRendererChromium.h:
        * platform/graphics/chromium/LayerTilerChromium.cpp:
        (WebCore::LayerTilerChromium::setTileSize):
        (WebCore::LayerTilerChromium::getSingleTexture):
        (WebCore::LayerTilerChromium::invalidateRect):
        (WebCore::LayerTilerChromium::update):
        (WebCore::LayerTilerChromium::uploadCanvas):
        (WebCore::LayerTilerChromium::updateFromPixels):
        (WebCore::LayerTilerChromium::draw):
        (WebCore::LayerTilerChromium::unreserveTextures):
        * platform/graphics/chromium/LayerTilerChromium.h:
        (WebCore::LayerTilerChromium::setLayerRenderer):
        (WebCore::LayerTilerChromium::skipsDraw):
        * platform/graphics/chromium/PlatformCanvas.cpp:
        (WebCore::PlatformCanvas::AutoLocker::AutoLocker):
        (WebCore::PlatformCanvas::Painter::Painter):
        * platform/graphics/chromium/PlatformCanvas.h:
        * platform/graphics/chromium/RenderSurfaceChromium.cpp:
        (WebCore::RenderSurfaceChromium::draw):
        * platform/graphics/chromium/RenderSurfaceChromium.h:
        * platform/graphics/chromium/cc/CCCanvasLayerImpl.cpp:
        (WebCore::CCCanvasLayerImpl::draw):
        * platform/graphics/chromium/cc/CCCanvasLayerImpl.h:
        * platform/graphics/chromium/cc/CCHeadsUpDisplay.cpp:
        (WebCore::CCHeadsUpDisplay::draw):
        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        (WebCore::CCLayerImpl::draw):
        * platform/graphics/chromium/cc/CCLayerImpl.h:
        * platform/graphics/chromium/cc/CCPluginLayerImpl.cpp:
        (WebCore::CCPluginLayerImpl::draw):
        * platform/graphics/chromium/cc/CCPluginLayerImpl.h:
        * platform/graphics/chromium/cc/CCVideoLayerImpl.cpp:
        (WebCore::CCVideoLayerImpl::draw):
        * platform/graphics/chromium/cc/CCVideoLayerImpl.h:

2011-04-14  James Robinson  <jamesr@chromium.org>

        Reviewed by Darin Fisher.

        [chromium] REGRESSION(83820): Composited scrollbar layers sometimes not positioned when initially creating frame
        https://bugs.webkit.org/show_bug.cgi?id=58575

        Tell the RenderLayerCompositor to create/destroy composited layers for overflow controls on a FrameView when visibleContentsResized()
        is called, not contentsResized() so that we always update layers when adding or removing scrollbars.

        Covered by several chromium pixel tests.

        * page/FrameView.cpp:
        (WebCore::FrameView::contentsResized):
        (WebCore::FrameView::visibleContentsResized):

2011-04-07  David Levin  <levin@chromium.org>

        Reviewed by Brady Eidson.

        Fix some threading issues in IconDatabase.
        https://bugs.webkit.org/show_bug.cgi?id=57985

        No functionality change so no new tests. It would be very hard to test this, but
        I am working on a change for bug 31639 to detect these (which makes layout tests
        fail for at least one of these issues).

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::setIconDataForIconURL): Release imageData so that it won't get deref'ed outside of locks.
        (WebCore::IconDatabase::readFromDatabase): Ditto.
        (WebCore::IconDatabase::writeToDatabase): Acquire m_urlAndIconLock because the SharedBuffer<> data
        is used, and this lock seems to be the one which consistently guards it.

2011-04-14  Dmitry Titov  <dimich@chromium.org>

        Reviewed by David Levin.

        Simplifying Worker termination sequence (removing unnecessary mutex)
        https://bugs.webkit.org/show_bug.cgi?id=57090

        No new tests. Existing Worker tests should pass.

        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent):
        Check for Terminator-caused exception (or Terminator::shouldTerminate since sometimes
        JS might not run significant enough chunk to be terminated by Terminator) and set
        the flag to forbid future reentry into JS.

        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::evaluate):
        (WebCore::WorkerScriptController::scheduleExecutionTermination):
        (WebCore::WorkerScriptController::forbidExecution):
        (WebCore::WorkerScriptController::isExecutionForbidden):
        * bindings/js/WorkerScriptController.h:
        * bindings/v8/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::evaluate):
        (WebCore::WorkerScriptController::scheduleExecutionTermination):
        (WebCore::WorkerScriptController::forbidExecution):
        (WebCore::WorkerScriptController::isExecutionForbidden):
        * bindings/v8/WorkerScriptController.h:
        (WebCore::WorkerScriptController::proxy):
        Symmetrical changes to JSC and V8 WorkerScriptControllers:
        - remove Mutex around operations with executionForbidden flag.
        - set/check that flag only on Worker thread.
        - some renaming in attempt to better reflect what the methods do.

        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::handleEvent):
        (WebCore::V8AbstractEventListener::invokeEventHandler):
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::evaluate):
        Check for v8::TryCatch::CanContinue() and set forbidExecution flag.
        This result indicates that TerminateExecution() was in effect - we should
        not reenter V8 anymore after that.

        * dom/Document.h:
        (WebCore::Document::isJSExecutionForbidden):
        * dom/MessagePort.cpp:
        (WebCore::MessagePort::dispatchMessages):
        Stop dispatching messages once the worker context started to close.
        Per Workers spec, once WorkerGlobalScope.Close() is called, the next
        JS execution does not happen, including onmessage events. Before this
        change, Close() was setting the forbidExecution flag, indirectly stopping
        events from dispatching.

        * dom/ScriptExecutionContext.h:
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::close):
        (WebCore::WorkerContext::isJSExecutionForbidden):
        * workers/WorkerContext.h:
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::workerThread):
        (WebCore::WorkerThread::stop):

2011-04-14  Beth Dakin  <bdakin@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=56493
        Drag-scrolling overlay scrollbars thumb in overflow regions does not work
        -and corresponding-
        <rdar://problem/9112688>

        There was an original change to fix this in the normal hit-testing case, but hit 
        testing of transformed and/or positioned objects was still broken. The transformed 
        case is fixed by sending an OverlayScrollbarSizeRelevancy parameter to 
        calculateRects(). Getting positioned objects right is a little trickier. Those need 
        to opt into using temporary clip rects during hit testing. To avoid doing that when 
        it is not necessary, I added a new bit to ScrollView to track whether there are 
        currently overlay scrollbars painted in the view.
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::ScrollView):
        (WebCore::ScrollView::wheelEvent):
        * platform/ScrollView.h:
        (WebCore::ScrollView::containsScrollableAreaWithOverlayScrollbars):
        (WebCore::ScrollView::setContainsScrollableAreaWithOverlayScrollbars):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintOverflowControls):
        (WebCore::RenderLayer::hitTestLayer):
        (WebCore::RenderLayer::updateClipRects):
        (WebCore::RenderLayer::calculateClipRects):
        (WebCore::RenderLayer::parentClipRects):
        (WebCore::RenderLayer::backgroundClipRect):
        (WebCore::RenderLayer::calculateRects):
        * rendering/RenderLayer.h:

2011-04-14  Antti Koivisto  <antti@apple.com>

        Reviewed by Oliver Hunt.

        REGRESSION(r74107): Including svg format in @font-face rules makes Web Fonts fail to load
        https://bugs.webkit.org/show_bug.cgi?id=57766
        <rdar://problem/9232183>

        Move the knowledge of whether to interpret a font as SVG from CachedFont to CSSFontFaceSource. This way
        we can try to interpret the same cached resource in multiple ways.

        Test: fast/css/font-face-repeated-url.html

        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::CSSFontFaceSource):
        (WebCore::CSSFontFaceSource::getFontData):
        * css/CSSFontFaceSource.h:
        (WebCore::CSSFontFaceSource::setHasExternalSVGFont):
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::addFontFaceRule):
        * loader/cache/CachedFont.cpp:
        (WebCore::CachedFont::CachedFont):
        (WebCore::CachedFont::ensureCustomFontData):
        (WebCore::CachedFont::ensureSVGFontData):

            Use TextResourceDecoder correctly.

        (WebCore::CachedFont::getSVGFontById):
        * loader/cache/CachedFont.h:
        * svg/SVGFontFaceUriElement.cpp:
        (WebCore::SVGFontFaceUriElement::loadFont):

2011-04-14  Kenneth Russell  <kbr@google.com>

        Reviewed by Dimitri Glazkov.

        Enable building Web Audio with MKL in Chrome-branded builds
        https://bugs.webkit.org/show_bug.cgi?id=58561

        Factored out MKL support into a separate GYP file that is
        incorporated in Chrome-branded builds. Changed how the FFTFrame
        implementations are pulled in and chosen so that all files can be
        unconditionally compiled.

        Tested with both Chrome-branded build (incorporating MKL) and
        Chromium build (building just FFTFrameStub.cpp) on Linux.

        * WebCore.gyp/WebCore.gyp:
        * platform/audio/fftw/FFTFrameFFTW.cpp:
        * platform/audio/mkl/FFTFrameMKL.cpp:

2011-04-14  Ragner Magalhaes  <ragner.magalhaes@openbossa.org>

        Reviewed by Antonio Gomes.

        [Qt] Web Inspector does not highlight elements
        https://bugs.webkit.org/show_bug.cgi?id=35125

        We should call drawNodeHighlight() just if a highlighted node exists
        to avoid do save()/restore() on the Graphics Context unnecessarily.

        Added highlightedNode() method to check if we need to call drawNodeHighlight()
        and only on this case do save()/restore() on the Graphics Context.

        * inspector/InspectorAgent.h:
        (WebCore::InspectorAgent::highlightedNode):

2011-04-14  Adrienne Walker  <enne@google.com>

        Reviewed by James Robinson.

        [chromium] TilingData should return 1 tile when tile size is texture size.
        https://bugs.webkit.org/show_bug.cgi?id=58364

        * platform/graphics/gpu/TilingData.cpp:
        (WebCore::computeNumTiles):

2011-04-14  Andy Estes  <aestes@apple.com>

        Reviewed by Dan Bernstein.

        REGRESSION (r72141): Acid3 rendering is not pixel perfect.
        https://bugs.webkit.org/show_bug.cgi?id=55734
        
        WebCore should render text with a 0px font size at 0px regardless of
        minimum font size settings. This is compatible with other browsers that
        have a minimum font size preference and ensures pixel-perfect rendering
        on Acid3.

        Test: fast/text/zero-font-size.html

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::getComputedSizeFromSpecifiedSize): If
        specifiedSize is 0, return specified size regardless of zoom factor or
        minimum font size.

2011-04-14  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Simon Fraser.

        Have canvas drawImageFromRect just redirect to use drawImage
        https://bugs.webkit.org/show_bug.cgi?id=58516

        Test: fast/canvas/drawImageFromRect_withToDataURLAsSource.html

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawImage):
        (WebCore::CanvasRenderingContext2D::drawImageFromRect):
        * html/canvas/CanvasRenderingContext2D.h:

2011-04-14  James Robinson  <jamesr@chromium.org>

        Reviewed by Simon Fraser.

        REGRESSION (r83820): Lots of compositing tests failing on Windows 7 Release (Tests)
        https://bugs.webkit.org/show_bug.cgi?id=58535

        Change PLATFORM(MAC) guards to !PLATFORM(CHROMIUM) so they apply correctly to the windows build.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::requiresHorizontalScrollbarLayer):
        (WebCore::RenderLayerBacking::requiresVerticalScrollbarLayer):
        (WebCore::RenderLayerBacking::requiresScrollCornerLayer):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::shouldCompositeOverflowControls):

2011-04-14  Jian Li  <jianli@chromium.org>

        Reviewed by Darin Fisher.

        BlobBuilder should be vendor-prefixed
        https://bugs.webkit.org/show_bug.cgi?id=58518

        Renamed BlobBuilder to WebKitBlobBuilder.

        * Android.derived.jscbindings.mk:
        * Android.derived.v8bindings.mk:
        * CMakeLists.txt:
        * CodeGenerators.pri:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * fileapi/WebKitBlobBuilder.cpp: Renamed from Source/WebCore/fileapi/BlobBuilder.cpp.
        (WebCore::WebKitBlobBuilder::WebKitBlobBuilder):
        (WebCore::WebKitBlobBuilder::getBuffer):
        (WebCore::WebKitBlobBuilder::append):
        (WebCore::WebKitBlobBuilder::getBlob):
        * fileapi/WebKitBlobBuilder.h: Renamed from Source/WebCore/fileapi/BlobBuilder.h.
        (WebCore::WebKitBlobBuilder::create):
        * fileapi/WebKitBlobBuilder.idl: Renamed from Source/WebCore/fileapi/BlobBuilder.idl.
        * page/DOMWindow.idl:
        * workers/WorkerContext.idl:

2011-04-14  Adam Barth  <abarth@webkit.org>

        Remove some trailing whitespace.  I'm making this change to initialize
        the SVN credentials on a new commit-queue machine.  I'm sure there's a
        better way to do this, but I don't know it.

        * dom/Document.cpp:
        (WebCore::Document::Document):

2011-04-14  Pratik Solanki  <psolanki@apple.com>

        Reviewed by David Kilzer.

        Set minimum priority for fast lane connections
        https://bugs.webkit.org/show_bug.cgi?id=58353

        * WebCore.exp.in:
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::initializeMaximumHTTPConnectionCountPerHost): Call
        wkSetHTTPPipeliningMinimumFastLanePriority to allow javascript resources to use the fast
        lane connections.

2011-04-14  Kenneth Russell  <kbr@google.com>

        Reviewed by Dimitri Glazkov.

        Fix Web Audio build on Linux Debug and with stub FFTFrame
        https://bugs.webkit.org/show_bug.cgi?id=58555

        Built Chromium/Linux in Debug mode to test.

        * platform/audio/FFTFrame.cpp:
        * platform/audio/FFTFrameStub.cpp:
        (WebCore::FFTFrame::initialize):
        * webaudio/AudioContext.cpp:
        * webaudio/DefaultAudioDestinationNode.cpp:

2011-04-14  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        [v8] Web Inspector: add initial implementation of WorkerScriptDebugServer
        https://bugs.webkit.org/show_bug.cgi?id=58552

        * bindings/v8/DebuggerScript.js:
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::initContextIfNeeded): each worker context
        now have a debug id (similar to frame contexts).
        * bindings/v8/WorkerScriptDebugServer.cpp:
        (WebCore::retrieveWorkerContext):
        (WebCore::WorkerScriptDebugServer::WorkerScriptDebugServer):
        (WebCore::WorkerScriptDebugServer::addListener):
        (WebCore::WorkerScriptDebugServer::removeListener):
        (WebCore::WorkerScriptDebugServer::getDebugListenerForContext):
        (WebCore::WorkerScriptDebugServer::runMessageLoopOnPause): run message loop until
        debugger command is received and execution is resumed.
        (WebCore::WorkerScriptDebugServer::quitMessageLoopOnPause):
        * bindings/v8/WorkerScriptDebugServer.h:
        * inspector/WorkerDebuggerAgent.cpp:
        (WebCore::WorkerDebuggerAgent::startListeningScriptDebugServer):
        (WebCore::WorkerDebuggerAgent::stopListeningScriptDebugServer):

2011-04-14  Jian Li  <jianli@chromium.org>

        Reviewed by Darin Fisher.

        Add webkit prefix to Blob.slice method and change its semantics to be
        like Array.slice
        https://bugs.webkit.org/show_bug.cgi?id=58496

        Renamed Blob.slice to blob.webkitSlice and made it take start and end
        parameters that're like Array.slice.

        Test: fast/files/blob-slice-test.html

        * fileapi/Blob.cpp:
        (WebCore::Blob::webkitSlice):
        * fileapi/Blob.h:
        * fileapi/Blob.idl:

2011-04-14  Andreas Kling  <kling@webkit.org>

        Reviewed by Benjamin Poulain.

        [Qt] Height of "Ahem" font differs from all other ports.
        https://bugs.webkit.org/show_bug.cgi?id=57954

        QFontMetricsF::descent() returns the actual descent minus 1,
        to account for the baseline. Add it back to get correct metrics
        for WebKit.

        QFontMetricsF::leading() may return negative values on some
        platforms (those using FreeType), this breaks WebKit's assumption
        that lineSpacing >= (ascent + descent), so we work around this in
        the same fashion as SimpleFontDataFreeType and SimpleFontDataPango.

        This is covered by thousands of layout tests.

        * platform/graphics/qt/SimpleFontDataQt.cpp:
        (WebCore::SimpleFontData::platformInit):

2011-04-14  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fixes for wxMSW and wx 2.9.1.1.

        * platform/graphics/wx/FontPlatformDataWx.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        * platform/wx/FileSystemWx.cpp:
        (WebCore::writeToFile):

2011-04-14  Anders Carlsson  <andersca@apple.com>

        Fix build.

        RuntimeApplicationChecks.h needs to be a private header so WebKit can find it.

        * WebCore.xcodeproj/project.pbxproj:

2011-04-14  Pavel Podivilov  <podivilov@chromium.org>

        Unreviewed, build fix for r83864.

        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMAgent.prototype._childNodeRemoved):

2011-04-14  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Content area highlight does not cover scrollbars
        https://bugs.webkit.org/show_bug.cgi?id=58528

        * inspector/DOMNodeHighlighter.cpp:
        (WebCore::DOMNodeHighlighter::DrawNodeHighlight):

2011-04-14  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: re-implement dom breakpoints.
        https://bugs.webkit.org/show_bug.cgi?id=57038

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/BreakpointManager.js: Removed.
        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.NativeBreakpointsSidebarPane):
        (WebInspector.NativeBreakpointsSidebarPane.prototype._reset):
        (WebInspector.XHRBreakpointsSidebarPane.prototype._restoreBreakpoints):
        * inspector/front-end/CallStackSidebarPane.js:
        (WebInspector.CallStackSidebarPane.prototype.update):
        (WebInspector.CallStackSidebarPane.prototype.setStatus):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMNode):
        (WebInspector.DOMAgent.prototype._childNodeRemoved):
        * inspector/front-end/DOMBreakpointsSidebarPane.js: Added.
        (WebInspector.DOMBreakpointsSidebarPane):
        (WebInspector.DOMBreakpointsSidebarPane.prototype.setInspectedURL):
        (WebInspector.DOMBreakpointsSidebarPane.prototype.populateNodeContextMenu.toggleBreakpoint):
        (WebInspector.DOMBreakpointsSidebarPane.prototype.populateNodeContextMenu):
        (WebInspector.DOMBreakpointsSidebarPane.prototype.createBreakpointHitStatusMessage.didPushNodeToFrontend):
        (WebInspector.DOMBreakpointsSidebarPane.prototype.createBreakpointHitStatusMessage):
        (WebInspector.DOMBreakpointsSidebarPane.prototype._doCreateBreakpointHitStatusMessage.formatters.s):
        (WebInspector.DOMBreakpointsSidebarPane.prototype._doCreateBreakpointHitStatusMessage.append):
        (WebInspector.DOMBreakpointsSidebarPane.prototype._doCreateBreakpointHitStatusMessage):
        (WebInspector.DOMBreakpointsSidebarPane.prototype.nodeRemoved):
        (WebInspector.DOMBreakpointsSidebarPane.prototype._removeBreakpointsForNode):
        (WebInspector.DOMBreakpointsSidebarPane.prototype._setBreakpoint):
        (WebInspector.DOMBreakpointsSidebarPane.prototype._removeBreakpoint):
        (WebInspector.DOMBreakpointsSidebarPane.prototype._contextMenu.removeBreakpoint):
        (WebInspector.DOMBreakpointsSidebarPane.prototype._contextMenu):
        (WebInspector.DOMBreakpointsSidebarPane.prototype._checkboxClicked):
        (WebInspector.DOMBreakpointsSidebarPane.prototype.highlightBreakpoint):
        (WebInspector.DOMBreakpointsSidebarPane.prototype.clearBreakpointHighlight):
        (WebInspector.DOMBreakpointsSidebarPane.prototype._createBreakpointId):
        (WebInspector.DOMBreakpointsSidebarPane.prototype._saveBreakpoints):
        (WebInspector.DOMBreakpointsSidebarPane.prototype.restoreBreakpoints):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel):
        (WebInspector.ElementsPanel.prototype.show):
        (WebInspector.ElementsPanel.prototype.updateModifiedNodes):
        (WebInspector.ElementsPanel.prototype.updateBreadcrumbSizes.coalesceCollapsedCrumbs):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype._populateTagContextMenu):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype.show):
        (WebInspector.ScriptsPanel.prototype._debuggerPaused.didCreateBreakpointHitStatusMessage):
        (WebInspector.ScriptsPanel.prototype._debuggerPaused.else.didGetSourceLocation):
        (WebInspector.ScriptsPanel.prototype._debuggerPaused):
        (WebInspector.ScriptsPanel.prototype._clearInterface):
        * inspector/front-end/Settings.js:
        (WebInspector.Settings):
        (WebInspector.Settings.prototype._set):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:
        (WebInspector.inspectedURLChanged):
        * inspector/front-end/utilities.js:
        ():

2011-04-14  Satish Sampath  <satish@chromium.org>

        Reviewed by Kent Tamura.

        Disable speech input for readonly and disabled input fields.
        https://bugs.webkit.org/show_bug.cgi?id=58540

        Test: fast/speech/input-readonly-and-disabled.html

        * html/shadow/TextControlInnerElements.cpp:
        (WebCore::InputFieldSpeechButtonElement::defaultEventHandler):
        (WebCore::InputFieldSpeechButtonElement::setRecognitionResult):

2011-04-14  Ilya Tikhonovsky  <loislo@chromium.org>

        Unreviewed. Rollout r83849 and r83857.

        * inspector/Inspector.json:
        * inspector/InspectorDatabaseAgent.cpp:
        (WebCore::InspectorDatabaseAgent::didOpenDatabase):
        (WebCore::InspectorDatabaseAgent::InspectorDatabaseAgent):
        (WebCore::InspectorDatabaseAgent::setFrontend):
        (WebCore::InspectorDatabaseAgent::clearFrontend):
        (WebCore::InspectorDatabaseAgent::getDatabaseTableNames):
        (WebCore::InspectorDatabaseAgent::executeSQL):
        * inspector/InspectorDatabaseAgent.h:
        * inspector/front-end/inspector.js:

2011-04-14  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, rolling out r83847.
        http://trac.webkit.org/changeset/83847
        https://bugs.webkit.org/show_bug.cgi?id=58477

        Chromium media controls do use button borders, so this change
        is incorrect.

        * css/mediaControls.css:
        (audio::-webkit-media-controls-mute-button, video::-webkit-media-controls-mute-button):
        (audio::-webkit-media-controls-play-button, video::-webkit-media-controls-play-button):
        (audio::-webkit-media-controls-timeline, video::-webkit-media-controls-timeline):
        (audio::-webkit-media-controls-volume-slider, video::-webkit-media-controls-volume-slider):
        (audio::-webkit-media-controls-seek-back-button, video::-webkit-media-controls-seek-back-button):
        (audio::-webkit-media-controls-seek-forward-button, video::-webkit-media-controls-seek-forward-button):
        (audio::-webkit-media-controls-fullscreen-button, video::-webkit-media-controls-fullscreen-button):
        (audio::-webkit-media-controls-rewind-button, video::-webkit-media-controls-rewind-button):
        (audio::-webkit-media-controls-return-to-realtime-button, video::-webkit-media-controls-return-to-realtime-button):
        (audio::-webkit-media-controls-toggle-closed-captions-button, video::-webkit-media-controls-toggle-closed-captions-button):
        (audio::-webkit-media-controls-volume-slider-mute-button, video::-webkit-media-controls-volume-slider-mute-button):

2011-04-14  Andrew Wason  <rectalogic@rectalogic.com>

        Reviewed by Andreas Kling.

        Fix GraphicsContext3DQt.cpp compilation warnings treated as errors
        https://bugs.webkit.org/show_bug.cgi?id=58478

        No new tests.

        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3DInternal::getProcAddress):
         Do not use deprecated QString constructor to avoid warning.
        (WebCore::GraphicsContext3D::reshape):
         Use parenthesis to avoid warning.

2011-04-14  Andrey Kosyakov  <caseq@chromium.org>

        Unreviewed. Removed ScrollableArea::paintScrollCorner() added in r83820,
        as it breaks chromium clang build (shadowed by RenderLayer::paintScrollCorner()
        with a different signature)

        * platform/ScrollableArea.h:

2011-04-14  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [Chromium] Ready to move detailed heap snapshots storage and processing into workers.
        https://bugs.webkit.org/show_bug.cgi?id=58534

        * inspector/front-end/DetailedHeapshotGridNodes.js:
        (WebInspector.HeapSnapshotGenericObjectNode.prototype.get _countPercent):
        (WebInspector.HeapSnapshotDiffNode):
        (WebInspector.HeapSnapshotDiffNode.prototype.calculateDiff.diffCalculated):
        (WebInspector.HeapSnapshotDiffNode.prototype.calculateDiff):
        (WebInspector.HeapSnapshotDiffNode.prototype.calculateDiff.baseIdsReceived):
        (WebInspector.HeapSnapshotDiffNode.prototype.calculateDiff.idsReceived):
        (WebInspector.HeapSnapshotDiffNode.prototype._createNodesProvider.createProvider):
        (WebInspector.HeapSnapshotDiffNode.prototype._createNodesProvider):
        (WebInspector.HeapSnapshotDiffNode.prototype.get data):
        * inspector/front-end/DetailedHeapshotView.js:
        (WebInspector.HeapSnapshotDiffDataGrid.prototype.setBaseDataSource):
        (WebInspector.HeapSnapshotDiffDataGrid.prototype.populateChildren.baseAggregatesReceived.aggregatesReceived.addNodeIfNonZeroDiff):
        (WebInspector.HeapSnapshotDiffDataGrid.prototype.populateChildren.baseAggregatesReceived.aggregatesReceived):
        (WebInspector.HeapSnapshotDiffDataGrid.prototype.populateChildren):
        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshot):
        (WebInspector.HeapSnapshot.prototype.dispose):
        (WebInspector.HeapSnapshot.prototype.nodeFieldValuesByIndex):
        (WebInspector.HeapSnapshot.prototype._numbersComparator):
        (WebInspector.HeapSnapshot.prototype.baseSnapshotHasNode):
        (WebInspector.HeapSnapshot.prototype.updateBaseNodeIds):
        (WebInspector.HeapSnapshotsDiff):
        (WebInspector.HeapSnapshotsDiff.prototype.set baseIds):
        (WebInspector.HeapSnapshotsDiff.prototype.set baseSelfSizes):
        (WebInspector.HeapSnapshotsDiff.prototype.calculate):
        * inspector/front-end/HeapSnapshotProxy.js:
        (WebInspector.HeapSnapshotProxy):
        (WebInspector.HeapSnapshotProxy.prototype.createDiff):
        (WebInspector.HeapSnapshotProxy.prototype.createEdgesProvider):
        (WebInspector.HeapSnapshotProxy.prototype.createNodesProvider):
        (WebInspector.HeapSnapshotProxy.prototype.dispose):
        (WebInspector.HeapSnapshotProxy.prototype.nodeFieldValuesByIndex):
        (WebInspector.HeapSnapshotProxy.prototype.pushBaseIds):
        (WebInspector.HeapSnapshotsDiffProxy):
        (WebInspector.HeapSnapshotsDiffProxy.prototype.calculate):
        (WebInspector.HeapSnapshotsDiffProxy.prototype.pushBaseIds):
        (WebInspector.HeapSnapshotsDiffProxy.prototype.pushBaseSelfSizes):

2011-04-14  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: The list of Database entries is empty if the page opens a database just before Web Inspector.
        https://bugs.webkit.org/show_bug.cgi?id=57833

        * inspector/Inspector.json:
        * inspector/InspectorDatabaseAgent.cpp:
        (WebCore::InspectorDatabaseAgent::didOpenDatabase):
        (WebCore::InspectorDatabaseAgent::InspectorDatabaseAgent):
        (WebCore::InspectorDatabaseAgent::setFrontend):
        (WebCore::InspectorDatabaseAgent::enable):
        (WebCore::InspectorDatabaseAgent::disable):
        (WebCore::InspectorDatabaseAgent::getDatabaseTableNames):
        (WebCore::InspectorDatabaseAgent::executeSQL):
        * inspector/InspectorDatabaseAgent.h:
        * inspector/front-end/inspector.js:

2011-04-14  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: [Chromium] "Remove Breakpoint" menu item is absent in the DOM breakpoints sidebar pane
        https://bugs.webkit.org/show_bug.cgi?id=58530

        * inspector/front-end/ElementsPanel.js:

2011-04-14  Alexis Menard  <alexis.menard@openbossa.org>

        Reviewed by Dimitri Glazkov.

        REGRESSION(r83397) [Qt] When clicking on the media elements they
        grow 2 pixels.
        https://bugs.webkit.org/show_bug.cgi?id=58477

        Since r83397 the media controls elements are actual DOM elements.
        Therefore the global style-sheet applies to them. html.css defines
        input[type="button"]:active to be border-style: inset which means
        that when the buttons are active they grow by their border size.

        * css/mediaControls.css:
        (audio::-webkit-media-controls-mute-button, video::-webkit-media-controls-mute-button):
        (audio::-webkit-media-controls-play-button, video::-webkit-media-controls-play-button):
        (audio::-webkit-media-controls-timeline, video::-webkit-media-controls-timeline):
        (audio::-webkit-media-controls-volume-slider, video::-webkit-media-controls-volume-slider):
        (audio::-webkit-media-controls-seek-back-button, video::-webkit-media-controls-seek-back-button):
        (audio::-webkit-media-controls-seek-forward-button, video::-webkit-media-controls-seek-forward-button):
        (audio::-webkit-media-controls-fullscreen-button, video::-webkit-media-controls-fullscreen-button):
        (audio::-webkit-media-controls-rewind-button, video::-webkit-media-controls-rewind-button):
        (audio::-webkit-media-controls-return-to-realtime-button, video::-webkit-media-controls-return-to-realtime-button):
        (audio::-webkit-media-controls-toggle-closed-captions-button, video::-webkit-media-controls-toggle-closed-captions-button):
        (audio::-webkit-media-controls-volume-slider-mute-button, video::-webkit-media-controls-volume-slider-mute-button):

2011-04-14  Diego Gonzalez  <diegohcg@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Improve disable style for input elements in mobile theme
        https://bugs.webkit.org/show_bug.cgi?id=58480

        * platform/qt/QtMobileWebStyle.cpp:
        (QtMobileWebStyle::drawControl):
        (QtMobileWebStyle::drawPrimitive):
        (QtMobileWebStyle::drawComplexControl):

2011-04-14  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: restore previous selection in Resources panel upon front-end reopen.
        https://bugs.webkit.org/show_bug.cgi?id=58533

        * inspector/front-end/ResourceTreeModel.js:
        (WebInspector.ResourceTreeModel.prototype._processCachedResources):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype._initDefaultSelection):
        (WebInspector.ResourcesPanel.prototype._populateResourceTree):
        (WebInspector.ResourcesPanel.prototype._cachedResourcesLoaded):
        * inspector/front-end/inspector.css:
        (#close-button-left, #close-button-right):

2011-04-14  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: implement incremental CSS free flow editing.
        https://bugs.webkit.org/show_bug.cgi?id=58529

        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleSheet.prototype.setText):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource.prototype.isResourceRevision):
        (WebInspector.Resource.prototype.setContent):
        * inspector/front-end/ResourceView.js:
        (WebInspector.CSSSourceFrame.prototype.isContentEditable):
        (WebInspector.CSSSourceFrame.prototype.editContent):
        (WebInspector.CSSSourceFrame.prototype.endEditing.commitIncrementalEdit):
        (WebInspector.CSSSourceFrame.prototype.endEditing):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.commitEditing):
        (WebInspector.SourceFrame.prototype.editContent):

2011-04-14  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector:Duplicated display of storage db when running Web SQL from an iframe.
        https://bugs.webkit.org/show_bug.cgi?id=57830

        There was created a new InspectorDatabaseResource entry for every didOpenDatabase event.
        Moreover there is new WebCore::Database for each didOpenDatabase event.
        I decided to change the old instance of the Database to a new one if they both use the same file.

        * inspector/InspectorDatabaseAgent.cpp:
        (WebCore::InspectorDatabaseAgent::didOpenDatabase):
        (WebCore::InspectorDatabaseAgent::findByFileName):
        * inspector/InspectorDatabaseAgent.h:
        * inspector/InspectorDatabaseResource.h:
        (WebCore::InspectorDatabaseResource::setDatabase):

2011-04-14  Zoltan Herczeg  <zherczeg@inf.u-szeged.hu>

        Reviewed by Dirk Schulze.

        svg/W3C-SVG-1.1-SE/svgdom-over-01-f.svg crashes in Debug build
        https://bugs.webkit.org/show_bug.cgi?id=58525

        A renderer is created even for those filter primitives
        which parent is not a filter. A rendererIsNeeded() is
        added to SVGFilterPrimitiveStandardAttributes.

        Test: svg/W3C-SVG-1.1-SE/svgdom-over-01-f.svg

        * svg/SVGFilterPrimitiveStandardAttributes.cpp:
        (WebCore::SVGFilterPrimitiveStandardAttributes::rendererIsNeeded):
        * svg/SVGFilterPrimitiveStandardAttributes.h:

2011-04-14  Alexis Menard  <alexis.menard@openbossa.org>

        Reviewed by Andreas Kling.

        REGRESSION(r83397) [Qt] When the video is loading and the poster is shown
        all the controls are not visible except the play button.
        https://bugs.webkit.org/show_bug.cgi?id=58484

        r83397 introduces a new API hasOwnDisabledStateHandlingFor to handle when
        the controls should be disabled. Qt port paints its own controls, we don't want
        the default implementation to handle the hidden/disable state for us.

        Existing tests covers the visibility of the controls.

        * platform/qt/RenderThemeQt.h:
        (WebCore::RenderThemeQt::hasOwnDisabledStateHandlingFor):

2011-04-14  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Disabled form controls don't actually look disabled.
        https://bugs.webkit.org/show_bug.cgi?id=58490

        Unsetting QStyle::State_Enabled is not enough to get the "disabled" appearance
        when painting controls. We must also set the QStyleOption's palette's current
        color group.

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

2011-04-14  Nancy Piedra  <nancy.piedra@nokia.com>

        Reviewed by Benjamin Poulain.

        [Qt] MediaPlayerPrivateQt::supportsType does not parse codec parameter
        https://bugs.webkit.org/show_bug.cgi?id=58188

        The codec parameter in MediaPlayerPrivateQt::supportsType was not parsed into
        a QStringList. This change parses and trims the list.

        An additional test was added to video-can-play-type.html to test parsing of codec parameter.

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

2011-04-14  Zoltan Herczeg  <zherczeg@webkit.org>

        Reviewed by Nikolas Zimmermann.

        Optimizing lightning filter to ARM-NEON SIMD instruction set
        https://bugs.webkit.org/show_bug.cgi?id=54456

        NEON is the SIMD instruction set for ARM. This instruction set
        allows to speed-up the lighting filter by 4 times on ARM
        (on WebCore/manual-tests/svg-filter-animation.svg).

        * WebCore.pri:
        * WebCore.pro:
        * platform/graphics/filters/FELighting.cpp:
        (WebCore::FELighting::drawLighting):
        (WebCore::getPowerCoefficients):
        (WebCore::FELighting::drawInteriorPixels):
        * platform/graphics/filters/FELighting.h:
        * platform/graphics/filters/arm/FELightingNEON.cpp: Added.
        (__attribute__):
        * platform/graphics/filters/arm/FELightingNEON.h: Added.

2011-04-14  Jarkko Sakkinen  <jarkko.j.sakkinen@gmail.com>

        Reviewed by Benjamin Poulain.

        [Qt] GraphicsContext3D internal buffers are not freed
        https://bugs.webkit.org/show_bug.cgi?id=57530

        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3DInternal::~GraphicsContext3DInternal):

2011-04-14  Andy Estes  <aestes@apple.com>

        Reviewed by Maciej Stachowiak.

        REGRESSION (r75555): Safari RSS sidebar jiggles when scrolling
        https://bugs.webkit.org/show_bug.cgi?id=52988
        
        Safari RSS relies on synchronous dispatch of ScrollEvent to update the
        position of its sidebar during scrolling without producing a jiggling
        effect. Due to r75555, this event is no longer dispatched synchronously
        which results in stale repaints before the onscroll handler gets a
        chance to update the position of the sidebar.
        
        Since it is impractical to resolve this issue in Safari RSS itself, add
        a quirk that restores synchronous ScrollEvent dispatch for Safari RSS.
        
        No tests. This is an app-specific change that doesn't affect web
        content.

        * Android.mk: Add platform/RuntimeApplicationChecks.[cpp|h]
        * CMakeLists.txt: Ditto.
        * GNUmakefile.list.am: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * dom/EventQueue.cpp:
        (WebCore::shouldDispatchScrollEventSynchronously): Send ScrollEvent
        synchronously if the embedding application is Safari and the document's
        URL scheme is "feed" or "feeds".
        (WebCore::EventQueue::enqueueOrDispatchScrollEvent): Dispatch
        ScrollEvent synchronously if shouldDispatchScrollEventSynchronously()
        returns true.
        * dom/EventQueue.h:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::sendScrollEvent): Call enqueueOrDispatchScrollEvent().
        * platform/RuntimeApplicationChecks.cpp: Added.
        (WebCore::mainBundleIsEqualTo): Add a helper routine for CF platforms
        that checks if the main bundle's identifier is equal to a given string.
        This function returns false for non-CF platforms.
        (WebCore::applicationIsSafari): Call mainBundleIsEqualTo().
        (WebCore::applicationIsAppleMail): Ditto.
        (WebCore::applicationIsMicrosoftMessenger): Ditto.
        (WebCore::applicationIsAdobeInstaller): Ditto.
        (WebCore::applicationIsAOLInstantMessenger): Ditto.
        (WebCore::applicationIsMicrosoftMyDay): Ditto.
        (WebCore::applicationIsMicrosoftOutlook): Ditto.
        * platform/mac/RuntimeApplicationChecks.mm: Removed. Functions moved to
        RuntimeApplicationChecks.cpp.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollTo): Call enqueueOrDispatchScrollEvent().
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::scrollTo): Call enqueueOrDispatchScrollEvent().

2011-04-14  John Bates  <jbates@google.com>

        Reviewed by Kenneth Russell.

        Fix bug with adding wrong context to LayerRendererChromium and get rid of RefPtr loop.
        https://bugs.webkit.org/show_bug.cgi?id=58383

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::addChildContext):
        (WebCore::LayerRendererChromium::removeChildContext):
        * platform/graphics/chromium/LayerRendererChromium.h:

2011-04-14  Renata Hodovan  <reni@webkit.org>

        Reviewed by Nikolas Zimmermann.

        CSS related SVG*Element changes doesn't require relayout
        https://bugs.webkit.org/show_bug.cgi?id=56906

        The changes of some CSS related SVGFilter properties e.g. lighting_color, flood_color, flood_opacity
        need only repaint. To avoid the default invalidation of filters in SVGResourceCache::clientStyleChange()
        we need an early return. So RenderSVGResourceFilterPrimitive::styleDidChange() can handle these properties
        via RenderSVGResourceFilter::primitiveAttributeChanged() the same way like we do it for the other SVGAttributes.

        Tests: svg/dynamic-updates/SVGFEDiffuseLightingElement-inherit-lighting-color-css-prop.html
               svg/dynamic-updates/SVGFEFloodElement-inherit-flood-color.html
               svg/dynamic-updates/SVGFESpecularLightingElement-inherit-lighting-color-css-prop.html
               svg/dynamic-updates/SVGFESpecularLightingElement-lighting-color-css-prop.html

        * platform/graphics/filters/FEFlood.cpp:
        (WebCore::FEFlood::setFloodColor):
        (WebCore::FEFlood::setFloodOpacity):
        * platform/graphics/filters/FEFlood.h:
        * platform/graphics/filters/FESpecularLighting.cpp:
        (WebCore::FESpecularLighting::setLightingColor):
        * platform/graphics/filters/FESpecularLighting.h:
        * rendering/svg/RenderSVGResourceFilterPrimitive.cpp:
        (WebCore::RenderSVGResourceFilterPrimitive::styleDidChange):
        * rendering/svg/RenderSVGResourceFilterPrimitive.h:
        * rendering/svg/SVGResourcesCache.cpp:
        (WebCore::SVGResourcesCache::clientStyleChanged):
        * svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::setFilterEffectAttribute):
        * svg/SVGFEFloodElement.cpp:
        (WebCore::SVGFEFloodElement::setFilterEffectAttribute):
        * svg/SVGFEFloodElement.h:
        * svg/SVGFESpecularLightingElement.cpp:
        (WebCore::SVGFESpecularLightingElement::setFilterEffectAttribute):

2011-04-13  James Robinson  <jamesr@chromium.org>

        Reviewed by Simon Fraser.

        Allow setting composited backing stores for scrollbars and scroll corners
        https://bugs.webkit.org/show_bug.cgi?id=57202

        This teaches ScrollableArea to manage GraphicsLayer backings for the two scrollbars and
        scroll corner. ScrollableArea can position the layers and route invalidation and paint calls to
        the correct place but depends on subclasses to manage the lifetime of the GraphicsLayers and
        place them into the correct place in the hierarchy.

        FrameView and RenderLayerCompositor updated to provide layers for frames with overflow controls.
        that need them.  The overflow control layers are siblings of the frame's clip layer.

        RenderLayer and RenderLayerBacking updated to provide overflow control layers for layers that
        need them.  Currently, layers are only created for overflow controls on layers that are already composited
        for other reasons and not necessarily for every RenderLayer with overflow.  Overflow control layers are siblings
        of the RenderLayerBacking's clipping layer if it exists, otherwise they are siblings of the layer's normal
        children.

        Tested by a number of compositing/ tests that have scrollbars and by these new tests:
               compositing/iframes/repaint-after-losing-scrollbars.html
               compositing/overflow/clip-content-under-overflow-controls.html
               compositing/overflow/content-gains-scrollbars.html
               compositing/overflow/content-loses-scrollbars.html
               compositing/overflow/overflow-scrollbar-layers.html
               compositing/overflow/repaint-after-losing-scrollbars.html

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::SelectorChecker::checkScrollbarPseudoClass):
        * page/FrameView.cpp:
        (WebCore::FrameView::layerForHorizontalScrollbar):
        (WebCore::FrameView::layerForVerticalScrollbar):
        (WebCore::FrameView::layerForScrollCorner):
        (WebCore::FrameView::syncCompositingStateForThisFrame):
        (WebCore::FrameView::contentsResized):
        (WebCore::FrameView::updateScrollCorner):
        * page/FrameView.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::wheelEvent):
        * platform/ScrollView.h:
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::invalidateScrollbar):
        (WebCore::ScrollableArea::invalidateScrollCorner):
        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::paintScrollCorner):
        (WebCore::ScrollableArea::layerForHorizontalScrollbar):
        (WebCore::ScrollableArea::layerForVerticalScrollbar):
        (WebCore::ScrollableArea::layerForScrollCorner):
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::invalidateRect):
        * platform/Scrollbar.h:
        * platform/ScrollbarThemeComposite.cpp:
        (WebCore::ScrollbarThemeComposite::paint):
        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::paintContentsIfDirty):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::create):
        (WebCore::LayerRendererChromium::LayerRendererChromium):
        (WebCore::LayerRendererChromium::invalidateRootLayerRect):
        (WebCore::LayerRendererChromium::drawRootLayer):
        (WebCore::LayerRendererChromium::setViewport):
        (WebCore::LayerRendererChromium::updateAndDrawLayers):
        (WebCore::LayerRendererChromium::updateLayers):
        (WebCore::LayerRendererChromium::setRootLayer):
        (WebCore::LayerRendererChromium::cleanupSharedObjects):
        * platform/graphics/chromium/LayerRendererChromium.h:
        * platform/mac/ScrollAnimatorMac.mm:
        (-[ScrollbarPartAnimation setCurrentProgress:]):
        * platform/win/PopupMenuWin.h:
        (WebCore::PopupMenuWin::invalidateScrollCornerRect):
        (WebCore::PopupMenuWin::isScrollCornerVisible):
        (WebCore::PopupMenuWin::scrollCornerRect):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollCornerRect):
        (WebCore::RenderLayer::scrollCornerAndResizerRect):
        (WebCore::RenderLayer::isScrollCornerVisible):
        (WebCore::RenderLayer::invalidateScrollbarRect):
        (WebCore::RenderLayer::invalidateScrollCornerRect):
        (WebCore::RenderLayer::positionOverflowControls):
        (WebCore::RenderLayer::paintOverflowControls):
        (WebCore::RenderLayer::paintScrollCorner):
        (WebCore::RenderLayer::layerForHorizontalScrollbar):
        (WebCore::RenderLayer::layerForVerticalScrollbar):
        (WebCore::RenderLayer::layerForScrollCorner):
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::horizontalScrollbar):
        (WebCore::RenderLayer::verticalScrollbar):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::~RenderLayerBacking):
        (WebCore::RenderLayerBacking::updateAfterWidgetResize):
        (WebCore::RenderLayerBacking::updateGraphicsLayerConfiguration):
        (WebCore::RenderLayerBacking::updateInternalHierarchy):
        (WebCore::RenderLayerBacking::updateClippingLayers):
        (WebCore::RenderLayerBacking::requiresHorizontalScrollbarLayer):
        (WebCore::RenderLayerBacking::requiresVerticalScrollbarLayer):
        (WebCore::RenderLayerBacking::requiresScrollCornerLayer):
        (WebCore::RenderLayerBacking::updateOverflowControlsLayers):
        (WebCore::paintScrollbar):
        (WebCore::RenderLayerBacking::paintContents):
        * rendering/RenderLayerBacking.h:
        (WebCore::RenderLayerBacking::layerForHorizontalScrollbar):
        (WebCore::RenderLayerBacking::layerForVerticalScrollbar):
        (WebCore::RenderLayerBacking::layerForScrollCorner):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateCompositingLayers):
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree):
        (WebCore::RenderLayerCompositor::frameViewDidChangeLocation):
        (WebCore::RenderLayerCompositor::frameViewDidChangeSize):
        (WebCore::RenderLayerCompositor::rootPlatformLayer):
        (WebCore::RenderLayerCompositor::updateRootLayerPosition):
        (WebCore::paintScrollbar):
        (WebCore::RenderLayerCompositor::paintContents):
        (WebCore::shouldCompositeOverflowControls):
        (WebCore::RenderLayerCompositor::requiresHorizontalScrollbarLayer):
        (WebCore::RenderLayerCompositor::requiresVerticalScrollbarLayer):
        (WebCore::RenderLayerCompositor::requiresScrollCornerLayer):
        (WebCore::RenderLayerCompositor::updateOverflowControlsLayers):
        (WebCore::RenderLayerCompositor::ensureRootPlatformLayer):
        (WebCore::RenderLayerCompositor::destroyRootPlatformLayer):
        (WebCore::RenderLayerCompositor::detachRootPlatformLayer):
        * rendering/RenderLayerCompositor.h:
        (WebCore::RenderLayerCompositor::layerForHorizontalScrollbar):
        (WebCore::RenderLayerCompositor::layerForVerticalScrollbar):
        (WebCore::RenderLayerCompositor::layerForScrollCorner):
        * rendering/RenderListBox.h:
        (WebCore::RenderListBox::isScrollCornerVisible):
        (WebCore::RenderListBox::scrollCornerRect):
        (WebCore::RenderListBox::invalidateScrollCornerRect):

2011-04-13  Cary Clark  <caryclark@chromium.org>
 
         Reviewed by Eric Seidel.
          
         [Chromium] allow concurrent Skia and CG datatypes
         https://bugs.webkit.org/show_bug.cgi?id=57848

         The Chromium port is experimenting with running Skia as the WebKit rendering engine, and CoreGraphics
         as the UI rendering engine. This permits Chromium to unify its graphics story while leveraging OS X to
         draw elements like scrollbars and buttons.
 
         Restructure the common graphics units, points, and rectangles, to convert to Sk-types and CG-types at
         the same time. This requires only adding to the existing preprocessor commands, and will have no effect
         on any existing platform.
         
         Eventually, WTF_USE_SKIA_ON_MAC_CHROME will be defined to enable this, but for now, there's no
         functional change.
 
         No new tests as this provides no new functionality.
 
         * platform/graphics/FloatPoint.h: Add USE(SKIA_ON_MAC_CHROME) to make CG type and operators visible
         to a Skia-based Chrome Mac build.
         * platform/graphics/FloatRect.h: Ditto.
         * platform/graphics/FloatSize.h: Ditto.
         * platform/graphics/IntPoint.h: Ditto.
         * platform/graphics/IntRect.h: Ditto.
         * platform/graphics/IntSize.h: Ditto.
         * platform/graphics/cg/FloatPointCG.cpp: Ditto.
         * platform/graphics/cg/FloatRectCG.cpp: Ditto.
         * platform/graphics/cg/FloatSizeCG.cpp: Ditto.
         * platform/graphics/cg/IntPointCG.cpp: Ditto.
         * platform/graphics/cg/IntRectCG.cpp: Ditto.
         * platform/graphics/cg/IntSizeCG.cpp: Ditto.
 
2011-04-13  Roland Steiner  <rolandsteiner@chromium.org>

        Reviewed by Dimitri Glazkov.

        Bug 58460 - childTypeAllowed() should be const
        https://bugs.webkit.org/show_bug.cgi?id=58460

        Made childTypeAllowed const.

        No new tests. (minor refactoring).

        * dom/Attr.cpp:
        (WebCore::Attr::childTypeAllowed):
        * dom/Attr.h:
        * dom/CDATASection.cpp:
        (WebCore::CDATASection::childTypeAllowed):
        * dom/CDATASection.h:
        * dom/Comment.cpp:
        (WebCore::Comment::childTypeAllowed):
        * dom/Comment.h:
        * dom/Document.cpp:
        (WebCore::Document::childTypeAllowed):
        * dom/Document.h:
        * dom/DocumentFragment.cpp:
        (WebCore::DocumentFragment::childTypeAllowed):
        * dom/DocumentFragment.h:
        * dom/Element.cpp:
        (WebCore::Element::childTypeAllowed):
        * dom/Element.h:
        * dom/Node.h:
        (WebCore::Node::childTypeAllowed):
        * dom/Notation.cpp:
        (WebCore::Notation::childTypeAllowed):
        * dom/Notation.h:
        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::childTypeAllowed):
        * dom/ProcessingInstruction.h:
        * dom/Text.cpp:
        (WebCore::Text::childTypeAllowed):
        * dom/Text.h:

2011-04-13  Jon Lee  <jonlee@apple.com>

        Reviewed by Maciej Stachowiak.

        REGRESSION(r81880): Paste menu is disabled for many edit fields (yahoo and google search, yahoo mail msg, forms, etc)
        https://bugs.webkit.org/show_bug.cgi?id=58284
        <rdar://problem/9246149>

        * WebCore.exp.in: Exporting EditingBehavior.h for use in WebKit2
        * editing/EditingBehavior.h:
        (WebCore::EditingBehavior::shouldClearSelectionWhenLosingWebPageFocus): moving the platform-specific code out of an #ifdef and into this class for run-time instead of compile-time checking

2011-04-13  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Eric Seidel.

        constructLine should take bidiRuns as a parameter
        https://bugs.webkit.org/show_bug.cgi?id=58458

        Pass bidiRuns to constructLine and move reachedEndOfTextRenderer so that it is
        declared before constructLine.

        No new tests as this is refactoring only.

        * rendering/RenderBlock.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::reachedEndOfTextRenderer):
        (WebCore::RenderBlock::constructLine):
        (WebCore::RenderBlock::layoutInlineChildren):

2011-04-13  Cary Clark  <caryclark@google.com>

        Reviewed by Eric Seidel.

        Allow CG Font support in Chrome Darwin build using Skia
        https://bugs.webkit.org/show_bug.cgi?id=58321
        
        This allows Chrome to use Skia to do WebKit rendering, while
        using CoreGraphics for glyph creation and computing font metrics.
        It relies on an undefined platform token, WTF_USE_SKIA_ON_MAC_CHROME.

        No new tests needed, no functionality change.

        * loader/cache/CachedFont.cpp: Make CGFontRef functions and
        CG-specific font code available to Chrome builds on Darwin using Skia.
        * platform/graphics/FontPlatformData.h: Ditto.
        (WebCore::FontPlatformData::hash): Ditto.
        * platform/graphics/GlyphBuffer.h: Ditto.
        (WebCore::GlyphBuffer::advanceAt): Ditto.
        (WebCore::GlyphBuffer::add): Ditto.
        (WebCore::GlyphBuffer::expandLastAdvance): Ditto.
        * platform/graphics/SimpleFontData.h: Ditto.

2011-04-13  Alexis Menard  <alexis.menard@openbossa.org>

        Reviewed by Dimitri Glazkov.

        The timeline of the video controls is unusable if the multimedia backend returns a
        infinite duration.
        https://bugs.webkit.org/show_bug.cgi?id=58452

        In case the underlaying media element backend returns crazy values, e.g.
        an infinite duration for the video we need to bail out and hide the timeline
        rather than in a broken state where you can't use it. The previous code was just
        checking if the duration was NaN.

        We can't control from JS what the backend will return as a duration for the video
        so we can't make an test for it.

        * html/shadow/MediaControlRootElement.cpp:
        (WebCore::MediaControlRootElement::reset):

2011-04-13  Abhishek Arya  <inferno@chromium.org>

        Reviewed by James Robinson.

        Draw outline for render widgets.
        https://bugs.webkit.org/show_bug.cgi?id=57439

        Test: fast/frames/iframe-outline.html

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

2011-04-13  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        Change the representation of ShadowRoot nodes in render tree dumps
        https://bugs.webkit.org/show_bug.cgi?id=58432

        Show "#shadow-root" for ShadorRoot nodes instead of "#document-fragment"
        in DRT results.

        No new tests. This change doesn't affect existing tests yet.

        * dom/DocumentFragment.h:
          Make nodeName() protected in order that ShdowRoot can override it.
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::nodeName): Returns "#shadow-root".
        * dom/ShadowRoot.h: Declare nodeName().
        * rendering/RenderTreeAsText.cpp:
        (WebCore::nodePosition): Don't show "child N " if the node is a shadow boundary.
          We don't use isShadowRoot() here because the legacy shadow root nodes
          return true for isShadowRoot() and we don't want to update existing
          test results.

2011-04-13  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        Merge LineOffsets and LineWidth
        https://bugs.webkit.org/show_bug.cgi?id=58411

        Merged lineOffsets into LineWidth.

        After this patch, available width is updated in positionNewFloatOnLine via updateAvailableWidth and
        shrinkAvailableWidthForNewFloatIfNeeded instead of findNextBreak. This is correct because
        - LineOffsets::update and LineOffsets::shrinkWidthForNewFloatIfNeeded were only called in positionNewFloatOnLine
          besides LineOffsets' constructor
        - positionNewFloatOnLine was only called in skipLeadingWhitespace and findNextLineBreak
        - findNextLineBreak updates the available width whenever it calls skipLeadingWhitespace or positionNewFloatOnLine

        * rendering/RenderBlock.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::skipLeadingWhitespace): Takes LineWidth instead of LineOffset
        (WebCore::LineWidth::LineWidth): Takes RenderBlock* and boolean isFirstLine; call updateAvailableWidth
        because the initial available width was used to be computed from lineOffsets.width().
        (WebCore::LineWidth::computeAvailableWidthFromLeftAndRight): Added.
        (WebCore::LineWidth::updateAvailableWidth): Renamed from LineOffsets::update; this function now updates
        m_availableWidth via computeAvailableWidthFromLeftAndRight as well as m_left and m_right.
        (WebCore::LineWidth::shrinkAvailableWidthForNewFloatIfNeeded): Renamed from
        LineOffsets::shrinkWidthForNewFloatIfNeeded. This function also calls computeAvailableWidthFromLeftAndRight.
        (WebCore::LineWidth::applyOverhang): No longer takes arguments since both arguments were member variables
        of LineOffsets.
        (WebCore::LineWidth::fitBelowFloats): No longer takes isFirstLine.
        (WebCore::RenderBlock::findNextLineBreak): Uses LineWidth.
        (WebCore::RenderBlock::positionNewFloatOnLine): Takes a reference to LineWidth.

2011-04-13  Ryuan Choi  <ryuan.choi@samsung.com>

        Reviewed by Kenneth Rohde Christiansen.

        [CMAKE] Separate DerivedSources.
        https://bugs.webkit.org/show_bug.cgi?id=58427

        No new tests since these are refactoring only.

        * CMakeLists.txt:
        * UseJSC.cmake:

2011-04-13  Noel Gordon  <noel.gordon@gmail.com>

        Reviewed by Kenneth Russell.

        [chromium] Fix canvas.toDataURL mimeType assertion
        https://bugs.webkit.org/show_bug.cgi?id=58425

        Following r81213, reassert expected toDataURL() mimeType, remove an unused variable.

        No new tests. Covered by existing tests.

        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::ImageToDataURL):
        (WebCore::ImageBuffer::toDataURL):

2011-04-12  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Andreas Kling.

        [Qt] QNetworkReplyHandler refactoring: remove nested event loop.
        https://bugs.webkit.org/show_bug.cgi?id=58375

        As QNAM now makes actual synchronous loads there is no need for a nested event loop
        in ResourceHandleQt.

        Moving the call for QNetworkReplyWrapper::synchronousLoad from
        ResourceHandle::loadResourceSynchronously to QNetworkReplyHandler::start for the
        redirections to work in synchronous requests.

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::start):
        * platform/network/qt/QNetworkReplyHandler.h:
        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::WebCoreSynchronousLoader::WebCoreSynchronousLoader):
        (WebCore::WebCoreSynchronousLoader::didReceiveResponse):
        (WebCore::WebCoreSynchronousLoader::didReceiveData):
        (WebCore::WebCoreSynchronousLoader::didFinishLoading):
        (WebCore::WebCoreSynchronousLoader::didFail):
        (WebCore::ResourceHandle::loadResourceSynchronously):

2011-04-13  Roland Steiner  <rolandsteiner@chromium.org>

        Reviewed by David Hyatt.

        Bug 55930 - Incorrect handling of 'display:' property within nested <ruby> tags
        https://bugs.webkit.org/show_bug.cgi?id=55930

        Non-inline :before/:after generated content is now wrapped with an anonymous inline block.

        Also, added an additional check in RenderObjectChildList::updateBeforeAfterContent()
        to verify that the created render object is legal under the parent.

        Tests: fast/ruby/after-block-doesnt-crash.html
               fast/ruby/after-table-doesnt-crash.html
               fast/ruby/before-block-doesnt-crash.html
               fast/ruby/before-table-doesnt-crash.html

        * rendering/RenderObjectChildList.cpp:
        (WebCore::RenderObjectChildList::updateBeforeAfterContent):
        * rendering/RenderRuby.cpp:
        (WebCore::isAnonymousRubyInlineBlock):
        (WebCore::rubyBeforeBlock):
        (WebCore::rubyAfterBlock):
        (WebCore::createAnonymousRubyInlineBlock):
        (WebCore::lastRubyRun):
        (WebCore::RenderRubyAsInline::addChild):
        (WebCore::RenderRubyAsInline::removeChild):
        (WebCore::RenderRubyAsBlock::addChild):
        (WebCore::RenderRubyAsBlock::removeChild):
        * rendering/RenderRuby.h:

2011-04-13  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Simon Fraser.

        [CG] Refactor get/putImageData routines from ImageBufferCG into a (new) ImageBufferDataCG.cpp
        https://bugs.webkit.org/show_bug.cgi?id=58084

        No new tests. Does not affect outward behavior.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/ImageBuffer.h:
        * platform/graphics/ImageBufferData.h: Added.
        * platform/graphics/cairo/ImageBufferData.h: Removed.
        * platform/graphics/cairo/ImageBufferDataCairo.h: Added.
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::getUnmultipliedImageData):
        (WebCore::ImageBuffer::getPremultipliedImageData):
        (WebCore::ImageBuffer::putUnmultipliedImageData):
        (WebCore::ImageBuffer::putPremultipliedImageData):
        * platform/graphics/cg/ImageBufferDataCG.cpp: Added.
        (WebCore::ImageBufferData::ImageBufferData):
        (WebCore::haveVImageRoundingErrorFix):
        (WebCore::ImageBufferData::getData):
        (WebCore::ImageBufferData::putData):
        * platform/graphics/cg/ImageBufferData.h: Removed.
        * platform/graphics/cg/ImageBufferDataCG.h: Added.
        * platform/graphics/chromium/ImageBufferData.h: Removed.
        * platform/graphics/chromium/ImageBufferDataSkia.h: Added.
        * platform/graphics/haiku/ImageBufferData.h: Removed.
        * platform/graphics/haiku/ImageBufferDataHaiku.h: Added.
        * platform/graphics/qt/ImageBufferData.h: Removed.
        * platform/graphics/qt/ImageBufferDataQt.h: Added.
        * platform/graphics/wince/ImageBufferData.h: Removed.
        * platform/graphics/wince/ImageBufferDataWince.h: Added.
        * platform/graphics/wx/ImageBufferData.h: Removed.
        * platform/graphics/wx/ImageBufferDataWx.h: Added.

2011-04-13  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Remove std:: prefix on some min/max calls
        https://bugs.webkit.org/show_bug.cgi?id=58493

        Remove std:: namespacing on min/max in favor of a 'using' clause.

        * platform/graphics/RoundedIntRect.cpp:
        (WebCore::RoundedIntRect::Radii::expand):
        * rendering/style/RenderStyle.cpp:
        (WebCore::calcConstraintScaleFor):

2011-04-13  Alexis Menard  <alexis.menard@openbossa.org>

        Reviewed by Andreas Kling.

        Replace our own RenderThemeQt::getMediaElementFromRenderObject by
        MediaControlsElement::toParentMediaElement used by every other port.

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::paintMediaFullscreenButton):
        (WebCore::RenderThemeQt::paintMediaMuteButton):
        (WebCore::RenderThemeQt::paintMediaPlayButton):
        (WebCore::RenderThemeQt::paintMediaSliderTrack):
        * platform/qt/RenderThemeQt.h:

2011-04-13  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Switched DOM wrappers to use HashMap of Weak<T> instead of WeakGCMap<T>
        https://bugs.webkit.org/show_bug.cgi?id=58482

        This will allow wrappers to make individual decisions about their lifetimes.

        * bindings/js/DOMWrapperWorld.cpp:
        (WebCore::DOMWrapperWorld::DOMWrapperWorld):
        (WebCore::JSNodeHandleOwner::isReachableFromOpaqueRoots):
        (WebCore::JSNodeHandleOwner::finalize):
        (WebCore::DOMObjectHandleOwner::isReachableFromOpaqueRoots):
        (WebCore::DOMObjectHandleOwner::finalize):
        * bindings/js/DOMWrapperWorld.h:
        (WebCore::JSNodeHandleOwner::JSNodeHandleOwner):
        (WebCore::DOMObjectHandleOwner::DOMObjectHandleOwner):
        (WebCore::DOMWrapperWorld::jsNodeHandleOwner):
        (WebCore::DOMWrapperWorld::domObjectHandleOwner): Added handle owners
        for JSNode and DOMObject, our two hash table values. For now, the owners
        just take care to remove their handles from their respective hash tables.
        
        Changed the hash table type to be a standard HashMap of weak pointers,
        instead of a WeakGCMap.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::getCachedDOMObjectWrapper):
        (WebCore::cacheDOMObjectWrapper):
        (WebCore::cacheDOMNodeWrapper):
        (WebCore::isObservableThroughDOM):
        (WebCore::markDOMNodesForDocument):
        (WebCore::takeWrappers):
        (WebCore::updateDOMNodeDocument):
        (WebCore::markDOMObjectWrapper):
        (WebCore::markDOMNodeWrapper): Updated wrapper hash table access to
        accomodate its new data type.

        * bindings/js/JSNodeCustom.h:
        (WebCore::getCachedDOMNodeWrapper): Ditto.

        * dom/Document.h: Updated declaration to match the above.

2011-04-13  Sam Weinig  <sam@webkit.org>

        Fix Mac builds.

        * WebCore.exp.in:

2011-04-13  Sam Weinig  <sam@webkit.org>

        Reviewed by Gavin Barraclough.

        WebKit2 doesn't keep overlay scrollers shown while scroll gesture held
        <rdar://problem/9260518>

        Notify the scrollbar painter controller when gesture scrolls begin and end.

        * WebCore.exp.in:
        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::didBeginScrollGesture):
        (WebCore::ScrollAnimatorMac::didEndScrollGesture):
        (WebCore::ScrollAnimatorMac::beginScrollGesture):
        (WebCore::ScrollAnimatorMac::endScrollGesture):
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

2011-04-13  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Maciej Stachowiak.

        MediaPlayerPrivateAVFoundationObjC should adopt [AVURLAsset isPlayableExtendedMIMEType:]
        https://bugs.webkit.org/show_bug.cgi?id=58451
        <rdar://problem/9278468>

        No new tests, supported MIME types haven't changed.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::supportsType): Use 
        [AVURLAsset isPlayableExtendedMIMEType] instead of just the list of types.

2011-04-13  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Alexey Proskuryakov.

        Media engine fallback doesn't always work
        https://bugs.webkit.org/show_bug.cgi?id=58462

        No new tests, this was verified manually with the url noted in the bug.

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::networkStateChanged):

2011-04-13  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        Extension3D needs to provide a way to check if an extension is enabled
        https://bugs.webkit.org/show_bug.cgi?id=58410

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::setupFlags): Use isEnabled() instead of supports().
        * platform/graphics/Extensions3D.h: Add isEnabled().
        * platform/graphics/chromium/Extensions3DChromium.h: Ditto.
        * platform/graphics/opengl/Extensions3DOpenGL.cpp: Ditto.
        (WebCore::Extensions3DOpenGL::isEnabled):
        * platform/graphics/opengl/Extensions3DOpenGL.h: Ditto.
        * platform/graphics/qt/Extensions3DQt.cpp: Ditto.
        (WebCore::Extensions3DQt::isEnabled):
        * platform/graphics/qt/Extensions3DQt.h: Ditto.

2011-04-13  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Make PropertyMapEntry use a WriteBarrier for specificValue
        https://bugs.webkit.org/show_bug.cgi?id=58407

        Pass JSGlobalData reference on to APIs that now need them

        * bindings/js/JSDOMWindowShell.h:
        (WebCore::JSDOMWindowShell::setWindow):
        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::all):

2011-04-12  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: fix source mapping for de-obfuscated scripts.
        https://bugs.webkit.org/show_bug.cgi?id=58231

        * inspector/front-end/ScriptFormatterWorker.js:
        (buildMapping):
        * inspector/front-end/SourceFile.js:
        (WebInspector.SourceMapping):
        (WebInspector.SourceMapping.prototype.sourceLineToScriptLocation):
        (WebInspector.SourceMapping.prototype._sourceLocationToScriptLocation):
        (WebInspector):
        (WebInspector.FormattedSourceMapping):
        (WebInspector.FormattedSourceMapping.prototype.scriptLocationToSourceLine):
        (WebInspector.FormattedSourceMapping.prototype.sourceLineToScriptLocation):

2011-04-13  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Consider editable and non editable nodes when calculating selection offsets
        https://bugs.webkit.org/show_bug.cgi?id=58431

        Use firstPositionInOrBeforeNode() and lastPositionInOrAfterNode().

        This is needed to ensure that getSelectionOffsetsForObject() works
        well when non editable nodes are present in the selection, since
        firstPositionInNode() and lastPositionInNode() don't work in those
        cases (they assume the node is editable).

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (getSelectionOffsetsForObject): Updated calls.

2011-04-13  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Missing nullchecks in GTK's a11y wrapper
        https://bugs.webkit.org/show_bug.cgi?id=58429

        Add missing nullchecks for coreObject->document().

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (atkParentOfRootObject): Add missing nullcheck.
        (getPangoLayoutForAtk): Ditto.
        (webkit_accessible_text_get_caret_offset): Ditto.
        (textExtents): Ditto.
        (webkit_accessible_editable_text_insert_text): Ditto.
        (webkit_accessible_editable_text_delete_text): Ditto.

2011-04-13  Thierry Reding  <thierry.reding@avionic-design.de>

        Gtk+ port fails to build when enabling WebGL
        https://bugs.webkit.org/show_bug.cgi?id=58434

        Fix the GTK+ WebGL build after the introduction of PlatformContextCairo.

        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/cairo/GraphicsContext3DCairo.cpp:
        (WebCore::GraphicsContext3D::paintToCanvas):

2011-04-12  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Martin Robinson.

        REGRESSION(r83561): doesn't pause in-window playback during fullscreen playback
        https://bugs.webkit.org/show_bug.cgi?id=58312

        Make sure to link the videoValve in all cases, fpsdisplaysink
        being used or not.

        No new test, this patch fixes an internal feature of the player,
        not publicly exposed. Having two video sinks and pausing one while
        the other displays the fullscreen video is an implementation
        detail of the GStreamer player.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin):

2011-04-13  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: there is a problem if an optional param is not at the end of a params list.
        https://bugs.webkit.org/show_bug.cgi?id=58440

        In InspectorBackend.dispatch method we are converting the message's params object into array of arguments
        for a callback. But in some cases the optional parameter is declared in the middle of the params list.
        That gets us into a problem if this param has been skipped in the message. In that case the tail of the
        event params will be shifted. We can slightly modify dispatcher and it will put the params in right places.

        * inspector/CodeGeneratorInspector.pm:

2011-04-13  Ben Taylor  <bentaylor.solx86@gmail.com>

        Reviewed by Eric Seidel.

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

        Work around a bug in ternary opertions in the Solaris Studio
        12/12.1/12.2 compilers, using an if clause.

        * dom/NodeRenderStyle.h:
        (WebCore::Node::renderStyle):

2011-04-13  Brian Salomon  <bsalomon@google.com>

        Reviewed by Kenneth Russell.

        Use new skia API for wrapping DrawingBuffer's FBO/Tex IDs in skia object
        https://bugs.webkit.org/show_bug.cgi?id=58363

        No new tests needed, exercised by all existing canvas2d tests.

        * platform/graphics/chromium/DrawingBufferChromium.cpp:
        (WebCore::DrawingBuffer::getGrPlatformSurfaceDesc):
        * platform/graphics/gpu/DrawingBuffer.h:
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::setSharedGraphicsContext3D):

2011-04-13  Andrey Kosyakov  <caseq@chromium.org>

        Unreviewed. Fix chromium clang build problem:
        ApplyPropertyExpandingSuppressValue::applyValue() shadows a virtual method
        with a different signature in base class instead of overriding it.

        * css/CSSStyleApplyProperty.cpp:
        (WebCore::ApplyPropertyExpandingSuppressValue::applyValue):

2011-04-13  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by David Levin.

        Add mock implementation and plumbing code for unified Quota API
        https://bugs.webkit.org/show_bug.cgi?id=57927

        Added mock implementation and some plumbing code for the quota API,
        that is based on the discussion on public-webapps:
        http://lists.w3.org/Archives/Public/public-webapps/2011JanMar/0346.html

        No new tests: tests will be added when we expose the API.

        * CMakeLists.txt: Added new file entries.
        * DerivedSources.cpp: Added new file entries.
        * DerivedSources.make: Added new file entries.
        * GNUmakefile.am: Added new file entries.
        * WebCore.gypi: Added new file entries.
        * WebCore.pro: Added new file entries.
        * WebCore.vcproj/WebCore.vcproj: Added new file entries.
        * WebCore.xcodeproj/project.pbxproj: Added new file entries.
        * storage/StorageInfo.cpp: Added.
        * storage/StorageInfo.h: Added.
        * storage/StorageInfoErrorCallback.h: Added.
        * storage/StorageInfoQuotaCallback.h: Added.
        * storage/StorageInfoUsageCallback.h: Added.

2011-04-13  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Martin Robinson.

        [GTK] PluginPackage should check whether a plugin mixes GTK+ 2 and 3 symbols itself
        https://bugs.webkit.org/show_bug.cgi?id=58297

        Make sure we do not load plugins that use symbols of a different
        GTK+ major version to avoid bugs and crashes.

        * plugins/gtk/PluginPackageGtk.cpp:
        (WebCore::moduleMixesGtkSymbols):
        (WebCore::PluginPackage::load):

2011-04-13  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Pavel Feldman.

        Web Inspector: Implement undo/redo in text editor
        https://bugs.webkit.org/show_bug.cgi?id=58426

        Native undo/redo does not work because we modify DOM structure (highlights, chunks and etc.)
        Implement it via keyboard shortcuts for now (Cmd/Ctrl+Z and Cmd/Ctrl+Shift+Z).
        FIXME: Do something with the popup's Undo and Redo menu options - they invoke native's undo/redo.

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.endEditing):
        * inspector/front-end/TextEditorModel.js:
        (WebInspector.TextEditorModel.prototype.setText):
        (WebInspector.TextEditorModel.prototype._innerSetText):
        (WebInspector.TextEditorModel.prototype._pushUndoableCommand):
        (WebInspector.TextEditorModel.prototype.undo):
        (WebInspector.TextEditorModel.prototype.redo):
        (WebInspector.TextEditorModel.prototype._doUndo):
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer.prototype._textChanged):
        (WebInspector.TextViewer.prototype._enterInternalTextChangeMode):
        (WebInspector.TextViewer.prototype._exitInternalTextChangeMode):
        (WebInspector.TextViewer.prototype._registerShortcuts):
        (WebInspector.TextViewer.prototype._cancelEditing):
        (WebInspector.TextViewer.prototype._handleUndoRedo):
        (WebInspector.TextEditorChunkedPanel.prototype.makeLineAChunk):
        (WebInspector.TextEditorChunkedPanel.prototype._repaintAll):
        (WebInspector.TextEditorGutterPanel.prototype.textChanged):
        (WebInspector.TextEditorMainPanel.prototype.handleUndoRedo.callback):
        (WebInspector.TextEditorMainPanel.prototype.handleUndoRedo):
        (WebInspector.TextEditorMainPanel.prototype._restoreSelection):
        (WebInspector.TextEditorMainPanel.prototype._applyDomUpdates):
        (WebInspector.TextEditorMainPanel.prototype.textChanged):
        (WebInspector.TextEditorMainPanel.prototype._updateChunksForRanges):

2011-04-13  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: make optional event parameter last to prevent regressions.
        https://bugs.webkit.org/show_bug.cgi?id=58433

        * inspector/Inspector.json:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::willSendRequest):
        * inspector/front-end/NetworkManager.js:
        (WebInspector.NetworkDispatcher.prototype.requestWillBeSent):

2011-04-13  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: revert Inspector.json change for breaking world.

        * inspector/Inspector.json:

2011-04-13  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: swap methods in the Inspector.json.

        * inspector/Inspector.json:

2011-04-13  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed, rolling out r83695.
        http://trac.webkit.org/changeset/83695
        https://bugs.webkit.org/show_bug.cgi?id=58375

        [Qt][WK2]It broke http tests

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::start):
        (WebCore::QNetworkReplyHandler::synchronousLoad):
        * platform/network/qt/QNetworkReplyHandler.h:
        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::WebCoreSynchronousLoader::resourceResponse):
        (WebCore::WebCoreSynchronousLoader::resourceError):
        (WebCore::WebCoreSynchronousLoader::data):
        (WebCore::WebCoreSynchronousLoader::setReplyFinished):
        (WebCore::WebCoreSynchronousLoader::WebCoreSynchronousLoader):
        (WebCore::WebCoreSynchronousLoader::didReceiveResponse):
        (WebCore::WebCoreSynchronousLoader::didReceiveData):
        (WebCore::WebCoreSynchronousLoader::didFinishLoading):
        (WebCore::WebCoreSynchronousLoader::didFail):
        (WebCore::WebCoreSynchronousLoader::waitForCompletion):
        (WebCore::ResourceHandle::loadResourceSynchronously):

2011-04-13  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: inactive style sheets should be read only.
        https://bugs.webkit.org/show_bug.cgi?id=58423

        * inspector/front-end/ResourceView.js:
        (WebInspector.CSSSourceFrame):
        (WebInspector.CSSSourceFrame.prototype.isContentEditable):
        (WebInspector.CSSSourceFrame.prototype._loadStyleSheet.didGetAllStyleSheets.didCreateForId):
        (WebInspector.CSSSourceFrame.prototype._loadStyleSheet):

2011-04-13  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [Chromium] Prepare to move detailed heap snapshots storage and processing into workers.
        https://bugs.webkit.org/show_bug.cgi?id=58320

        Introduce a proxy object that emulates worker behavior and change UI code to cope with it.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/DetailedHeapshotGridNodes.js:
        (WebInspector.HeapSnapshotGridNode.prototype._populate.doPopulate.sorted):
        (WebInspector.HeapSnapshotGridNode.prototype._populate.doPopulate):
        (WebInspector.HeapSnapshotGridNode.prototype._populate):
        (WebInspector.HeapSnapshotGridNode.prototype.populateChildren.childrenRetrieved.notify):
        (WebInspector.HeapSnapshotGridNode.prototype.populateChildren.childrenRetrieved):
        (WebInspector.HeapSnapshotGridNode.prototype.populateChildren):
        (WebInspector.HeapSnapshotGridNode.prototype.sort.doSort.afterSort.afterPopulate):
        (WebInspector.HeapSnapshotGridNode.prototype.sort.doSort.afterSort):
        (WebInspector.HeapSnapshotGridNode.prototype.sort):
        (WebInspector.HeapSnapshotGenericObjectNode):
        (WebInspector.HeapSnapshotGenericObjectNode.prototype.get _shallowSizePercent):
        (WebInspector.HeapSnapshotGenericObjectNode.prototype._updateHasChildren):
        (WebInspector.HeapSnapshotObjectNode):
        (WebInspector.HeapSnapshotObjectNode.prototype._createChildNode):
        (WebInspector.HeapSnapshotObjectNode.prototype._createProvider):
        (WebInspector.HeapSnapshotInstanceNode):
        (WebInspector.HeapSnapshotInstanceNode.prototype._createChildNode):
        (WebInspector.HeapSnapshotInstanceNode.prototype._createProvider):
        (WebInspector.HeapSnapshotConstructorNode.prototype._createChildNode):
        (WebInspector.HeapSnapshotConstructorNode.prototype._createNodesProvider):
        (WebInspector.HeapSnapshotIteratorsTuple.prototype.sortAndRewind):
        (WebInspector.HeapSnapshotDiffNode.prototype._calculateDiff):
        (WebInspector.HeapSnapshotDiffNode.prototype._createChildNode):
        (WebInspector.HeapSnapshotDiffNode.prototype._createNodesProvider.createProvider):
        (WebInspector.HeapSnapshotDiffNode.prototype._createNodesProvider):
        (WebInspector.HeapSnapshotDiffNode.prototype._childHashForEntity):
        (WebInspector.HeapSnapshotDiffNode.prototype._childHashForNode):
        (WebInspector.HeapSnapshotDiffNode.prototype.populateChildren.firstProviderPopulated):
        (WebInspector.HeapSnapshotDiffNode.prototype.populateChildren.else.firstProviderPopulated):
        (WebInspector.HeapSnapshotDiffNode.prototype.populateChildren):
        (WebInspector.HeapSnapshotDominatorObjectNode):
        (WebInspector.HeapSnapshotDominatorObjectNode.prototype._createChildNode):
        (WebInspector.HeapSnapshotDominatorObjectNode.prototype._createProvider):
        * inspector/front-end/DetailedHeapshotView.js:
        (WebInspector.HeapSnapshotSortableDataGrid.prototype.sortingChanged):
        (WebInspector.HeapSnapshotSortableDataGrid.prototype._performSorting):
        (WebInspector.HeapSnapshotConstructorsDataGrid.prototype.setDataSource):
        (WebInspector.HeapSnapshotConstructorsDataGrid.prototype.populateChildren):
        (WebInspector.HeapSnapshotDiffDataGrid.prototype.setBaseDataSource.baseSnapshotNodeIdsReceived):
        (WebInspector.HeapSnapshotDiffDataGrid.prototype.setBaseDataSource.pushBaseSnapshotNodeIds):
        (WebInspector.HeapSnapshotDiffDataGrid.prototype.setBaseDataSource.snapshotNodeIdsReceived):
        (WebInspector.HeapSnapshotDiffDataGrid.prototype.setBaseDataSource):
        (WebInspector.HeapSnapshotDiffDataGrid.prototype.populateChildren.baseAggregatesReceived.aggregatesReceived):
        (WebInspector.HeapSnapshotDiffDataGrid.prototype.populateChildren):
        (WebInspector.HeapSnapshotRetainingPathsList):
        (WebInspector.HeapSnapshotRetainingPathsList.prototype._resetPaths):
        (WebInspector.HeapSnapshotRetainingPathsList.prototype.setDataSource):
        (WebInspector.HeapSnapshotRetainingPathsList.prototype.refresh):
        (WebInspector.HeapSnapshotRetainingPathsList.prototype.showNext.pathFound):
        (WebInspector.HeapSnapshotRetainingPathsList.prototype.showNext.startSearching):
        (WebInspector.HeapSnapshotRetainingPathsList.prototype.showNext):
        (WebInspector.DetailedHeapshotView.profileCallback):
        (WebInspector.DetailedHeapshotView):
        (WebInspector.DetailedHeapshotView.prototype.get profileWrapper):
        (WebInspector.DetailedHeapshotView.prototype.get baseProfileWrapper):
        (WebInspector.DetailedHeapshotView.prototype.show.profileCallback1):
        (WebInspector.DetailedHeapshotView.prototype.show.profileCallback2):
        (WebInspector.DetailedHeapshotView.prototype.show):
        (WebInspector.DetailedHeapshotView.prototype._changeBase.baseProfileLoaded):
        * inspector/front-end/HeapSnapshot.js:
        * inspector/front-end/HeapSnapshotProxy.js: Added.
        * inspector/front-end/PleaseWaitMessage.js:
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype._reset):
        (WebInspector.ProfilesPanel.prototype.loadHeapSnapshot):
        (WebInspector.ProfilesPanel.prototype._addHeapSnapshotChunk):
        (WebInspector.ProfilesPanel.prototype._finishHeapSnapshot.doParse):
        (WebInspector.ProfilesPanel.prototype._finishHeapSnapshot.else.parsed):
        (WebInspector.ProfilesPanel.prototype._finishHeapSnapshot):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:

2011-04-13  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Web Page Performance auditing fails
        https://bugs.webkit.org/show_bug.cgi?id=58322

        * inspector/front-end/AuditRules.js:
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun.evalCallback):
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun.evalCallback.documentLoaded):
        (WebInspector.AuditRules.ImageDimensionsRule.prototype.doRun):
        (WebInspector.AuditRules.CssInHeadRule.prototype.doRun.externalStylesheetsReceived):
        (WebInspector.AuditRules.CssInHeadRule.prototype.doRun.inlineStylesReceived):
        (WebInspector.AuditRules.CssInHeadRule.prototype.doRun.onDocumentAvailable):
        (WebInspector.AuditRules.CssInHeadRule.prototype.doRun):
        (WebInspector.AuditRules.StylesScriptsOrderRule.prototype.doRun.cssBeforeInlineReceived):
        (WebInspector.AuditRules.StylesScriptsOrderRule.prototype.doRun.lateStylesReceived):
        (WebInspector.AuditRules.StylesScriptsOrderRule.prototype.doRun.onDocumentAvailable):
        (WebInspector.AuditRules.StylesScriptsOrderRule.prototype.doRun):

2011-04-13  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: enumerate properties in Inspector.json using array, not object keys.
        https://bugs.webkit.org/show_bug.cgi?id=58418

        * inspector/Inspector.json:

2011-04-06  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: add "De-obfuscate Source" item to source frame text area context menu.
        https://bugs.webkit.org/show_bug.cgi?id=57942

        * English.lproj/localizedStrings.js:
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype.formatSourceFilesToggled):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype._togglePauseOnExceptions):
        (WebInspector.SourceFrameDelegateForScriptsPanel.prototype.releaseEvaluationResult):
        (WebInspector.SourceFrameDelegateForScriptsPanel.prototype.toggleFormatSourceFiles):
        (WebInspector.SourceFrameDelegateForScriptsPanel.prototype.formatSourceFilesToggled):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._contextMenu):
        (WebInspector.SourceFrame.prototype._populateLineGutterContextMenu):
        (WebInspector.SourceFrame.prototype._populateTextAreaContextMenu):
        (WebInspector.SourceFrameDelegate.prototype.releaseEvaluationResult):
        (WebInspector.SourceFrameDelegate.prototype.toggleFormatSourceFiles):
        (WebInspector.SourceFrameDelegate.prototype.formatSourceFilesToggled):

2011-04-13  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        SVGTextContentElements textLength returns 0
        https://bugs.webkit.org/show_bug.cgi?id=52543

        Add proper handling of the SVGTextContentElement textLength property, according to SVG 1.1 2nd edition.

        If the textLength attributes is not explicitely set "textContentElement.textLength.baseVal"
        will return the same as "textContentElement.getComputedTextLength()". If it's set the values
        aren't equal anymore. getComputedTextLength() ignores the textLength attributes as well as the
        lengthAdjust attribute. Adapt all of SVGTextQuery to ignore the lengthAdjust/textLength attributes.
        This is how Opera implements it, and it makes sense to a certain degree, as otherwhise getComputedTextLength()
        and textLength.baseVal.value would always be the same. Nor does the spec mention that textLength is honored
        in the SVG Text DOM API.

        Fixes svg/custom/text-dom-01-f.svg (from SVG 1.1 2nd edition, should be moved into the new W3C-SVG-1.1-SE directory).
        Fixes svg/W3C-SVG-1.1-SE/svgdom-over-01-f.svg (last subtest related to textLength now passes).

        Added new svg/dynamic-updates testcases covering dynamic changes of lengthAdjust/textLength and the synchronization
        with getComputedTextLength().

        Tests: svg/W3C-SVG-1.1-SE/svgdom-over-01-f.svg
               svg/dynamic-updates/SVGTextElement-dom-lengthAdjust-attr.html
               svg/dynamic-updates/SVGTextElement-dom-textLength-attr.html
               svg/dynamic-updates/SVGTextElement-svgdom-lengthAdjust-prop.html
               svg/dynamic-updates/SVGTextElement-svgdom-textLength-prop.html

        * rendering/svg/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::positionForPoint):
        * rendering/svg/SVGInlineFlowBox.cpp:
        (WebCore::SVGInlineFlowBox::computeTextMatchMarkerRectForRenderer):
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::offsetForPositionInFragment):
        (WebCore::SVGInlineTextBox::selectionRect):
        (WebCore::SVGInlineTextBox::paintSelectionBackground):
        (WebCore::SVGInlineTextBox::paint):
        (WebCore::SVGInlineTextBox::calculateBoundaries):
        * rendering/svg/SVGTextChunkBuilder.cpp:
        (WebCore::SVGTextChunkBuilder::buildTextChunks):
        (WebCore::SVGTextChunkBuilder::layoutTextChunks):
        (WebCore::SVGTextChunkBuilder::addTextChunk):
        (WebCore::SVGTextChunkBuilder::processTextChunk):
        (WebCore::SVGTextChunkBuilder::processTextLengthSpacingCorrection):
        (WebCore::SVGTextChunkBuilder::processTextAnchorCorrection):
        * rendering/svg/SVGTextFragment.h:
        (WebCore::SVGTextFragment::SVGTextFragment):
        (WebCore::SVGTextFragment::buildFragmentTransform):
        (WebCore::SVGTextFragment::transformAroundOrigin):
        (WebCore::SVGTextFragment::buildTransformForTextOnPath):
        (WebCore::SVGTextFragment::buildTransformForTextOnLine):
        * rendering/svg/SVGTextLayoutEngine.cpp:
        (WebCore::SVGTextLayoutEngine::parentDefinesTextLength):
        (WebCore::SVGTextLayoutEngine::beginTextPathLayout):
        (WebCore::dumpTextBoxes):
        (WebCore::SVGTextLayoutEngine::finalizeTransformMatrices):
        (WebCore::SVGTextLayoutEngine::finishLayout):
        (WebCore::SVGTextLayoutEngine::layoutTextOnLineOrPath):
        * rendering/svg/SVGTextQuery.cpp:
        (WebCore::SVGTextQuery::textLengthCallback):
        (WebCore::SVGTextQuery::subStringLengthCallback):
        (WebCore::SVGTextQuery::startPositionOfCharacterCallback):
        (WebCore::SVGTextQuery::endPositionOfCharacterCallback):
        (WebCore::SVGTextQuery::rotationOfCharacterCallback):
        (WebCore::calculateGlyphBoundaries):
        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::SVGTextContentElement):
        (WebCore::SVGTextContentElement::synchronizeTextLength):
        (WebCore::SVGTextContentElement::textLengthAnimated):
        (WebCore::SVGTextContentElement::parseMappedAttribute):
        (WebCore::SVGTextContentElement::svgAttributeChanged):
        * svg/SVGTextContentElement.h:
        (WebCore::SVGTextContentElement::specifiedTextLength):
        * svg/SVGTextPathElement.cpp:
        (WebCore::SVGTextPathElement::svgAttributeChanged):
        * svg/SVGTextPositioningElement.cpp:
        (WebCore::SVGTextPositioningElement::svgAttributeChanged):

2011-04-13  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: requestDocument can result in race condition in DOMAgent.js
        https://bugs.webkit.org/show_bug.cgi?id=58415

        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMAgent.prototype.requestDocument.onDocumentAvailable):
        (WebInspector.DOMAgent.prototype.requestDocument):

2011-04-12  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: another pass of protocol renames.
        https://bugs.webkit.org/show_bug.cgi?id=58340

        * inspector/Inspector.json:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::getDocument):
        (WebCore::InspectorDOMAgent::performSearch):
        (WebCore::InspectorDOMAgent::setSearchingForNode):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::evaluateOnCallFrame):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorRuntimeAgent.cpp:
        (WebCore::InspectorRuntimeAgent::evaluate):
        * inspector/InspectorRuntimeAgent.h:
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype._setSearchingForNode):
        (WebInspector.ElementsPanel.prototype.setSearchingForNode):

2011-04-12  Luke Macpherson   <macpherson@chromium.org>

        Reviewed by Dimitri Glazkov.

        Implement remaining Background and Mask css properties in CSSStyleApplyProperty
        https://bugs.webkit.org/show_bug.cgi?id=58390

        No new tests required as no functionality changed.

        * css/CSSStyleApplyProperty.cpp:
        (WebCore::ApplyPropertyExpanding): Class to expand one property to 0-4 properties.
        (WebCore::ApplyPropertyExpandingSuppressValue): Expand properties but suppress applyValue.

        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
        (WebCore::CSSStyleSelector::applyProperty): Remove implementations that have been moved to CSSStyleApplyProperty.

2011-04-12  Sergey Glazunov  <serg.glazunov@gmail.com>

        Reviewed by Dimitri Glazkov.

        Element::setAttribute should check the namespace of an id attribute
        https://bugs.webkit.org/show_bug.cgi?id=58359

        Test: fast/dom/id-attribute-with-namespace-crash.html

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

2011-04-12  Mike Lawther  <mikelawther@chromium.org>

        Reviewed by James Robinson.

        Update boolean operators in RenderStyle to be compatible with check-webkit-style
        https://bugs.webkit.org/show_bug.cgi?id=58409

        No new functionality, so no new tests.

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::operator==):
        (WebCore::RenderStyle::inheritedNotEqual):
        (WebCore::positionedObjectMoved):
        (WebCore::RenderStyle::diff):
        (WebCore::RenderStyle::applyTransform):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::isOriginalDisplayInlineType):

2011-04-12  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Andreas Kling.

        [Qt] QNetworkReplyHandler refactoring: remove nested event loop.
        https://bugs.webkit.org/show_bug.cgi?id=58375

        As QNAM now makes actual synchronous loads there is no need for a nested event loop
        in ResourceHandleQt.

        Moving the call for QNetworkReplyWrapper::synchronousLoad from
        ResourceHandle::loadResourceSynchronously to QNetworkReplyHandler::start for the
        redirections to work in synchronous requests.

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::start):
        * platform/network/qt/QNetworkReplyHandler.h:
        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::WebCoreSynchronousLoader::WebCoreSynchronousLoader):
        (WebCore::WebCoreSynchronousLoader::didReceiveResponse):
        (WebCore::WebCoreSynchronousLoader::didReceiveData):
        (WebCore::WebCoreSynchronousLoader::didFinishLoading):
        (WebCore::WebCoreSynchronousLoader::didFail):
        (WebCore::ResourceHandle::loadResourceSynchronously):

2011-04-12  Vangelis Kokkevis  <vangelis@chromium.org>

        Reviewed by James Robinson.

        [chromium] Move the calculation of the layer's z coordinate to the
        right spot so that it can be picked up by its sublayers.
        https://bugs.webkit.org/show_bug.cgi?id=58397

        Test: platform/chromium/compositing/child-layer-3d-sorting.html

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::updatePropertiesAndRenderSurfaces):

2011-04-12  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Andreas Kling.

        [Qt] QNetworkReplyHandler refactoring: signal queue
        https://bugs.webkit.org/show_bug.cgi?id=57075

        The idea is to make all signals that come from the QNetworkReply to pass through a queue and to
        stop that queue when loading is deferred. This way almost all the deferred logic can be removed
        from QNetworkReplyHandler class and encapsulated in its own class.

        To stop the queue during wrapper methods execution avoids stacking handler methods over wrapper
        methods. Because of this there is no chance for the wrapper to be destroyed inside one of its methods.
        This together with empting the queue at wrapper destruction time makes sure that the handler will
        not receive calls from a dead wrapper.

        The new class is named QNetworkReplyHandlerCallQueue.

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandlerCallQueue::QNetworkReplyHandlerCallQueue):
        (WebCore::QNetworkReplyHandlerCallQueue::push):
        (WebCore::QNetworkReplyHandlerCallQueue::lock):
        (WebCore::QNetworkReplyHandlerCallQueue::unlock):
        (WebCore::QNetworkReplyHandlerCallQueue::setDeferSignals):
        (WebCore::QNetworkReplyHandlerCallQueue::flush):
        (WebCore::QueueLocker::QueueLocker):
        (WebCore::QueueLocker::~QueueLocker):
        (WebCore::QNetworkReplyWrapper::QNetworkReplyWrapper):
        (WebCore::QNetworkReplyWrapper::~QNetworkReplyWrapper):
        (WebCore::QNetworkReplyWrapper::receiveMetaData):
        (WebCore::QNetworkReplyWrapper::readyRead):
        (WebCore::QNetworkReplyWrapper::didReceiveFinished):
        (WebCore::QNetworkReplyHandler::QNetworkReplyHandler):
        (WebCore::QNetworkReplyHandler::resetState):
        (WebCore::QNetworkReplyHandler::release):
        (WebCore::QNetworkReplyHandler::finish):
        (WebCore::QNetworkReplyHandler::sendResponseIfNeeded):
        (WebCore::QNetworkReplyHandler::forwardData):
        (WebCore::QNetworkReplyHandler::start):
        (WebCore::QNetworkReplyHandler::synchronousLoad):
        * platform/network/qt/QNetworkReplyHandler.h:
        (WebCore::QNetworkReplyHandlerCallQueue::deferSignals):
        (WebCore::QNetworkReplyHandlerCallQueue::clear):
        (WebCore::QNetworkReplyWrapper::synchronousLoad):
        (WebCore::QNetworkReplyHandler::setLoadingDeferred):
        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::ResourceHandle::loadResourceSynchronously):

2011-04-12  Kenichi Ishibashi  <bashi@chromium.org>

        Reviewed by Kent Tamura.

        Fix wrong calculation of HTMLFormElement::m_associatedElementsAfterIndex.
        https://bugs.webkit.org/show_bug.cgi?id=58247

        - Increment m_associatedElementsAfterIndex when the form owner and an
        inserted form associated element have the same parent chain.
        - Always iterate over m_associatedElements to decrease indexes when a
        form associated element is removed. This is needed for a case that the
        form associated element is removed from the form element due to
        deleting the 'form' attribute. No behavioral change expected with this
        change.

        Tests: fast/dom/HTMLFormElement/associated-elements-after-index-assertion-fail1.html
               fast/dom/HTMLFormElement/associated-elements-after-index-assertion-fail2.html

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::formElementIndexWithFormAttribute):
        Incremet m_associatedElementsAfterIndex when compareDocumentPosition()
        returns DOCUMENT_POSITION_CONTAINED_BY.
        (WebCore::HTMLFormElement::removeFormElement):
        Always iterate m_associatedElements to adjust indexes.

2011-04-12  Diego Gonzalez  <diegohcg@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Do not show scrollbars when use mobile theme
        https://bugs.webkit.org/show_bug.cgi?id=58380

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

2011-04-12  Anantanarayanan G Iyengar  <ananta@chromium.org>

        Reviewed by Alexey Proskuryakov.

        The default backspace event handler should mark the event as handled if navigation succeeds.
        https://bugs.webkit.org/show_bug.cgi?id=58379

        We should mark the event as handled only if we were able to successfully navigate backwards or forwards.
        These navigations can fail if there is now back/forward history. This can occur in cases like ChromeFrame
        where history is managed by an external browser like IE.

        No new tests added as this scenario can occur when the history view is split across two browsers (WebKit and IE)
        It is non trivial to simulate this environment.

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

2011-04-12  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        Make availableWidth and totalOverhangWidth in findNextLineBreak member variables of LineWidth
        https://bugs.webkit.org/show_bug.cgi?id=58400

        Added m_availableWidth and m_overhangWidth to LineWidth this allows us to encapsulate m_overhangWidth.

        * rendering/RenderBlock.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::LineWidth::LineWidth):
        (WebCore::LineWidth::fitsOnLine): Added; returns true if current width + first argument <= availableWidth.
        (WebCore::LineWidth::availableWidth): Added.
        (WebCore::LineWidth::setAvailableWidth): Added; takes LineOffsets.
        (WebCore::LineWidth::applyOverhang): Added; obtains the overhang width from ruby run and inflates
        the available width.
        (WebCore::LineWidth::fitBelowFloats): Moved from RenderBlock.
        (WebCore::RenderBlock::findNextLineBreak): Uses LineWidth.

2011-04-12  Alexis Menard  <alexis.menard@openbossa.org>

        Unreviewed warning fix.

        MediaControlElements has been moved to html/shadow.

        * WebCore.pro:

2011-04-12  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Eric Seidel.

        Rename onEndChain and make it a static method.
        https://bugs.webkit.org/show_bug.cgi?id=58403

        No new tests since this is refactoring only.

        * rendering/InlineFlowBox.cpp:
        (WebCore::isLastChildForRenderer):
        (WebCore::InlineFlowBox::determineSpacingForFlowBoxes):
        * rendering/InlineFlowBox.h:

2011-04-12  Eric Carlson  <eric.carlson@apple.com>

        Not reviewed, build fix.

        Fix non-accelerated build after r83667.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerFirstVideoFrameAvailable): Guard call to 
            mediaPlayerRenderingModeChanged with USE(ACCELERATED_COMPOSITING.

2011-04-12  Adrienne Walker  <enne@google.com>

        Reviewed by James Robinson.

        [chromium] TilingData mishandles very small texture sizes
        https://bugs.webkit.org/show_bug.cgi?id=58364

        Use zero tiles when the texture size is too small for tiling.

        * platform/graphics/gpu/TilingData.cpp:
        (WebCore::TilingData::TilingData):
        (WebCore::TilingData::setMaxTextureSize):

2011-04-12  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed, rolling out r83634 and r83659.
        http://trac.webkit.org/changeset/83634
        http://trac.webkit.org/changeset/83659
        https://bugs.webkit.org/show_bug.cgi?id=57075

        It made 2 tests time out

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyWrapper::QNetworkReplyWrapper):
        (WebCore::QNetworkReplyWrapper::~QNetworkReplyWrapper):
        (WebCore::QNetworkReplyWrapper::receiveMetaData):
        (WebCore::QNetworkReplyWrapper::didReceiveFinished):
        (WebCore::QNetworkReplyHandler::QNetworkReplyHandler):
        (WebCore::QNetworkReplyHandler::resetState):
        (WebCore::QNetworkReplyHandler::setLoadingDeferred):
        (WebCore::QNetworkReplyHandler::resumeDeferredLoad):
        (WebCore::QNetworkReplyHandler::release):
        (WebCore::QNetworkReplyHandler::finish):
        (WebCore::QNetworkReplyHandler::sendResponseIfNeeded):
        (WebCore::QNetworkReplyHandler::forwardData):
        (WebCore::QNetworkReplyHandler::start):
        * platform/network/qt/QNetworkReplyHandler.h:
        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::WebCoreSynchronousLoader::resourceResponse):
        (WebCore::WebCoreSynchronousLoader::resourceError):
        (WebCore::WebCoreSynchronousLoader::data):
        (WebCore::WebCoreSynchronousLoader::setReplyFinished):
        (WebCore::WebCoreSynchronousLoader::WebCoreSynchronousLoader):
        (WebCore::WebCoreSynchronousLoader::didReceiveResponse):
        (WebCore::WebCoreSynchronousLoader::didReceiveData):
        (WebCore::WebCoreSynchronousLoader::didFinishLoading):
        (WebCore::WebCoreSynchronousLoader::didFail):
        (WebCore::WebCoreSynchronousLoader::waitForCompletion):
        (WebCore::ResourceHandle::loadResourceSynchronously):

2011-04-12  Sam Weinig  <sam@webkit.org>

        Reviewed by Simon Fraser.

        Frames prevent scrolling containing page
        <rdar://problem/8990409>
        https://bugs.webkit.org/show_bug.cgi?id=58392

        Also fixes:
        Should rubber-band on pages with no scrollbars
        <rdar://problem/9034280>

        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        Make the main frame rubber-band horizontally and vertically always.

        * platform/ScrollTypes.h:
        Add ScrollElasticity enum.

        * platform/ScrollableArea.cpp:
        Default to no elasticity.

        (WebCore::ScrollableArea::ScrollableArea):
        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::setVerticalScrollElasticity):
        (WebCore::ScrollableArea::verticalScrollElasticity):
        (WebCore::ScrollableArea::setHorizontalScrollElasticity):
        (WebCore::ScrollableArea::horizontalScrollElasticity):
        Add state for horizontal and vertical elasticity.

        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::handleWheelEvent):
        Bail out of new scrolling behavior if we can't rubber-band. By bailing before
        accepting the wheel event, we allow the wheel event to be forwarded. We will
        need to refine this logic to allow subframe scrolling in the future.

        (WebCore::ScrollAnimatorMac::allowsVerticalStretching):
        (WebCore::ScrollAnimatorMac::allowsHorizontalStretching):
        Switch stretching behavior based on the ScrollableArea's elasticity.

2011-04-12  Geoffrey Garen  <ggaren@apple.com>

        Not reviewed.

        Try to fix the Chromium build.
        
        Why have one URL when you can have two at twice the price?

        * platform/KURL.h:
        (WebCore::KURL::KURL):
        (WebCore::KURL::isHashTableDeletedValue):
        * platform/KURLGoogle.cpp:
        (WebCore::KURLGooglePrivate::KURLGooglePrivate):
        * platform/KURLGooglePrivate.h: Added a GoogleURL path for KURL's hash
        table deleted value constructor.

2011-04-12  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Oliver Hunt.
        https://bugs.webkit.org/show_bug.cgi?id=58280
        Fix a layout test by correctly comparing enums, and not adding exceptions.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::SerializedScriptValue::create):
        (WebCore::SerializedScriptValue::deserialize):
        * bindings/js/SerializedScriptValue.h:

2011-04-12  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Simon Fraser.

        Apple movie trailers play only audio
        https://bugs.webkit.org/show_bug.cgi?id=58339
        <rdar://problem/9237606>

        No new tests, covered by existing layout and manual tests.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerEngineUpdated): Do the logging before calling any functions.
        (WebCore::HTMLMediaElement::mediaPlayerFirstVideoFrameAvailable): New, if still displaying the poster 
            change the display mode to Video and force a style recalc so the video layer gets hooked
            up the the render tree.
        * html/HTMLMediaElement.h: Define new display mode, PosterWaitingForVideo, to signal that we
            want to stop displaying the poster as soon as the first frame of video is available.

        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::setDisplayMode): Change display mode to PosterWaitingForVideo when
            we want to display Video but the media engines doesn't have the first frame yet.
        * html/HTMLVideoElement.h:
        (WebCore::HTMLVideoElement::shouldDisplayPosterImage): Update to return true when display mode
            is PosterWaitingForVideo.

        * manual-tests/media-elements/video-replaces-poster.html: Clean up bit-rot from patch changes.

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::firstVideoFrameAvailable): New, passthrough from media engien to element.
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerClient::mediaPlayerFirstVideoFrameAvailable):

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::MediaPlayerPrivateAVFoundation): Initialize 
            m_haveReportedFirstVideoFrame and m_playWhenFramesAvailable.
        (WebCore::MediaPlayerPrivateAVFoundation::play): Don't actually start playback until the first
            frame of video has loaded, or audio will begin to play before we can show video.
        (WebCore::MediaPlayerPrivateAVFoundation::pause): Clear m_playWhenFramesAvailable.
        (WebCore::MediaPlayerPrivateAVFoundation::updateStates): When first frame of video is
            available, inform elment and begin playback if it was previousl requested.
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::destroyContextVideoRenderer): Correct logging.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createVideoLayer): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformPlay): Renamed from play.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformPause): Rename from pause.

2011-04-12  Jian Li  <jianli@chromium.org>

        Unreviewed, rolling out r83649.
        http://trac.webkit.org/changeset/83649
        https://bugs.webkit.org/show_bug.cgi?id=57563

        This patch causes compiling errors for chromium

        * platform/graphics/chromium/FontChromiumWin.cpp:
        (WebCore::TransparencyAwareFontPainter::TransparencyAwareFontPainter::initializeForGDI):
        (WebCore::TransparencyAwareFontPainter::TransparencyAwareFontPainter::~TransparencyAwareFontPainter):
        (WebCore::Font::drawComplexText):
        * platform/graphics/chromium/ImageBufferData.h:
        * platform/graphics/chromium/LayerChromium.h:
        * platform/graphics/chromium/LayerRendererChromium.h:
        * platform/graphics/chromium/PlatformCanvas.cpp:
        (WebCore::PlatformCanvas::resize):
        * platform/graphics/chromium/PlatformCanvas.h:
        * platform/graphics/chromium/TransparencyWin.cpp:
        (WebCore::TransparencyWin::compositeTextComposite):
        (WebCore::TransparencyWin::makeLayerOpaque):
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::paintSkBitmap):
        (WebCore::Image::drawPattern):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::PlatformContextSkia):
        (WebCore::PlatformContextSkia::setCanvas):
        (WebCore::PlatformContextSkia::isPrinting):
        (WebCore::PlatformContextSkia::isNativeFontRenderingAllowed):
        * platform/graphics/skia/PlatformContextSkia.h:
        (WebCore::PlatformContextSkia::canvas):

2011-04-12  Enrica Casucci  <enrica@apple.com>

        Reviewed by Alexey Proskuryakov.

        Implement non-activating clicks to allow dragging out of a background window.
        https://bugs.webkit.org/show_bug.cgi?id=55053
        <rdar://problem/9042197>

        * WebCore.exp.in: Added new exported method.

2011-04-12  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Geoffrey Garen.

        Cleaned up hash traits, and added hash traits for handles
        https://bugs.webkit.org/show_bug.cgi?id=58381

        * dom/QualifiedName.h: Use new SimpleClassHashTraits to avoid duplication.

        * platform/KURL.h:
        (WebCore::KURL::KURL):
        (WebCore::KURL::isHashTableDeletedValue): Added explicit hash table
        deleted value constructor, to be more explicit and enable use of
        SimpleClassHashTraits.

        * platform/KURLHash.h: Use new SimpleClassHashTraits to avoid duplication.

        * platform/graphics/FontCache.cpp: Ditto.
        * platform/network/ProtectionSpaceHash.h: Ditto.
        * svg/properties/SVGAnimatedPropertyDescription.h: Ditto.

2011-04-12  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Andreas Kling.

        [Qt] QNetworkReplyHandler refactoring: remove nested event loop.
        https://bugs.webkit.org/show_bug.cgi?id=58375

        As QNAM now makes actual synchronous loads there is no need for a nested event loop
        in ResourceHandleQt.

        Moving the call for QNetworkReplyWrapper::synchronousLoad from
        ResourceHandle::loadResourceSynchronously to QNetworkReplyHandler::start for the
        redirections to work in synchronous requests.

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::start):
        * platform/network/qt/QNetworkReplyHandler.h:
        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::WebCoreSynchronousLoader::WebCoreSynchronousLoader):
        (WebCore::WebCoreSynchronousLoader::didReceiveResponse):
        (WebCore::WebCoreSynchronousLoader::didReceiveData):
        (WebCore::WebCoreSynchronousLoader::didFinishLoading):
        (WebCore::WebCoreSynchronousLoader::didFail):
        (WebCore::ResourceHandle::loadResourceSynchronously):

2011-04-11  Jer Noble  <jer.noble@apple.com>

        Reviewed by Simon Fraser.

        REGRESSION: Vimeo fullscreen video displays incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=58291

        Set the RenderFullScreen's zIndex to the max.  And make sure to override
        a video element's specified width and height by making its full screen rules
        important.  Also, always show the controls when a media element is in full
        screen mode.

        Test: fullscreen/video-specified-size.html
        Test: fullscreen/full-screen-zIndex.html

        * css/fullscreen.css:
        (video:-webkit-full-screen): 
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::controls): Always show controls in full screen mode.
        (WebCore::HTMLMediaElement::preDispatchEventHandler): Added. Handle the fullscreen
            change event and hide or show the controls accordingly.
        * html/HTMLMediaElement.h:
        * rendering/RenderFullScreen.cpp:
        (RenderFullScreen::createFullScreenStyle): Set the zIndex to INT_MAX and use a 
            vertical flexbox instead of a horizontal one.

2011-04-12  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Page tears and stutters in WebKit2 when page is > 2048 pixels wide
        https://bugs.webkit.org/show_bug.cgi?id=58330

        Added API to GraphicsLayer to disable switching to tiled layers. This is 
        set in the nonCompositedContentLayer in WK2, causing that layer to never
        switch to tiles and avoiding the asynchronous update of the content during
        scroll.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
            Implement setAllowTiledLayer() to simulate a SizeChanged action to 
            properly switch between tiled and untiled layer.
        * platform/graphics/ca/GraphicsLayerCA.h:

2011-04-12  Alok Priyadarshi  <alokp@chromium.org>

        Reviewed by James Robinson.

        Remove dependency on chromium skia::PlatformCanvas
        https://bugs.webkit.org/show_bug.cgi?id=57563

        This patch does not change any functionality, just the type of object skia::PlatformCanvas -> SkCanvas.
        The object is still being created by a factory method skia::CreateBitmapCanvas defined in Chromium.
        We will eventually define an API that every port using skia will define.

        * platform/graphics/chromium/FontChromiumWin.cpp:
        (WebCore::TransparencyAwareFontPainter::TransparencyAwareFontPainter::initializeForGDI):
        (WebCore::TransparencyAwareFontPainter::TransparencyAwareFontPainter::~TransparencyAwareFontPainter):
        (WebCore::Font::drawComplexText):
        * platform/graphics/chromium/ImageBufferData.h:
        * platform/graphics/chromium/LayerChromium.h:
        * platform/graphics/chromium/LayerRendererChromium.h:
        * platform/graphics/chromium/PlatformCanvas.cpp:
        (WebCore::PlatformCanvas::resize):
        * platform/graphics/chromium/PlatformCanvas.h:
        * platform/graphics/chromium/TransparencyWin.cpp:
        (WebCore::TransparencyWin::compositeTextComposite):
        (WebCore::TransparencyWin::makeLayerOpaque):
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::paintSkBitmap):
        (WebCore::Image::drawPattern):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::PlatformContextSkia):
        (WebCore::PlatformContextSkia::setCanvas):
        (WebCore::PlatformContextSkia::isNativeFontRenderingAllowed):
        * platform/graphics/skia/PlatformContextSkia.h:
        (WebCore::PlatformContextSkia::canvas):
        (WebCore::PlatformContextSkia::printing):
        (WebCore::PlatformContextSkia::setPrinting):

2011-04-11  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=58280
        <rdar://problem/9252824> javascript in an inconsistent state due to serialization returning an un-handled exception
        Currently serialization and deserialization can throw javascript exceptions.  Since SerializedScriptValue is called in
        several places that do not always involve direct calls into javascript have the functions return an error code and the callers
        decide whether or not to throw exceptions.

        Don't allow SerializedScriptValue to attempt to serialize objects that inherit from JSNavigator.h.  Walking that object creates
        additional objects which eventually causes serialization to end up throwing a stack overflow error.  Instead fail immediately.

        Untangle header includes.  SerializedScriptValue was inheriting ScriptValue.h, but not using it.  Since ScriptValue depends on
        SerializedScriptValue this could lead to a circular header dependency.

        No change in functionality, covered by current tests

        * WebCore.exp.in:
        * bindings/js/JSMessageEventCustom.cpp:
        (WebCore::JSMessageEvent::initMessageEvent):
        * bindings/js/ScriptValue.cpp:
        (WebCore::ScriptValue::serialize):
        (WebCore::ScriptValue::deserialize):
        * bindings/js/ScriptValue.h:
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::serialize):
        (WebCore::CloneSerializer::dumpIfTerminal):
        (WebCore::CloneDeserializer::deserialize):
        (WebCore::SerializedScriptValue::create):
        (WebCore::SerializedScriptValue::deserialize):
        (WebCore::SerializedScriptValue::maybeThrowExceptionIfSerializationFailed):
        (WebCore::SerializedScriptValue::serializationDidCompleteSuccessfully):
        * bindings/js/SerializedScriptValue.h:

        * bindings/js/JSWorkerContextBase.cpp: header include fix
        * loader/FrameLoader.h: header include fix
        * page/Frame.cpp: header include fix

2011-03-28  Adam Barth  <abarth@webkit.org>

        Reviewed by Kenneth Russell.

        Move libtess from WebCore/thirdparty to ThirdParty
        https://bugs.webkit.org/show_bug.cgi?id=57288

        * WebCore.gyp/WebCore.gyp:
            - Add libtess as a legit dependency.
        * WebCore.gypi:
            - Remove libtess files from the gypi.
        * thirdparty/glu: Removed.

2011-04-12  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by David Hyatt.

        Bundle w and tmpW in findNextLineBreak together as a class
        https://bugs.webkit.org/show_bug.cgi?id=58362

        Renamed w, tempW, and width in findNextLineBreak to committedWidth, uncommittedWidth,
        and availableWidth respectively. Also bundled committedWidth and uncommittedWith as a class
        named LineWidth.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::LineWidth::LineWidth): Added.
        (WebCore::LineWidth::currentWidth): Added; returns the sum of committed and uncommitted width.
        (WebCore::LineWidth::uncommittedWidth): Added.
        (WebCore::LineWidth::committedWidth): Added.
        (WebCore::LineWidth::addUncommittedWidth): Added; adds the specified width to the uncommitted width.
        (WebCore::LineWidth::commit): Added; commits the current width and clears the uncommitted width.
        (WebCore::RenderBlock::findNextLineBreak): Uses LineWidth.

2011-04-12  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Eric Seidel.

        REGRESSION(r82419): extra border in t0805-c5519-ibrdr-r-00-a.html
        https://bugs.webkit.org/show_bug.cgi?id=57459

        Slightly change the way we decide if a InlineFlowBox is the last box for its renderer.
        We include the border in that box under these conditions:
        (1) The next line was not created, or it is constructed. We check the previous line for rtl.
        (2) The logicallyLastRun is not a descendant of this renderer.
        (3) The logicallyLastRun is a descendant of this renderer, but it is the last child of this renderer and it does not wrap to the next line.
        I added the tests from bug 47210, because now the draw the borders correctly.

        Tests: fast/borders/bidi-002.html
               fast/borders/bidi-004.html
               fast/borders/bidi-009a.html

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::onEndChain):
        (WebCore::isAnsectorAndWithinBlock):
        (WebCore::InlineFlowBox::determineSpacingForFlowBoxes):
        * rendering/InlineFlowBox.h:
        * rendering/RenderBlock.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::constructLine):
        (WebCore::RenderBlock::layoutInlineChildren):

2011-04-12  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Cleaned up some Vector traits, and added missing Vector traits for handles
        https://bugs.webkit.org/show_bug.cgi?id=58372

        * platform/graphics/BitmapImage.h: Added a FIXME because the current
        Vector traits for FrameData are logically incorrect, but I couldn't find
        a place where this currently results in bad behavior, and it's not
        immediately obvious what the right solution is.

2011-04-12  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Seidel.

        Move MediaControlElements to html/shadow.
        https://bugs.webkit.org/show_bug.cgi?id=58347

        Mechanical move of the files.

        * Android.mk: Updated the build file.
        * CMakeLists.txt: Ditto.
        * GNUmakefile.list.am: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto, also ran sort-XCode-project-files.
        * html/shadow/MediaControlElements.cpp: Copied from Source/WebCore/rendering/MediaControlElements.cpp.
        (WebCore::MediaControlFullscreenButtonElement::defaultEventHandler):
        * html/shadow/MediaControlElements.h: Copied from Source/WebCore/rendering/MediaControlElements.h.
        * rendering/MediaControlElements.cpp: Removed.
        * rendering/MediaControlElements.h: Removed.
        * rendering/RenderingAllInOne.cpp: Removed the files that were moved.

2011-04-12  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Andreas Kling.

        [Qt] QNetworkReplyHandler refactoring: signal queue
        https://bugs.webkit.org/show_bug.cgi?id=57075

        The idea is to make all signals that come from the QNetworkReply to pass through a queue and to
        stop that queue when loading is deferred. This way almost all the deferred logic can be removed
        from QNetworkReplyHandler class and encapsulated in its own class.

        To stop the queue during wrapper methods execution avoids stacking handler methods over wrapper
        methods. Because of this there is no chance for the wrapper to be destroyed inside one of its methods.
        This together with empting the queue at wrapper destruction time makes sure that the handler will
        not receive calls from a dead wrapper.

        The new class is named QNetworkReplyHandlerCallQueue.

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandlerCallQueue::QNetworkReplyHandlerCallQueue):
        (WebCore::QNetworkReplyHandlerCallQueue::push):
        (WebCore::QNetworkReplyHandlerCallQueue::lock):
        (WebCore::QNetworkReplyHandlerCallQueue::unlock):
        (WebCore::QNetworkReplyHandlerCallQueue::setDeferSignals):
        (WebCore::QueueLocker::QueueLocker):
        (WebCore::QueueLocker::~QueueLocker):
        (WebCore::QNetworkReplyWrapper::QNetworkReplyWrapper):
        (WebCore::QNetworkReplyWrapper::~QNetworkReplyWrapper):
        (WebCore::QNetworkReplyWrapper::receiveMetaData):
        (WebCore::QNetworkReplyWrapper::readyRead):
        (WebCore::QNetworkReplyWrapper::didReceiveFinished):
        (WebCore::QNetworkReplyHandler::QNetworkReplyHandler):
        (WebCore::QNetworkReplyHandler::resetState):
        (WebCore::QNetworkReplyHandler::release):
        (WebCore::QNetworkReplyHandler::finish):
        (WebCore::QNetworkReplyHandler::sendResponseIfNeeded):
        (WebCore::QNetworkReplyHandler::forwardData):
        (WebCore::QNetworkReplyHandler::start):
        (WebCore::QNetworkReplyHandler::synchronousLoad):
        * platform/network/qt/QNetworkReplyHandler.h:
        (WebCore::QNetworkReplyHandlerCallQueue::deferSignals):
        (WebCore::QNetworkReplyHandlerCallQueue::clear):
        (WebCore::QNetworkReplyWrapper::synchronousLoad):
        (WebCore::QNetworkReplyHandler::setLoadingDeferred):
        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::ResourceHandle::loadResourceSynchronously):

2011-04-12  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=58176
        
        Inline replaced elements following positioned elements on lines are not rendered. Make sure the
        logic for skipping run construction in appendRunsForObject matches the new logic that I added
        to findNextLineBreak. If they don't match up, you risk confusing the run construction code and
        causing it to not make runs for objects that follow the positioned object on the line.

        Added fast/inline/positioned-object-between-replaced-elements.html
        
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::appendRunsForObject):

2011-04-12  Alice Liu  <alice.liu@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=58292
        Provide new setting to allow site icon loading despite disabling automatic image loading in general.

        Test: http/tests/misc/favicon-loads-with-icon-loading-override.html

        * WebCore.exp.in: Added export symbol
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::startIconLoader): Check new setting before deciding that site icon images shouldn't be loaded.
        * page/Settings.cpp:
        (WebCore::Settings::Settings): Add initializer for new setting
        (WebCore::Settings::setLoadsSiteIconsIgnoringImageLoadingSetting): Add setter for new setting.
        * page/Settings.h: Explain nuances regarding loadsImagesAutomatically setting.
        (WebCore::Settings::loadsSiteIconsIgnoringImageLoadingSetting): Added getter.

2011-04-12  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        Move StyleChange and other global functions from ApplyStyleCommand to EditingStyle
        https://bugs.webkit.org/show_bug.cgi?id=55974

        Moved StyleChange, getIdentifierValue, and legacyFontSizeFromCSSValue from ApplyStyleCommand
        to EditingStyle. Also moved reconcileTextDecorationProperties, getIdentifierValue,
        setTextDecorationProperty, isCSSValueLength, legacyFontSizeFromCSSValue, extractTextStyles,
        diffTextDecorations, fontWeightIsBold, getTextAlignment, and getPropertiesNotIn.

        Because of this move, getPropertiesNotIn is no longer visible outside of EditingStyle.cpp

        * editing/ApplyStyleCommand.cpp:
        * editing/ApplyStyleCommand.h:
        * editing/EditingStyle.cpp:
        (WebCore::reconcileTextDecorationProperties):
        (WebCore::StyleChange::StyleChange):
        (WebCore::setTextDecorationProperty):
        (WebCore::getRGBAFontColor):
        (WebCore::StyleChange::extractTextStyles):
        (WebCore::diffTextDecorations):
        (WebCore::fontWeightIsBold):
        (WebCore::getTextAlignment):
        (WebCore::getPropertiesNotIn):
        (WebCore::getIdentifierValue):
        (WebCore::isCSSValueLength):
        (WebCore::legacyFontSizeFromCSSValue):
        * editing/EditingStyle.h:
        (WebCore::StyleChange::cssStyle):
        (WebCore::StyleChange::applyBold):
        (WebCore::StyleChange::applyItalic):
        (WebCore::StyleChange::applyUnderline):
        (WebCore::StyleChange::applyLineThrough):
        (WebCore::StyleChange::applySubscript):
        (WebCore::StyleChange::applySuperscript):
        (WebCore::StyleChange::applyFontColor):
        (WebCore::StyleChange::applyFontFace):
        (WebCore::StyleChange::applyFontSize):
        (WebCore::StyleChange::fontColor):
        (WebCore::StyleChange::fontFace):
        (WebCore::StyleChange::fontSize):
        (WebCore::StyleChange::operator==):
        (WebCore::StyleChange::operator!=):

2011-04-12  Diego Gonzalez  <diegohcg@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Better padding for inputs and comboxes in mobile theme
        https://bugs.webkit.org/show_bug.cgi?id=58248

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::setButtonPadding):
        (WebCore::RenderThemeQt::adjustTextFieldStyle):
        (WebCore::RenderThemeQt::paintTextField):
        (WebCore::RenderThemeQt::adjustMenuListStyle):

2011-04-11  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Dave Hyatt.

        Replace insertChildNode with addChild in handleRunIn's reparenting
        of inlineRunIn to currBlock.
        https://bugs.webkit.org/show_bug.cgi?id=58228

        Use addChild instead of insertChildNode since it handles 
        correct placement of the children, esp where we cannot insert
        anything before the first child. e.g. details tag requires that its
        first child be a summary child and won't be able to remove child if
        that is not the case.

        Test: fast/runin/runin-reparent-crash.html

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

2011-04-12  Chris Fleizach  <cfleizach@apple.com>

        Unreviewed. Fixing Leopard build.

        REGRESSION: WK2: misspelled AX attributes no longer returned from text fields
        https://bugs.webkit.org/show_bug.cgi?id=58304

        checkTextOfParagraph is not available on Leopard. That code needs to be conditionalized with USE(UNIFIED_TEXT_CHECKING).

        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (AXAttributeStringSetSpelling):

2011-04-12  Mario Sanchez Prada  <msanchez@igalia.com>

        Unreviewed. Added missing files to GNUmakefile.list.am.

        * GNUmakefile.list.am: Added IDBLevelDBBackingStore.[h|cpp].

2011-04-12  Cris Neckar  <cdn@chromium.org>

        Reviewed by Nikolas Zimmermann.

        Add handling for non-svg inline text boxes in text box lists.
        https://bugs.webkit.org/show_bug.cgi?id=57933

        Test: svg/text/svg-rtl-text-crash.html

        * rendering/svg/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::positionForPoint):
        * rendering/svg/SVGInlineFlowBox.cpp:
        (WebCore::SVGInlineFlowBox::computeTextMatchMarkerRectForRenderer):
        * rendering/svg/SVGRenderTreeAsText.cpp:
        (WebCore::writeSVGInlineTextBoxes):
        * rendering/svg/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBox::closestLeafChildForPosition):
        (WebCore::reverseInlineBoxRangeAndValueListsIfNeeded):
        * rendering/svg/SVGTextQuery.cpp:
        (WebCore::SVGTextQuery::collectTextBoxesInFlowBox):

2011-04-12  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Chris Fleizach.

        [GTK] Expose menu items and menus as children of a menu bar
        https://bugs.webkit.org/show_bug.cgi?id=56659

        Ensure menu items get exposed when they're children of menu bars.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::determineAriaRoleAttribute):
        Consider menu bars as potential parent objects for menu items.

2011-04-12  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: remove scriptWorldType from the protocol.
        https://bugs.webkit.org/show_bug.cgi?id=58324

        * inspector/Inspector.json:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::didParseSource):
        * inspector/ScriptDebugListener.h:
        (WebCore::ScriptDebugListener::~ScriptDebugListener):
        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel.prototype._parsedScriptSource):
        (WebInspector.DebuggerDispatcher.prototype.scriptParsed):
        * inspector/front-end/Script.js:
        (WebInspector.Script):
        * inspector/front-end/ScriptsPanel.js:
        * inspector/front-end/SourceFile.js:
        (WebInspector.SourceFile):

2011-04-11  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Carlson.

        Should MediaControls::changedNetworkState fiddle with Fullscreen controls?
        https://bugs.webkit.org/show_bug.cgi?id=58163

        Covered by existing tests and manual-tests/media-controls.html.

        * html/shadow/MediaControls.cpp:
        (WebCore::MediaControls::reset): Moved fullscreen showing/hiding here.
        (WebCore::MediaControls::changedNetworkState): ... from here.

2011-04-12  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: remove unnecessary method InspectorAgent.didEvaluateForTestInFrontend.
        https://bugs.webkit.org/show_bug.cgi?id=58335

        It was the method for Inspector layout tests.
        We can use RuntimeAgent.evaluate instead.

        * inspector/Inspector.json:
        * inspector/InspectorAgent.cpp:
        * inspector/InspectorAgent.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::connectFrontend):
        * inspector/front-end/TestController.js:
        (WebInspector.TestController.prototype.notifyDone):

2011-04-12  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Martin Robinson.

        [GStreamer] some public callbacks remain
        https://bugs.webkit.org/show_bug.cgi?id=58307

        Cleanup of the player public/private APIs. Moving the GstMessage
        handling code inside of the player allowed some APIs to move to
        the private scope of the class.

        No new tests, this patch is a cleanup and should not affect
        current tests coverage.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::mediaPlayerPrivateMessageCallback):
        (WebCore::mediaPlayerPrivateSourceChangedCallback):
        (WebCore::mediaPlayerPrivateVolumeChangedCallback):
        (WebCore::mediaPlayerPrivateMuteChangedCallback):
        (WebCore::mediaPlayerPrivateRepaintCallback):
        (WebCore::MediaPlayerPrivateGStreamer::playbackPosition):
        (WebCore::MediaPlayerPrivateGStreamer::currentTime):
        (WebCore::MediaPlayerPrivateGStreamer::seek):
        (WebCore::MediaPlayerPrivateGStreamer::setRate):
        (WebCore::MediaPlayerPrivateGStreamer::handleMessage):
        (WebCore::MediaPlayerPrivateGStreamer::sourceChanged):
        (WebCore::MediaPlayerPrivateGStreamer::triggerRepaint):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:

2011-04-12  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Martin Robinson.

        [GStreamer] advertize HTTP Live Streaming mime-type
        https://bugs.webkit.org/show_bug.cgi?id=58318

        Register the hls mime-type in the internal cache if found in the
        typefind factories.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::mimeTypeCache):

2011-04-11  MORITA Hajime  <morrita@google.com>

        Reviewed by Ryosuke Niwa.
        
        RenderIndicator and ShadowBlockElement are no longer used.
        https://bugs.webkit.org/show_bug.cgi?id=58277

        Removed RenderIndicator and ShadowBlockElement.
        
        No new tests. Just removed unused code.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderIndicator.cpp: Removed.
        * rendering/RenderIndicator.h: Removed.
        * rendering/RenderMeter.h:
        * rendering/RenderingAllInOne.cpp:
        * rendering/ShadowElement.cpp:
        * rendering/ShadowElement.h:

2011-04-12  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Benjamin Poulain.

        fast/css/dashboard-regions-attr-crash.html asserts
        https://bugs.webkit.org/show_bug.cgi?id=58233

        Move DASHBOARD_SUPPORT feature detection from features.pri to CodeGenerators.pri
        not to generate incorrect properties into CSSPropertyNames.h.

        * CodeGenerators.pri:
        * features.pri:

2011-04-12  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Dan Bernstein.

        REGRESSION: WK2: misspelled AX attributes no longer returned from text fields
        https://bugs.webkit.org/show_bug.cgi?id=58304

        checkSpellingOfString is no longer implemented in WK2. Accessibility needs to change to use
        checkTextOfParagraph in order to retrieve misspelled ranges.

        Existing tests cover this functionality.

        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (AXAttributeStringSetSpelling):

2011-04-12  Sergio Villar Senin  <svillar@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Remove m_idleHandler from ResourceHandleSoup
        https://bugs.webkit.org/show_bug.cgi?id=58319

        The m_idleHandler attribute is no longer used in ResourceHandleSoup.
        No new tests needed, no functionality change.

        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandleInternal::~ResourceHandleInternal):

2011-04-12  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Breakpoints and execution line decoration should stay in place if the edited line is not whitespace
        https://bugs.webkit.org/show_bug.cgi?id=58314

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._lineNumberAfterEditing):

2011-04-11  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: move shortcut handlers from SourceFrame to TextViewer.
        https://bugs.webkit.org/show_bug.cgi?id=58238

        Commit/cancel editing functionality is common for all resource types, and it deals with TextViewer state.

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame):
        (WebInspector.SourceFrame.prototype.isContentEditable):
        (WebInspector.SourceFrame.prototype._createTextViewer):
        (WebInspector.SourceFrame.prototype.commitEditing.didEditContent):
        (WebInspector.SourceFrame.prototype.commitEditing):
        (WebInspector.SourceFrame.prototype.cancelEditing):
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer.prototype._doubleClick):
        (WebInspector.TextViewer.prototype._registerShortcuts):
        (WebInspector.TextViewer.prototype._handleKeyDown):
        (WebInspector.TextViewer.prototype._commitEditing.didCommitEditing):
        (WebInspector.TextViewer.prototype._commitEditing):
        (WebInspector.TextViewer.prototype._cancelEditing):
        (WebInspector.TextViewerDelegate.prototype.endEditing):
        (WebInspector.TextViewerDelegate.prototype.commitEditing):
        (WebInspector.TextViewerDelegate.prototype.cancelEditing):

2011-04-12  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: cookies view is empty even for sites with cookies.
        https://bugs.webkit.org/show_bug.cgi?id=58316

        Test: http/tests/inspector/resource-tree-model.html

        * inspector/front-end/ResourceTreeModel.js:
        (WebInspector.ResourceTreeModel.prototype._callForFrameResources):

2011-04-11  Stephen White  <senorblanco@chromium.org>

        Reviewed by James Robinson.

        [chromium] GPU-accelerated canvas-to-canvas drawImage is incorrect.
        https://bugs.webkit.org/show_bug.cgi?id=58258

        When one accelerated canvas is drawn to another via drawImage(), if the
        prior call in the source canvas was non-accelerated, the 
        hardware canvas is not up-to-date, and the results will be incorrect.
        Fixed by calling prepareForHardwareDraw() on the source context.

        Test: fast/canvas/canvas-to-canvas.html

        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::ImageBuffer::draw):

2011-04-12  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [Chromium] Add some more tests for detailed heap snapshots UI.
        https://bugs.webkit.org/show_bug.cgi?id=58146

        Tests: inspector/profiler/detailed-heapshots-comparison-expansion-preserved-when-sorting.html
               inspector/profiler/detailed-heapshots-comparison-show-all.html
               inspector/profiler/detailed-heapshots-comparison-show-next.html
               inspector/profiler/detailed-heapshots-comparison-shown-node-count-preserved-when-sorting.html
               inspector/profiler/detailed-heapshots-comparison-sorting.html
               inspector/profiler/detailed-heapshots-containment-shown-node-count-preserved-when-sorting.html
               inspector/profiler/detailed-heapshots-dominators-expansion-preserved-when-sorting.html
               inspector/profiler/detailed-heapshots-dominators-show-all.html
               inspector/profiler/detailed-heapshots-dominators-show-next.html
               inspector/profiler/detailed-heapshots-dominators-shown-node-count-preserved-when-sorting.html
               inspector/profiler/detailed-heapshots-dominators-sorting.html
               inspector/profiler/detailed-heapshots-summary-shown-node-count-preserved-when-sorting.html

        * inspector/front-end/DetailedHeapshotView.js:
        (WebInspector.HeapSnapshotDiffDataGrid):

2011-04-12  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: there was incorrect value of id property of responses for malformed json-rpc 2.0 requests.
        https://bugs.webkit.org/show_bug.cgi?id=58305

        It was 0 if the message is not a json object or it has no id property. But according to spec it must be null.

        * inspector/CodeGeneratorInspector.pm:

2011-04-11  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [chromium] script formatting doesn't work when chromium is built with debug_devtools=1.
        https://bugs.webkit.org/show_bug.cgi?id=58232

        * WebCore.gypi:

2011-04-12  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: REGRESSION: Most resources in the Network panel show a blank panel when clicked.
        https://bugs.webkit.org/show_bug.cgi?id=58273

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame):
        (WebInspector.SourceFrame.prototype.get visible):
        (WebInspector.SourceFrame.prototype.set visible):
        (WebInspector.SourceFrame.prototype.show):
        (WebInspector.SourceFrame.prototype.hide):
        (WebInspector.SourceFrame.prototype.detach):
        (WebInspector.SourceFrame.prototype._ensureContentLoaded):
        (WebInspector.SourceFrame.prototype.markDiff):
        (WebInspector.SourceFrame.prototype.addMessage):
        (WebInspector.SourceFrame.prototype.clearMessages):
        (WebInspector.SourceFrame.prototype.get scrollTop):
        (WebInspector.SourceFrame.prototype.set scrollTop):
        (WebInspector.SourceFrame.prototype.highlightLine):
        (WebInspector.SourceFrame.prototype._clearLineHighlight):
        (WebInspector.SourceFrame.prototype._initializeTextViewer):
        (WebInspector.SourceFrame.prototype.performSearch):
        (WebInspector.SourceFrame.prototype.searchCanceled):
        (WebInspector.SourceFrame.prototype._jumpToSearchResult):
        (WebInspector.SourceFrame.prototype.setExecutionLine):
        (WebInspector.SourceFrame.prototype.clearExecutionLine):
        (WebInspector.SourceFrame.prototype.resize):

2011-04-12  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: document runtime agent, share remote object definition between domains.
        https://bugs.webkit.org/show_bug.cgi?id=58246

        * inspector/Inspector.json:

2011-04-12  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: document console domain, support cross-domain type references.
        https://bugs.webkit.org/show_bug.cgi?id=58240

        * inspector/ConsoleMessage.cpp:
        (WebCore::messageSourceValue):
        (WebCore::messageTypeValue):
        (WebCore::messageLevelValue):
        (WebCore::ConsoleMessage::addToFrontend):
        * inspector/Inspector.json:
        * inspector/ScriptCallFrame.cpp:
        (WebCore::ScriptCallFrame::buildInspectorObject):
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype._registerConsoleDomainDispatcher.dispatcher.messageAdded):
        (WebInspector.ConsoleMessage):
        (WebInspector.ConsoleMessage.prototype._populateStackTraceTreeElement):
        (WebInspector.ConsoleMessage.prototype.isEqual):
        * inspector/front-end/NetworkManager.js:
        (WebInspector.NetworkDispatcher.prototype.requestWillBeSent):
        * inspector/generate-inspector-idl:
        * page/Console.h:

2011-04-06  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Martin Robinson.

        [GStreamer] RTSP playback broken
        https://bugs.webkit.org/show_bug.cgi?id=56930

        Rely on {audio,video}-changed playbin2 signals instead of the
        -tags-changed signals because some media don't provide tags and
        then can trick the media-player to not paint video, for instance.

        Also trigger a video size calculation after the video sink
        negotiated its caps. This is useful in the cases where
        audio-changed signal is emitted but the video sink takes more time
        to negociate caps with its peer.

        This patch also fixes the rtsp manual-test with a new stream url
        which seems to be more permanent than the previous WWDC keynote
        stream.

        * manual-tests/video-rtsp.html:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::mediaPlayerPrivateVideoChangedCallback):
        (WebCore::mediaPlayerPrivateAudioChangedCallback):
        (WebCore::mediaPlayerPrivateAudioChangeTimeoutCallback):
        (WebCore::mediaPlayerPrivateVideoChangeTimeoutCallback):
        (WebCore::MediaPlayerPrivateGStreamer::MediaPlayerPrivateGStreamer):
        (WebCore::MediaPlayerPrivateGStreamer::~MediaPlayerPrivateGStreamer):
        (WebCore::MediaPlayerPrivateGStreamer::naturalSize):
        (WebCore::MediaPlayerPrivateGStreamer::videoChanged):
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfVideo):
        (WebCore::MediaPlayerPrivateGStreamer::audioChanged):
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfAudio):
        (WebCore::MediaPlayerPrivateGStreamer::paint):
        (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:

2011-04-12  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Failed/canceled resource requests kept showing as Pending in network panel.
        https://bugs.webkit.org/show_bug.cgi?id=58135

        Added statuses for failed/canceled resource loading.

        * English.lproj/localizedStrings.js:
        * inspector/Inspector.json:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::didFailLoading):
        * inspector/front-end/NetworkManager.js:
        * inspector/front-end/NetworkPanel.js:
        * inspector/front-end/Resource.js:

2011-04-12  Steve Block  <steveblock@google.com>

        Reviewed by Oliver Hunt.

        Callable objects created via JavaScriptCore API cannot be used as Geolocation callbacks
        https://bugs.webkit.org/show_bug.cgi?id=40012

        Covered by fast/dom/Geolocation/argument-types.html

        * bindings/js/CallbackFunction.cpp:
        (WebCore::checkFunctionOnlyCallback):

2011-04-07  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Martin Robinson.

        [GStreamer] report playback statistics
        https://bugs.webkit.org/show_bug.cgi?id=58033

        Provide media playback statistics using fpsdisplaysink and
        position queries.

        * manual-tests/video-statistics.html: Added.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::decodedFrameCount):
        (WebCore::MediaPlayerPrivateGStreamer::droppedFrameCount):
        (WebCore::MediaPlayerPrivateGStreamer::audioDecodedByteCount):
        (WebCore::MediaPlayerPrivateGStreamer::videoDecodedByteCount):
        (WebCore::MediaPlayerPrivateGStreamer::updateAudioSink):
        (WebCore::MediaPlayerPrivateGStreamer::updateStates):
        (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:

2011-04-11  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Martin Robinson.

        [GStreamer] warnings in media/video-set-rate-from-pause.html
        https://bugs.webkit.org/show_bug.cgi?id=58220

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::setRate): Pause the
        pipeline if new rate is zero, like advised in the GStreamer
        documentation of gst_event_new_seek().

2011-04-11  Vangelis Kokkevis  <vangelis@chromium.org>

        Reviewed by James Robinson.

        [chromium] Properly invalidate the contents of ImageLayerChromium's
        when the actual image contents change.
        https://bugs.webkit.org/show_bug.cgi?id=58181

        Test: compositing/images/content-image-change.html

        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::updateTexture):
        * platform/graphics/chromium/ImageLayerChromium.cpp:
        (WebCore::ImageLayerChromium::ImageLayerChromium):
        (WebCore::ImageLayerChromium::setContents):
        (WebCore::ImageLayerChromium::paintContentsIfDirty):
        * platform/graphics/chromium/ImageLayerChromium.h:

2011-04-11  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        -webkit-box-shadow:inset does not animate transform as an inset shadow
        https://bugs.webkit.org/show_bug.cgi?id=45176
        
        Two fixes:
        1. Don't run transitions between different shadow styles (normal vs. inset).
        2. When either source or destination is null, use a default shadow with a
        matching style so that the transition runs.

        Test: transitions/mismatched-shadow-styles.html

        * page/animation/AnimationBase.cpp:
        (WebCore::blendFunc):
        (WebCore::PropertyWrapperShadow::blend):

2011-04-11  John Bates  <jbates@google.com>

        Reviewed by Kenneth Russell.

        chromium support for glSetLatch and glWaitLatch between 3D contexts
        https://bugs.webkit.org/show_bug.cgi?id=58003

        * platform/graphics/chromium/Canvas2DLayerChromium.cpp:
        (WebCore::Canvas2DLayerChromium::~Canvas2DLayerChromium):
        (WebCore::Canvas2DLayerChromium::setDrawingBuffer):
        (WebCore::Canvas2DLayerChromium::setLayerRenderer):
        * platform/graphics/chromium/Canvas2DLayerChromium.h:
        * platform/graphics/chromium/Extensions3DChromium.h:
        * platform/graphics/chromium/GLES2Canvas.cpp:
        (WebCore::Cubic::Cubic):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::LayerRendererChromium):
        (WebCore::LayerRendererChromium::updateAndDrawLayers):
        (WebCore::LayerRendererChromium::updateLayers):
        (WebCore::LayerRendererChromium::addChildContext):
        (WebCore::LayerRendererChromium::removeChildContext):
        * platform/graphics/chromium/LayerRendererChromium.h:
        * platform/graphics/chromium/WebGLLayerChromium.cpp:
        (WebCore::WebGLLayerChromium::~WebGLLayerChromium):
        (WebCore::WebGLLayerChromium::updateCompositorResources):
        (WebCore::WebGLLayerChromium::setContext):
        (WebCore::WebGLLayerChromium::setLayerRenderer):
        * platform/graphics/chromium/WebGLLayerChromium.h:

2011-04-11  Alexey Marinichev  <amarinichev@chromium.org>

        Reviewed by James Robinson.

        LayerChromium/CCLayerImpl ownership fix
        https://bugs.webkit.org/show_bug.cgi?id=58283

        CCLayerImpl's m_owner field lifetime should match the lifetime of the
        corresponding LayerChromium.  This change moves resetting of m_owner
        into LayerChromium's destructor.

        Tested similarly to bug 57577.

        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::~LayerChromium):
        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        (WebCore::CCLayerImpl::cleanupResources):
        * platform/graphics/chromium/cc/CCLayerImpl.h:
        (WebCore::CCLayerImpl::resetOwner):

2011-04-11  Daniel Bates  <dbates@rim.com>

        Attempt to fix the GTK build after changeset 83527 <http://trac.webkit.org/changeset/83527>
        (https://bugs.webkit.org/show_bug.cgi?id=53556).

        * GNUmakefile.list.am: Append files HTMLTrackElement.{h, cpp} to the list webcore_sources.

2011-04-11  Brady Eidson  <beidson@apple.com>

        Reviewed by Maciej Stachowiak.

        <rdar://problem/9251515> and https://bugs.webkit.org/show_bug.cgi?id=58072
        URLs accessed as a result of pushState/replaceState should count as "visited" and be in the global history

        Test: fast/loader/stateobjects/state-url-sets-links-visited.html

        * loader/HistoryController.cpp:
        (WebCore::HistoryController::pushState): Notify the history client and add the visited link.
        (WebCore::HistoryController::replaceState): Ditto.

2011-04-11  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Carlson.

        Rename MediaControls to MediaControlRootElement.
        https://bugs.webkit.org/show_bug.cgi?id=58250

        Mechanical move using do-webcore-rename.

2011-04-11  Dean Jackson  <dino@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=58285
        CompositeAnimation is cleared while an AnimationBase is waiting for notification

        Occasionally hardware animations would trigger a state where
        they would tell the AnimationControllerPrivate that it should notify
        any waiting animations that they are ready to start, even though
        the RenderObject had gone away and hence the CompositeAnimation
        had been destroyed. The fix is to zero the pointer from AnimationBase
        when the CompositeAnimation destructor runs (or its animations are
        cleared) and test the validity of the CompositeAnimation before it
        is used in AnimationBase.

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::updateStateMachine):
        (WebCore::AnimationBase::fireAnimationEventsIfNeeded):
        (WebCore::AnimationBase::updatePlayState):
        (WebCore::AnimationBase::freezeAtTime):
        (WebCore::AnimationBase::beginAnimationUpdateTime):
        - test that the CompositeAnimation exists
        * page/animation/AnimationBase.h:
        (WebCore::AnimationBase::clear):
        - rename clearRenderer() to clear() as it now also clears the CompositeAnimation
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::clearRenderer):
        (WebCore::CompositeAnimation::updateKeyframeAnimations):
        - call clear() rather than clearRenderer()

2011-04-11  Justin Novosad  <junov@chromium.org>

        Reviewed by Kenneth Russell.

        [Chromium] Text anti-aliasing fails when rendering text with shadow
        https://bugs.webkit.org/show_bug.cgi?id=57584

        * platform/graphics/chromium/FontChromiumWin.cpp:
        (WebCore::drawGlyphsWin): new static function, code factored-out
        from WebCore::Font::drawGlyphs
        (WebCore::Font::drawGlyphs): may separate font rendering into two
        passes to allow foreground glyphs to be rendered with GDI when Skia 
        is required for rendering shadows
        * platform/graphics/skia/SkiaFontWin.cpp:
        (WebCore::windowsCanHandleDrawTextShadow):
        Modified method so that it does not assume a shadow is present, and
        returns true if there is no shadow (GDI can draw 'no shadow')
        (WebCore::windowsCanHandleTextDrawing):
        Factored out into sub methods so that the the shadow and foregound
        glyph properties can be tested separately independently.
        (WebCore::windowsCanHandleTextDrawingWithoutShadow):
        New method returns true if the foreground glyph only has effect
        that can be draw with GDI
        (WebCore::paintSkiaText):
        * platform/graphics/skia/SkiaFontWin.h:

2011-04-11  Ryosuke Niwa  <rniwa@webkit.org>

        Unreviewed, rolling out r83515.
        http://trac.webkit.org/changeset/83515
        https://bugs.webkit.org/show_bug.cgi?id=57178

        Broke GTK builds. nextOnLineExists and prevOnLineExists are still used in AccessibilityObjectWrapperAtk.cpp.

        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::nextOnLineExists):
        (WebCore::InlineBox::prevOnLineExists):
        * rendering/InlineBox.h:
        (WebCore::InlineBox::InlineBox):

2011-04-11  Brady Eidson  <beidson@apple.com>

        Reverting, seeing something else still broken.  Sorry.

        * html/HTMLTrackElement.cpp:

2011-04-11  Brady Eidson  <beidson@apple.com>

        Fix the build.

        * html/HTMLTrackElement.cpp: Case-sensitive, please.

2011-04-11  Alexis Menard  <alexis.menard@openbossa.org>

        Unreviewed build fix for Mac.

        An idl file was added in the wrong place.

        * WebCore.xcodeproj/project.pbxproj:

2011-04-11  Chris Marrin  <cmarrin@apple.com>

        Rubberstamped by Dan Bernstein.

        xhr.responseType = 'arraybuffer' works on Mac but not on Windows
        https://bugs.webkit.org/show_bug.cgi?id=50334

        Got rid of guards around arraybuffer logic in XHR. ArrayBuffer and friends
        are always turned on now, so there's not need for the guard. I reenabled the
        test that was Skipped on Windows and it works now.

        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::markChildren):
        (WebCore::JSXMLHttpRequest::send):
        (WebCore::JSXMLHttpRequest::response):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::responseArrayBuffer):
        (WebCore::XMLHttpRequest::setResponseType):
        (WebCore::XMLHttpRequest::send):
        (WebCore::XMLHttpRequest::clearResponseBuffers):
        (WebCore::XMLHttpRequest::didReceiveData):
        * xml/XMLHttpRequest.h:
        (WebCore::XMLHttpRequest::optionalResponseArrayBuffer):

2011-04-11  Anna Cavender  <annacc@chromium.org>

        Reviewed by Eric Carlson.

        Setup ENABLE(TRACK) feature define + initial HTMLTrackElement
        https://bugs.webkit.org/show_bug.cgi?id=53556

        No new tests. No real functionality added just yet.

        * CMakeLists.txt:
        * CodeGenerators.pri:
        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.make:
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * features.pri:
        * html/HTMLAttributeNames.in:
        * html/HTMLTagNames.in:
        * html/HTMLTrackElement.cpp: Added.
        (WebCore::HTMLTrackElement::HTMLTrackElement):
        (WebCore::HTMLTrackElement::create):
        (WebCore::HTMLTrackElement::insertedIntoTree):
        (WebCore::HTMLTrackElement::willRemove):
        (WebCore::HTMLTrackElement::src):
        (WebCore::HTMLTrackElement::setSrc):
        (WebCore::HTMLTrackElement::kind):
        (WebCore::HTMLTrackElement::setKind):
        (WebCore::HTMLTrackElement::srclang):
        (WebCore::HTMLTrackElement::setSrclang):
        (WebCore::HTMLTrackElement::label):
        (WebCore::HTMLTrackElement::setLabel):
        (WebCore::HTMLTrackElement::isDefault):
        (WebCore::HTMLTrackElement::setIsDefault):
        (WebCore::HTMLTrackElement::isURLAttribute):
        * html/HTMLTrackElement.h: Added.
        * html/HTMLTrackElement.idl: Added.

2011-04-11  Ben Taylor  <bentaylor.solx86@gmail.com>

        Reviewed by David Levin.

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

        Better compile fix for Solaris 10/Sun Studio 12 CC 
        needing <sys/time.h>

        * loader/icon/IconRecord.h:
        * page/Page.h:
        * platform/network/ResourceResponseBase.h:

2011-04-11  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Maciej Stachowiak.

        WebKit2: Cannot use Ctrl-Delete as a custom keyboard shortcut
        https://bugs.webkit.org/show_bug.cgi?id=58265
        <rdar://problem/9221468>

        * page/EventHandler.cpp:
        (WebCore::EventHandler::defaultKeyboardEventHandler): Handle Backspace.
        (WebCore::EventHandler::defaultSpaceEventHandler): Enabled this on Mac, and added checks for
        other modifiers - no one wants to scroll on Ctrl+Alt+Space and such.
        (WebCore::EventHandler::defaultBackspaceEventHandler): Backspace goes back, Shift-backspace
        goes forward. All browsers do it.
        (WebCore::EventHandler::defaultArrowEventHandler): Assert that this function was called
        for a correct event.
        (WebCore::EventHandler::defaultTabEventHandler): Ditto.

        * page/EventHandler.h: Added defaultBackspaceEventHandler.

2011-04-11  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Dan Bernstein.

        [CG] drawImage with a subimage bleeds pixel data at borders
        https://bugs.webkit.org/show_bug.cgi?id=58267

        Test: fast/canvas/DrawImageSinglePixelStretch.html

        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::BitmapImage::draw): Any interpolation quality other than 'none' will graft out the subimage first now.

2011-04-11  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        iframe/compositing propagation should also work for <object> and framesets
        https://bugs.webkit.org/show_bug.cgi?id=39037

        Generalized the code that handles the parenting of composited <iframe> elements
        to include <frame> and <object> elements. This includes forcing the parent
        element to be composited and constructing the layer tree in the child document
        and properly parenting it. Much of the change is giving the function calls more
        generic names (from ...IFrame... to ...Frame...)
        
        Compositing tests that were done in RenderIFrame have been moved to RenderPart
        since this is the highest base class common to all 3 elements.
        
        I also renamed several ...IFrame... functions to
        ...Frame... and changed them so they work on a RenderPart for determining
        if the renderer is composited. One other detail is that <iframe> and 
        <object> never share style since they might be composited. I had to add
        <frame> to that list.

        Tests: compositing/framesets/composited-frame-alignment.html
               compositing/objects/composited-object-alignment.html

        * css/CSSStyleSelector.cpp: Add <frame> to list of element types that should never share style since it might be composited.
        (WebCore::CSSStyleSelector::canShareStyleWithElement):
        * page/FrameView.cpp:
        (WebCore::FrameView::hasCompositedContentIncludingDescendants):
        (WebCore::FrameView::setIsOverlapped):
        * rendering/RenderIFrame.cpp: Moved methods to RenderPart
        * rendering/RenderIFrame.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateAfterWidgetResize):
        (WebCore::RenderLayerBacking::updateGraphicsLayerConfiguration):
        (WebCore::RenderLayerBacking::paintingGoesToWindow):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateBacking):
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree):
        (WebCore::RenderLayerCompositor::frameContentsCompositor):
        (WebCore::RenderLayerCompositor::parentFrameContentLayers):
        (WebCore::RenderLayerCompositor::didMoveOnscreen):
        (WebCore::RenderLayerCompositor::allowsIndependentlyCompositedFrames):
        (WebCore::RenderLayerCompositor::shouldPropagateCompositingToEnclosingFrame):
        (WebCore::RenderLayerCompositor::enclosingFrameElement):
        (WebCore::RenderLayerCompositor::requiresCompositingLayer):
        (WebCore::RenderLayerCompositor::requiresCompositingForFrame):
        (WebCore::RenderLayerCompositor::requiresScrollLayer):
        (WebCore::RenderLayerCompositor::ensureRootPlatformLayer):
        (WebCore::RenderLayerCompositor::attachRootPlatformLayer):
        (WebCore::RenderLayerCompositor::detachRootPlatformLayer):
        * rendering/RenderLayerCompositor.h:
        * rendering/RenderPart.cpp: Functions moved from RenderIFrame
        (WebCore::RenderPart::requiresLayer):
        (WebCore::RenderPart::requiresAcceleratedCompositing):
        * rendering/RenderPart.h:

2011-04-11  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Eric Seidel.

        InlineBox::prevOnline and InlineBox::prevOnlineExists() are confusing and should be renamed
        https://bugs.webkit.org/show_bug.cgi?id=57178

        Remove prevOnLineExists() and nextOnLineExists() as they are not used anymore.
        No new tests needed because this is cleanup only.

        * rendering/InlineBox.cpp:
        * rendering/InlineBox.h:
        (WebCore::InlineBox::InlineBox):
        (WebCore::InlineBox::setPrevOnLine):

2011-04-11  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

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

        Fix for layout regression on marketwatch.com. When I converted TrailingFloatsRootInlineBox over
        to the new overflow model, I messed up the math and passed a bottom value where I should have
        passed a height value. This patch fixes the code to be logically equivalent to the way it
        was prior to my changes.

        Added fast/overflow/trailing-float-linebox.html.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::layoutInlineChildren):

2011-04-11  Adrienne Walker  <enne@google.com>

        Unreviewed, rolling out r83500.
        http://trac.webkit.org/changeset/83500
        https://bugs.webkit.org/show_bug.cgi?id=57113

        Regresses huge-layer-rotated test

        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::ContentLayerChromium):
        (WebCore::ContentLayerChromium::~ContentLayerChromium):
        (WebCore::ContentLayerChromium::cleanupResources):
        (WebCore::ContentLayerChromium::requiresClippedUpdateRect):
        (WebCore::ContentLayerChromium::paintContentsIfDirty):
        (WebCore::ContentLayerChromium::resizeUploadBuffer):
        (WebCore::ContentLayerChromium::updateTextureIfNeeded):
        (WebCore::ContentLayerChromium::updateTexture):
        (WebCore::ContentLayerChromium::draw):
        (WebCore::ContentLayerChromium::updateCompositorResources):
        (WebCore::ContentLayerChromium::unreserveContentsTexture):
        (WebCore::ContentLayerChromium::bindContentsTexture):
        (WebCore::ContentLayerChromium::dumpLayerProperties):
        * platform/graphics/chromium/ContentLayerChromium.h:
        (WebCore::ContentLayerChromium::drawsContent):
        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::setMaskLayer):
        * platform/graphics/chromium/ImageLayerChromium.cpp:
        (WebCore::ImageLayerChromium::paintContentsIfDirty):
        (WebCore::ImageLayerChromium::updateTextureIfNeeded):
        * platform/graphics/chromium/ImageLayerChromium.h:
        * platform/graphics/chromium/LayerChromium.h:
        (WebCore::LayerChromium::draw):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::drawRootLayer):
        (WebCore::LayerRendererChromium::drawLayers):
        (WebCore::LayerRendererChromium::paintContentsRecursive):
        (WebCore::LayerRendererChromium::copyOffscreenTextureToDisplay):
        (WebCore::LayerRendererChromium::drawLayer):
        (WebCore::LayerRendererChromium::initializeSharedObjects):
        (WebCore::LayerRendererChromium::cleanupSharedObjects):
        * platform/graphics/chromium/LayerRendererChromium.h:
        (WebCore::LayerRendererChromium::contentLayerProgram):
        * platform/graphics/chromium/LayerTilerChromium.cpp:
        (WebCore::LayerTilerChromium::invalidateRect):
        (WebCore::LayerTilerChromium::update):
        (WebCore::LayerTilerChromium::updateFromPixels):
        (WebCore::LayerTilerChromium::draw):
        * platform/graphics/chromium/LayerTilerChromium.h:
        * platform/graphics/chromium/PlatformCanvas.cpp:
        (WebCore::PlatformCanvas::AutoLocker::AutoLocker):
        (WebCore::PlatformCanvas::Painter::Painter):
        * platform/graphics/chromium/PlatformCanvas.h:
        * platform/graphics/chromium/RenderSurfaceChromium.cpp:
        (WebCore::RenderSurfaceChromium::draw):
        * platform/graphics/chromium/RenderSurfaceChromium.h:
        * platform/graphics/chromium/cc/CCCanvasLayerImpl.cpp:
        (WebCore::CCCanvasLayerImpl::draw):
        * platform/graphics/chromium/cc/CCCanvasLayerImpl.h:
        * platform/graphics/chromium/cc/CCHeadsUpDisplay.cpp:
        (WebCore::CCHeadsUpDisplay::draw):
        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        (WebCore::CCLayerImpl::draw):
        * platform/graphics/chromium/cc/CCLayerImpl.h:
        * platform/graphics/chromium/cc/CCPluginLayerImpl.cpp:
        (WebCore::CCPluginLayerImpl::draw):
        * platform/graphics/chromium/cc/CCPluginLayerImpl.h:
        * platform/graphics/chromium/cc/CCVideoLayerImpl.cpp:
        (WebCore::CCVideoLayerImpl::draw):
        * platform/graphics/chromium/cc/CCVideoLayerImpl.h:

2011-04-11  Jon Honeycutt  <jhoneycutt@apple.com>

        <rdar://problem/9267042> Assertion failure on launch in
        LayerChangesFlusher::setHook().

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

        Reviewed by Adam Roben.

        * platform/graphics/ca/win/LayerChangesFlusher.cpp:
        (WebCore::LayerChangesFlusher::setHook):
        MSDN says that the HINSTANCE passed in must be null if the thread ID
        passed is a thread created by this process and the hook procedure is
        within this process.

2011-04-11  MORITA Hajime  <morrita@google.com>

        Unreviewed build fix.

        Changeset 83492 broke Leopard build.
        https://bugs.webkit.org/show_bug.cgi?id=58268

        * editing/Editor.cpp:
        (WebCore::Editor::markMisspellingsAfterTypingToWord):

2011-03-25  Adrienne Walker  <enne@google.com>

        Reviewed by James Robinson.

        [chromium] Tile content and image layers
        https://bugs.webkit.org/show_bug.cgi?id=57113

        Layers tile by default if any dimension is larger than 512.  Smaller
        layers are contained within a single texture but still use the tiler
        infrastructure so that there's only one code path.

        Remove large layer support from content layers.  Content layers no
        longer own a platform canvas--they own a tiler.  Refactor tiler to
        allow for better separation of update/upload/paint.  Add rect
        parameter to update and draw functions on layers for the layer-space
        rect of interest.  This is necessary to know which tiles need to be
        drawn.

        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::ContentLayerChromium):
        (WebCore::ContentLayerChromium::~ContentLayerChromium):
        (WebCore::ContentLayerPainter::ContentLayerPainter):
        (WebCore::ContentLayerPainter::paint):
        (WebCore::ContentLayerChromium::paintContentsIfDirty):
        (WebCore::ContentLayerChromium::setLayerRenderer):
        (WebCore::ContentLayerChromium::tilingTransform):
        (WebCore::ContentLayerChromium::visibleLayerRect):
        (WebCore::ContentLayerChromium::layerBounds):
        (WebCore::ContentLayerChromium::updateLayerSize):
        (WebCore::ContentLayerChromium::draw):
        (WebCore::ContentLayerChromium::createTilerIfNeeded):
        (WebCore::ContentLayerChromium::updateCompositorResources):
        (WebCore::ContentLayerChromium::setTilingOption):
        (WebCore::ContentLayerChromium::bindContentsTexture):
        (WebCore::ContentLayerChromium::unreserveContentsTexture):
        (WebCore::ContentLayerChromium::setIsMask):
        (WebCore::ContentLayerChromium::dumpLayerProperties):
        * platform/graphics/chromium/ContentLayerChromium.h:
        (WebCore::ContentLayerChromium::drawsContent):
        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::setMaskLayer):
        * platform/graphics/chromium/ImageLayerChromium.cpp:
        (WebCore::ImageLayerChromium::paintContentsIfDirty):
        (WebCore::ImageLayerChromium::updateCompositorResources):
        (WebCore::ImageLayerChromium::layerBounds):
        (WebCore::ImageLayerChromium::tilingTransform):
        * platform/graphics/chromium/ImageLayerChromium.h:
        * platform/graphics/chromium/LayerChromium.h:
        (WebCore::LayerChromium::invalidateRect):
        (WebCore::LayerChromium::paintContentsIfDirty):
        (WebCore::LayerChromium::setIsMask):
        (WebCore::LayerChromium::draw):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::drawRootLayer):
        (WebCore::LayerRendererChromium::drawLayers):
        (WebCore::LayerRendererChromium::paintContentsRecursive):
        (WebCore::LayerRendererChromium::copyOffscreenTextureToDisplay):
        (WebCore::LayerRendererChromium::drawLayer):
        (WebCore::LayerRendererChromium::initializeSharedObjects):
        (WebCore::LayerRendererChromium::cleanupSharedObjects):
        * platform/graphics/chromium/LayerRendererChromium.h:
        * platform/graphics/chromium/LayerTilerChromium.cpp:
        (WebCore::LayerTilerChromium::getSingleTexture):
        (WebCore::LayerTilerChromium::invalidateRect):
        (WebCore::LayerTilerChromium::update):
        (WebCore::LayerTilerChromium::uploadCanvas):
        (WebCore::LayerTilerChromium::updateFromPixels):
        (WebCore::LayerTilerChromium::draw):
        (WebCore::LayerTilerChromium::unreserveTextures):
        * platform/graphics/chromium/LayerTilerChromium.h:
        (WebCore::LayerTilerChromium::setLayerRenderer):
        (WebCore::LayerTilerChromium::skipsDraw):
        * platform/graphics/chromium/PlatformCanvas.cpp:
        (WebCore::PlatformCanvas::AutoLocker::AutoLocker):
        (WebCore::PlatformCanvas::Painter::Painter):
        * platform/graphics/chromium/PlatformCanvas.h:
        * platform/graphics/chromium/RenderSurfaceChromium.cpp:
        (WebCore::RenderSurfaceChromium::draw):
        * platform/graphics/chromium/RenderSurfaceChromium.h:
        * platform/graphics/chromium/cc/CCCanvasLayerImpl.cpp:
        (WebCore::CCCanvasLayerImpl::draw):
        * platform/graphics/chromium/cc/CCCanvasLayerImpl.h:
        * platform/graphics/chromium/cc/CCHeadsUpDisplay.cpp:
        (WebCore::CCHeadsUpDisplay::draw):
        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        (WebCore::CCLayerImpl::draw):
        * platform/graphics/chromium/cc/CCLayerImpl.h:
        * platform/graphics/chromium/cc/CCPluginLayerImpl.cpp:
        (WebCore::CCPluginLayerImpl::draw):
        * platform/graphics/chromium/cc/CCPluginLayerImpl.h:
        * platform/graphics/chromium/cc/CCVideoLayerImpl.cpp:
        (WebCore::CCVideoLayerImpl::draw):
        * platform/graphics/chromium/cc/CCVideoLayerImpl.h:

2011-04-11  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Simon Fraser.

        Ignore context change callbacks when not on the main thread
        https://bugs.webkit.org/show_bug.cgi?id=58256
        <rdar://problem/9266090>

        * platform/graphics/ca/win/WKCACFViewLayerTreeHost.cpp:
        (WebCore::WKCACFViewLayerTreeHost::contextDidChange): Do nothing when not called
            on the main thread. This should only happen when no changes have actually 
            been committed to the context, eg. when a video frame has been added to an image
            queue, so return without triggering animations etc.

2011-04-11  Daniel Cheng  <dcheng@chromium.org>

        Reviewed by Dmitry Titov.

        [chromium] Implement image/png support in DataTransferItems
        https://bugs.webkit.org/show_bug.cgi?id=58106

        This patch implements DataTransferItem::getAsFile() using Blobs. In
        addition, plumbing for image/png has been added so image paste will be
        supported as long as the renderer makes that data available.

        Tests: editing/pasteboard/data-transfer-items-image-png.html

        * dom/DataTransferItem.h:
        * dom/DataTransferItem.idl:
        * platform/chromium/ClipboardMimeTypes.cpp:
        * platform/chromium/ClipboardMimeTypes.h:
        * platform/chromium/DataTransferItemChromium.cpp:
        (WebCore::DataTransferItemChromium::getAsString):
        (WebCore::DataTransferItemChromium::getAsFile):
        * platform/chromium/DataTransferItemChromium.h:
        * platform/chromium/PlatformBridge.h:

2011-04-11  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Chris Fleizach.

        [Gtk] Implement support for Embedded Objects
        https://bugs.webkit.org/show_bug.cgi?id=52148

        Expose special OBJECT character for replaced elements, implementing
        AtkText and AtkHyperlink when required.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::textIteratorBehaviorForTextRange): New helper function,
        to return the right behavior, depending on the platform, so it
        ensures that object replacement characters get emitted for GTK.
        (WebCore::AccessibilityRenderObject::textUnderElement): Use the
        new helper function textIteratorBehaviorForTextRange.
        (WebCore::AccessibilityRenderObject::stringValue): Ditto.
        (WebCore::AccessibilityRenderObject::indexForVisiblePosition):
        Consider replaced elements when calculating range length in GTK.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (textForRenderer): Ouput the 'object replacement character' for
        replaced objects.
        (getSelectionOffsetsForObject): Consider replaced elements when
        calculating range length in GTK.
        (webkitAccessibleHypertextGetLink): Remove wrong extra check that
        were causing only links to be considered.
        (webkitAccessibleHypertextGetNLinks): Replace wrong 'isLink()'
        check with the right one, by checking that the right ATK interface
        is being implemented by the AtkObject.
        (getInterfaceMaskFromObject): Implement the Hyperlink interface
        both for links and replaced objects.
        (objectAndOffsetUnignored): Consider replaced elements when
        calculating range length in GTK.

        * accessibility/gtk/WebKitAccessibleHyperlink.cpp:
        (getRangeLengthForObject): Ensure spaces are used for replaced
        elements when calling to TextIterator::rangeLength().

        * editing/TextIterator.h: New value in the TextIteratorBehavior
        enumeration (TextIteratorEmitsObjectReplacementCharacters) and new
        private variable to consider that new option internally.
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::TextIterator): Initialize the new private
        attribute m_emitsObjectReplacementCharacters in constructors.
        (WebCore::TextIterator::handleReplacedElement): Emit the 'object
        replacement character' when m_emitsObjectReplacementCharacters.

2011-04-11  Jia Pu  <jpu@apple.com>

        Reviewed by Adele Peterson.

        Shouldn't carry out autocorrection when start typing a new word
        https://bugs.webkit.org/show_bug.cgi?id=58241
        <rdar://problem/9264736>

        Tests: platform/mac/editing/spelling/autocorrection-at-beginning-of-word-1.html
               platform/mac/editing/spelling/autocorrection-at-beginning-of-word-2.html

        In TypingCommand::markMisspellingsAfterTyping(), we want to call Editor::markMisspellingsAfterTypingToWord()
        only when the typing command is an insertion command, and preceding word contains at least one non-whitespace
        character.

        * editing/Editor.cpp:
        (WebCore::Editor::markMisspellingsAfterTypingToWord):
        * editing/Editor.h:
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::markMisspellingsAfterTyping):

2011-04-11  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Pavel Feldman.

        PerformanceTiming returns inconsistent values when timing is null.
        https://bugs.webkit.org/show_bug.cgi?id=58143

        Made PerformanceTiming returned values consistent when there is no timing object.

        * page/PerformanceTiming.cpp:
        (WebCore::PerformanceTiming::domainLookupStart):
        (WebCore::PerformanceTiming::domainLookupEnd):
        (WebCore::PerformanceTiming::connectStart):
        (WebCore::PerformanceTiming::connectEnd):
        (WebCore::PerformanceTiming::requestStart):
        (WebCore::PerformanceTiming::responseStart):
        (WebCore::PerformanceTiming::domLoading):

2011-04-05  Stephen White  <senorblanco@chromium.org>

        Fix for jittering when animating a rotated image.
        https://bugs.webkit.org/show_bug.cgi?id=50775

        Make GraphicsContext::roundToDevicePixels a no-op on Chrome/Mac.

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::roundToDevicePixels):

2011-04-06  Xiaomei Ji  <xji@chromium.org>

        Reviewed by Ryosuke Niwa.

        Continue experiment with moving caret by word in visual order.
        https://bugs.webkit.org/show_bug.cgi?id=57806

        This is the 2nd patch, which adds implementation when caret is inside box
        (not at boundaries). If the word break is inside the same box and not at the boundaries
        either, the word break will be returned. If need to search the adjacent boxes for word
        breaks, then, only the cases implemented in bug 57336 work.

        * editing/visible_units.cpp:
        (WebCore::leftmostPositionInRTLBoxInLTRBlock):
        (WebCore::rightmostPositionInLTRBoxInRTLBlock):
        (WebCore::lastWordBreakInBox):
        (WebCore::positionIsVisuallyOrderedInBoxInBlockWithDifferentDirectionality):
        (WebCore::nextWordBreakInBoxInsideBlockWithDifferentDirectionality):
        (WebCore::WordBoundaryEntry::WordBoundaryEntry):
        (WebCore::collectWordBreaksInBoxInsideBlockWithSameDirectionality):
        (WebCore::collectWordBreaksInBoxInsideBlockWithDifferntDirectionality):
        (WebCore::greatestValueUnder):
        (WebCore::smallestOffsetAbove):
        (WebCore::positionIsInsideBox):
        (WebCore::positionBeforeNextWord):
        (WebCore::positionAfterPreviousWord):
        (WebCore::leftWordPosition):
        (WebCore::rightWordPosition):

2011-04-11  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Chris Fleizach.

        [GTK] Unskip accessibility/input-slider.html and accessibility/media-element.html
        https://bugs.webkit.org/show_bug.cgi?id=58040

        Don't expose objects of role SliderThumbRoles in GTK.

        * accessibility/AccessibilitySlider.cpp:
        (WebCore::AccessibilitySlider::addChildren): Allow the platform
        make a final decision before including children in the hierarchy.
        (WebCore::AccessibilitySliderThumb::accessibilityIsIgnored):
        Implemented by relying on accessibilityPlatformIncludesObject().

        * accessibility/gtk/AccessibilityObjectAtk.cpp:
        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject):
        Ignore accessibility objects with role SliderThumbRole.

2011-04-11  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Divide by zero in calcColumnWidth
        https://bugs.webkit.org/show_bug.cgi?id=58230

        Test: fast/multicol/huge-column-count.html
        
        Make sure we have at least one column, to avoid divide by zero.

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

2011-04-09  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        Bug 58198 - Clean up JSValue implementation for JSVALUE64

        JSNumberCell.h has been deprecated.

        * ForwardingHeaders/runtime/JSNumberCell.h: Removed.
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/c/c_instance.cpp:

2011-04-11  Dan Bernstein  <mitz@apple.com>

        Build fix.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::State::State):

2011-04-11  Antti Koivisto  <antti@apple.com>

        Reviewed by Tony Gentilcore.

        Document source preload scanned repeatedly
        https://bugs.webkit.org/show_bug.cgi?id=58123
        
        Don't clear the preload scanner after execution resumes. This would lose the current
        scanning point and lead to rescanning when the preload scanner would get reconstructed
        due to main parser blocking again.

        Instead clear the scanner only in the specific case of receiving new data while the main
        parser has already reached the end of the current input.

        Also switched to using isWaitingForScripts() instead of m_treeBuilder->isPaused() for consistency.

        The case the clearing in resumeParsingAfterScriptExecution() was added for is covered by 
        http/tests/loading/preload-slow-loading.php.

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::insert):
        (WebCore::HTMLDocumentParser::append):
        (WebCore::HTMLDocumentParser::resumeParsingAfterScriptExecution):

2011-04-11  Dan Bernstein  <mitz@apple.com>

        Build fix.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::State::State):

2011-04-11  Dan Bernstein  <mitz@apple.com>

        Reviewed by Alexey Proskuryakov.

        Assertion failure in CanvasRenderingContext2D::State::fontsNeedUpdate when invalidating the font cache after opening canvas/philip/tests/initial.reset.2dstate.html (occurs on Qt debug test bot)
        https://bugs.webkit.org/show_bug.cgi?id=58229

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::State::State): Added copy constructor, to register the copy with
        the font selector if needed.
        (WebCore::CanvasRenderingContext2D::State::operator=): Added assignment constructor, to handle
        registration with the font selector as needed.
        * html/canvas/CanvasRenderingContext2D.h:

2011-04-11  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Chris Fleizach.

        [GTK] ARIA tables not exposing cells as HTML tables do
        https://bugs.webkit.org/show_bug.cgi?id=57463

        Expose cells for ARIA grids consistently with HTML tables in GTK,
        keeping the same behaviour for the other platforms.

        * accessibility/AccessibilityARIAGrid.cpp:
        (WebCore::AccessibilityARIAGrid::addChild): Add the row's children
        to the accessibility hierarchy when accessibility objects for rows
        are ignoring accessibility, otherwise add the row.
        (WebCore::AccessibilityARIAGrid::addChildren): Do not check at
        this point whether every child of the table ignores or not
        accessibility, letting addChild() make the proper decision later.

        * accessibility/AccessibilityARIAGridCell.cpp:
        (WebCore::AccessibilityARIAGridCell::parentTable): Consider that
        rows could be ignoring accessibility, hence the parent could be
        retrieved in the first call to parentObjectUnignored().
        (WebCore::AccessibilityARIAGridCell::rowIndexRange): Ditto.
        (WebCore::AccessibilityARIAGridCell::columnIndexRange): Ditto..

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (atkRole): Map ColumnHeader and RowHeader to ATK_ROLE_TABLE_CELL.

2011-04-11  Sergio Villar Senin  <svillar@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Fix make distcheck
        https://bugs.webkit.org/show_bug.cgi?id=58224

        Removed a file that is no longer in the source tree.

        * GNUmakefile.list.am:

2011-04-11  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Martin Robinson.

        REGRESSION(r83397): Most GTK media controls are hidden when no valid source is specified
        https://bugs.webkit.org/show_bug.cgi?id=58204

        Covered by existing tests.

        * platform/gtk/RenderThemeGtk.h:
        (WebCore::RenderThemeGtk::hasOwnDisabledStateHandlingFor): Let GTK handle
            the the state of media controls.

2011-04-11  Dimitri Glazkov  <dglazkov@chromium.org>

        Remove obsolete comment, which was mistakenly landed in r83397.

        Though potentially a work of art, the comment lost its functional meaning a long time ago.

        * html/shadow/MediaControls.cpp:
        (WebCore::MediaControls::create): Removed comment.

2011-04-05  Hans Wennborg  <hans@chromium.org>

        Reviewed by Steve Block.

        IndexedDB: Introduce skeleton for LevelDB backend
        https://bugs.webkit.org/show_bug.cgi?id=57827

        No new tests: no new functionality (yet).

        * WebCore.gyp/WebCore.gyp:
            Add dependency on leveldb when ENABLE_LEVELDB=1 in feature_defines.
        * WebCore.gypi:
            Add new files.
        * storage/IDBBackingStore.h:
        (WebCore::IDBBackingStore::ObjectStoreRecordIdentifier::~ObjectStoreRecordIdentifier):
            Introduce abstract type ObjectStoreRecordIdentifier. The SQLite
            backend uses integers to refer to a specific row in a table, but
            the LevelDB backend will use something else.
        * storage/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::createObjectStore):
        (WebCore::IDBDatabaseBackendImpl::createObjectStoreInternal):
        (WebCore::IDBDatabaseBackendImpl::deleteObjectStoreInternal):
        (WebCore::IDBDatabaseBackendImpl::loadObjectStores):
            Change functions to pass along the database id for operations that
            concern object stores. We want to be able to group object stores
            ids per database.
        * storage/IDBFactoryBackendImpl.cpp:
        (WebCore::IDBFactoryBackendImpl::open):
            Decide which backend to use based on the backingStoreType
            parameter.
        * storage/IDBIndexBackendImpl.cpp:
        (WebCore::IDBIndexBackendImpl::IDBIndexBackendImpl):
        (WebCore::IDBIndexBackendImpl::openCursorInternal):
        (WebCore::IDBIndexBackendImpl::getInternal):
        (WebCore::IDBIndexBackendImpl::addingKeyAllowed):
        * storage/IDBIndexBackendImpl.h:
        (WebCore::IDBIndexBackendImpl::create):
            Pass database and object store id to backend functions concerning
            indexes.
        * storage/IDBLevelDBBackingStore.cpp: Added.
        (WebCore::IDBLevelDBBackingStore::IDBLevelDBBackingStore):
        (WebCore::IDBLevelDBBackingStore::~IDBLevelDBBackingStore):
        (WebCore::IDBLevelDBBackingStore::open):
        (WebCore::IDBLevelDBBackingStore::extractIDBDatabaseMetaData):
        (WebCore::IDBLevelDBBackingStore::setIDBDatabaseMetaData):
        (WebCore::IDBLevelDBBackingStore::getObjectStores):
        (WebCore::IDBLevelDBBackingStore::createObjectStore):
        (WebCore::IDBLevelDBBackingStore::deleteObjectStore):
        (WebCore::IDBLevelDBBackingStore::getObjectStoreRecord):
        (WebCore::IDBLevelDBBackingStore::putObjectStoreRecord):
        (WebCore::IDBLevelDBBackingStore::clearObjectStore):
        (WebCore::IDBLevelDBBackingStore::deleteObjectStoreRecord):
        (WebCore::IDBLevelDBBackingStore::nextAutoIncrementNumber):
        (WebCore::IDBLevelDBBackingStore::keyExistsInObjectStore):
        (WebCore::IDBLevelDBBackingStore::forEachObjectStoreRecord):
        (WebCore::IDBLevelDBBackingStore::getIndexes):
        (WebCore::IDBLevelDBBackingStore::createIndex):
        (WebCore::IDBLevelDBBackingStore::deleteIndex):
        (WebCore::IDBLevelDBBackingStore::putIndexDataForRecord):
        (WebCore::IDBLevelDBBackingStore::deleteIndexDataForRecord):
        (WebCore::IDBLevelDBBackingStore::getObjectViaIndex):
        (WebCore::IDBLevelDBBackingStore::getPrimaryKeyViaIndex):
        (WebCore::IDBLevelDBBackingStore::keyExistsInIndex):
        (WebCore::IDBLevelDBBackingStore::openObjectStoreCursor):
        (WebCore::IDBLevelDBBackingStore::openIndexKeyCursor):
        (WebCore::IDBLevelDBBackingStore::openIndexCursor):
        (WebCore::IDBLevelDBBackingStore::createTransaction):
        * storage/IDBLevelDBBackingStore.h: Added.
            Add an empty implementation of the LevelDB backend.
        * storage/IDBObjectStoreBackendImpl.cpp:
            Keep track of database id, use the new RecordIdentifier.
        (WebCore::IDBObjectStoreBackendImpl::IDBObjectStoreBackendImpl):
        (WebCore::IDBObjectStoreBackendImpl::getInternal):
        (WebCore::IDBObjectStoreBackendImpl::putInternal):
        (WebCore::IDBObjectStoreBackendImpl::deleteInternal):
        (WebCore::IDBObjectStoreBackendImpl::clearInternal):
        (WebCore::populateIndex):
        (WebCore::IDBObjectStoreBackendImpl::createIndex):
        (WebCore::IDBObjectStoreBackendImpl::createIndexInternal):
        (WebCore::IDBObjectStoreBackendImpl::deleteIndexInternal):
        (WebCore::IDBObjectStoreBackendImpl::openCursorInternal):
        (WebCore::IDBObjectStoreBackendImpl::loadIndexes):
        (WebCore::IDBObjectStoreBackendImpl::genAutoIncrementKey):
        * storage/IDBObjectStoreBackendImpl.h:
        (WebCore::IDBObjectStoreBackendImpl::create):
        (WebCore::IDBObjectStoreBackendImpl::databaseId):
        * storage/IDBSQLiteBackingStore.cpp:
        (WebCore::IDBSQLiteBackingStore::open):
        (WebCore::IDBSQLiteBackingStore::createObjectStore):
        (WebCore::IDBSQLiteBackingStore::deleteObjectStore):
        (WebCore::IDBSQLiteBackingStore::getObjectStoreRecord):
        (WebCore::IDBSQLiteBackingStore::putObjectStoreRecord):
        (WebCore::IDBSQLiteBackingStore::clearObjectStore):
        (WebCore::IDBSQLiteBackingStore::deleteObjectStoreRecord):
        (WebCore::IDBSQLiteBackingStore::nextAutoIncrementNumber):
        (WebCore::IDBSQLiteBackingStore::keyExistsInObjectStore):
        (WebCore::IDBSQLiteBackingStore::forEachObjectStoreRecord):
        (WebCore::IDBSQLiteBackingStore::getIndexes):
        (WebCore::IDBSQLiteBackingStore::createIndex):
        (WebCore::IDBSQLiteBackingStore::deleteIndex):
        (WebCore::IDBSQLiteBackingStore::putIndexDataForRecord):
        (WebCore::IDBSQLiteBackingStore::deleteIndexDataForRecord):
        (WebCore::IDBSQLiteBackingStore::getObjectViaIndex):
        (WebCore::IDBSQLiteBackingStore::getPrimaryKeyViaIndex):
        (WebCore::IDBSQLiteBackingStore::keyExistsInIndex):
        (WebCore::IDBSQLiteBackingStore::openObjectStoreCursor):
        (WebCore::IDBSQLiteBackingStore::openIndexKeyCursor):
        (WebCore::IDBSQLiteBackingStore::openIndexCursor):
        * storage/IDBSQLiteBackingStore.h:

2011-04-11  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Duplicate CSS properties are reported for non-lowercase property names in the Styles sidebar
        https://bugs.webkit.org/show_bug.cgi?id=58226

        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyle::populateAllProperties):

2011-04-07  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: get rid of source frame delegates for resources panel.
        https://bugs.webkit.org/show_bug.cgi?id=58041

        Use TextViewer configured with a domain-specific delegate to show/edit resource contents in resources panel.

        * inspector/front-end/ResourceView.js:
        (WebInspector.ResourceView.createResourceView):
        (WebInspector.ResourceView.resourceViewTypeMatchesResource):
        (WebInspector.ResourceSourceFrame):
        (WebInspector.ResourceSourceFrame.prototype.get resource):
        (WebInspector.ResourceSourceFrame.prototype.contentEditable):
        (WebInspector.ResourceSourceFrame.prototype._requestContent):
        (WebInspector.CSSSourceFrame):
        (WebInspector.CSSSourceFrame.prototype.contentEditable):
        (WebInspector.CSSSourceFrame.prototype._editContent):
        (WebInspector.CSSSourceFrame.prototype._editContent.handleInfos):
        (WebInspector.CSSSourceFrame.prototype._saveStyleSheet):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._ensureContentLoaded):
        (WebInspector.SourceFrame.prototype._requestContent):
        (WebInspector.SourceFrame.prototype._handleSave):
        (WebInspector.SourceFrame.prototype._editContent):

2011-04-11  Alexis Menard  <alexis.menard@openbossa.org>

        Reviewed by Andreas Kling.

        [Qt] Regression : r83051 Oxygen's lineedits are not rendered properly
        https://bugs.webkit.org/show_bug.cgi?id=58076

        State_Sunken is more generic than pressed. It is used by items such as frames or
        line edits because they are "sunken" frames (e.g. QLineEdit). It can be required
        by some style like Oxygen. Therefore only in the mobile theme we check if the object
        is pressed.

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

2011-04-11  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: add support for optional output parameters.
        https://bugs.webkit.org/show_bug.cgi?id=58207

        Output parameters such as "redirectResponse" are optional, but
        do not allow specifying them as such.

        * inspector/CodeGeneratorInspector.pm:
        * inspector/Inspector.json:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::buildObjectForResourceResponse):
        (WebCore::buildObjectForCachedResource):
        * inspector/front-end/NetworkManager.js:
        (WebInspector.NetworkDispatcher.prototype._updateResourceWithResponse):
        * inspector/generate-inspector-idl:

2011-04-11  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: refactor / document call frames in debugger domain.
        https://bugs.webkit.org/show_bug.cgi?id=58187

        Note that we are not special casing with(element) and with(document) anymore
        and do not tell user that it is "Event target" and "Event document". Strictly speaking,
        we should not have done it for with(element) not necessarily being related to an event.

        * English.lproj/localizedStrings.js:
        * inspector/InjectedScriptSource.js:
        * inspector/Inspector.json:
        * inspector/front-end/ScopeChainSidebarPane.js:
        (WebInspector.ScopeChainSidebarPane.prototype.update):

2011-04-10  ChangSeok Oh  <shivamidow@gmail.com>

        Reviewed by Eric Seidel.

        Make correspondence of file name related with event to other port.
        https://bugs.webkit.org/show_bug.cgi?id=57416

        Some file names are changed to make correspondence naming rule.
        Keyboard, mouse and wheel event file names for GTK port have been different from other ports.
        This has made user hard to find a specific file related with event for GTK port. 

        No test required. This patch just changes some file names.

        * GNUmakefile.list.am:
        * platform/gtk/KeyEventGtk.cpp: Removed.
        * platform/gtk/MouseEventGtk.cpp: Removed.
        * platform/gtk/PlatformKeyboardEventGtk.cpp: Added.
        * platform/gtk/PlatformMouseEventGtk.cpp: Added.
        * platform/gtk/PlatformWheelEventGtk.cpp: Added.
        * platform/gtk/WheelEventGtk.cpp: Removed.

2011-04-10  Simon Fraser  <simon.fraser@apple.com>

        Revert the FloatRect.cpp part of r83422, since
        clampToInteger() is broken for some inputs. I filed
        https://bugs.webkit.org/show_bug.cgi?id=58216

        * platform/graphics/FloatRect.cpp:
        (WebCore::safeFloatToInt):
        (WebCore::enclosingIntRect):

2011-04-10  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Maciej Stachowiak.

        Car model dropdowns at audiusa.com lay out incorrectly with compositing enabled
        https://bugs.webkit.org/show_bug.cgi?id=56660
        
        When overflow on an element changes, we need to inform compositing
        layers which create and position an "ancestor clipping" layer based
        on that overflow. Do this by triggering a rebuild of compositing layers
        when overflow changes on a layer whose stacking context has compositing
        descendants. (We can't just check whether the layer itself has compositing
        descendants, because overflow follows the render tree, but compositing
        follows the z-order tree.)

        Test: compositing/geometry/ancestor-overflow-change.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::styleChanged):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):

2011-04-10  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Ariya Hidayat.

        Allow ShadowBlur to re-use the last buffer if it already contains the correct shadow
        https://bugs.webkit.org/show_bug.cgi?id=58161
        
        ShadowBlur already has a singleton scratch buffer that is re-used
        between shadows. Enhance use of this scratch buffer to avoid drawing
        and blurring the shadow if the results will match what is already
        in the buffer.
        
        Cleaned up ShadowBlur code to remove beginShadowLayer() and endShadowLayer(),
        which ended up with little reusable code after adding the re-use logic.

        * platform/graphics/FloatRect.cpp:
        (WebCore::enclosingIntRect): Replace safeFloatToInt() with the existing
        clampToInteger() from MathExtras.h
        
        * platform/graphics/FloatSize.h:
        (WebCore::expandedIntSize): New method to safely ceil() the size.
        
        * platform/graphics/RoundedIntRect.h:
        Add operator== for Radii and RoundedIntRect.

        * platform/graphics/ShadowBlur.cpp:
        (WebCore::ScratchBuffer::ScratchBuffer):
        (WebCore::ScratchBuffer::setLastShadowValues):
        (WebCore::ScratchBuffer::setLastInsetShadowValues):
        (WebCore::ScratchBuffer::matchesLastShadow):
        (WebCore::ScratchBuffer::matchesLastInsetShadow):
        (WebCore::ScratchBuffer::clearScratchBuffer):
        Have the scratch buffer remember what shadow parameters were used
        to render the buffer contents.
        
        (WebCore::ShadowBlur::drawShadowBuffer):
        Renamed from endShadowLayer(), and only contains the drawing
        logic now.
        
        (WebCore::ShadowBlur::drawRectShadow):
        Promote some code from beginShadowLayer().
        
        (WebCore::ShadowBlur::drawInsetShadow):
        Promote some code from beginShadowLayer().

        (WebCore::ShadowBlur::drawRectShadowWithoutTiling):
        (WebCore::ShadowBlur::drawInsetShadowWithoutTiling):
        (WebCore::ShadowBlur::drawInsetShadowWithTiling):
        (WebCore::ShadowBlur::drawRectShadowWithTiling):
        These methods now check to see if the buffer already matches
        their required parameters, and avoid work if it does.
        
        (WebCore::ShadowBlur::blurShadowBuffer):
        Factored some code into this new method.
        
        (WebCore::ShadowBlur::blurAndColorShadowBuffer):
        Minor refactoring.

        * platform/graphics/ShadowBlur.h:

2011-04-10  Geoffrey Garen  <ggaren@apple.com>

        Build fix: Updated for file move.

        * bindings/js/GCController.cpp:
        * bindings/js/ScriptGCEvent.cpp:

2011-04-10  Geoffrey Garen  <ggaren@apple.com>

        Rubber-stamped by Beth Dakin.

        Moved Heap.h and Heap.cpp to the heap folder, because anything less 
        would be uncivilized.

        * ForwardingHeaders/heap/Heap.h: Copied from WebCore/ForwardingHeaders/runtime/Heap.h.
        * ForwardingHeaders/runtime/Heap.h: Removed.

2011-04-10  Luke Macpherson   <macpherson@chromium.org>

        Reviewed by Simon Fraser.

        Rename CSSStyleApplyProperty::inherit,initial,value applyInheritValue,applyInitialValue,applyValue
        https://bugs.webkit.org/show_bug.cgi?id=58212

        No new tests - function renaming only / no functionality changes.

        * css/CSSStyleApplyProperty.cpp:
        Rename all instances of inherit, initial and value.
        * css/CSSStyleApplyProperty.h:
        Rename all instances of inherit, initial and value.
        * css/CSSStyleSelector.cpp:
        Rename all instances of inherit, initial and value.

2011-04-10  Mike Lawther  <mikelawther@chromium.org>

        Reviewed by Ojan Vafai.

        flex/bison tokens and grammar for CSS calc
        https://bugs.webkit.org/show_bug.cgi?id=54412

        Tests: css3/calc/calc-errors.html
               css3/calc/lexer-regression-57581-2.html
               css3/calc/lexer-regression-57581-3.html
               css3/calc/lexer-regression-57581.html
               css3/calc/minmax-errors.html
               css3/calc/nested-rounded-corners.html
               css3/calc/simple-calcs.html
               css3/calc/simple-minmax.html

        * css/CSSGrammar.y:
        * css/CSSParserValues.cpp:
        (WebCore::CSSParserValueList::insertValueAt):
        (WebCore::CSSParserValueList::extend):
        * css/CSSParserValues.h:
        * css/tokenizer.flex:

2011-04-10  Alice Boxhall  <aboxhall@chromium.org>

        Reviewed by Ryosuke Niwa.

        Change EventHandler::updateSelectionForMouseDrag to take a HitTestResult only.
        https://bugs.webkit.org/show_bug.cgi?id=57923

        Change EventHandler::updateSelectionForMouseDrag to take a HitTestResult
        rather than a Node* and an IntPoint&, as the selection may actually not
        extend into the Node found by the HitTest.

        No new tests. Refactoring only.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMouseDraggedEvent):
        (WebCore::EventHandler::updateSelectionForMouseDrag):
        * page/EventHandler.h:

2011-04-10  Kent Tamura  <tkent@chromium.org>

        Unreviewed, rolling out r83353.
        http://trac.webkit.org/changeset/83353
        https://bugs.webkit.org/show_bug.cgi?id=58106

        The new test doesn't pass on all Chromium platforms.

        * dom/DataTransferItem.h:
        * dom/DataTransferItem.idl:
        * platform/chromium/ClipboardMimeTypes.cpp:
        * platform/chromium/ClipboardMimeTypes.h:
        * platform/chromium/DataTransferItemChromium.cpp:
        (WebCore::DataTransferItemChromium::getAsString):
        * platform/chromium/DataTransferItemChromium.h:
        * platform/chromium/PlatformBridge.h:

2011-04-10  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Reviewed by Eric Carlson.

        [EFL] Add seek forward / backward buttons to MediaControl UI.
        https://bugs.webkit.org/show_bug.cgi?id=56810

        Add seek forward / backward buttons to media control. And, change formType name
        for media control.

        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::edjeGroupFromFormType):
        (WebCore::RenderThemeEfl::emitMediaButtonSignal):
        (WebCore::RenderThemeEfl::paintMediaMuteButton):
        (WebCore::RenderThemeEfl::paintMediaPlayButton):
        (WebCore::RenderThemeEfl::paintMediaSeekBackButton):
        (WebCore::RenderThemeEfl::paintMediaSeekForwardButton):
        * platform/efl/RenderThemeEfl.h:

2011-04-10  Chris Guillory  <chris.guillory@google.com>

        Reviewed by Eric Seidel.

        Remove unused function declaration in PlatformContextSkia.h.
        https://bugs.webkit.org/show_bug.cgi?id=55983

        * platform/graphics/skia/PlatformContextSkia.h:

2011-04-10  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed build fix for !ENABLE(XSLT) after r82562.

        * dom/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::doEnd):

2011-04-10  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed build fix for !ENABLE(XSLT) after r82562.

        * xml/XMLTreeViewer.cpp: Readded #if ENABLE(XSLT).

2011-04-10  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Anders Carlsson.

        REGRESSION(r83256): Text-decoration bleeds into shadow DOM
        https://bugs.webkit.org/show_bug.cgi?id=58205

        Now that the shadow root is a never-styled element, we need to walk to
        parent to find out if we're inside of a shadow DOM subtree.

        Test: media/controls-styling.html

        * css/CSSStyleSelector.cpp:
        (WebCore::isAtShadowBoundary): Added helper function.
        (WebCore::CSSStyleSelector::adjustRenderStyle): Changed to use the helper.

2011-04-07  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Carlson.

        [Meta] Convert HTMLMediaElement to use the new shadow DOM
        https://bugs.webkit.org/show_bug.cgi?id=53020

        This conversion is non-trivial, for several reasons:

        1) Since HTMLMediaElement now hosts the shadow DOM for controls, hiding
        and showing controls does not result in destroying and re-creating the
        shadow DOM tree. Instead, the tree is created as needed and shown/hidden
        using inline styles.
        
        2) Instead of detaching/attaching on each style change, the control parts
        are now using a set of higher fidelity callbacks that notify MediaControls
        about changes to which it should react. Each reaction results in hiding,
        showing, or changing the state of the control parts using inline styles
        and DOM APIs.

        3) Hiding and showing controls is accomplished using inline styles, rather
        than wiring rendererIsNeeded, because renderers are now re-created less
        frequently.

        4) Instead of constantly querying RenderTheme about visibility of a particular
        control part, we let the theme determine which parts are supported and
        which parts are visible in certain conditions.

        5) Custom hit-testing, event forwarding, and style updates are completely
        removed, since they are now unnecessary.

        6) Fading controls in/out is now done as CSS animation, since shadow DOM
        supports it.

        Test: manual-tests/media-controls.html

2011-04-09  Dan Bernstein  <mitz@apple.com>

        Reviewed by Beth Dakin.

        <rdar://problem/9215280> Detached canvas draws with incorrect font

        Test: fast/canvas/font-update.html

        The existing mechanism for updating the font in a canvas 2D context was lacking in at least
        two ways: it neglected to update fonts in all but the topmost state in the stack, and since it
        was based on HTMLCanvasElemen's attach() and recalcStyle(), it did not work when the element
        was not attached.

        This change takes the responsibility for font updates away from the canvas element and gives it
        to the canvas context and its graphics state.

        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::registerForInvalidationCallbacks): Added. Adds to the set of registered
        font selector clients.
        (WebCore::CSSFontSelector::unregisterForInvalidationCallbacks): Added. Removes from the set of
        registered font selector clients.
        (WebCore::CSSFontSelector::dispatchInvalidationCallbacks): Calls fontsNeedUpdate() on all registered
        clients and forces a style recalc on the document.
        (WebCore::CSSFontSelector::fontLoaded): Changed to call dispatchInvalidationCallbacks().
        (WebCore::CSSFontSelector::fontCacheInvalidated): Ditto.
        * css/CSSFontSelector.h:
        * html/HTMLCanvasElement.cpp: Removed overrides of attach() and recalcStyle().
        * html/HTMLCanvasElement.h:
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::State::~State): Added. Unregisters with the font selector.
        (WebCore::CanvasRenderingContext2D::State::fontsNeedUpdate): Added. Called by the font selector
        when its fonts need to be updated. Updates the font.
        (WebCore::CanvasRenderingContext2D::setFont): Registers the state with the font selector.
        * html/canvas/CanvasRenderingContext2D.h:
        * platform/graphics/FontSelector.h:
        (WebCore::FontSelectorClient::~FontSelectorClient):

2011-04-09  Geoffrey Garen  <ggaren@apple.com>

        Not reviewed.

        Try recommitting some things svn left out of my last commit.

        * bridge/qt/qt_runtime.h:

2011-04-09  Geoffrey Garen  <ggaren@apple.com>

        Not reviewed.

        Try recommitting some things svn left out of my last commit.

        * ForwardingHeaders/collector: Removed.
        * ForwardingHeaders/collector/handles: Removed.
        * ForwardingHeaders/collector/handles/Global.h: Removed.

2011-04-08  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Ojan Vafai.

        Implement proper handling of mouseover/mouseout events in regard to shadow DOM boundaries.
        https://bugs.webkit.org/show_bug.cgi?id=55515

        This implements XBL 2.0's specified handling of mouseover/mouseout events:
        http://dev.w3.org/2006/xbl2/Overview.html#the-mouseover-and-mouseout-events

        To do this, we:
        1) calculate lowest common ancestor between relatedTarget and target, and
           the nearest boundaries around them: the outer (common) boundary, and the
           inner (specific to relatedTarget) boundary. Then, we
        2) ensure that events only propagate up to the common boundary (or
           all the way if boundary is not found), while
        3) updating relatedTarget be the inner boundary.

        We also detect the most common case when no common boundary could exist
        and provide a fast path to short-circuit most of the boundary detection
        logic.

        Test: fast/events/shadow-boundary-crossing.html

        * dom/EventDispatcher.cpp:
        (WebCore::EventDispatcher::adjustToShadowBoundaries): Added a helper to determine lowest
            common ancestor, the boundaries around it, and compute adjustments
            to relatedTarget and event target ancestor chain.
        (WebCore::ancestorsCrossShadowBoundaries): Added.
        (WebCore::EventDispatcher::adjustRelatedTarget): Changed to calculate
            inner/outer shadow DOM boundaries and adjust ancestors chain accordingly.
        (WebCore::EventDispatcher::EventDispatcher): Added flag initializer
        (WebCore::EventDispatcher::ensureEventAncestors): Renamed from getEventAncestors,
            converted to use initialization flag, rather than testing for empty.
        * dom/EventDispatcher.h: Adjusted decls.
        * dom/MouseEvent.cpp:
        (WebCore::MouseEventDispatchMediator::dispatchEvent): Changed to send event
            to adjustRelatedTarget.

2011-04-08  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        A few heap-related renames and file moves.
        
        WeakGCPtr<T> => Weak<T>
        Global<T> => Strong<T>
        collector/ => heap/
        collector/* => heap/*
        runtime/WeakGCPtr.h => heap/Weak.h
        
        (Eventually, even more files should move into the heap directory. Like
        Heap.h and Heap.cpp, for example.)

        * CMakeLists.txt:
        * ForwardingHeaders/collector: Removed.
        * ForwardingHeaders/heap: Copied from ForwardingHeaders/collector.
        * ForwardingHeaders/heap/Strong.h: Copied from ForwardingHeaders/collector/handles/Global.h.
        * ForwardingHeaders/heap/Weak.h: Copied from ForwardingHeaders/runtime/WeakGCPtr.h.
        * ForwardingHeaders/runtime/WeakGCPtr.h: Removed.
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcproj/copyForwardingHeaders.cmd:
        * bindings/js/JSCallbackData.h:
        * bindings/js/JSCustomVoidCallback.h:
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::setWindow):
        * bindings/js/JSDataGridDataSource.h:
        * bindings/js/JSEventListener.h:
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::ScheduledAction):
        * bindings/js/ScheduledAction.h:
        * bindings/js/ScriptCachedFrameData.cpp:
        (WebCore::ScriptCachedFrameData::ScriptCachedFrameData):
        * bindings/js/ScriptCachedFrameData.h:
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::createWindowShell):
        * bindings/js/ScriptController.h:
        * bindings/js/ScriptObject.h:
        * bindings/js/ScriptState.h:
        * bindings/js/ScriptValue.cpp:
        * bindings/js/ScriptValue.h:
        * bindings/js/ScriptWrappable.h:
        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::initScript):
        * bindings/js/WorkerScriptController.h:
        * bridge/jsc/BridgeJSC.h:
        * bridge/qt/qt_runtime.h:
        * bridge/runtime_root.h:
        * xml/XMLHttpRequest.cpp:

2011-04-09  Keith Kyzivat  <keith.kyzivat@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] Don't link against fontconfig or X11 if embedded
        https://bugs.webkit.org/show_bug.cgi?id=58104

        No functional change so no new tests.

        * WebCore.pri: qpa=>embedded should be done very early so all cases of embedded are uniform.

2011-04-09  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Unreviewed trivial fix after r83344.

        * WebCore.pro: Update HEADERS list.

2011-04-09  Jon Lee  <jonlee@apple.com>

        Reviewed by Beth Dakin.

        Overlay scrollbar flashes in scrollable <textarea> with each keystroke (58180)
        https://bugs.webkit.org/show_bug.cgi?id=58180
        <rdar://problem/9047984>

        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::immediateScrollToPoint): Check that there is a change before submitting
        (WebCore::ScrollAnimatorMac::immediateScrollByDeltaX):
        (WebCore::ScrollAnimatorMac::immediateScrollByDeltaY):

2011-04-09  Sreeram Ramachandran  <sreeram@google.com>

        Reviewed by Ryosuke Niwa.

        Gather data on modal dialogs shown during unload events
        https://bugs.webkit.org/show_bug.cgi?id=58115

        Add a new method to the ChromeClient API to allow clients to receive
        notifications of modal dialogs dispatched during page dismissal events.
        The new method has a default empty definition; only chromium overrides
        it to keep track of histograms.

        No tests because this is a no-op for all ports except chromium (and it's
        not clear how to test chromium histograms from webkit).

        * page/Chrome.cpp:
        (WebCore::isDuringPageDismissal):
        (WebCore::willRunModalDialog):
        (WebCore::Chrome::runJavaScriptAlert):
        (WebCore::Chrome::runJavaScriptConfirm):
        (WebCore::Chrome::runJavaScriptPrompt):
        (WebCore::Chrome::willRunModalHTMLDialog):
        * page/Chrome.h:
        * page/ChromeClient.h:
        (WebCore::ChromeClient::willRunModalDialogDuringPageDismissal):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::showModalDialog):

2011-04-08  David Humphrey  <david.humphrey@senecac.on.ca>

        Reviewed by Eric Carlson.

        Fix call order of media element muted and play(), such that setting muted before play() works.
        https://bugs.webkit.org/show_bug.cgi?id=57673
        https://code.google.com/p/chromium/issues/detail?id=70777

        Manual test added: manual-tests/media-muted.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::updatePlayState):
        * manual-tests/media-muted.html: Added.

2011-04-08  Nat Duca  <nduca@chromium.org>

        Reviewed by David Levin.

        [chromium] Fix windows assertion on ~CCThread
        https://bugs.webkit.org/show_bug.cgi?id=58153

        Because ~CCThread uses waitForThreadCompletion,
        calling detachThread is not necessary.

        * platform/graphics/chromium/cc/CCThread.cpp:
        (WebCore::CCThread::runLoop):

2011-04-08  Jian Li  <jianli@chromium.org>

        Unreviewed, rolling out r83348.
        http://trac.webkit.org/changeset/83348
        https://bugs.webkit.org/show_bug.cgi?id=49508

        Breaks layout tests in QT, Win7 and Chromium.

        * rendering/RenderText.cpp:
        (WebCore::RenderText::localCaretRect):

2011-04-08  MORITA Hajime  <morrita@google.com>

        Reviewed by Simon Fraser.

        Negative spread should not make a sharp corner rounded
        https://bugs.webkit.org/show_bug.cgi?id=58162

        Handled inset shadow path for rounded and non-rounded rect
        differently as normal shadow path is doing.
        
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintBoxShadow):

2011-04-07  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Martin Robinson.

        REGRESSION (r77034-r77220): CSS box-shadow no longer renders on PowerPC
        https://bugs.webkit.org/show_bug.cgi?id=55180

        The endianness #ifdef in ShadowBlur was unnecessary and harmful. The
        data we get back from ImageBuffer::getImageData() do not vary in
        endianness.

        * platform/graphics/ShadowBlur.cpp:
        (WebCore::ShadowBlur::blurLayerImage):

2011-04-08  Erik Arvidsson  <arv@chromium.org>

        Reviewed by Dimitri Glazkov.

        IFrame is getting the focus even though it is hidden
        https://bugs.webkit.org/show_bug.cgi?id=55861

        Test: fast/dom/hidden-iframe-no-focus.html

        * html/HTMLFrameOwnerElement.cpp:
        (WebCore::HTMLFrameOwnerElement::isKeyboardFocusable):
        * html/HTMLFrameOwnerElement.h:

2011-04-08  Jeff Timanus  <twiz@chromium.org>

        Reviewed by Kenneth Russell.

        Fall back to software rendering for Canvas2D when requesting a DrawingBuffer larger than supported by the GL environment.
        https://bugs.webkit.org/show_bug.cgi?id=57768

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::CanvasRenderingContext2D):
        (WebCore::CanvasRenderingContext2D::reset):
        * platform/graphics/gpu/DrawingBuffer.cpp:
        (WebCore::DrawingBuffer::reset):
        * platform/graphics/gpu/DrawingBuffer.h:

2011-04-08  Daniel Cheng  <dcheng@chromium.org>

        Reviewed by Dmitry Titov.

        [chromium] Implement image/png support in DataTransferItems
        https://bugs.webkit.org/show_bug.cgi?id=58106

        This patch implements DataTransferItem::getAsFile() using Blobs. In
        addition, plumbing for image/png has been added so image paste will be
        supported as long as the renderer makes that data available.

        Tests: editing/pasteboard/data-transfer-items-image-png.html

        * dom/DataTransferItem.h:
        * dom/DataTransferItem.idl:
        * platform/chromium/ClipboardMimeTypes.cpp:
        * platform/chromium/ClipboardMimeTypes.h:
        * platform/chromium/DataTransferItemChromium.cpp:
        (WebCore::DataTransferItemChromium::getAsString):
        (WebCore::DataTransferItemChromium::getAsFile):
        * platform/chromium/DataTransferItemChromium.h:
        * platform/chromium/PlatformBridge.h:

2011-04-08 MORITA Hajime  <morrita@google.com>

        Unreviewed windows build fix.
        
        * editing/SpellingCorrectionController.h:
        (WebCore::SpellingCorrectionController::UNLESS_ENABLED):

2011-04-08  Enrica Casucci  <enrica@apple.com>

        Reviewed by Maciej Stachowiak.

        Improve lifetime management of nodes in ReplaceNodeWithSpanCommand.
        https://bugs.webkit.org/show_bug.cgi?id=57595
        <rdar://problem/9222122>

        Test: editing/style/bold-with-dom-changes.html

        * editing/ReplaceNodeWithSpanCommand.cpp:
        (WebCore::swapInNodePreservingAttributesAndChildren):

2011-04-07  Roland Steiner  <rolandsteiner@chromium.org>

        Reviewed by Dimitri Glazkov.

        Bug 58060 - Prepare access to TreeScope from Node, using NodeRareData
        https://bugs.webkit.org/show_bug.cgi?id=58060

        Add a TreeScope pointer to NodeRareData to allow direct access to the containing tree scope.
        However, in case the containing scope is the document, this is not set, and the
        document pointer within Node is used instead.

        In an object derived from TreeScope (currently Document), the tree scope pointer
        points to itself. Such objects also contain a parent tree scope pointer that
        points to the containing scope. For Document, this is 0.

        Add new functions setTreeScope[Recursively] that replace setDocument[Recursively]
        in public usage. setDocument[Recursively] are now only used internally and are
        thererfore protected.

        No new tests. (no new functionality)

        * dom/ContainerNode.cpp: change DOM manipulation methods to update scope of inserted nodes
        (WebCore::ContainerNode::insertBefore):
        (WebCore::ContainerNode::replaceChild):
        (WebCore::ContainerNode::appendChild):
        * dom/Document.cpp:
        (WebCore::Document::~Document):
        (WebCore::Document::setDocType): Ditto
        (WebCore::Document::adoptNode): Ditto
        * dom/Document.h:
        * dom/Node.cpp:
        (WebCore::Node::treeScope): use NodeRareData to check if a non-Document scope is set
        (WebCore::Node::setTreeScope): update NodeRareData depending on whether scope is a document
        (WebCore::Node::setTreeScopeRecursively):
        (WebCore::Node::setDocumentRecursively):
        * dom/Node.h:
        * dom/NodeRareData.h: add scope pointer
        (WebCore::NodeRareData::NodeRareData):
        (WebCore::NodeRareData::treeScope):
        (WebCore::NodeRareData::setTreeScope):
        * dom/TreeScope.cpp: add parentTreeScope pointer
        (WebCore::TreeScope::TreeScope):
        (WebCore::TreeScope::setParentTreeScope):
        * dom/TreeScope.h:
        (WebCore::TreeScope::parentTreeScope):

2011-04-08  Xiaomei Ji  <xji@chromium.org>

        Reviewed by David Hyatt.

        Local caret rectangle calculation should be relative to its containing block.
        https://bugs.webkit.org/show_bug.cgi?id=49508.

        InlineBox and caret rectangle are positioned relative to its containing block.
        So its left and right edge value should be relative to its containing block as well. 

        Test: fast/forms/cursor-at-editable-content-boundary.html

        * rendering/RenderText.cpp:
        (WebCore::RenderText::localCaretRect):

2011-04-08  MORITA Hajime  <morrita@google.com>

        Unreviewed build fix.

        * editing/Editor.cpp:
        (WebCore::Editor::markMisspellingsAfterTypingToWord):

2011-04-08  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=57971
        
        Rework visited/unvisited links for before/after content. Propagate the bits earlier so that we don't lose
        them when we throw away the visited style. Don't throw away the visited link style for pseudo elements
        either, so that the styles are consistent.

        Added fast/history/visited-generated-content-test.html

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::styleForElement):
        (WebCore::CSSStyleSelector::pseudoStyleForElement):

2011-04-06  MORITA Hajime  <morrita@google.com>

        Reviewed by Darin Adler.

        [Refactoring] Auto correction panel should be handled by its own class.
        https://bugs.webkit.org/show_bug.cgi?id=55571

        Extracted code inside SUPPORT_AUTOCORRECTION_PANEL into
        SpellingCorrectionController class.
        This change also remove some SUPPORT_AUTOCORRECTION_PANEL guard if
        code paths inside the never reached without autocorrection support.
        Removing guards reduces unintentional build breakage.

        No new tests, no behavior chagne.

        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * editing/CorrectionPanelInfo.h: Removed.
        * editing/EditingAllInOne.cpp:
        * editing/Editor.cpp:
        (WebCore::Editor::respondToChangedSelection):
        (WebCore::Editor::respondToChangedContents):
        (WebCore::Editor::appliedEditing):
        (WebCore::Editor::Editor):
        (WebCore::Editor::~Editor):
        (WebCore::Editor::insertTextWithoutSendingTextEvent):
        (WebCore::Editor::insertLineBreak):
        (WebCore::Editor::insertParagraphSeparator):
        (WebCore::Editor::cut):
        (WebCore::Editor::paste):
        (WebCore::Editor::pasteAsPlainText):
        (WebCore::Editor::isAutomaticSpellingCorrectionEnabled):
        (WebCore::Editor::markMisspellingsAfterTypingToWord):
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges):
        (WebCore::Editor::changeBackToReplacedString):
        (WebCore::Editor::unappliedSpellCorrection):
        (WebCore::Editor::updateMarkersForWordsAffectedByEditing):
        (WebCore::Editor::startCorrectionPanelTimer):
        (WebCore::Editor::handleCorrectionPanelResult):
        (WebCore::Editor::dismissCorrectionPanelAsIgnored):
        * editing/Editor.h:
        * editing/SpellingCorrectionCommand.cpp:
        * editing/SpellingCorrectionController.cpp: Added.
        (WebCore::markerTypesForAutocorrection):
        (WebCore::markerTypesForReplacement):
        (WebCore::markersHaveIdenticalDescription):
        (WebCore::SpellingCorrectionController::SpellingCorrectionController):
        (WebCore::SpellingCorrectionController::~SpellingCorrectionController):
        (WebCore::SpellingCorrectionController::startCorrectionPanelTimer):
        (WebCore::SpellingCorrectionController::stopCorrectionPanelTimer):
        (WebCore::SpellingCorrectionController::stopPendingCorrection):
        (WebCore::SpellingCorrectionController::applyPendingCorrection):
        (WebCore::SpellingCorrectionController::hasPendingCorrection):
        (WebCore::SpellingCorrectionController::isSpellingMarkerAllowed):
        (WebCore::SpellingCorrectionController::show):
        (WebCore::SpellingCorrectionController::handleCancelOperation):
        (WebCore::SpellingCorrectionController::dismiss):
        (WebCore::SpellingCorrectionController::dismissSoon):
        (WebCore::SpellingCorrectionController::applyCorrectionPanelInfo):
        (WebCore::SpellingCorrectionController::applyAutocorrectionBeforeTypingIfAppropriate):
        (WebCore::SpellingCorrectionController::respondToUnappliedSpellCorrection):
        (WebCore::SpellingCorrectionController::correctionPanelTimerFired):
        (WebCore::SpellingCorrectionController::handleCorrectionPanelResult):
        (WebCore::SpellingCorrectionController::isAutomaticSpellingCorrectionEnabled):
        (WebCore::SpellingCorrectionController::windowRectForRange):
        (WebCore::SpellingCorrectionController::respondToChangedSelection):
        (WebCore::SpellingCorrectionController::respondToAppliedEditing):
        (WebCore::SpellingCorrectionController::client):
        (WebCore::SpellingCorrectionController::textChecker):
        (WebCore::SpellingCorrectionController::recordAutocorrectionResponseReversed):
        (WebCore::SpellingCorrectionController::markReversed):
        (WebCore::SpellingCorrectionController::markCorrection):
        (WebCore::SpellingCorrectionController::recordSpellcheckerResponseForModifiedCorrection):
        * editing/SpellingCorrectionController.h: Added.
        (WebCore::SpellingCorrectionController::UNLESS_ENABLED):
        (WebCore::SpellingCorrectionController::shouldStartTimeFor):
        (WebCore::SpellingCorrectionController::shouldRemoveMarkersUponEditing):        
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::insertText):
        (WebCore::TypingCommand::markMisspellingsAfterTyping):
        (WebCore::TypingCommand::deleteKeyPressed):
        (WebCore::TypingCommand::forwardDeleteKeyPressed):
        * editing/htmlediting.h:
        (WebCore::isAmbiguousBoundaryCharacter):
        * page/EditorClient.h:
        * page/Frame.cpp:
        (WebCore::Frame::setPageAndTextZoomFactors):

2011-04-08  Alpha Lam  <hclam@chromium.org>

        Unreviewed, rolling out r83335.
        http://trac.webkit.org/changeset/83335
        https://bugs.webkit.org/show_bug.cgi?id=53556

        GTK and QT bots are broken

        * CMakeLists.txt:
        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * features.pri:
        * html/HTMLAttributeNames.in:
        * html/HTMLTagNames.in:
        * html/HTMLTrackElement.cpp: Removed.
        * html/HTMLTrackElement.h: Removed.
        * html/HTMLTrackElement.idl: Removed.

2011-04-08  Brady Eidson  <beidson@apple.com>

        Reviewed by Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=58155 and part of <rdar://problem/9251767>
        BitmapImage::getFirstCGImageRefOfSize fails if the frameCount hasn't been initialized from the image source.

        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::BitmapImage::getFirstCGImageRefOfSize): Call frameCount() instead of accessing m_frames.size() to
          make sure the frames are properly tallied first.

2011-04-08  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Dragging and dropping an image in edit mode does not work
        https://bugs.webkit.org/show_bug.cgi?id=19385

        When adding an image to the clipboard, we should also include the HTML code of that image so
        it can be used for internal drag and drop.

        This HTML is expected by all clients of drop events so a fragment can be moved from one browser to
        another, or inside the same browser.

        * platform/qt/ClipboardQt.cpp:
        (WebCore::ClipboardQt::declareAndWriteDragImage):

2011-04-07  Anna Cavender  <annacc@chromium.org>

        Reviewed by Eric Carlson.

        Setup ENABLE(TRACK) feature define + initial HTMLTrackElement
        https://bugs.webkit.org/show_bug.cgi?id=53556

        No new tests. No real functionality added just yet.

        * CMakeLists.txt:
        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * features.pri:
        * html/HTMLAttributeNames.in:
        * html/HTMLTagNames.in:
        * html/HTMLTrackElement.cpp: Added.
        (WebCore::HTMLTrackElement::HTMLTrackElement):
        (WebCore::HTMLTrackElement::create):
        (WebCore::HTMLTrackElement::insertedIntoTree):
        (WebCore::HTMLTrackElement::willRemove):
        (WebCore::HTMLTrackElement::src):
        (WebCore::HTMLTrackElement::setSrc):
        (WebCore::HTMLTrackElement::kind):
        (WebCore::HTMLTrackElement::setKind):
        (WebCore::HTMLTrackElement::srclang):
        (WebCore::HTMLTrackElement::setSrclang):
        (WebCore::HTMLTrackElement::label):
        (WebCore::HTMLTrackElement::setLabel):
        (WebCore::HTMLTrackElement::isDefault):
        (WebCore::HTMLTrackElement::setIsDefault):
        (WebCore::HTMLTrackElement::isURLAttribute):
        * html/HTMLTrackElement.h: Added.
        * html/HTMLTrackElement.idl: Added.

2011-04-07  Jer Noble  <jer.noble@apple.com>

        Reviewed by Eric Carlson.

        Logic error in HTMLMediaElement::exitFullscreen()
        https://bugs.webkit.org/show_bug.cgi?id=58085

        The new full screen API case could fall through to the legacy API case
        unintentionally if a script calls exitFullscreen on an element which is
        not the current full screen element.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::enterFullscreen):
        (WebCore::HTMLMediaElement::exitFullscreen):

2011-04-08  Mike Reed  <reed@google.com>

        Reviewed by Eric Seidel.

        Replace SKIA_TEXT with isNativeFontRenderingAllowed() for print-preview to work
        https://bugs.webkit.org/show_bug.cgi?id=57782

        No new tests. This change only affects print-preview and build option SKIA_GPU 

        * platform/graphics/skia/SkiaFontWin.cpp:
        (WebCore::paintSkiaText):

2011-04-08  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Tony Chang, Darin Adler, and Enrica Casucci.

        REGRESSION(r81887): Crash in SplitElement
        https://bugs.webkit.org/show_bug.cgi?id=57743

        The crash was caused by ReplaceSelectionCommand::doApply's calling splitElement with computeNodeAfterPosition
        even when the position was after the last node in it container. Since all we are doing here is to splitting tree
        up until the highest ancestor with isInlineNodeWithStyle, replaced the while loop by calls to splitTreeToNode
        and highestEnclosingNodeOfType.

        Also fixed a bug in splitTreeToNode not to check the difference in visible position when splitting the ancestor,
        which would have introduced unnecessary nodes when splitting tree and a bug in highestEnclosingNodeOfType that
        it incorrectly called deprecatedNode instead of containerNode.

        Test: editing/inserting/insert-images-in-pre-x-crash.html

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::splitTreeToNode):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply):
        * editing/htmlediting.cpp:
        (WebCore::highestEnclosingNodeOfType):

2011-04-08  Antti Koivisto  <antti@apple.com>

        Reviewed by Tony Gentilcore.

        Incoming source should be preload scanned when the parser is blocked 
        https://bugs.webkit.org/show_bug.cgi?id=58117

        Scan the appended source if parser is blocked.

        Test: http/tests/loading/preload-append-scan.php

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::append):

2011-04-08  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Fix the WebKit2 build for older versions of GTK+
        https://bugs.webkit.org/show_bug.cgi?id=58095

        No new tests. This is just a build fix.

        * platform/gtk/GtkVersioning.c:
        (gdk_window_create_similar_surface): Reimplement this method for older versions of GDK.
        * platform/gtk/GtkVersioning.h: Add the new method to the header.

2011-04-08  Misha Tyutyunik  <michael.tyutyunik@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] Plugin is not scrolled together with page content or jumping 
        when content is rendered using cache (backing store).
        https://bugs.webkit.org/show_bug.cgi?id=56130
        
        This is a Symbian portion of the fix. For Linux it looks like
        it's enough to call set geometry which should be addressed in
        https://bugs.webkit.org/show_bug.cgi?id=57179

        No new tests required. This can be tested with manual tests from 
        WebCore/manual-tests/qt and WebCore/manual-tests/plugins

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

2011-04-08  Abhishek Arya  <inferno@chromium.org>

        Unreviewed. Remove accidental printf added in r83306.

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

2011-04-08  Enrica Casucci  <enrica@apple.com>

        Reviewed by Darin Adler.

        Dragging text in a WebKit2 window results in a copy instead of a move.
        https://bugs.webkit.org/show_bug.cgi?id=56772
        <rdar://problem/9165140>

        cleanupAfterSystemDrag cannot call dragEnd in WebKit2, since
        the call to startDrag is asynchronous.
        
        * page/mac/DragControllerMac.mm:
        (WebCore::DragController::cleanupAfterSystemDrag):

2011-04-05  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        Move WheelEvent-dispatching logic into WheelEventDispatchMediator.
        https://bugs.webkit.org/show_bug.cgi?id=57642

        Covered by existing tests, no functional change.

        * dom/Event.cpp:
        * dom/Event.h:
        (WebCore::EventDispatchMediator::EventDispatchMediator): Added default
            constructor.
        (WebCore::EventDispatchMediator::event): Inlined.
        (WebCore::EventDispatchMediator::setEvent): Added.
        * dom/EventDispatcher.cpp: Removed dispatchWheelEvent.
        * dom/EventDispatcher.h: Updated decls.
        * dom/Node.cpp:
        (WebCore::Node::dispatchWheelEvent): Changed to use the mediator and
            return a bool, like other dispatch event functions.
        * dom/Node.h: Changed decl.
        * dom/WheelEvent.cpp:
        (WebCore::granularity): Moved from EventDispatcher.
        (WebCore::WheelEventDispatchMediator::WheelEventDisatchMediator): Added.
        (WebCore::WheelEventDispatchMediator::event): Added.
        (WebCore::WheelEventDispatchMediator::dispatchEvent): Added.
        * dom/WheelEvent.h: Updated decls.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleWheelEvent): Changed to receive and react
            to the return value.

2011-04-08  Jessie Berlin  <jberlin@apple.com>

        Windows build warning fix.

        * WebCore.vcproj/WebCore.vcproj:
        Since ShadowRoot.cpp is included in the DOMAllInOne.cpp file, it should be excluded from
        the build.

2011-04-07  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: update breakpoints according to source frame decorations after live edit.
        https://bugs.webkit.org/show_bug.cgi?id=58029

        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype.editScriptSource.didEditScriptSource):
        (WebInspector.DebuggerPresentationModel.prototype.editScriptSource):
        (WebInspector.DebuggerPresentationModel.prototype._updateResourceContent.didEditScriptSource):
        (WebInspector.DebuggerPresentationModel.prototype._updateResourceContent):
        * inspector/front-end/SourceFile.js:
        (WebInspector.SourceFile.prototype.set content):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._handleSave.didEditScriptSource):
        (WebInspector.SourceFrame.prototype._handleSave):

2011-04-08  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: fix scripts concatenation in scripts panel.
        https://bugs.webkit.org/show_bug.cgi?id=58138

        When there is just one script starting at 0:0 it should not be surrounded by <script> framing.

        * inspector/front-end/SourceFile.js:
        (WebInspector.SourceFile.prototype._loadResourceContent):
        (WebInspector.SourceFile.prototype._loadAndConcatenateScriptsContent):

2011-04-08  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: use "locations" for debugger scripts, "lineNumbers" for the UI elements.
        https://bugs.webkit.org/show_bug.cgi?id=58118

        This change reuses location for call frames in the protocol + structures script
        location <-> source lines interaction better. When we need UI columns, we will add
        them, but we should distinguish between script and UI terms on the type level, not naming.

        * English.lproj/localizedStrings.js:
        * bindings/v8/DebuggerScript.js:
        * inspector/InjectedScriptSource.js:
        * inspector/Inspector.json:
        * inspector/front-end/CallStackSidebarPane.js:
        (WebInspector.CallStackSidebarPane.prototype.update.didGetSourceLine):
        (WebInspector.CallStackSidebarPane.prototype.update):
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype.addConsoleMessage.didRequestSourceMapping):
        (WebInspector.DebuggerPresentationModel.prototype.addConsoleMessage):
        (WebInspector.DebuggerPresentationModel.prototype.continueToLine):
        (WebInspector.DebuggerPresentationModel.prototype._setBreakpointInDebugger.didRequestSourceMapping):
        (WebInspector.DebuggerPresentationModel.prototype._setBreakpointInDebugger):
        (WebInspector.DebuggerPresentationModel.prototype._breakpointAdded.didRequestSourceMapping):
        (WebInspector.DebuggerPresentationModel.prototype._breakpointAdded):
        (WebInspector.PresenationCallFrame):
        (WebInspector.PresenationCallFrame.prototype.sourceLine.didRequestSourceMapping):
        (WebInspector.PresenationCallFrame.prototype.sourceLine):
        * inspector/front-end/ScriptFormatter.js:
        (WebInspector.ScriptFormatter.locationToPosition):
        (WebInspector.ScriptFormatter.lineToPosition):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._debuggerPaused.else.didGetSourceLocation):
        (WebInspector.ScriptsPanel.prototype._debuggerPaused):
        (WebInspector.ScriptsPanel.prototype.showAnchorLocation):
        (WebInspector.ScriptsPanel.prototype._callFrameSelected.didGetSourceLocation):
        (WebInspector.ScriptsPanel.prototype._callFrameSelected):
        * inspector/front-end/SourceFile.js:
        (WebInspector.SourceMapping.prototype.scriptLocationToSourceLine):
        (WebInspector.SourceMapping.prototype.sourceLineToScriptLocation):
        (WebInspector.FormattedSourceMapping.prototype.scriptLocationToSourceLine):
        (WebInspector.FormattedSourceMapping.prototype.sourceLineToScriptLocation):

2011-04-08  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: distinguish breakpoints set on de-obfuscated sources from breakponts set on original sources.
        https://bugs.webkit.org/show_bug.cgi?id=58133

        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype.canEditScriptSource):
        (WebInspector.DebuggerPresentationModel.prototype.toggleFormatSourceFiles):
        (WebInspector.DebuggerPresentationModel.prototype._debuggerPaused):
        (WebInspector.DebuggerPresentationModel.prototype._sourceFileForScript):
        (WebInspector.DebuggerPresentationModel.prototype._scriptForSourceFileId):
        (WebInspector.DebuggerPresentationModel.prototype._createSourceFileId):
        (WebInspector.DebuggerPresentationModel.prototype._reset):

2011-04-07  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: make SourceFrame TextViewer's delegate for editing operations.
        https://bugs.webkit.org/show_bug.cgi?id=58026

        This is the first step of decoupling TextViewer from SourceFrame.

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame):
        (WebInspector.SourceFrame.prototype.show):
        (WebInspector.SourceFrame.prototype.hide):
        (WebInspector.SourceFrame.prototype._ensureContentLoaded):
        (WebInspector.SourceFrame.prototype.contentEditable):
        (WebInspector.SourceFrame.prototype.startEditing):
        (WebInspector.SourceFrame.prototype.endEditing):
        (WebInspector.SourceFrame.prototype._createTextViewer):
        (WebInspector.SourceFrame.prototype._handleSave):
        (WebInspector.SourceFrame.prototype._handleRevertEditing):
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer.prototype._enterInternalTextChangeMode):
        (WebInspector.TextViewer.prototype._exitInternalTextChangeMode):
        (WebInspector.TextViewer.prototype._syncDecorationsForLine):
        (WebInspector.TextViewer.prototype._doubleClick):
        (WebInspector.TextViewerDelegate):
        (WebInspector.TextViewerDelegate.prototype.contentEditable):
        (WebInspector.TextViewerDelegate.prototype.startEditing):
        (WebInspector.TextViewerDelegate.prototype.endEditing):
        (WebInspector.TextEditorMainPanel.prototype._paintScheduledLines):
        (WebInspector.TextEditorMainPanel.prototype._handleDOMUpdates):
        * inspector/front-end/inspector.html:

2011-04-08  Leandro Gracia Gil  <leandrogracia@chromium.org>

        Reviewed by Steve Block.

        Media Stream API: add the getUserMedia method and the Javascript bindings.
        https://bugs.webkit.org/show_bug.cgi?id=56586

        Add the getUserMedia method to the navigator and its new Javascript types.
        Current specification: http://www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html#video-conferencing-and-peer-to-peer-communication

        Tests: fast/dom/MediaStream/argument-types.html
               fast/dom/MediaStream/enabled.html
               fast/dom/MediaStream/no-interface-object.html

        * Android.derived.jscbindings.mk:
        * Android.derived.v8bindings.mk:
        * Android.v8bindings.mk:
        * CMakeLists.txt:
        * CodeGenerators.pri:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSNavigatorCustom.cpp:
        (WebCore::JSNavigator::webkitGetUserMedia):
        * bindings/v8/custom/V8NavigatorCustom.cpp: Added.
        (WebCore::V8Navigator::webkitGetUserMediaCallback):
        * page/Navigator.cpp:
        (WebCore::Navigator::webkitGetUserMedia):
        * page/Navigator.h:
        * page/Navigator.idl:
        * page/NavigatorUserMediaError.h: Added.
        (WebCore::NavigatorUserMediaError::NavigatorUserMediaError):
        (WebCore::NavigatorUserMediaError::~NavigatorUserMediaError):
        (WebCore::NavigatorUserMediaError::code):
        * page/NavigatorUserMediaError.idl: Added.
        * page/NavigatorUserMediaErrorCallback.h: Added.
        (WebCore::NavigatorUserMediaErrorCallback::~NavigatorUserMediaErrorCallback):
        * page/NavigatorUserMediaErrorCallback.idl: Added.
        * page/NavigatorUserMediaSuccessCallback.h: Added.
        (WebCore::NavigatorUserMediaSuccessCallback::~NavigatorUserMediaSuccessCallback):
        * page/NavigatorUserMediaSuccessCallback.idl: Added.

2011-04-08  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [Chromium] Add more tests for detailed heap snapshots UI.
        https://bugs.webkit.org/show_bug.cgi?id=58010
        https://bugs.webkit.org/show_bug.cgi?id=58011

        Added tests for "Containment" view. Minor refactorings, bugs fixed.
        Split one large tests into smaller ones to avoid timing out in debug mode.

        Tests: inspector/profiler/detailed-heapshots-containment-expansion-preserved-when-sorting.html
               inspector/profiler/detailed-heapshots-containment-show-all.html
               inspector/profiler/detailed-heapshots-containment-show-next.html
               inspector/profiler/detailed-heapshots-containment-sorting.html
               inspector/profiler/detailed-heapshots-summary-expansion-preserved-when-sorting.html
               inspector/profiler/detailed-heapshots-summary-show-all.html
               inspector/profiler/detailed-heapshots-summary-show-next.html
               inspector/profiler/detailed-heapshots-summary-sorting.html

        * inspector/front-end/DetailedHeapshotGridNodes.js:
        (WebInspector.HeapSnapshotGridNode):
        (WebInspector.HeapSnapshotGridNode.prototype.populateChildren):
        (WebInspector.HeapSnapshotGridNode.prototype.sort.doSort):
        (WebInspector.HeapSnapshotGridNode.prototype.sort):
        (WebInspector.HeapSnapshotGenericObjectNode):
        (WebInspector.HeapSnapshotObjectNode):
        (WebInspector.HeapSnapshotInstanceNode):
        (WebInspector.HeapSnapshotConstructorNode):
        (WebInspector.HeapSnapshotDiffNode):
        (WebInspector.HeapSnapshotDominatorObjectNode):
        * inspector/front-end/DetailedHeapshotView.js:
        (WebInspector.HeapSnapshotContainmentDataGrid):
        (WebInspector.HeapSnapshotDominatorsDataGrid):

2011-04-08  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Pavel Feldman.

        Web Inspector: Bugs in some corner cases in the text editor
        https://bugs.webkit.org/show_bug.cgi?id=58025

        This solves the following bugs:
        1) The very last _empty_ line would not be deleted if you hit a Backspace on it, or the selection text to be deleted is extended to the very bottom of the editor.
        2) An odd corner case: delete all source code from the editor, hit backspace on the only empty line, then add a character. In this case the browser will insert a TEXT node instead of a DIV node for a lineRow.

        * inspector/front-end/TextViewer.js:
        (WebInspector.TextEditorMainPanel.prototype._selectionToPosition):
        (WebInspector.TextEditorMainPanel.prototype._enclosingLineRowOrSelf):
        (WebInspector.TextEditorMainPanel.prototype._handleDOMUpdates):
        (WebInspector.TextEditorMainPanel.prototype._applyDomUpdates):
        (WebInspector.TextEditorMainPanel.prototype._collectLinesFromDiv):

2011-04-07  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: add test for script formatter worker.
        https://bugs.webkit.org/show_bug.cgi?id=57447

        Test: inspector/debugger/script-formatter.html

        * GNUmakefile.am:
        * WebCore.xcodeproj/project.pbxproj:
        * gyp/streamline-inspector-source.sh:
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype._addScript):
        (WebInspector.DebuggerPresentationModel.prototype.toggleFormatSourceFiles):
        (WebInspector.DebuggerPresentationModel.prototype._formatter):
        * inspector/front-end/ScriptFormatterWorker.js:

2011-04-08  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Pavel Feldman.

        Web Inspector: Tweak dynamically constants for the async highlighting in text editor
        https://bugs.webkit.org/show_bug.cgi?id=58035

        * inspector/front-end/TextViewer.js:
        (WebInspector.TextEditorMainPanel.prototype._expandChunks):
        (WebInspector.TextEditorMainPanel.prototype._schedulePaintLines):
        (WebInspector.TextEditorMainPanel.prototype._paintScheduledLines):
        (WebInspector.TextEditorMainPanel.prototype._restorePaintLinesOperationsCredit):
        (WebInspector.TextEditorMainPanel.prototype._adjustPaintLinesOperationsRefreshValue):

2011-04-08  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: HAR compliance fixes
        https://bugs.webkit.org/show_bug.cgi?id=58124

        - Always provide some values for queryString and cookies, even though arrays may be empty
        - Always provide an empty cache object
        - Added entire HARLog to test
        - Workaround in test to avoid custom expectations (favicon.ico appears in log on certain platforms)

        * inspector/front-end/HAREntry.js:
        (WebInspector.HAREntry.prototype.build):
        (WebInspector.HAREntry.prototype._buildRequest):
        (WebInspector.HAREntry.prototype._buildResponse):

2011-04-08  Adam Barth  <abarth@webkit.org>

        Attempt to fix the Qt build.

        * css/CSSStyleApplyProperty.cpp:

2011-04-07  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Refactor WebCore/GNUMakefile.am to separate list of files
        https://bugs.webkit.org/show_bug.cgi?id=58116

        This change is similar to the cooresponding to change to
        JavaScriptCore.  We hope to generate GNUmakefile.list.am automatically
        using GYP.

        * GNUmakefile.am:
        * GNUmakefile.list.am: Added.

2011-04-07  Geoffrey Garen  <ggaren@apple.com>

        Not reviewed.

        Rolled out some accidentally-committed changes in my last commit.

        * dom/EventTarget.cpp:
        (WebCore::EventTarget::addEventListener):
        (WebCore::EventTarget::removeEventListener):
        * dom/EventTarget.h:

2011-04-07  Julien Chaffraix  <jchaffraix@codeaurora.org>

        Reviewed by Alexey Proskuryakov.

        EventSource should only accept UTF-8 charset
        https://bugs.webkit.org/show_bug.cgi?id=56942

        Following the discussion on bug 45372, this change implements the recommended
        way of handling "charset". We only accept UTF-8 but no other encoding. This matches
        the encoding of the EventSource and also may fix TomCat that automatically send this
        charset.

        * page/EventSource.cpp:
        (WebCore::EventSource::didReceiveResponse): We now check the charset attribute and if it is
        not UTF-8, abort the connection and log the error to the console. Also we log if the MIME type
        is wrong to the console to help debugging (only in the case of an HTTP 200 response though).

2011-04-07  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.

        Some Handle<T> cleanup
        https://bugs.webkit.org/show_bug.cgi?id=58109

        * bindings/js/ScriptValue.h:
        (WebCore::ScriptValue::ScriptValue): Updated for new null constructor.
        (WebCore::ScriptValue::hasNoValue): Updated for removal of isEmpty().

2011-04-07  Dominic Cooney  <dominicc@google.com>

        Reviewed by Dimitri Glazkov.

        Let shadow DOM have a list of nodes at the top level of a shadow.
        https://bugs.webkit.org/show_bug.cgi?id=57813

        Adds ShadowRoot, a list of nodes, to be a parent for top-level
        shadow children. Forwards rendering through the root and into the
        host's renderer.

        Covered by existing tests of elements that use this style of shadow.

        * Android.mk: add ShadowRoot.h/cpp
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.exp.in:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::initForStyleResolve): proxy style to host
        * dom/ContainerNode.cpp: parent nodes that are shadow roots are alive
        (WebCore::ContainerNode::insertBefore):
        (WebCore::ContainerNode::replaceChild):
        (WebCore::ContainerNode::removeChild):
        (WebCore::ContainerNode::appendChild):
        * dom/DocumentFragment.cpp:
        (WebCore::DocumentFragment::DocumentFragment):
        * dom/DocumentFragment.h:
        * dom/Element.cpp:
        (WebCore::Element::recalcStyle): look through ShadowRoots for host's style
        (WebCore::Element::shadowRoot): should be const
        (WebCore::Element::ensureShadowRoot): simpler than setShadowRoot
        * dom/Element.h:
        * dom/ElementRareData.h:
        * dom/Node.cpp:
        (WebCore::Node::parentNodeForRenderingAndStyle): indirection so
          ShadowRoot can forward to the host's renderer
        (WebCore::Node::createRendererAndStyle):
        (WebCore::Node::createRendererIfNeeded):
        * dom/Node.h:
        (WebCore::Node::isShadowBoundary): temporary, to differentiate
          old- and new-style, until all roots are ShadowRoot instances
        * dom/ShadowRoot.cpp: Added.
        (WebCore::ShadowRoot::ShadowRoot):
        (WebCore::ShadowRoot::recalcStyle): forward recalc to children
        * dom/ShadowRoot.h: Added.
        (WebCore::ShadowRoot::isShadowBoundary):
        (WebCore::ShadowRoot::create):
        * html/HTMLKeygenElement.cpp: use ensureShadowRoot
        (WebCore::HTMLKeygenElement::HTMLKeygenElement):
        (WebCore::HTMLKeygenElement::parseMappedAttribute):
        (WebCore::HTMLKeygenElement::appendFormData):
        (WebCore::HTMLKeygenElement::reset):
        (WebCore::HTMLKeygenElement::shadowSelect):
        * html/HTMLKeygenElement.h:
        * html/HTMLMeterElement.cpp: use ensureShadowRoot
        (WebCore::HTMLMeterElement::createShadowSubtree):
        * html/HTMLProgressElement.cpp: use ensureShadowRoot
        (WebCore::HTMLProgressElement::createShadowSubtree):
        * html/InputType.cpp: use ensureShadowRoot
        (WebCore::InputType::destroyShadowSubtree):
        * html/RangeInputType.cpp: use ensureShadowRoot
        (WebCore::RangeInputType::handleMouseDownEvent):
        (WebCore::RangeInputType::createShadowSubtree):
        (WebCore::RangeInputType::valueChanged):
        (WebCore::RangeInputType::shadowSliderThumb):
        * html/RangeInputType.h:
        * html/ValidationMessage.cpp: use ensureShadowRoot
        (WebCore::ValidationMessage::buildBubbleTree):
        (WebCore::ValidationMessage::deleteBubbleTree):
        * html/shadow/SliderThumbElement.cpp:
        (WebCore::SliderThumbElement::setPositionFromPoint):
        (WebCore::SliderThumbElement::hostInput):
        * html/shadow/SliderThumbElement.h:
        * rendering/MediaControlElements.cpp: use ensureShadowRoot
        (WebCore::MediaControlInputElement::attach):
        (WebCore::MediaControlInputElement::updateStyle):
        * rendering/RenderSlider.cpp: use ensureShadowRoot
        (WebCore::RenderSlider::thumbRect):
        (WebCore::RenderSlider::layout):
        (WebCore::RenderSlider::shadowSliderThumb):
        (WebCore::RenderSlider::inDragMode):
        * rendering/RenderSlider.h:

2011-04-07  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Simon Fraser.

        REGRESSION (r80871): Crash when visiting http://broadband.biglobe.ne.jp/
        https://bugs.webkit.org/show_bug.cgi?id=56297
        <rdar://problem/9131597>

        Test: fast/css-generated-content/table-row-after-no-crash.html

        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::styleDidChange): Factor out generation of before/after
        content, and only do it if the row already has a parent. For construction of
        anonymous cells to work correctly, the row needs to already have a parent, so
        in that case wait a bit.
        (WebCore::RenderTableRow::updateBeforeAndAfterContent): Factored out to here.
        * rendering/RenderTableRow.h:
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::addChild): When adding a row, update its
        before/after content, in case it had any.

2011-04-07  Beth Dakin  <bdakin@apple.com>

        Reviewed by Simon Fraser.

        Probable fix for <rdar://problem/9251443>  Crashing on exception: -
        [ScrollAnimationHelperDelegate _pixelAlignProposedScrollPosition:]: unrecognized 
        selector sent to instance ADDRESS.

       Need to implement new delegate method.
        * platform/mac/ScrollAnimatorMac.mm:
        (-[ScrollAnimationHelperDelegate _pixelAlignProposedScrollPosition:]):

2011-04-07  Ian Henderson  <ianh@apple.com>

        Reviewed by Simon Fraser.

        Optimize filling rounded rects that are actually ellipses
        https://bugs.webkit.org/show_bug.cgi?id=58098

        In CG, drawing an ellipse directly is faster than constructing and
        filling a rounded rect path.  Detect when the given rounded rect is
        actually an ellipse and draw it directly in this case.

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::fillRoundedRect):

2011-04-07  Ned Holbrook  <nholbrook@apple.com>

        Reviewed by Dan Bernstein.

        CTLine objects should outlive their CTRuns
        https://bugs.webkit.org/show_bug.cgi?id=58063

        * platform/graphics/mac/ComplexTextController.h: Add m_coreTextLines, to be destroyed after m_complexTextRuns.
        * platform/graphics/mac/ComplexTextControllerCoreText.cpp:
        (WebCore::ComplexTextController::ComplexTextRun::ComplexTextRun): Moot m_coreTextRun.
        (WebCore::ComplexTextController::collectComplexTextRunsForCharactersCoreText): Append line to m_coreTextLines.

2011-04-07  Nat Duca  <nduca@chromium.org>

        Reviewed by David Levin.

        [chromium] Compositor thread infrastructure
        https://bugs.webkit.org/show_bug.cgi?id=56131

        Introduce chrome compositor thread and related
        infrastructure.

        * WebCore.gypi:
        * platform/graphics/chromium/cc/CCMainThread.cpp: Added.
        (WebCore::CCMainThread::performTask):
        (WebCore::CCMainThread::postTask):
        * platform/graphics/chromium/cc/CCMainThread.h: Added.
        (WebCore::CCMainThread::Task::~Task):
        (WebCore::CCMainThread::Task::instance):
        (WebCore::CCMainThread::Task::Task):
        * platform/graphics/chromium/cc/CCMainThreadTask.h: Added.
        (WebCore::MainThreadTask0::create):
        (WebCore::MainThreadTask0::MainThreadTask0):
        (WebCore::MainThreadTask0::performTask):
        (WebCore::MainThreadTask1::create):
        (WebCore::MainThreadTask1::MainThreadTask1):
        (WebCore::MainThreadTask1::performTask):
        (WebCore::MainThreadTask2::create):
        (WebCore::MainThreadTask2::MainThreadTask2):
        (WebCore::MainThreadTask2::performTask):
        (WebCore::MainThreadTask3::create):
        (WebCore::MainThreadTask3::MainThreadTask3):
        (WebCore::MainThreadTask3::performTask):
        (WebCore::createMainThreadTask):
        * platform/graphics/chromium/cc/CCThread.cpp: Added.
        (WebCore::CCThread::create):
        (WebCore::CCThread::CCThread):
        (WebCore::CCThread::~CCThread):
        (WebCore::CCThread::postTask):
        (WebCore::CCThread::compositorThreadStart):
        (WebCore::CCThread::runLoop):
        * platform/graphics/chromium/cc/CCThread.h: Added.
        (WebCore::CCThread::Task::~Task):
        (WebCore::CCThread::Task::instance):
        (WebCore::CCThread::Task::Task):
        (WebCore::CCThread::threadID):
        (WebCore::CCCompletionEvent::CCCompletionEvent):
        (WebCore::CCCompletionEvent::~CCCompletionEvent):
        (WebCore::CCCompletionEvent::wait):
        (WebCore::CCCompletionEvent::signal):
        * platform/graphics/chromium/cc/CCThreadTask.h: Added.
        (WebCore::CCThreadTask0::create):
        (WebCore::CCThreadTask0::CCThreadTask0):
        (WebCore::CCThreadTask0::performTask):
        (WebCore::CCThreadTask1::create):
        (WebCore::CCThreadTask1::CCThreadTask1):
        (WebCore::CCThreadTask1::performTask):
        (WebCore::CCThreadTask2::create):
        (WebCore::CCThreadTask2::CCThreadTask2):
        (WebCore::CCThreadTask2::performTask):
        (WebCore::CCThreadTask3::create):
        (WebCore::CCThreadTask3::CCThreadTask3):
        (WebCore::CCThreadTask3::performTask):
        (WebCore::createCCThreadTask):

2011-04-07  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        REGRESSION (r46914, r48764): When typing in Mail, line wrapping frequently occurs in the middle of words
        https://bugs.webkit.org/show_bug.cgi?id=57872

        r46914 initially introduced a regression by replacing calls to styleAtPosition by editingStyleAtPosition
        because editingStyleAtPosition did not avoid tab span to obtain the computed style unlike styleAtPosition.

        r46914 also introduced a regression by cloning hierarchy under new block at the insertion position without
        avoiding the tab span.

        Fixed the both regressions by avoiding tab spans when computing the editing style and when cloning hierarchy.
        Also reverted r46914 for the general code path because re-creating node hierarchy duplicates nodes when
        we're moving nodes after the paragraph separator. Instead, we now split the tree up until the start block
        before moving the nodes.

        Tests: editing/inserting/insert-paragraph-after-tab-span-and-text.html
               editing/inserting/insert-paragraph-separator-tab-span.html

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::saveTypingStyleState): Since EditingStyle's constructor avoids a tab span,
        no longer calls positionBeforeTabSpan on the position passed to EditingStyle's constructor.
        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::init): Always avoid a tab span when computing the editing style.
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply): Avoid cloning tab spans and inserting a paragraph
        separator into a paragraph separator.
        * editing/htmlediting.cpp:
        (WebCore::positionOutsideTabSpan): Renamed from positionBeforeTabSpan. Also returns the position in the parent
        node after the tab span if the position was at the end of the tab span.
        * editing/htmlediting.h:

2011-04-07  Jia Pu  <jpu@apple.com>

        Reviewed by Darin Adler.

        [Mac] Editor::setComposition() should not trigger correction panel timer.
        https://bugs.webkit.org/show_bug.cgi?id=58049
         <rdar://problem/9226305>

        On Mac OS X that supports autocorrection panel, typing unconfirmed composition (i.e. unconfirmed Japanese or Chinese input)
        should not start autocorrection timer. We added a member variable, m_shouldPreventSpellChecking, to TypingCommand. 
        When this value is true, markMisspellingsAfterTyping() will not be called in TypingCommand::typingAddedToOpenCommand().
        m_shouldPreventSpellChecking is set to true in the TypingCommand objects created by Editor::setComposition().

        No new tests. No deterministically reproducible test case. Patch is based on static code analysis. Testing this also requires firing
        autocorrection panel timer, which can not be easily done in automated fashion.

        * editing/Editor.cpp:
        (WebCore::Editor::deleteWithDirection):
        (WebCore::Editor::insertTextWithoutSendingTextEvent):
        (WebCore::Editor::confirmComposition):
        (WebCore::Editor::setComposition):
        * editing/EditorCommand.cpp:
        (WebCore::executeDelete):
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::TypingCommand):
        (WebCore::TypingCommand::deleteSelection):
        (WebCore::TypingCommand::deleteKeyPressed):
        (WebCore::TypingCommand::forwardDeleteKeyPressed):
        (WebCore::TypingCommand::insertText):
        (WebCore::TypingCommand::insertLineBreak):
        (WebCore::TypingCommand::insertParagraphSeparator):
        (WebCore::TypingCommand::typingAddedToOpenCommand):
        * editing/TypingCommand.h:
        (WebCore::TypingCommand::create):
        (WebCore::TypingCommand::setShouldPreventSpellChecking):

2011-04-07  John Bauman  <jbauman@chromium.org>

        Reviewed by Kenneth Russell.

        clearIfComposited call is really slow
        https://bugs.webkit.org/show_bug.cgi?id=57999

        Move getContextAttributes call after the if, so it isn't called nearly as often.

        No new tests.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::clearIfComposited):

2011-04-07  Luke Macpherson   <macpherson@chromium.org>

        Reviewed by Dimitri Glazkov.

        Implement Backgroun and Mask properties in CSSStyleApplyProperty
        https://bugs.webkit.org/show_bug.cgi?id=57922

        No tests added as no behavioral changes.

        * css/CSSStyleApplyProperty.cpp:
        Added ApplyPropertyFillLayer test to handle Background and Mask CSS Properties.
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
        Added constructor calls to set up:
          CSSPropertyBackgroundAttachment
          CSSPropertyBackgroundClip
          CSSPropertyWebkitBackgroundClip
          CSSPropertyWebkitBackgroundComposite
          CSSPropertyBackgroundOrigin
          CSSPropertyWebkitBackgroundOrigin
          CSSPropertyBackgroundSize
          CSSPropertyWebkitBackgroundSize
          CSSPropertyWebkitMaskAttachment
          CSSPropertyWebkitMaskClip
          CSSPropertyWebkitMaskComposite
          CSSPropertyWebkitMaskOrigin
          CSSPropertyWebkitMaskSize
        * css/CSSStyleApplyProperty.h:
        (WebCore::CSSStyleApplyProperty::setPropertyValue):
        Add function to specify an equivalent property value in the lookup table.
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        Remove sections now implemented by CSSStyleApplyProperty.
        * css/CSSStyleSelector.h:
        Make CSSStyleApplyProperty a friend class so that the mapFill* functions are accessible.

2011-04-04  Eric Seidel  <eric@webkit.org>

        Reviewed by Ryosuke Niwa.

        Split run storage out from BidiResolver into a new BidiRunList class
        https://bugs.webkit.org/show_bug.cgi?id=57764

        Part of what makes BidiResolver and InlineIterator so difficult to understand
        (and bug 50912 so difficult to fix) is that BidiResolver is both a state machine
        for the Unicode Bidi Algorithm (UBA) as well as storage for the resulting
        BidiRuns from the algorithm.  This patch breaks the storage aspect off
        into its own class BidiRunList.

        This patch is only a start.  It does not actually fix the problematic ownership
        relationship, but it does make it possible to fix such in a second patch.

        The run pointers and addRun/prependRun, etc. were already a tightly coupled
        logical subset of the BidiResolver class, so moving them into their own class
        was both obvious and easy.  The only piece of logic I had to move was that
        deleteRuns() had a side-effect of setting the m_emptyRun bit on the resolver.

        I believe this deleteRuns side-effect was only ever used for one place
        (right after findNextLineBreak) and that it's only needed because
        findNextLineBreak can sometimes create bidi runs.  Run creation appears to be
        an unintentional side-effect of how InlineIterator calls through to BidiResolver
        as part of bidiNext and not a desired effect of the code.  I have added the call
        to markCurrentRunEmpty to both places deleteRuns was called (where the resolver
        could get re-used) as a safety precaution.  We could replace both with ASSERTs
        in a later patch.

        I suspect there may be a small performance win from further refactoring so that
        findNextLineBreak does not need to create BidiRuns.

        As I commented in the code, callers should own their own BidiRunList which they
        pass to BidiResolver::createBidiRunsForLine.  I attempted to implement that in
        an earlier version of this patch, but it was too complicated with the current
        twisted dependencies between InlineIterator/bidiNext and InlineBidiResolver.
        raise/lowerExplicitEmbeddingLevel are called unconditionally
        from commitExplicitEmbedding (which is called by bidiNext) and expect to have
        access to a runs list even in cases where we don't want any runs (findNextLineBreak).

        I also cleaned up some of the callers to pass around BidiRunList objects instead
        of InlineBidiResolvers now that they're separate objects.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawBidiText):
        * platform/text/BidiResolver.h:
        (WebCore::BidiResolver::BidiResolver):
        (WebCore::BidiResolver::runs):
        (WebCore::BidiResolver::markCurrentRunEmpty):
        (WebCore::::appendRun):
        (WebCore::::lowerExplicitEmbeddingLevel):
        (WebCore::::raiseExplicitEmbeddingLevel):
        (WebCore::::reorderRunsFromLevels):
        (WebCore::::createBidiRunsForLine):
        * rendering/InlineIterator.h:
        (WebCore::InlineBidiResolver::appendRun):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::createRun):
        (WebCore::RenderBlock::appendRunsForObject):
        (WebCore::reachedEndOfTextRenderer):
        (WebCore::RenderBlock::handleTrailingSpaces):
        (WebCore::RenderBlock::layoutInlineChildren):

2011-04-07  Naoki Takano  <takano.naoki@gmail.com>

        Reviewed by Adam Barth.

        [Chromium] Fix relocation problem of popup window which introduces autofill popup sometimes moves to screen's top left corner.
        https://bugs.webkit.org/show_bug.cgi?id=57911
        http://code.google.com/p/chromium/issues/detail?id=78073

        Manual test added: manual-tests/autofill-popup-location.html

        Originally only height is checked so that it introduces the bug.
        So I changed it to check both width and height as size.

        * manual-tests/autofill-popup-location.html: Added.
        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupContainer::refresh): Check window size between original and new before calling setFrameRect().

2011-04-07  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Implement img-src style-src and font-src
        https://bugs.webkit.org/show_bug.cgi?id=58018

        These are pretty straight forward given the rest of the infrastructure
        we've built so far.

        Tests: http/tests/security/contentSecurityPolicy/image-allowed.html
               http/tests/security/contentSecurityPolicy/image-blocked.html
               http/tests/security/contentSecurityPolicy/style-allowed.html
               http/tests/security/contentSecurityPolicy/style-blocked.html
               http/tests/security/contentSecurityPolicy/xsl-allowed.php
               http/tests/security/contentSecurityPolicy/xsl-blocked.php

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::canRequest):
        * page/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::allowImageFromSource):
        (WebCore::ContentSecurityPolicy::allowStyleFromSource):
        (WebCore::ContentSecurityPolicy::allowFontFromSource):
        (WebCore::ContentSecurityPolicy::addDirective):
        * page/ContentSecurityPolicy.h:

2011-04-07  David Levin  <levin@chromium.org>

        Reviewed by Darin Adler.

        Make IconSnapshot and PageURLRecord member variables private.
        https://bugs.webkit.org/show_bug.cgi?id=58080

        No change in functionality so no new tests.

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::writeToDatabase): Changed to used the accessor functions.
        (WebCore::IconDatabase::writeIconSnapshotToSQLDatabase): Ditto.
        * loader/icon/IconRecord.h:
        (WebCore::IconSnapshot::IconSnapshot): Changed to use the new member variable names.
        (WebCore::IconSnapshot::iconURL): Expose the property.
        (WebCore::IconSnapshot::timestamp): Ditto.
        (WebCore::IconSnapshot::data): Ditto.
        * loader/icon/PageURLRecord.h:
        (WebCore::PageURLSnapshot::PageURLSnapshot): Changed to use the new member variable names.
        (WebCore::PageURLSnapshot::pageURL): Expose the property.
        (WebCore::PageURLSnapshot::iconURL): Ditto.

2011-04-07  Dan Bernstein  <mitz@apple.com>

        Build fix.

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::roundToDevicePixels):

2011-04-07  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Add stub support for generating Gtk build system from gyp
        https://bugs.webkit.org/show_bug.cgi?id=58086

        This does not produce a buildable WebCore, but it
        does allow running gyp/configure --port=gtk and having
        it generate a gtk.Makefile which we can use for testing
        the rest of the plumbing.

        * gyp/gtk.gyp: Added.

2011-04-07  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=57736
        
        Crash on openstreetmap.org while using the map. Fix a bad interaction between the positioned movement layout
        optimization and the simplified layout optimization that could lead to blocks remaining marked as dirty when
        layout finished. This would eventually lead to an inability to properly determine the correct layout root and
        would cause a deleted root to be used later on.

        Added fast/block/positioning/complex-positioned-movement.html.

        * page/FrameView.cpp:
        (WebCore::FrameView::scheduleRelayoutOfSubtree):
        Add asserts to catch cases in the future where a layout root is set that has a dirty containing block.
    
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::simplifiedLayout):
        Change simplified layout so that the positioned movement optimization no longer clears the other layout
        flags. This will ensure that we still lay out our descendants if they need it.
        
        (WebCore::RenderBlock::layoutPositionedObjects):
        Changed to clear our layout flags now if the positioned movement is successful, since tryLayoutDoingPositionedMovementOnly
        no longer does the clear.
    
        * rendering/RenderBox.h:
        (WebCore::RenderBox::tryLayoutDoingPositionedMovementOnly):
        tryLayoutDoingPositionedMovementOnly now returns a boolean indicating success or failure.  On success it no longer
        does setNeedsLayout(false), but instead will let the caller take care of it. This way the caller can still look at
        the other flags in case other kinds of layout are still needed.
    
        * rendering/RenderObject.h:
        (WebCore::RenderObject::setNeedsPositionedMovementLayout):
        (WebCore::RenderObject::setNeedsSimplifiedNormalFlowLayout):
        Changed these methods to only set their respective flags and not to try to be clever about avoiding propagation.

2011-04-07  Andrew Scherkus  <scherkus@chromium.org>

        Revert ENABLE_TRACK patch due to compile failures.

        * CMakeLists.txt:
        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * features.pri:
        * html/HTMLAttributeNames.in:
        * html/HTMLTagNames.in:
        * html/HTMLTrackElement.cpp: Removed.
        * html/HTMLTrackElement.h: Removed.
        * html/HTMLTrackElement.idl: Removed.

2011-04-07  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/9018212> Underline thickness is not uniform under non-integral scale factor
        https://bugs.webkit.org/show_bug.cgi?id=58083

        Test: fast/text/decorations-transformed.html

        * platform/graphics/GraphicsContext.h: Added a RoundingMode enum with two values. RoundAllSides
        is the existing rounding mode, where each side of the rectangle snaps to the nearest pixel
        gridline. RoundOriginAndDimensions snaps the origin to the nearest pixel gridpoint and rounds
        the width and the height. In this new mode, translating a rectangle in user space never changes
        its dimensions in device pixels.
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::roundToDevicePixels): Implemented RoundOriginAndDimensions.
        (WebCore::GraphicsContext::drawLineForText): Use RoundOriginAndDimensions, thus ensuring that
        all underlines have the same thickness in device pixels.
        * platform/graphics/openvg/GraphicsContextOpenVG.cpp:
        (WebCore::GraphicsContext::roundToDevicePixels): Added RoundingMode parameter, but did not implement it.
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::roundToDevicePixels): Ditto.
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::roundToDevicePixels): Ditto.
        * platform/graphics/wince/GraphicsContextWinCE.cpp:
        (WebCore::GraphicsContext::roundToDevicePixels): Ditto.
        * platform/graphics/wx/GraphicsContextWx.cpp:
        (WebCore::GraphicsContext::roundToDevicePixels): Ditto.
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintDecoration):

2011-04-06  Vitaly Repeshko  <vitalyr@chromium.org>

        Reviewed by Nate Chapin.

        [V8] Remove custom DOMImplementation getter on Document.
        https://bugs.webkit.org/show_bug.cgi?id=57991

        The custom getter is no longer required because DOMImplementation
        objects are now created per document.

        Test: fast/dom/DOMImplementation/implementation-identity.html

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/custom/V8DocumentCustom.cpp:
        * dom/Document.idl:

2011-04-07  Sergey Glazunov  <serg.glazunov@gmail.com>

        Reviewed by Dimitri Glazkov.

        setHasID() is only called for styled elements
        https://bugs.webkit.org/show_bug.cgi?id=57267

        Test: fast/dom/non-styled-element-id-crash.html

        * dom/Element.cpp:
        (WebCore::Element::attributeChanged):
        (WebCore::Element::idAttributeChanged):
        * dom/Element.h:
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::parseMappedAttribute):

2011-04-07  Jer Noble  <jer.noble@apple.com>

        Reviewed by Eric Carlson.

        HTMLVideoElement::webkitEnterFullscreen does not use new Full Screen API when available.
        https://bugs.webkit.org/show_bug.cgi?id=58070

        Make the HTMLMediaElement full screen functions call into the new Full Screen API when
        FULLSCREEN_API is enabled.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::enterFullscreen):
        (WebCore::HTMLMediaElement::exitFullscreen):

2011-04-07  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Implement CSP's options directive
        https://bugs.webkit.org/show_bug.cgi?id=58014

        This patch contains the full options parser, but we only have enough of
        CSP implemented to see the effects of disable-xss-protection.  Will
        need to do some more work before we can see eval-script in action.

        Tests: http/tests/security/contentSecurityPolicy/inline-script-allowed.html
               http/tests/security/contentSecurityPolicy/inline-script-blocked-goofy.html

        * page/ContentSecurityPolicy.cpp:
        (WebCore::CSPOptions::CSPOptions):
        (WebCore::CSPOptions::disableXSSProtection):
        (WebCore::CSPOptions::evalScript):
        (WebCore::CSPOptions::parse):
        (WebCore::ContentSecurityPolicy::allowJavaScriptURLs):
        (WebCore::ContentSecurityPolicy::allowInlineEventHandlers):
        (WebCore::ContentSecurityPolicy::allowInlineScript):
        (WebCore::ContentSecurityPolicy::addDirective):
        * page/ContentSecurityPolicy.h:

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

        Reviewed by Anders Carlsson.

        REGRESSION (WebKit2): Reverse conversion doesn't work in Kotoeri
        https://bugs.webkit.org/show_bug.cgi?id=58066
        <rdar://problem/8965302>

        * platform/mac/HTMLConverter.h:
        * platform/mac/HTMLConverter.mm: (+[WebHTMLConverter editingAttributedStringFromRange:]):
        Changed editingAttributedStringFromRange: to use WebCore::Range instead of DOMRange, since
        it's now used in WebKit2.

2011-04-07  Andy Estes  <aestes@apple.com>

        Reviewed by Darin Adler.

        REGRESSION (r64712): Microsoft Outlook 2011: original message contents
        not included when replying to an email.
        https://bugs.webkit.org/show_bug.cgi?id=57794
        
        * WebCore.exp.in:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::finishedParsing): Call Frame::injectUserScripts()
        before checking if the FrameLoader is parsing the initial empty document.
        This allows user scripts to be injected at the end of document parsing
        (if the setting is enabled).
        * page/Frame.cpp:
        (WebCore::Frame::injectUserScripts): Do not inject scripts if this
        feature is disabled on the initial empty document.
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        * page/Settings.h: Add a setting for injecting user scripts into the
        initial empty document (defaults to false).
        (WebCore::Settings::setInjectUserScriptsInInitialEmptyDocument):
        (WebCore::Settings::injectUserScriptsInInitialEmptyDocument):
        * platform/mac/RuntimeApplicationChecks.h:
        * platform/mac/RuntimeApplicationChecks.mm:
        (WebCore::applicationIsMicrosoftOutlook): Check if the embedding
        application is Microsoft Outlook.

2011-04-06  Jer Noble  <jer.noble@apple.com>

        Reviewed by Maciej Stachowiak.

        AVF: MediaPlayerPrivateAVFoundation never reaches playable state.
        https://bugs.webkit.org/show_bug.cgi?id=57962

        Add support for a new AVPlayerItem API which will notify clients when their
        seek completes.  This requires a new Notification type to be passed to the main
        thread in MediaPlayerPrivateAVFoundation.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::seekCompleted): Added.
        (WebCore::MediaPlayerPrivateAVFoundation::scheduleMainThreadNotification): Added two new
            overloaded functions which take a Notification; and a Notification::Type and boolean.
        (WebCore::MediaPlayerPrivateAVFoundation::dispatchNotification): Support new SeekCompleted 
            Notification type.
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        (WebCore::MediaPlayerPrivateAVFoundation::Notification::Notification): Added one new constructor.
        (WebCore::MediaPlayerPrivateAVFoundation::Notification::finished): Added ivar and accessor.
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::seekToTime): Call new AVPlayerItem API.
        (-[WebCoreAVFMovieObserver seekCompleted:]): Added.

2011-04-07  Nancy Piedra  <nancy.piedra@nokia.com>

        Reviewed by Eric Carlson.

        Parse quotes from content type parameters
        https://bugs.webkit.org/show_bug.cgi?id=53275

        This functionality is tested in video-can-play-type.html layout test
        where I've added codecs parameter with good and bad formatting.

        * platform/ContentType.cpp:
        (WebCore::ContentType::parameter):

2011-04-07  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: remove "enabled" from the setBreakpoint protocol.
        https://bugs.webkit.org/show_bug.cgi?id=58047

        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::hasBreakpoint):
        * bindings/v8/DebuggerScript.js:
        ():
        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::setBreakpoint):
        * inspector/Inspector.json:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::buildObjectForBreakpointCookie):
        (WebCore::InspectorDebuggerAgent::setBreakpointByUrl):
        (WebCore::InspectorDebuggerAgent::setBreakpoint):
        (WebCore::InspectorDebuggerAgent::continueToLocation):
        (WebCore::InspectorDebuggerAgent::didParseSource):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/ScriptBreakpoint.h:
        (WebCore::ScriptBreakpoint::ScriptBreakpoint):
        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel.prototype.setBreakpoint):
        (WebInspector.DebuggerModel.prototype.setBreakpointBySourceId):
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel):
        (WebInspector.DebuggerPresentationModel.prototype._restoreBreakpoints):
        (WebInspector.DebuggerPresentationModel.prototype._updateBreakpointsAfterLiveEdit):
        (WebInspector.DebuggerPresentationModel.prototype.setBreakpoint.callback):
        (WebInspector.DebuggerPresentationModel.prototype.setBreakpoint):
        (WebInspector.DebuggerPresentationModel.prototype._setBreakpointInDebugger):
        (WebInspector.DebuggerPresentationModel.prototype._setBreakpointInDebugger.didRequestSourceMapping):
        (WebInspector.DebuggerPresentationModel.prototype._removeBreakpointFromDebugger):
        (WebInspector.DebuggerPresentationModel.prototype.setBreakpointEnabled.afterUpdate):
        (WebInspector.DebuggerPresentationModel.prototype.setBreakpointEnabled):
        (WebInspector.DebuggerPresentationModel.prototype.updateBreakpoint):
        (WebInspector.DebuggerPresentationModel.prototype.removeBreakpoint):
        (WebInspector.DebuggerPresentationModel.prototype._breakpointAdded.didRequestSourceMapping):
        (WebInspector.DebuggerPresentationModel.prototype._breakpointAdded):
        (WebInspector.DebuggerPresentationModel.prototype._breakpointRemoved):
        (WebInspector.DebuggerPresentationModel.prototype._breakpointResolved):
        (WebInspector.DebuggerPresentationModel.prototype._restoreBreakpointsFromSettings):
        (WebInspector.DebuggerPresentationModel.prototype._saveBreakpoints):
        (WebInspector.DebuggerPresentationModel.prototype._reset):
        (WebInspector.PresentationBreakpoint):

2011-04-07  Dan Bernstein  <mitz@apple.com>

        Reviewed by Adam Roben.

        Removed a redundant line of code.

        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::updateAlwaysCreateLineBoxes): No need to compare line gap values, as
        this is covered by the earlier hasIdenticalAscentDescentAndLineGap() check.

2011-04-07  Liang Qi  <liang.qi@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt][Symbian] Enable webkit build with GCCE on Symbian.
        https://bugs.webkit.org/show_bug.cgi?id=57841

        * WebCore.pri: Thanks for Norbert Leser  <norbert.leser@nokia.com> who checked RVCT part.
        --rw-base value in QMAKE_LFLAGS.ARMCC and -Tdata value in QMAKE_LFLAGS.GCCE are updated
        to 0x1000000 together. They need to be updated in the future when WebKit grows.

2011-04-06  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: get rid of Breakpoint.js.
        https://bugs.webkit.org/show_bug.cgi?id=57949

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/Breakpoint.js: Removed.
        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.JavaScriptBreakpointsSidebarPane.prototype.addBreakpoint):
        (WebInspector.JavaScriptBreakpointsSidebarPane.prototype.updateBreakpoint.didLoadSnippet):
        (WebInspector.JavaScriptBreakpointsSidebarPane.prototype.updateBreakpoint):
        (WebInspector.JavaScriptBreakpointsSidebarPane.prototype._compareBreakpoints):
        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel):
        (WebInspector.DebuggerModel.prototype._debuggerWasDisabled):
        (WebInspector.DebuggerModel.prototype.setBreakpoint.didSetBreakpoint):
        (WebInspector.DebuggerModel.prototype.setBreakpoint):
        (WebInspector.DebuggerModel.prototype.setBreakpointBySourceId):
        (WebInspector.DebuggerModel.prototype.removeBreakpoint):
        (WebInspector.DebuggerModel.prototype._breakpointResolved):
        (WebInspector.DebuggerModel.prototype.reset):
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel):
        (WebInspector.DebuggerPresentationModel.prototype._refreshBreakpoints):
        (WebInspector.DebuggerPresentationModel.prototype._updateBreakpointsAfterLiveEdit):
        (WebInspector.DebuggerPresentationModel.prototype.toggleFormatSourceFiles):
        (WebInspector.DebuggerPresentationModel.prototype.setBreakpoint.didSetBreakpoint):
        (WebInspector.DebuggerPresentationModel.prototype.setBreakpoint):
        (WebInspector.DebuggerPresentationModel.prototype.setBreakpointEnabled):
        (WebInspector.DebuggerPresentationModel.prototype.updateBreakpoint):
        (WebInspector.DebuggerPresentationModel.prototype.removeBreakpoint):
        (WebInspector.DebuggerPresentationModel.prototype._breakpointAdded.didRequestSourceMapping):
        (WebInspector.DebuggerPresentationModel.prototype._breakpointAdded):
        (WebInspector.DebuggerPresentationModel.prototype._breakpointRemoved):
        (WebInspector.DebuggerPresentationModel.prototype._breakpointResolved):
        (WebInspector.DebuggerPresentationModel.prototype._restoreBreakpoints):
        (WebInspector.DebuggerPresentationModel.prototype._restoreBreakpoint):
        (WebInspector.DebuggerPresentationModel.prototype._saveBreakpoints):
        (WebInspector.DebuggerPresentationModel.prototype._reset):
        (WebInspector.PresentationBreakpoint):
        (WebInspector.PresentationBreakpoint.prototype.get sourceFile):
        (WebInspector.PresentationBreakpoint.prototype.get url):
        (WebInspector.PresentationBreakpoint.prototype.get resolved):
        (WebInspector.PresentationBreakpoint.prototype.loadSnippet):
        * inspector/front-end/ResourceTreeModel.js:
        (WebInspector.ResourceTreeModel):
        (WebInspector.ResourceTreeModel.prototype._onResourceStarted):
        (WebInspector.ResourceTreeModel.prototype._addResourceToFrame):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype._breakpointUpdated):
        (WebInspector.ScriptsPanel.prototype.reset):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:

2011-04-07  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: console messages names should adhere to the common naming style
        https://bugs.webkit.org/show_bug.cgi?id=58042

        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::addToFrontend):
        (WebCore::ConsoleMessage::updateRepeatCountInConsole):
        * inspector/Inspector.json:
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::clearConsoleMessages):
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype._registerConsoleDomainDispatcher.dispatcher.messageAdded):
        (WebInspector.ConsoleView.prototype._registerConsoleDomainDispatcher.dispatcher.messageRepeatCountUpdated):
        (WebInspector.ConsoleView.prototype._registerConsoleDomainDispatcher.dispatcher.messagesCleared):
        (WebInspector.ConsoleView.prototype._registerConsoleDomainDispatcher):

2011-04-06  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: migrate Inspector protocol messages format to JSON-RPC.
        https://bugs.webkit.org/show_bug.cgi?id=57957

        There is not a significant difference between  inspector messages spec and and JSON-RPC 2.0 messages spec.
        Also JSON-RPC has a pretty clear specification for error descriptions which we haven't.
        It was decided that we will use it.

        the list of renames:
        1) type-> /dev/null
        2) domain + '.' + event => method // for events
        3) domain + '.' + command => method // for requests
        4) requestId => id // for responses
        5) arguments => params // for requests
        6) data => params // for events
        7) body => result // for responses

        protocolErrors and error properties will be converted to JSON-RPC error format.
        The order of properties in messages also will be adjusted.
        The only thing that looks unnecessary is jsonrpc property.

        * inspector/CodeGeneratorInspector.pm:

2011-04-07  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        Add functions to update left and right offsets to LineOffsets
        https://bugs.webkit.org/show_bug.cgi?id=58028

        Added update() and shrinkWidthForNewFloatIfNeeded(FloatingObject*) to LineOffsets,
        which are used to update m_left and m_right. Also added m_block and m_isFirstLine
        member variables to LineOffsets so that users of LineOffsets don't have to pass them around.

        * rendering/RenderBlock.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::skipLeadingWhitespace): No longer passes firstLine to positionNewFloatOnLine.
        (WebCore::LineOffsets::LineOffsets): Takes RenderBlock* and isFirstLine instead of left and right offsets.
        (WebCore::LineOffsets::update): Extracted from findNextLineBreak and positionNewFloatOnLine.
        (WebCore::LineOffsets::shrinkWidthForNewFloatIfNeeded): Extracted from positionNewFloatOnLine.
        (WebCore::RenderBlock::findNextLineBreak): Calls skipLeadingWhitespace and positionNewFloatOnLine.
        (WebCore::RenderBlock::positionNewFloatOnLine): Calls shrinkWidthForNewFloatIfNeeded and update and
        no longer passes firstLine around.

2011-04-06  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: migrate debugger domain to the unified breakpoint location notion.
        https://bugs.webkit.org/show_bug.cgi?id=57928

        * inspector/Inspector.json:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::buildObjectForBreakpointCookie):
        (WebCore::InspectorDebuggerAgent::setBreakpointByUrl):
        (WebCore::InspectorDebuggerAgent::setBreakpoint):
        (WebCore::InspectorDebuggerAgent::resolveBreakpoint):
        (WebCore::InspectorDebuggerAgent::didParseSource):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/front-end/Breakpoint.js:
        (WebInspector.Breakpoint):
        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel.prototype.setBreakpointBySourceId):
        (WebInspector.DebuggerModel.prototype._breakpointResolved):

2011-04-07  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Benjamin Poulain.

        [Qt] Mask the QStyle::State_Horizontal hint for vertical scrollbars.

        When initializing a QStyleOptionSlider from a widget, the State_Horizontal
        hint may get set depending on how that widget is laid out in its parent.
        If this happens when drawing a vertical scrollbar, the hint is never
        cleared and we end up painting a vertical scrollbar with horizontal arrows.

        Covered by pixel tests which should no longer paint silly scrollbars.

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

2011-04-07  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        script-src should block inline script
        https://bugs.webkit.org/show_bug.cgi?id=58012

        Block inline scripts at the ScriptElement layer.  This should catch
        exactly the scripts we want to catch.

        Test: http/tests/security/contentSecurityPolicy/inline-script-blocked.html

        * dom/Document.cpp:
        (WebCore::Document::processHttpEquiv):
            - This patch also adds the ability to supply a CSP policy via a
              <meta> tag.  We'll update the name of the header once we've
              finished implementing the spec.
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::executeScript):
        * page/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::allowInlineScript):
        * page/ContentSecurityPolicy.h:

2011-04-07  Alice Boxhall  <aboxhall@chromium.org>

        Reviewed by Ryosuke Niwa.

        Move the MouseEventWithHitTestResults::targetNode() method on to EventHandler.
        https://bugs.webkit.org/show_bug.cgi?id=57921

        Moves the MouseEventWithHitTestResults::targetNode() method on to EventHandler, so
        that the same logic can be used for a HitTestResult.

        No visible changes, just cleanup, so no tests.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::selectClosestWordFromMouseEvent):
        (WebCore::EventHandler::selectClosestWordOrLinkFromMouseEvent):
        (WebCore::EventHandler::handleMousePressEventTripleClick):
        (WebCore::EventHandler::handleMousePressEventSingleClick):
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::handleMouseDraggedEvent):
        (WebCore::EventHandler::handleMouseReleaseEvent):
        (WebCore::EventHandler::subframeForHitTestResult):
        Made public static member, so that it can access targetNode(), and be accessed by
        webkitwebview in gtk.
        (WebCore::EventHandler::selectCursor):
        (WebCore::EventHandler::targetNode):
        (WebCore::EventHandler::handleMouseDoubleClickEvent):
        (WebCore::EventHandler::handleMouseMoveEvent):
        (WebCore::EventHandler::updateDragAndDrop):
        (WebCore::EventHandler::sendContextMenuEvent):
        * page/EventHandler.h:
        * page/MouseEventWithHitTestResults.cpp:
        (WebCore::MouseEventWithHitTestResults::MouseEventWithHitTestResults):
        * page/MouseEventWithHitTestResults.h:
        * page/android/EventHandlerAndroid.cpp:
        (WebCore::EventHandler::passWidgetMouseDownEventToWidget):
        * page/brew/EventHandlerBrew.cpp:
        (WebCore::EventHandler::passWidgetMouseDownEventToWidget):
        * page/chromium/EventHandlerChromium.cpp:
        (WebCore::EventHandler::passMousePressEventToSubframe):
        (WebCore::EventHandler::passWidgetMouseDownEventToWidget):
        * page/efl/EventHandlerEfl.cpp:
        (WebCore::EventHandler::passWidgetMouseDownEventToWidget):
        * page/gtk/EventHandlerGtk.cpp:
        (WebCore::EventHandler::passWidgetMouseDownEventToWidget):
        * page/haiku/EventHandlerHaiku.cpp:
        (WebCore::EventHandler::passWidgetMouseDownEventToWidget):
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::passWidgetMouseDownEventToWidget):
        (WebCore::EventHandler::passSubframeEventToSubframe):
        * page/wx/EventHandlerWx.cpp:
        (WebCore::EventHandler::passWidgetMouseDownEventToWidget):

2011-04-07  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: build mapping for formatted scripts based on keywords positions.
        https://bugs.webkit.org/show_bug.cgi?id=57936

        Mapping based on [\$\.\w]+ was not accurate because string literals representation
        may be different in original and formatted scripts.

        * inspector/front-end/ScriptFormatterWorker.js:
        (buildMapping.regexp.b):
        (buildMapping):

2011-04-07  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        Spinbuttons become unclickable if right padding is large.
        https://bugs.webkit.org/show_bug.cgi?id=56298

        An inner-spin-button is put on the right border and ignores right
        padding in RenderTextControlSingleLine::layout(), but forwardEvent()
        checks if a point is in an area just right of an internal text block.
        This inconsistency caused a bug that an inner-spin-button with large
        padding didn't receive mouse events.

        To fix this bug, we render spin buttons as layers, and remove manual
        event forwarding code.

        Test: fast/forms/input-number-large-padding.html

        * css/html.css: Add "position:relative" to make a spin-button a layer.
        (input::-webkit-inner-spin-button):
        (input::-webkit-outer-spin-button):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::forwardEvent):
          Remove manual event forwarding code.

2011-04-06  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        CSP object-src should block plugin loads
        https://bugs.webkit.org/show_bug.cgi?id=57283

        This change is pretty straight-forward.  It's slighly unclear to me
        whether this patch is correct w.r.t. the code in DocumentWriter.  I've
        added a FIXME comment, and I'll investigate that case more in the future.

        Test: http/tests/security/contentSecurityPolicy/object-src-none.html

        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::begin):
        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::requestPlugin):
        * page/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::allowObjectFromSource):
        (WebCore::ContentSecurityPolicy::addDirective):
        * page/ContentSecurityPolicy.h:

2011-04-06  Beth Dakin  <bdakin@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=58009
        Frame::scalePage() results in visual artifacts with scale factors less than 1
        -and corresponding-
        <rdar://problem/8683230>

        Fall into the case where we fill with a background base color when there is a page 
        scale factor that is less than 1.
        * rendering/RenderView.cpp:
        (WebCore::RenderView::paintBoxDecorations):

2011-04-06  Jer Noble  <jer.noble@apple.com>

        Reviewed by Darin Adler.

        AVF: MediaPlayerPrivateAVFoundationObjC should not use -[AVPlayerItem isPlaybackBufferEmpty]
        https://bugs.webkit.org/show_bug.cgi?id=57982

        Query our cached loaded time array instead of asking AVPlayerItem if its buffer is empty.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::playerItemStatus):

2011-04-06  Jer Noble  <jer.noble@apple.com>

        Reviewed by Eric Carlson.

        MediaPlayerPrivateAVFoundation does not change rate due to setRate().
        https://bugs.webkit.org/show_bug.cgi?id=57919

        Test: media/video-set-rate-from-pause.html

        The base class of MediaPlayerPrivateAVFoundation does not actually change the rate
        of the media; instead a subclass must do that work.  So when setRate() is called, 
        inform a subclass through a new pure virtual updateRate() function that there's 
        work to be done.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::setRate): Call updateRate()
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::updateRate): Added.  Set the requested rate.

2011-04-06  Dai Mikurube  <dmikurube@chromium.org>

        Reviewed by David Levin.

        Add QUOTA build flag for unified quota API
        https://bugs.webkit.org/show_bug.cgi?id=57918

        * Configurations/FeatureDefines.xcconfig: Added QUOTA build flag
        * GNUmakefile.am: Added QUOTA build flag
        * WebCore.pri: Added QUOTA build flag

2011-04-06  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=57997
        <rdar://problem/9187856> REGRESSION(r75555): ~5-7 MB increase in memory between iBench runs
        Navigating away from a Scrolled page which queues a scroll event that is never dispatched.
        Cancel all enqueued events when detaching the Document the events cannot keep the Document
        alive.

        No change in functionality so no new tests.  

        * dom/Document.cpp:
        (WebCore::Document::detach):
        * dom/EventQueue.cpp:
        (WebCore::EventQueue::cancelQueuedEvents):
        * dom/EventQueue.h:

2011-04-06  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/9084761> REGRESSION (r73993): Default Arabic line spacing has gotten very loose when the specified font is not Arabic
        https://bugs.webkit.org/show_bug.cgi?id=58002

        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::platformInit): The version of Geeza Pro in Snow Leopard
        does not require the vertical metrics tweaks that were needed in Leopard. That the
        tweaks were being applied went mostly unnoticed until r73993, because until then it
        only affected cases where Geeza Pro was specified, not when it occurred as a fallback
        font.

2011-04-06  Roland Steiner  <rolandsteiner@chromium.org>

        Reviewed by Dimitri Glazkov.

        Bug 57994 - Move guardRef functionality back to Document
        https://bugs.webkit.org/show_bug.cgi?id=57994

        Move the relevant code parts from TreeScope back into Document.

        No new tests. (no new functionality)

        * dom/Document.cpp:
        (WebCore::Document::removedLastRef):
        * dom/Document.h:
        * dom/TreeScope.cpp:
        (WebCore::TreeScope::destroyTreeScopeData):
        * dom/TreeScope.h:

2011-04-06  Ian Henderson  <ianh@apple.com>

        Reviewed by Simon Fraser, Antti Koivisto.

        Fast path for parsing simple CSS values
        https://bugs.webkit.org/show_bug.cgi?id=57964

        Add functions to parse simple color or dimension values, skipping the
        overhead of full CSS parsing.

        Change parseValue to a static method to avoid unnecessary allocation
        of a CSSParser in the fast case.

        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::setProperty):
        Changed to use the new, static parseValue method.
        * css/CSSParser.cpp:
        (WebCore::isColorPropertyID):
        (WebCore::parseColorValue):
        Parses any color accepted by the existing parseColor() static method.
        We must handle color identifiers separately, since parseColor() will
        change 'red' into 'rgb(255, 0, 0)'.
        (WebCore::isSimpleLengthPropertyID):
        (WebCore::parseSimpleLengthValue):
        Parses a value of the form 'NNpx', 'NN%', or 'NN' (when strict is
        false, or 'NN' is '0').  Returns false to fall back to the slow path.
        (WebCore::CSSParser::parseValue):
        * css/CSSParser.h:
        * css/WebKitCSSMatrix.cpp:
        (WebCore::WebKitCSSMatrix::setMatrixValue):
        Changed to use the new, static parseValue method.

2011-04-06  Kevin Ollivier  <kevino@theolliviers.com>

        Reviewed by Darin Adler.

        Make sure JS_EXPORT_PRIVATE is an empty define when we aren't using the export macros.

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

        * config.h:

2011-04-06  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Antti Koivisto.

        Some minor style resolution optimizations
        https://bugs.webkit.org/show_bug.cgi?id=57996

        A couple of minor optimizations to style-related code.

        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::isCSSPropertyName):
        (WebCore::JSCSSStyleDeclaration::putDelegate):
        Avoid calling cssPropertyName() twice when setting style on an element.
        
        * css/CSSStyleSelector.cpp:
        (WebCore::useSVGZoomRules):
        (WebCore::CSSStyleSelector::applyProperty):
        Avoid calling isSVGElement() for every property, since only a two properties
        care about it.

2011-04-06  Ian Henderson  <ianh@apple.com>

        Reviewed by Antti Koivisto.

        Unnecessary string allocation in CSSStyleDeclaration::setProperty
        https://bugs.webkit.org/show_bug.cgi?id=57995

        Pass the bool representing the property's importance directly instead
        of constructing a string.

        * css/CSSStyleDeclaration.cpp:
        (WebCore::CSSStyleDeclaration::setProperty):

2011-04-06  Leandro Gracia Gil  <leandrogracia@chromium.org>

        Reviewed by Steve Block.

        Make the style of createFunctionOnlyCallback in V8 consistent with the JavaScriptCore version.
        https://bugs.webkit.org/show_bug.cgi?id=57963

        No new tests. LayoutTests/fast/dom/Geolocation/argument-types.html

        * bindings/v8/V8Utilities.h:
        (WebCore::createFunctionOnlyCallback):
        * bindings/v8/custom/V8GeolocationCustom.cpp:
        (WebCore::V8Geolocation::getCurrentPositionCallback):
        (WebCore::V8Geolocation::watchPositionCallback):

2011-04-06  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        WebKit2: Support Windows 7 Gestures
        https://bugs.webkit.org/show_bug.cgi?id=49824
        <rdar://problem/8689728>
        
        Move WindowTouch.h from WebKit/win, so it can be used in both WebKit and WebKit2.

        * WebCore.vcproj/WebCore.vcproj:
        * platform/win/WindowsTouch.h: Copied from WebKit/win/WindowsTouch.h.

2011-04-06  Alexis Menard  <alexis.menard@openbossa.org>

        Reviewed by Andreas Kling.

        [Qt] We should use USE(QT_MULTIMEDIA) rather than ENABLE(QT_MULTIMEDIA).
        https://bugs.webkit.org/show_bug.cgi?id=57974

        We should use USE(QT_MULTIMEDIA) rather than ENABLE(QT_MULTIMEDIA).

        No new tests needed, just a config flag rename.

        * features.pri:

2011-04-06  Tyler Close  <tjclose@chromium.org>

        Reviewed by Nate Chapin.

        run-bindings-tests reference files out of sync with CodeGenerator*.pm
        https://bugs.webkit.org/show_bug.cgi?id=57967

        * bindings/scripts/test/V8/V8TestCallback.cpp:

2011-04-06  Asanka Herath  <asanka@chromium.org>

        Reviewed by Darin Fisher.

        Add new TargetType: TargetIsFavicon

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

        No new functionality added, so no additional tests.

        * platform/network/ResourceRequestBase.h:

2011-04-06  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=57981
        
        Update the column count and width computation algorithm for CSS3 multi-column layout 
        to match the revised pseudo-algorithm in the latest draft of the spec.

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

2011-04-06  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        borderPaddingMarginStart and borderPaddingMarginEnd should take RenderInline
        https://bugs.webkit.org/show_bug.cgi?id=57965

        Changed the argument types of borderPaddingMarginStart and borderPaddingMarginEnd
        from RenderBoxModelObject to RenderInline since they call marginStart and marginEnd
        instead of marginStartForChild and marginEndForChild respectively.

        Calling these two functions on RenderInline is okay because writing-mode cannot differ
        from that of the containing block.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::borderPaddingMarginStart):
        (WebCore::borderPaddingMarginEnd):
        (WebCore::inlineLogicalWidth):

2011-04-06  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r83039.
        http://trac.webkit.org/changeset/83039
        https://bugs.webkit.org/show_bug.cgi?id=57978

        introduced a new regression in conjunction to
        ReplaceSelectionCommand (Requested by rniwa on #webkit).

        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::init):
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply):

2011-04-06  Naoki Takano  <takano.naoki@gmail.com>

        Reviewed by David Levin.

        Webkit ignores PgUp/PgDown/Home/End in SELECT tag objects
        https://bugs.webkit.org/show_bug.cgi?id=27658

        Test: fast/events/select-element.html

        * dom/SelectElement.cpp:
        (WebCore::nextValidIndex): Moved from elsewhere in the file to be used by other routines.
        (WebCore::nextSelectableListIndexPageAway): Returns a selectable index one page away from the given index.
        (WebCore::nextSelectableListIndex): Implemented with nextValidIndex.
        And converted to a normal static function from a private function of SelectElement.
        (WebCore::previousSelectableListIndex): Implemented with nextValidIndex.
        And converted to a normal static function from a private function of SelectElement.
        (WebCore::firstSelectableListIndex): Returns the first selectable index.
        (WebCore::lastSelectableListIndex): Returns the last selectable index.
        (WebCore::SelectElement::menuListDefaultEventHandler): Converted from C cast to C++ cast.
        (WebCore::SelectElement::listBoxDefaultEventHandler): Adds support for PageUp/PageDown/Home/End with both single and multiple selection.

        * dom/SelectElement.h:
        (WebCore::SelectElement::): Remove nextSelectableListIndex() and previousSelectableListIndex().

        * rendering/RenderListBox.h: Makes RenderListBox::size public so that PageUp/PageDown behavior can use the actual list size rather than that specified in HTML.
        They can differ due to the minimum size imposed by RenderListBox.

2011-04-06  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

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

        The "More..." link for line clamping no longer shows up in Safari RSS. Fix the isLink() check
        to just look at the style, so that it can find the InlineTextBox and not care that it's a child
        of the link element and not the line box for the link element itself (since that line box got
        culled).

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::applyLineClamp):

2011-04-06  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=57973 and https://bugs.webkit.org/show_bug.cgi?id=57973
        WK2 icon database should be able to get a CGImage of a specific size

        * platform/graphics/BitmapImage.h:
        * platform/graphics/Image.h:
        (WebCore::Image::getFirstCGImageRefOfSize):
        
        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::BitmapImage::getFirstCGImageRefOfSize): Walk the frames of the image until reaching the
          first frame of the requested size.

2011-04-06  Malcolm MacLeod  <malcolm.macleod@tshwanedje.com>

        Reviewed by Kevin Ollivier.

        [wx] Fix cursor handling so that we always call the chrome to set it.
        
        https://bugs.webkit.org/show_bug.cgi?id=57972

        * platform/wx/WidgetWx.cpp:
        (WebCore::Widget::setCursor):

2011-04-06  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=41445
        
        Visited links painting with black background. Make sure that if the visited style has
        the initial background color (transparent) set that we just use the unvisited color.

        Added fast/history/visited-link-background-color.html

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::visitedDependentColor):

2011-04-06  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed Qt buildfix after r83079.

        * WebCore.pro:

2011-04-06  Dean Jackson  <dino@apple.com>

        Reviewed by Chris Marrin.

        https://bugs.webkit.org/show_bug.cgi?id=56936
        Crash in ImplicitAnimation::~ImplicitAnimation

        Make sure the style and start time waiting lists
        are cleared in the CompositeAnimation destructor. This
        way, no running transitions can be left in a state
        where they are destroyed as the AnimationControllerPrivate
        cleans up.

        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::~CompositeAnimation):

2011-04-06  Robert Sesek  <rsesek@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Move code duplicated between the WebKit/mac and WebKit2 down to WebCore because Chromium will need it too
        https://bugs.webkit.org/show_bug.cgi?id=54969

        No change in behavior; no new tests.

        * editing/TextIterator.cpp:
        (WebCore::TextIterator::locationAndLengthFromRange): New method from duplicated code in WebKits
        * editing/TextIterator.h:
        * page/Frame.cpp:
        (WebCore::Frame::rangeForPoint): New method from duplicated code in WebKits

2011-04-06  Leandro Gracia Gil  <leandrogracia@chromium.org>

        Reviewed by Steve Block.

        Factoring the creation of 'FunctionOnly' callbacks in JavaScriptCore.
        https://bugs.webkit.org/show_bug.cgi?id=57770

        Create a template from an existing functionality in JSGeolocationCustom.cpp
        to be used by the custom bindings of both Geolocation and the Media Stream API.
        V8 version of this bug: https://bugs.webkit.org/show_bug.cgi?id=57760

        No new tests. LayoutTests/fast/dom/Geolocation/argument-types.html

        * Android.jscbindings.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/CallbackFunction.cpp: Added.
        (WebCore::checkFunctionOnlyCallback):
        * bindings/js/CallbackFunction.h: Added.
        (WebCore::createFunctionOnlyCallback):
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSGeolocationCustom.cpp:
        (WebCore::JSGeolocation::getCurrentPosition):
        (WebCore::JSGeolocation::watchPosition):

2011-04-06  Alexis Menard  <alexis.menard@openbossa.org>

        Reviewed by Andreas Kling.

        [Qt] Implement fullscreen playback for the GStreamer backend.
        https://bugs.webkit.org/show_bug.cgi?id=56826

        Implement support for fullscreen playback when building the
        Qt port with the GStreamer backend (DEFINES+=USE_GSTREAMER=1).
        The implementation is done in FullScreenVideoQt alongside with
        the Qt Multimedia support.

        No new tests because layout tests cover it. They are not yet activated
        but will be any time soon.

        * platform/graphics/gstreamer/PlatformVideoWindowPrivate.h:
        * platform/graphics/gstreamer/PlatformVideoWindowQt.cpp:
        (FullScreenVideoWindow::FullScreenVideoWindow):
        (FullScreenVideoWindow::setVideoElement):
        (FullScreenVideoWindow::closeEvent):
        (FullScreenVideoWindow::keyPressEvent):
        (FullScreenVideoWindow::event):
        (FullScreenVideoWindow::showFullScreen):
        (FullScreenVideoWindow::hideCursor):
        (FullScreenVideoWindow::showCursor):

2011-04-06  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Dimitri Glazkov.

        Bundle lineLeftOffset and lineRightOffset as a class
        https://bugs.webkit.org/show_bug.cgi?id=57851

        Added a new class LineOffsets that encapsulates lineLeftOffset and lineRightOffset.
        The patch makes clear that lineLeftOffset and lineRightOffset are never read individually
        and only the difference is used to compute the width.

        * rendering/RenderBlock.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::skipLeadingWhitespace): Takes LineOffsets instead of two integers.
        (WebCore::LineOffsets::LineOffsets): Added.
        (WebCore::LineOffsets::width): Added.
        (WebCore::LineOffsets::setLeft): Added.
        (WebCore::LineOffsets::setRight): Added.
        (WebCore::RenderBlock::findNextLineBreak): Calls skipLeadingWhitespace and positionNewFloatOnLine.
        (WebCore::RenderBlock::positionNewFloatOnLine): Takes LineOffsets instead of two integers.

2011-04-06  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=57916
        
        Implement an optimization to the line box tree to cull out most of the intermediate
        line boxes that can occur between the root line box and the leaves of the tree (images
        and text).

        RenderInlines now have a boolean member, m_alwaysCreateLineBoxes,
        that starts off as false. Only if it gets flipped to true will there be any line boxes
        created for that RenderInline.
        
        * page/FocusController.cpp:
        (WebCore::FocusController::advanceFocusDirectionally):
        Adjust the ordering of updateLayout calls to make sure rects aren't queried unless layout
        is up to date.

        * page/SpatialNavigation.cpp:
        (WebCore::hasOffscreenRect):
        (WebCore::nodeRectInAbsoluteCoordinates):
        Add asserts in spatial navigation code to catch any future bad queries that might be made
        for rectangles without layout being up to date.

        * platform/graphics/FloatRect.cpp:
        (WebCore::FloatRect::uniteIfNonZero):
        * platform/graphics/FloatRect.h:
        * platform/graphics/IntRect.cpp:
        (WebCore::IntRect::uniteIfNonZero):
        * platform/graphics/IntRect.h:
        Add a new unite function that is useful for the render tree to FloatRect and IntRect.  This
        version allows rect unites to happen if either width or height is nonzero.

        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::addNodeToRectBasedTestResult):
        Make sure rect-based hit testing properly adds in culled inline ancestors to the set of nodes
        if content inside those inlines is hit.

        * rendering/InlineBox.h:
        (WebCore::InlineBox::logicalFrameRect):
        Fix a bug in this function for obtaining the logical frame rect of an inline box.

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::addToLine):
        addToLine now also checks line gap in the line box tree optimization checks.
    
        (WebCore::InlineFlowBox::addTextBoxVisualOverflow):
        (WebCore::InlineFlowBox::computeOverflow):
        * rendering/InlineFlowBox.h:
        Rewritten to add the text box overflow to the text box itself.

         * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::destroy):
        Destroy has been changed to call a helper function to remove and destroy the line boxes that
        is now called from one additional spot.

        (WebCore::InlineTextBox::logicalOverflowRect):
        (WebCore::InlineTextBox::setLogicalOverflowRect):
        Text boxes now cache their own overflow in a global hash table.

        (WebCore::InlineTextBox::baselinePosition):
        (WebCore::InlineTextBox::lineHeight):
        Changed to not assume that the parent line box's renderer is the RenderText's immediate
        parent, since intermediate line boxes may have been culled.

        (WebCore::InlineTextBox::paint):
        Paint now properly checks only the text box overflow instead of the parent line box's overflow.

        * rendering/InlineTextBox.h:
        (WebCore::InlineTextBox::logicalTopVisualOverflow):
        (WebCore::InlineTextBox::logicalBottomVisualOverflow):
        (WebCore::InlineTextBox::logicalLeftVisualOverflow):
        (WebCore::InlineTextBox::logicalRightVisualOverflow):
        New accessors to obtain overflow for inline text boxes.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::updateFirstLetter):
        updateFirstLetter now removes text boxes from the line box tree before it destroys them, since those
        text boxes may not have anything in between them and the block that contains the inline first letter
        container.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::createLineBoxes):
        The culling optimization is done here.  Only if the RenderInline says that boxes are allowed will they
        be created.

        (WebCore::RenderBlock::layoutInlineChildren):
        The state of the RenderInline is updated here, in case it is discovered that line boxes are now needed.
        This is done before any lines are built.

        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::RenderInline):
        The new m_alwaysCreateLineBoxes flag has been added to the constructor.

        (WebCore::RenderInline::styleDidChange):
        An initial update of the m_alwaysCreateLineBoxes happens here for things that can be checked immediately
        (like having a layer, borders, padding, margins or backgrounds).  Some checks that depend on examining
        the RenderInline's parent (including first line styles) happen later in layoutInlineChildren.

        (WebCore::RenderInline::updateAlwaysCreateLineBoxes):
        The function called by layoutInlineChildren to check parent and child style differences (e.g., font,
        vertical alignment, line height, etc.).

        (WebCore::RenderInline::absoluteRects):
        (WebCore::RenderInline::culledInlineAbsoluteRects):
        absoluteRects calls culledInlineAbsoluteRects when m_alwaysCreateLineBoxes is false.

        (WebCore::RenderInline::absoluteQuads):
        (WebCore::RenderInline::culledInlineAbsoluteQuads):
        absoluteQuads calls culledInlineAbsoluteQuads when m_alwaysCreateLineBoxes is false.

        (WebCore::RenderInline::offsetLeft):
        (WebCore::RenderInline::offsetTop):
        offsetLeft and offsetTop now check descendant renderers when m_alwaysCreateLineBoxes is false.

        (WebCore::RenderInline::linesBoundingBox):
        (WebCore::RenderInline::culledInlineBoundingBox):
        lineBoundingBox calls culledInlineBoundingBox when m_alwaysCreateLineBoxes is false.

        (WebCore::RenderInline::culledInlineFirstLineBox):
        (WebCore::RenderInline::culledInlineLastLineBox):
        Helpers that return the first and last line box descendants. Used by firstLineBoxIncludingCulling and
        lastLineBoxIncludingCulling (which are in turn called by offsetLeft and offsetTop).

        (WebCore::RenderInline::culledInlineVisualOverflowBoundingBox):
        (WebCore::RenderInline::linesVisualOverflowBoundingBox):
        linesVisualOverflowBoundingBox calls culledInlineVisualOverflowBoundingBox when m_alwaysCreateLineBoxes is false.

        (WebCore::RenderInline::clippedOverflowRectForRepaint):
        The initial bailout check is now done using firstLineBoxIncludingCulling instead of just firstLineBox.

        (WebCore::RenderInline::dirtyLineBoxes):
        dirtyLineBoxes now crawls into descendants to figure out which root lines to dirty when
        m_alwaysCreateLineBoxes is false.

        (WebCore::RenderInline::createAndAppendInlineFlowBox):
        Clear the m_alwaysCreateLineBoxes if a box gets added anyway. This happens for leaf inline flows and also
        when line-box-contain is set to an unusual value.

        (WebCore::RenderInline::addFocusRingRects):
        Used culledInlineAbsoluteRects in place of the line box walk when m_alwaysCreateLineBoxes is false.

        * rendering/RenderInline.h:
        (WebCore::RenderInline::firstLineBoxIncludingCulling):
        (WebCore::RenderInline::lastLineBoxIncludingCulling):
        Helpers used in a few places (like offsetLeft and offsetTop), mostly in places where the existence of a box
        is all that needs checking.

        (WebCore::RenderInline::alwaysCreateLineBoxes):
        (WebCore::RenderInline::setAlwaysCreateLineBoxes):
        Functions for getting and setting the m_alwaysCreateLineBoxes flag.

        * rendering/RenderLineBoxList.cpp:
        (WebCore::RenderLineBoxList::dirtyLinesFromChangedChild):
        Modified to use firstLineBoxIncludingCulling and lastLineBoxIncludingCulling to ensure the right set of
        lines get dirtied.

        * rendering/RenderText.cpp:
        (WebCore::RenderText::removeAndDestroyTextBoxes):
        New helper invoked by destroy and also from updateFirstLetter.

        (WebCore::RenderText::destroy):
        Changed to call removeAndDestroyTextBoxes.

        (WebCore::RenderText::absoluteRects):
        Fixed to be properly physical instead of logical.

        (WebCore::RenderText::linesVisualOverflowBoundingBox):
        New implementation for RenderText that gives the bounding box of the text boxes including overflow from
        shadows, glyphs, text-stroke, etc.  Used by RenderInline::culledInlineVisualOverflowBoundingBox.

        * rendering/RenderText.h:
        * rendering/svg/RenderSVGInline.cpp:
        (WebCore::RenderSVGInline::RenderSVGInline):
        RenderSVGInline always sets m_alwaysCreateLineBoxes to true so that SVG is unaffected by this optimization.

        * rendering/svg/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBox::layoutCharactersInTextBoxes):
        (WebCore::SVGRootInlineBox::layoutChildBoxes):
        Move the isInlineFlowBox asserts to after the generated content skips, since the generated content boxes are
        now InlineTextBoxes (the enclosing InlineFlowBoxes got culled).

2011-04-05  Enrica Casucci  <enrica@apple.com>

        Reviewed by Darin Adler.

        REGRESSION: Drag & Drop Gmail Attachments doesn't work.
        https://bugs.webkit.org/show_bug.cgi?id=57909
        <rdar://problem/9103220>

        In WebKit2 we cannot rely on the value returned by platformData() that
        on Mac returns an NSDraggingInfo object. This is available only in the UI
        process. Therefore we should use m_pasteboard instead.
        We cannot change what platformData() returns on Mac, since there are
        delegate methods that receive a NSDraggingInfo object (only in WebKit).
        
        * platform/DragData.h:
        (WebCore::DragData::pasteboard): Added.
        * platform/mac/ClipboardMac.mm:
        (WebCore::Clipboard::create): Changed to use pasteboard() instead of platformData().
        * platform/mac/DragDataMac.mm:
        (WebCore::DragData::asColor): Replaced references to m_platformData with m_pasteboard.
        (WebCore::DragData::asURL): Same as above.

2011-04-06  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Darin Adler.

        ClipboardWin has unused variables "ExceptionCode ec"
        https://bugs.webkit.org/show_bug.cgi?id=57952

        Remove the unused variable.

        * platform/win/ClipboardWin.cpp:
        (WebCore::ClipboardWin::declareAndWriteDragImage):
        (WebCore::ClipboardWin::writePlainText):

2011-04-06  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Dimitri Glazkov.

        Split getBorderPaddingMargin into two functions
        https://bugs.webkit.org/show_bug.cgi?id=57947

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::borderPaddingMarginStart): Extracted from getBorderPaddingMargin.
        (WebCore::borderPaddingMarginEnd): Ditto.
        (WebCore::inlineLogicalWidth): Calls borderPaddingMarginStart and borderPaddingMarginEnd.
        (WebCore::RenderBlock::findNextLineBreak): Ditto.

2011-04-06  MORITA Hajime  <morrita@google.com>

        Reviewed by Dimitri Glazkov.

        [Refactoring] <progress> should not have manual layout code.
        https://bugs.webkit.org/show_bug.cgi?id=57801

        - Simplified RenderProgress, removing its custom layout code
        - Introducing ProgressValueElement and ProgressBarElement, replacing
          ProgressBarValueElement. 
        
        Now the structure is almost identical to <meter>, 
        other than:
        - RenderProgress has animated painting, thus manages its own timer.
        - Both ProgressValueElement and ProgressBarElement has pseudo classes
          which don't changes during its lifetime.
       
        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/html.css:
        (progress):
        (progress::-webkit-progress-bar):
        (progress::-webkit-progress-value):
        * html/HTMLProgressElement.cpp:
        (WebCore::HTMLProgressElement::~HTMLProgressElement):
        (WebCore::HTMLProgressElement::create):
        (WebCore::HTMLProgressElement::attach):
        (WebCore::HTMLProgressElement::didElementStateChange):
        (WebCore::HTMLProgressElement::createShadowSubtree):
        * html/HTMLProgressElement.h:
        * html/shadow/ProgressShadowElement.cpp: Copied from Source/WebCore/html/shadow/ProgressBarValueElement.h.
        (WebCore::ProgressShadowElement::ProgressShadowElement):
        (WebCore::ProgressShadowElement::progressElement):
        (WebCore::ProgressShadowElement::rendererIsNeeded):
        (WebCore::ProgressBarElement::shadowPseudoId):
        (WebCore::ProgressValueElement::shadowPseudoId):
        (WebCore::ProgressValueElement::setWidthPercentage):
        * html/shadow/ProgressShadowElement.h: Renamed from Source/WebCore/html/shadow/ProgressBarValueElement.h.
        (WebCore::ProgressBarElement::ProgressBarElement):
        (WebCore::ProgressBarElement::create):
        (WebCore::ProgressValueElement::ProgressValueElement):
        (WebCore::ProgressValueElement::create):
        * rendering/RenderProgress.cpp:
        (WebCore::RenderProgress::RenderProgress):
        (WebCore::RenderProgress::updateFromElement):
        (WebCore::RenderProgress::animationTimerFired):
        * rendering/RenderProgress.h:
        (WebCore::RenderProgress::requiresForcedStyleRecalcPropagation):
        (WebCore::RenderProgress::canHaveChildren):

2011-04-06  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Chris Fleizach.

        [GTK] Do not reference AccessibilityRenderObject from platform dependent code
        https://bugs.webkit.org/show_bug.cgi?id=57955

        Do not reference AccessibilityRenderObject from platform specific code

        Added new virtual functions to AccessibilityObject.h and removed
        explicit references to AccessibilityRenderObject from GTK code.

        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::renderer): New virtual method,
        returning 0 by default. Overriden by AccessibilityRenderObject.
        (WebCore::AccessibilityObject::correspondingLabelForControlElement):
        New virtual method, returning 0 by default. It complements the
        already present method correspondingControlForLabelElement().

        * accessibility/AccessibilityRenderObject.h:
        (WebCore::AccessibilityRenderObject::renderer): Made virtual.

        * accessibility/gtk/AXObjectCacheAtk.cpp:
        (WebCore::emitTextChanged): Reference  AccessibilityObject,
        instead of AccessibilityRenderObject.
        (WebCore::AXObjectCache::nodeTextChangePlatformNotification):
        Ditto.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (webkit_accessible_get_name): Do not reference
        AccessibilityRenderObject.
        (webkit_accessible_get_description): Ditto.
        (setAtkRelationSetFromCoreObject): Ditto.
        (optionFromList): Ditto.
        (optionFromSelection): Ditto.
        (webkit_accessible_selection_clear_selection): Ditto.
        (webkit_accessible_selection_get_selection_count): Ditto.
        (webkit_accessible_selection_select_all_selection): Ditto.
        (textForObject): Ditto.
        (webkit_accessible_text_get_text): Ditto.
        (getPangoLayoutForAtk): Ditto.
        (webkit_accessible_text_get_caret_offset): Ditto.
        (baselinePositionForRenderObject): Ditto.
        (getAttributeSetForAccessibilityObject): Ditto.
        (accessibilityObjectLength): Ditto.
        (getSelectionOffsetsForObject): Ditto.
        (webkit_accessible_text_set_selection): Ditto.
        (webkit_accessible_text_set_caret_offset): Ditto.
        (webkit_accessible_table_get_caption): Ditto.
        (getInterfaceMaskFromObject): Ditto.

        * accessibility/gtk/WebKitAccessibleHyperlink.cpp:
        (getRangeLengthForObject): Ditto.

        Removed unused renderer() method from AccessibilityMenuList.

        * accessibility/AccessibilityMenuList.h: Removed unused method.
        * accessibility/AccessibilityMenuList.cpp: Removed unused method.

2011-04-06  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Javascipt warning link expand and overlap with icons in js console
        https://bugs.webkit.org/show_bug.cgi?id=57939

        * inspector/front-end/inspector.js:
        (WebInspector.linkifyURLAsNode):

2011-04-06  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Beautify parameter names in Inspector.json (CSS domain)
        https://bugs.webkit.org/show_bug.cgi?id=57931

        * inspector/Inspector.json:

2011-04-06  Jia Pu  <jpu@apple.com>

        Reviewed by Darin Adler.

        [Mac] WebCore need to notify AppKit spell checker after user has modified autocorrected text.
        https://bugs.webkit.org/show_bug.cgi?id=57665
        <rdar://problem/7350477>

        We need to track how user modified an autocorrected word. If he changed it back to original
        text, we want to record AutocorrectionReverted response. And if he changed it to something
        else, we want to record AutocorrectionEdited response.

        To achieve this, we need to distringuish between text replacement caused by autocorrection
        from that due to other causes, such as reversion, text substitution, etc. So we added a new
        marker type "Autocorrected". We also need to be able to check for correction, even when we
        don't intend to actually carry out replacement. For this, we introduced a new TextCheckingOption
        value, "CheckForCorrection".

        We also added DocumentMarkerController::markersInRange() to retrieve a vector of markers in
        specified range, and of specified type.

        * dom/DocumentMarker.h:
        * dom/DocumentMarkerController.cpp:
        (WebCore::DocumentMarkerController::markersInRange):
        (WebCore::DocumentMarkerController::hasMarkers):
        * dom/DocumentMarkerController.h:
        * editing/Editor.cpp:
        (WebCore::markerTypesForAutocorrection):
        (WebCore::markersHaveIdenticalDescription):
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges):
        (WebCore::Editor::recordSpellcheckerResponseForModifiedCorrection):
        (WebCore::Editor::changeBackToReplacedString):
        (WebCore::Editor::markMisspellingsAndBadGrammar):
        (WebCore::Editor::applyCorrectionPanelInfo):
        (WebCore::Editor::unappliedSpellCorrection):
        (WebCore::Editor::textCheckingTypeMaskFor):
        * editing/Editor.h:
        * editing/SpellingCorrectionCommand.cpp:
        (WebCore::SpellingCorrectionCommand::doApply):

2011-04-06  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r83045.
        http://trac.webkit.org/changeset/83045
        https://bugs.webkit.org/show_bug.cgi?id=57953

        Broke win layout tests (Requested by podivilov on #webkit).

        * GNUmakefile.am:
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype._addScript):
        (WebInspector.DebuggerPresentationModel.prototype.toggleFormatSourceFiles):

2011-04-06  Ryosuke Niwa  <rniwa@webkit.org>

        Moved the declaration of positionNewFloatOnLine in RenderBlock.h after r83042.

        * rendering/RenderBlock.h:

2011-03-27  Diego Gonzalez  <diegohcg@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Re-draw the <input> fields for Qt Mobile Theme to do not override elements already styled.
        https://bugs.webkit.org/show_bug.cgi?id=57007

        * CodeGenerators.pri:
        * css/themeQtMobile.css: Removed.
        * platform/qt/QtMobileWebStyle.cpp:
        (drawRectangularControlBackground):
        (QtMobileWebStyle::drawPrimitive):
        (QtMobileWebStyle::drawComplexControl):
        * platform/qt/QtMobileWebStyle.h:
        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::isControlStyled):
        (WebCore::RenderThemeQt::paintTextField):

2011-04-06  Jia Pu  <jpu@apple.com>

        Reviewed by Darin Adler.

        [Mac] When autocorrection occurs without showing correction panel, WebCore need to post accessibility notification.
        https://bugs.webkit.org/show_bug.cgi?id=57800
        <rdar://problem/9218223>

        Defined a new accessibility notification type, AXAutocorrectionOccured. Editor::markAllMisspellingsAndBadGrammarInRanges()
        now posts said notification when any autocorrection or text replacement (e.g. replacing "(c)" with copyright mark) takes place.

        * accessibility/AXObjectCache.h:
        * accessibility/chromium/AXObjectCacheChromium.cpp:
        (WebCore::AXObjectCache::postPlatformNotification):
        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::postPlatformNotification):
        * editing/Editor.cpp:
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges):

2011-04-06  Martin Robinson  <mrobinson@igalia.com>

        Build fix for debug Cairo builds.

        * platform/graphics/cairo/PlatformContextCairo.cpp:
        (WebCore::PlatformContextCairo::pushImageMask): Update the reference to m_maskInformation.

2011-04-06  Diego Gonzalez  <diegohcg@webkit.org>

        Reviewed by Antonio Gomes.

        [Qt] Style fix for QtMobileWebStyle.h
        https://bugs.webkit.org/show_bug.cgi?id=57708

        * platform/qt/QtMobileWebStyle.h:

2011-04-06  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Darin Adler.

        Invalid color #{predefined colorName} is accepted by the CSS parser.
        https://bugs.webkit.org/show_bug.cgi?id=15360

        Test: fast/css/invalid-predefined-color.html

        * css/CSSGrammar.y: Remove superfluous hexcolor production.
        * css/tokenizer.flex: A hexadecimal number should consist of [a-fA-F0-9] values ({h}).

2011-03-30  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: add test for script formatter worker.
        https://bugs.webkit.org/show_bug.cgi?id=57447

        Test: inspector/debugger/script-formatter.html

        * GNUmakefile.am:
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel):
        (WebInspector.DebuggerPresentationModel.prototype.toggleFormatSourceFiles):

2011-04-06  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [Cairo] Hide the details of image masking in PlatformContextCairo
        https://bugs.webkit.org/show_bug.cgi?id=57878

        No new tests. This is just a refactor.

        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::savePlatformState): Call into PlatformContextCairo now to
        do the actual cairo_save. Remove information about image masking.
        (WebCore::GraphicsContext::restorePlatformState): Call into PlatformContextCairo now to
        do the actual cairo_restore. Remove information about image masking.
        * platform/graphics/cairo/GraphicsContextPlatformPrivateCairo.h:
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::clip): Use PlatformContextCairo here now.
        * platform/graphics/cairo/PlatformContextCairo.cpp:
        (WebCore::PlatformContextCairo::restore): Added.
        (WebCore::PlatformContextCairo::save): Added.
        (WebCore::PlatformContextCairo::pushImageMask): Added.
        * platform/graphics/cairo/PlatformContextCairo.h:
        (WebCore::ImageMaskInformation::update): Moved from GraphicsContextPlatformPrivateCairo.h.
        (WebCore::ImageMaskInformation::isValid): Ditto.
        (WebCore::ImageMaskInformation::maskSurface): Ditto.
        (WebCore::ImageMaskInformation::maskRect): Ditto.

2011-04-02  Diego Gonzalez  <diegohcg@webkit.org>

        Reviewed by Csaba Osztrogonác.

        [Qt] Radio buttons are showing wrong with mobile theme
        https://bugs.webkit.org/show_bug.cgi?id=57706

        * platform/qt/QtMobileWebStyle.cpp:
        (QtMobileWebStyle::drawRadio):

2011-04-06  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        Move RenderBlock::positionNewFloatOnLine to RenderBlockLineLayout.cpp
        https://bugs.webkit.org/show_bug.cgi?id=57943

        * rendering/RenderBlock.cpp: Removed positionNewFloatOnLine.
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::positionNewFloatOnLine): Moved from RenderBlock.cpp

2011-04-05  Diego Gonzalez  <diegohcg@webkit.org>

        Buildfix after r82125.

        [Qt] QtWebKit will not compile with QT_ASCII_CAST_WARNINGS enabled
        https://bugs.webkit.org/show_bug.cgi?id=57087

        * platform/qt/QtMobileWebStyle.cpp:
        (QtMobileWebStyle::findChecker):
        (QtMobileWebStyle::findRadio):
        (QtMobileWebStyle::findComboButton):

2011-04-06  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: inline script imports in ScriptFormatterWorker.js so it works in Safari release.
        https://bugs.webkit.org/show_bug.cgi?id=57641

        * WebCore.xcodeproj/project.pbxproj:
        * gyp/streamline-inspector-source.sh:
        * inspector/combine-javascript-resources.pl: Renamed from Source/WebCore/combine-javascript-resources.
        * inspector/inline-javascript-imports.py: Added.

2011-04-06  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        REGRESSION (r46914, r48764): When typing in Mail, line wrapping frequently occurs in the middle of words
        https://bugs.webkit.org/show_bug.cgi?id=57872

        r46914 initially introduced a regression by replacing calls to styleAtPosition by editingStyleAtPosition
        because editingStyleAtPosition did not avoid tab span to obtain the computed style unlike styleAtPosition.

        r46914 also introduced a regression by cloning hierarchy under new block at the insertion position without
        avoiding the tab span.

        Fixed the both regressions by avoiding tab spans when computing the editing style and when cloning hierarchy.

        Test: editing/inserting/insert-paragraph-separator-tab-span.html

        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::init): Always avoid a tab span when computing the editing style.
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply): Avoid cloning tab spans and inserting a paragraph
        separator into a paragraph separator.

2011-04-06  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Ryosuke Niwa.

        Add member functions for determining line/paragraph separation to InlineIterator
        https://bugs.webkit.org/show_bug.cgi?id=57938

        Adding atTextParagraphSeparator and atParagraphSeparator inline convenience functions to
        InlineIterator, where it makes far more sense for them to be. Also moving
        shouldPreserveNewline to RenderObject and renaming it preservesNewline.

        No new tests as this provides no new functionality.

        * rendering/InlineIterator.h:
        (WebCore::InlineIterator::atTextParagraphSeparator):
        (WebCore::InlineIterator::atParagraphSeparator):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::requiresLineBox):
        (WebCore::RenderBlock::findNextLineBreak):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::preservesNewline):

2011-04-05  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Range insertNode function does not update content in the inspector
        https://bugs.webkit.org/show_bug.cgi?id=57829

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::pushChildNodesToFrontend):
        (WebCore::InspectorDOMAgent::buildArrayForContainerChildren):

2011-04-06  Alejandro G. Castro  <alex@igalia.com>

        Fix GTK3 compilation after r82962.

        * platform/gtk/RenderThemeGtk3.cpp:
        (WebCore::paintToggle):
        (WebCore::renderButton):
        (WebCore::RenderThemeGtk::paintMenuList):
        (WebCore::RenderThemeGtk::paintTextField):
        (WebCore::RenderThemeGtk::paintSliderTrack):
        (WebCore::RenderThemeGtk::paintSliderThumb):
        (WebCore::RenderThemeGtk::paintProgressBar):
        (WebCore::paintSpinArrowButton):
        * platform/gtk/ScrollbarThemeGtk3.cpp:
        (WebCore::ScrollbarThemeGtk::paintTrackBackground):
        (WebCore::ScrollbarThemeGtk::paintScrollbarBackground):
        (WebCore::ScrollbarThemeGtk::paintThumb):
        (WebCore::ScrollbarThemeGtk::paintButton):

2011-04-06  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: [Extensions API] remove inspectedPage.* events
        https://bugs.webkit.org/show_bug.cgi?id=57763

        - Removed webInspector.inspectedPage.* events
        - moved onNavigated to webInspector.resources

        * inspector/front-end/ExtensionAPI.js:
        (WebInspector.injectedExtensionAPI):
        (WebInspector.injectedExtensionAPI.InspectedWindow):
        * inspector/front-end/ExtensionAPISchema.json:
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype.notifyInspectedURLChanged):
        * inspector/front-end/inspector.js:
        (WebInspector.domContentEventFired):
        (WebInspector.loadEventFired):
        (WebInspector.inspectedURLChanged):

2011-04-06  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Antti Koivisto.

        Add <head> to the simpleUserAgentStyleSheet
        https://bugs.webkit.org/show_bug.cgi?id=57915

        * css/CSSStyleSelector.cpp:
        (WebCore::elementCanUseSimpleDefaultStyle): add head to the
        simple stylesheet, display:none.

2011-04-05  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [Chromium] Add layout test for Summary view of detailed heap snapshots.
        https://bugs.webkit.org/show_bug.cgi?id=57856

        Test: inspector/profiler/detailed-heapshots-summary.html

        * inspector/front-end/DataGrid.js:
        (WebInspector.DataGrid):
        * inspector/front-end/DetailedHeapshotGridNodes.js:
        (WebInspector.HeapSnapshotGridNode.prototype._populate.doPopulate):
        (WebInspector.HeapSnapshotGridNode.prototype._populate):
        (WebInspector.HeapSnapshotGridNode.prototype.populateChildren):
        (WebInspector.HeapSnapshotGridNode.prototype.sort.doSort):
        (WebInspector.HeapSnapshotGridNode.prototype.sort):
        (WebInspector.HeapSnapshotDiffNode.prototype.populateChildren):
        * inspector/front-end/DetailedHeapshotView.js:
        (WebInspector.HeapSnapshotSortableDataGrid.prototype.sortingChanged):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype._finishHeapSnapshot.doParse):
        (WebInspector.ProfilesPanel.prototype._finishHeapSnapshot):

2011-04-06  Anders Bakken  <agbakken@gmail.com>

        Reviewed by David Levin.

        [Qt] SmartReplaceQt.cpp has coding-style errors
        https://bugs.webkit.org/show_bug.cgi?id=40261

        This patch does not require new test cases.

        * editing/qt/SmartReplaceQt.cpp:
        (WebCore::isCharacterSmartReplaceExempt):

2011-04-06  Naoki Takano  <takano.naoki@gmail.com>

        Reviewed by Ryosuke Niwa.

        REGRESSION(r81328): Null pointer crash in canAppendNewLineFeed when selection isn't inside an editable element
        https://bugs.webkit.org/show_bug.cgi?id=57755

        Test: editing/execCommand/insert-line-break-onload.html

        * editing/TypingCommand.cpp:
        (WebCore::canAppendNewLineFeed): Added null pointer check for rootEditableElement().

2011-04-05  Antti Koivisto  <antti@apple.com>

        Reviewed by Cameron Zwarich.

        Avoid calling currentTime() from FrameView::adjustedDeferredRepaintDelay() when repaints are deferred
        https://bugs.webkit.org/show_bug.cgi?id=57914

        Don't call adjustedDeferredRepaintDelay unnecessarily.

        * page/FrameView.cpp:
        (WebCore::FrameView::repaintContentRectangle):
        (WebCore::FrameView::adjustedDeferredRepaintDelay):

2011-04-05  Steve VanDeBogart  <vandebo@chromium.org>

        Reviewed by David Levin.

        Update call to SkAdvancedTypefaceMetrics to new API.
        https://bugs.webkit.org/show_bug.cgi?id=57887

        * platform/graphics/chromium/FontPlatformDataLinux.cpp:
        (WebCore::FontPlatformData::emSizeInFontUnits):

2011-04-05  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        Rename event dispatching functions after form event removal
        https://bugs.webkit.org/show_bug.cgi?id=57908

        * dom/InputElement.cpp:
        (WebCore::InputElement::setValueFromRenderer):
        * dom/Node.cpp:
        (WebCore::Node::dispatchChangeEvent):
        (WebCore::Node::dispatchInputEvent):
        (WebCore::Node::defaultEventHandler):
        * dom/Node.h:
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::dispatchFormControlChangeEvent):
        (WebCore::HTMLFormControlElement::dispatchFormControlInputEvent):
        (WebCore::HTMLTextFormControlElement::dispatchFormControlChangeEvent):
        Renamed "events" to "event", since there is only one event to dispatch now.

2011-04-05  Anders Bakken  <agbakken@gmail.com>

        Reviewed by David Levin.

        [Qt] DragControllerQt.cpp has coding-style errors
        https://bugs.webkit.org/show_bug.cgi?id=40258

        This patch does not require new test cases.

        * page/qt/DragControllerQt.cpp:
        (WebCore::DragController::dragOperation):

2011-04-05  Steve VanDeBogart  <vandebo@chromium.org>

        Reviewed by David Levin.

        Update deprecated include: platform_canvas_win.h to platform_canvas.h.
        https://bugs.webkit.org/show_bug.cgi?id=57896

        * platform/graphics/chromium/FontChromiumWin.cpp:

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

        Try to fix Leopard bots.

        * platform/mac/HTMLConverter.mm: Fix #if back the way Alexey seems
        to have intended it.

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

        Try to fix Leopard bots.

        * platform/mac/HTMLConverter.mm: Move declarations of new functions
        inside the appropriate #if.

2011-04-05  Adrienne Walker  <enne@google.com>

        Reviewed by Tony Chang.

        Correctly set color when using skia's fillRoundedRect.
        https://bugs.webkit.org/show_bug.cgi?id=57907

        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::fillRoundedRect):

2011-04-05  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        Move attributedStringFromRange down to WebCore
        https://bugs.webkit.org/show_bug.cgi?id=57905

        No change in behavior, so no new tests.

        Also tweaked HTMLConverter to not use methods defined in WebKit.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/mac/HTMLConverter.h:
        * platform/mac/HTMLConverter.mm:
        (-[WebHTMLConverter _newTabForElement:]):
        (-[WebHTMLConverter _addAttachmentForElement:URL:needsParagraph:usePlaceholder:]):
        (+[WebHTMLConverter editingAttributedStringFromRange:]):
        (fileWrapperForURL):
        (fileWrapperForElement):
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::writeSelection):
        * platform/mac/WebNSAttributedStringExtras.h: Copied from Source/WebKit/mac/Misc/WebNSAttributedStringExtras.h.
        * platform/mac/WebNSAttributedStringExtras.mm: Copied from Source/WebKit/mac/Misc/WebNSAttributedStringExtras.mm.
        (WebCore::attributedStringByStrippingAttachmentCharacters):

2011-04-05  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler.

        Rename variables in border drawing code for readability
        https://bugs.webkit.org/show_bug.cgi?id=57894

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::drawLineForBoxSide):
        (WebCore::RenderObject::drawBoxSideFromPath):
        (WebCore::RenderObject::drawArcForBoxSide):

2011-04-05  Antti Koivisto  <antti@apple.com>

        Reviewed by Darin Adler.

        Defer repaints during style recalc
        https://bugs.webkit.org/show_bug.cgi?id=57886

        This reduces the need to do (often expensive) platform surface invalidation.
        We already do this during layout but style recalculation may trigger
        invalidation as well.
    
        * dom/Document.cpp:
        (WebCore::Document::recalcStyle):

2011-04-05  Jer Noble  <jer.noble@apple.com>

        Reviewed by Darin Adler.

        HTML5 Player Has no Fullscreen Mode
        https://bugs.webkit.org/show_bug.cgi?id=57795

        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::supportsFullscreen): Call the new ChromeClient API
            supportsFullScreenForElement() before the old supportsFullScreenForNode() API.

2011-04-05  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: fix data url's status and timing the network panel.
        https://bugs.webkit.org/show_bug.cgi?id=53066

        Added data url support for status of network resources.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkDataGridNode.prototype._refreshStatusCell):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource.prototype.isDataURL):

2011-04-04  Vitaly Repeshko  <vitalyr@chromium.org>

        Reviewed by Adam Barth.

        [V8] Keep dirty primitive CSS values alive.
        https://bugs.webkit.org/show_bug.cgi?id=57810

        * bindings/v8/V8GCController.cpp:
        (WebCore::GrouperVisitor::visitDOMWrapper):

2011-04-05  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Adele Peterson.

        Add a fast path for simple color backgrounds
        https://bugs.webkit.org/show_bug.cgi?id=57773

        Add a fast path for drawing simple color backgrounds. It's
        faster to fill a path or rect than it is to set up a clip,
        and then paint the rect.
        
        No visible behavior change so no new tests.

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):

2011-04-05  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed EFL build fix for r82962.

        * CMakeListsEfl.txt:

2011-04-05  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Add support for offline audio rendering to AudioContext API
        https://bugs.webkit.org/show_bug.cgi?id=57676

        No new tests since audio API is not yet implemented.

        * DerivedSources.make:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSAudioContextCustom.cpp:
        (WebCore::JSAudioContextConstructor::constructJSAudioContext):
        * bindings/js/JSEventCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSEventTarget.cpp:
        (WebCore::toJS):
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::convertEventTargetToV8Object):
        * bindings/v8/custom/V8AudioContextCustom.cpp:
        (WebCore::V8AudioContext::constructorCallback):
        * bindings/v8/custom/V8EventCustom.cpp:
        (WebCore::toV8):
        * dom/Event.cpp:
        (WebCore::Event::isOfflineAudioCompletionEvent):
        * dom/Event.h:
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::toAudioContext):
        * dom/EventTarget.h:
        * platform/audio/HRTFDatabaseLoader.cpp:
        (WebCore::HRTFDatabaseLoader::waitForLoaderThreadCompletion):
        * platform/audio/HRTFDatabaseLoader.h:
        (WebCore::HRTFDatabaseLoader::loader):
        * webaudio/AudioContext.cpp:
        (WebCore::AudioContext::createOfflineContext):
        (WebCore::AudioContext::AudioContext):
        (WebCore::AudioContext::constructCommon):
        (WebCore::AudioContext::document):
        (WebCore::AudioContext::scriptExecutionContext):
        (WebCore::AudioContext::toAudioContext):
        (WebCore::AudioContext::startRendering):
        (WebCore::AudioContext::fireCompletionEvent):
        * webaudio/AudioContext.h:
        (WebCore::AudioContext::isOfflineContext):
        (WebCore::AudioContext::eventTargetData):
        (WebCore::AudioContext::ensureEventTargetData):
        (WebCore::AudioContext::refEventTarget):
        (WebCore::AudioContext::derefEventTarget):
        * webaudio/AudioContext.idl:
        * webaudio/AudioDestinationNode.cpp:
        (WebCore::AudioDestinationNode::AudioDestinationNode):
        * webaudio/AudioDestinationNode.h:
        (WebCore::AudioDestinationNode::reset):
        (WebCore::AudioDestinationNode::numberOfChannels):
        * webaudio/ConvolverNode.cpp:
        (WebCore::ConvolverNode::setBuffer):
        * webaudio/DefaultAudioDestinationNode.cpp: Added.
        (WebCore::DefaultAudioDestinationNode::DefaultAudioDestinationNode):
        (WebCore::DefaultAudioDestinationNode::~DefaultAudioDestinationNode):
        (WebCore::DefaultAudioDestinationNode::initialize):
        (WebCore::DefaultAudioDestinationNode::uninitialize):
        (WebCore::DefaultAudioDestinationNode::startRendering):
        * webaudio/DefaultAudioDestinationNode.h: Added.
        (WebCore::DefaultAudioDestinationNode::create):
        (WebCore::DefaultAudioDestinationNode::sampleRate):
        * webaudio/OfflineAudioCompletionEvent.cpp: Added.
        (WebCore::OfflineAudioCompletionEvent::create):
        (WebCore::OfflineAudioCompletionEvent::OfflineAudioCompletionEvent):
        (WebCore::OfflineAudioCompletionEvent::~OfflineAudioCompletionEvent):
        (WebCore::OfflineAudioCompletionEvent::isOfflineAudioCompletionEvent):
        * webaudio/OfflineAudioCompletionEvent.h: Added.
        (WebCore::OfflineAudioCompletionEvent::renderedBuffer):
        * webaudio/OfflineAudioCompletionEvent.idl: Added.
        * webaudio/OfflineAudioDestinationNode.cpp: Added.
        (WebCore::OfflineAudioDestinationNode::OfflineAudioDestinationNode):
        (WebCore::OfflineAudioDestinationNode::~OfflineAudioDestinationNode):
        (WebCore::OfflineAudioDestinationNode::initialize):
        (WebCore::OfflineAudioDestinationNode::uninitialize):
        (WebCore::OfflineAudioDestinationNode::startRendering):
        (WebCore::OfflineAudioDestinationNode::renderEntry):
        (WebCore::OfflineAudioDestinationNode::render):
        (WebCore::OfflineAudioDestinationNode::notifyCompleteDispatch):
        (WebCore::OfflineAudioDestinationNode::notifyComplete):
        * webaudio/OfflineAudioDestinationNode.h: Added.
        (WebCore::OfflineAudioDestinationNode::create):
        (WebCore::OfflineAudioDestinationNode::sampleRate):

2011-04-05  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Eric Seidel.

        [Cairo] Better separate the concerns of GraphicsContextCairo
        https://bugs.webkit.org/show_bug.cgi?id=55150

        Add a PlatformContextCairo which right now stores the cairo_t* for a
        GraphicsContextCairo. Later patches will move logic for tracking ContextShadow
        and image masking layers into this PlatformContextCairo class.

        No new tests. This patch is only a code cleanup.

        * GNUmakefile.am:
        * platform/graphics/GraphicsContext.h: The platform context is no longer a
        cairo_t, but our new class the PlatformContextCairo.
        * platform/graphics/cairo/ContextShadowCairo.cpp: Updated to reflect new class.j
        * platform/graphics/cairo/FontCairo.cpp: Ditto.
        * platform/graphics/cairo/GradientCairo.cpp: Ditto.
        * platform/graphics/cairo/GraphicsContextCairo.cpp: Mostly mechanical
        changes which now reference platformContext()->cr() to get the cairo_t.
        * platform/graphics/cairo/GraphicsContextPlatformPrivateCairo.h: Now hold the
        PlatformContextCairo instead of the cairo_t.
        * platform/graphics/cairo/ImageBufferCairo.cpp: Update to reflect new class.
        * platform/graphics/cairo/ImageCairo.cpp: Ditto.
        * platform/graphics/cairo/PathCairo.cpp: Ditto.
        * platform/graphics/cairo/PlatformContextCairo.cpp: Added.
        * platform/graphics/cairo/PlatformContextCairo.h: Added.
        * platform/graphics/gtk/FontGtk.cpp: Update to reflect new class.
        * platform/graphics/gtk/IconGtk.cpp: Ditto.
        * platform/graphics/win/GraphicsContextCairoWin.cpp: Now fill out
        m_data with a private section containing the platform context instead of
        just a cairo_t.
        * platform/gtk/RenderThemeGtk.cpp: Update to reflect new class.
        * platform/gtk/WidgetRenderingContext.cpp: Ditto.
        (WebCore::WidgetRenderingContext::~WidgetRenderingContext): Ditto.
        * plugins/gtk/PluginViewGtk.cpp: Ditto.

2011-04-05  David Dorwin  <ddorwin@chromium.org>

        Reviewed by David Levin.

        Fullscreen code assumes all layers use GPU compositing when USE(ACCELERATED_COMPOSITING)
        https://bugs.webkit.org/show_bug.cgi?id=57400

        Check whether the full screen renderer layer is being composited by the GPU before assuming that the backing is valid. 
        Accelerated compositing may be compiled in but disabled at runtime or for some elements.

        Tests: Fullscreen layout tests on Chromium.

        * dom/Document.cpp:
        (WebCore::Document::webkitWillEnterFullScreenForElement):
        (WebCore::Document::webkitDidEnterFullScreenForElement):
        (WebCore::Document::webkitWillExitFullScreenForElement):

2011-04-05  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Regression: Invalid write in SVGTextLayoutEngine
        https://bugs.webkit.org/show_bug.cgi?id=57721

        Properly stop layout if all metrics object refer to zero-width/height characters,
        which can happen for instance when using <text font-size="0">.

        Test: svg/text/font-size-null-assertion.svg

        * rendering/svg/SVGTextLayoutEngine.cpp:
        (WebCore::SVGTextLayoutEngine::currentLogicalCharacterAttributes):
        (WebCore::SVGTextLayoutEngine::currentLogicalCharacterMetrics):

2011-04-04 MORITA Hajime  <morrita@google.com>

        Reviewed by Ryosuke Niwa.

        [Refactoring] SpellCheckingResult should be replaced with TextCheckingResult
        https://bugs.webkit.org/show_bug.cgi?id=56085
        
        Removed WebCore::SpellCheckingResult and replaced it with TextCheckingResult.
        This change also added TextCheckerClient::requestCheckingOfString() should have
        TextCheckingTypeMask as a parameter to control text checking type.

        * WebCore.exp.in:
        * editing/Editor.cpp:
        (WebCore::Editor::replaceSelectionWithFragment):
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges):
        (WebCore::Editor::textCheckingTypeMaskFor): Extracted from markAllMisspellingsAndBadGrammarInRanges()
        * editing/SpellChecker.cpp:
        (WebCore::SpellChecker::requestCheckingFor): Added a parameter.
        (WebCore::SpellChecker::markAt): Extracted from didCheck(), Added a check for the GrammarDetail object.
        (WebCore::SpellChecker::didCheck):
        * editing/SpellChecker.h:
        * loader/EmptyClients.h:
        (WebCore::EmptyTextCheckerClient::checkTextOfParagraph):
        (WebCore::EmptyTextCheckerClient::requestCheckingOfString):
        * platform/text/TextCheckerClient.h:

2011-04-04  Antti Koivisto  <antti@apple.com>

        Reviewed by Sam Weinig.

        Print stylesheet on nytimes.com loads too early
        https://bugs.webkit.org/show_bug.cgi?id=57814

        Don't load resources with Very Low priority until there are no other resources to 
        load for the host (or until document is complete enough that we stop limiting requests).

        No tests, this is  difficult to observe reliably with our current testing infrastructure.
        Verified working with Wireshark.

        * loader/ResourceLoadScheduler.cpp:
        (WebCore::ResourceLoadScheduler::servePendingRequests):
        (WebCore::ResourceLoadScheduler::HostInformation::limitRequests):
        * loader/ResourceLoadScheduler.h:

2011-04-04  Steve Block  <steveblock@google.com>

        Reviewed by Dimitri Glazkov.

        JavaInstance should be a pure interface
        https://bugs.webkit.org/show_bug.cgi?id=55383

        This patch fixes JavaInstance for V8 only.

        It factors out a JavaInstance interface which does not use JNI
        types. This will allow the Java bridge to be used with objects
        that don't use JNI directly. The existing jobject-backed
        implementation is moved to a new JavaInstanceJobject class which
        implements the interface.

        No new tests, refactoring only.

        * Android.v8bindings.mk:
        * WebCore.gypi:
        * bridge/jni/JobjectWrapper.h:
        * bridge/jni/v8/JNIUtilityPrivate.cpp:
        (JSC::Bindings::jvalueToJavaValue):
        (JSC::Bindings::javaValueToJvalue):
        * bridge/jni/v8/JavaInstanceJobjectV8.cpp:
        (JavaInstanceJobject::JavaInstanceJobject):
        (JavaInstanceJobject::~JavaInstanceJobject):
        (JavaInstanceJobject::begin):
        (JavaInstanceJobject::end):
        (JavaInstanceJobject::getClass):
        (JavaInstanceJobject::invokeMethod):
        (JavaInstanceJobject::getField):
        * bridge/jni/v8/JavaInstanceJobjectV8.h: Copied from Source/WebCore/bridge/jni/v8/JavaInstanceV8.h.
        (JSC::Bindings::JavaInstanceJobject::javaInstance):
        * bridge/jni/v8/JavaInstanceV8.h:
        (JSC::Bindings::JavaInstance::~JavaInstance):

2011-04-05  Dimitri Glazkov  <dglazkov@chromium.org>

       Reviewed by Darin Adler.

        Move MouseEvent-dispatching logic into MouseEventDispatchMediator.
        https://bugs.webkit.org/show_bug.cgi?id=57639

        Refactoring, covered by existing tests.

        * dom/EventDispatcher.cpp:
        (WebCore::EventDispatcher::dispatchEvent): Moved useful assertion here
            from dispatchMouseEvent.
        (WebCore::EventDispatcher::adjustRelatedTarget): Converted into a method.
        * dom/EventDispatcher.h: Adjusted decls.
        (WebCore::EventDispatcher::node): Added.
        * dom/MouseEvent.cpp:
        (WebCore::MouseEvent::create): Moved useful assertion here from
            dispatchMouseEvent.
        (WebCore::MouseEventDispatchMediator::MouseEventDispatchMediator): Added.
        (WebCore::MouseEventDispatchMediator::event): Added.
        (WebCore::MouseEventDispatchMediator::dispatchEvent): Added.
        * dom/MouseEvent.h:
        (WebCore::MouseEvent::setRelatedTarget): Added.
        * dom/Node.cpp:
        (WebCore::Node::dispatchMouseEvent): Changed to use MouseEventDispatchMediator.

2011-04-05  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Adam Roben & Dirk Schulze.

        text-tspan-02-b.svg from SVG 1.1 2nd edition fails
        https://bugs.webkit.org/show_bug.cgi?id=57831

        We were not spanning rotation values correcty accross text children, which resulted in text-span-02-b.svg misrendering.
        While rewriting the rotation specific code, it came apparent that the LayoutScope concept is flawed in general and
        should be replaced by a global list of x/y/dx/dy/rotate values for the whole text subtree. This makes it much simpler
        to implement the demand that the last rotation value spans the whole scope. A follow-up patch will optimize the
        required memory.

        Example:
        <text rotate="10,20,999,50">AB<tspan rotate="30">CDE</>FGH</text>
    
        text:   A  B  C  D  E  F  G  H
        rotate="10 20 30 30 30 50 50 50"

        Tests: svg/W3C-SVG-1.1-SE/text-tspan-02-b.svg
               svg/text/text-midpoint-split-bug.svg

        * rendering/RenderBlockLineLayout.cpp:     Move SVG specific midpoint creation after the non-SVG specific code that may mutate the midpoints. otherwhise we end up in an
        (WebCore::RenderBlock::findNextLineBreak): inconsistent state. We were intereferring with the ignoreSpaces code resulting in wrong truncations - covered by new testcase.
        * rendering/svg/SVGTextLayoutAttributes.cpp:
        (WebCore::SVGTextLayoutAttributes::reserveCapacity): Also reserveCapacity for the text metrics list (minor optimization).
        (WebCore::SVGTextLayoutAttributes::fillWithEmptyValue): Added helper function for use from SVGTextLayoutAttributesBuilder.
        (WebCore::SVGTextLayoutAttributes::appendEmptyValue): Ditto.
        (WebCore::safeValueAtPosition): Ditto. (Inline helper)
        (WebCore::SVGTextLayoutAttributes::appendSingleValueFromAttribute): Ditto.
        * rendering/svg/SVGTextLayoutAttributes.h: Ditto.
        * rendering/svg/SVGTextLayoutAttributesBuilder.cpp: Rewrite code, see explaination above.
        (WebCore::SVGTextLayoutAttributesBuilder::buildLayoutAttributesForTextSubtree):
        (WebCore::processRenderSVGInlineText):
        (WebCore::SVGTextLayoutAttributesBuilder::collectTextPositioningElements):
        (WebCore::SVGTextLayoutAttributesBuilder::buildLayoutAttributesForAllCharacters):
        (WebCore::SVGTextLayoutAttributesBuilder::propagateLayoutAttributes):
        (WebCore::fillListAtPosition):
        (WebCore::SVGTextLayoutAttributesBuilder::fillAttributesAtPosition):
        * rendering/svg/SVGTextLayoutAttributesBuilder.h:
        (WebCore::SVGTextLayoutAttributesBuilder::TextPosition::TextPosition):

2011-04-05  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Ryosuke Niwa.

        DeleteButtonController is given invalid style
        https://bugs.webkit.org/show_bug.cgi?id=57853

        DeleteButtonController was assigned an invalid style that can lead to assertions
        in debug builds. This matches up the code with its intent.

        No new tests as this changes nothing on release builds.

        * editing/DeleteButtonController.cpp:
        (WebCore::DeleteButtonController::createDeletionUI):

2011-04-05  Anders Bakken  <agbakken@gmail.com>

        Reviewed by Laszlo Gombos.

        [Qt] EditorQt.cpp has coding-style errors
        https://bugs.webkit.org/show_bug.cgi?id=40260
        
        This patch does not require new test cases.

        * editing/qt/EditorQt.cpp:

2011-04-05  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: go to line dialog highlights wrong line.
        https://bugs.webkit.org/show_bug.cgi?id=57845

        * inspector/front-end/GoToLineDialog.js:
        (WebInspector.GoToLineDialog.prototype._highlightSelectedLine):

2011-04-05  Luke Macpherson   <macpherson@chromium.org>

        Reviewed by Dimitri Glazkov.

        Implement CSSPropertyDirection in CSSStyleApplyProperty
        https://bugs.webkit.org/show_bug.cgi?id=57608

        No new tests required as no new functionality introduced.

        * css/CSSStyleApplyProperty.cpp:
        Add implementation class for CSSPropertyDirection
        * css/CSSStyleSelector.cpp:
        Remove existing implementation for CSSPropertyDirection
        * css/CSSStyleSelector.h:
        Add getter for element

2011-04-05  Leandro Gracia Gil  <leandrogracia@chromium.org>

        Reviewed by Steve Block.

        Factoring the creation of 'FunctionOnly' callbacks in V8.
        https://bugs.webkit.org/show_bug.cgi?id=57760

        This method creates a template from an existing functionality in V8GeolocationCustom.cpp
        to V8Utilities to be used by the custom bindings of both Geolocation and the Media Stream API.

        No new tests. LayoutTests/fast/dom/Geolocation/argument-types.html

        * bindings/v8/V8Utilities.cpp:
        (WebCore::throwTypeMismatchException):
        * bindings/v8/V8Utilities.h:
        (WebCore::createFunctionOnlyCallback):
        * bindings/v8/custom/V8GeolocationCustom.cpp:
        (WebCore::V8Geolocation::getCurrentPositionCallback):
        (WebCore::V8Geolocation::watchPositionCallback):

2011-04-05  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Andreas Kling.

        Switch from Vector<UChar> to StringBuilder in bindings/
        https://bugs.webkit.org/show_bug.cgi?id=57838

        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::cssPropertyName):
        * bindings/v8/custom/V8CSSStyleDeclarationCustom.cpp:
        (WebCore::cssPropertyInfo):

2011-04-05  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Andreas Kling.

        Switch from Vector<UChar> to StringBuilder in accessibility/
        https://bugs.webkit.org/show_bug.cgi?id=57837

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::listMarkerTextForNodeAndPosition):
        (WebCore::AccessibilityObject::stringForVisiblePositionRange):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::accessibilityDescriptionForElements):

2011-04-05  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Pavel Feldman.

        Web Inspector: Scripts with syntax errors are cropped in the UI
        https://bugs.webkit.org/show_bug.cgi?id=57828

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.addMessageToSource):

2011-04-05  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        Remove onformchange and onforminput events/event handlers
        https://bugs.webkit.org/show_bug.cgi?id=55755
        <rdar://problem/9087969>

        Covered by existing tests.

        * dom/Document.h:
        * dom/Document.idl:
        * dom/Element.h:
        * dom/Element.idl:
        * dom/Event.cpp:
        (WebCore::Event::fromUserGesture):
        * dom/EventNames.h:
        * html/FormAssociatedElement.h:
        * html/HTMLAttributeNames.in:
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::parseMappedAttribute):
        * html/HTMLElement.h:
        * html/HTMLFormControlElement.h:
        (WebCore::HTMLFormControlElement::isEnumeratable):
        * html/HTMLFormElement.cpp:
        * html/HTMLFormElement.h:
        * html/HTMLFormElement.idl:
        * html/HTMLInputElement.h:
        * html/HTMLKeygenElement.h:
        * html/HTMLObjectElement.h:
        (WebCore::HTMLObjectElement::isEnumeratable):
        * html/HTMLOutputElement.h:
        (WebCore::HTMLOutputElement::isEnumeratable):
        * html/HTMLSelectElement.h:
        (WebCore::HTMLSelectElement::isEnumeratable):
        * html/HTMLTextAreaElement.h:
        (WebCore::HTMLTextAreaElement::isEnumeratable):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:

2011-04-05  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r82915.
        http://trac.webkit.org/changeset/82915
        https://bugs.webkit.org/show_bug.cgi?id=57825

        Broke 270 chromium tests on win and linux (Requested by
        podivilov on #webkit).

        * rendering/RenderThemeChromiumSkia.cpp:
        (WebCore::RenderThemeChromiumSkia::defaultGUIFont):

2011-04-05  James Simonsen  <simonjam@chromium.org>

        Reviewed by Adam Barth.

        Stop preload scanning CSS when it&apos;s impossible to have another @import.
        https://bugs.webkit.org/show_bug.cgi?id=57664

        @import statements are only allowed at the beginning of a CSS file.
        Only comments or @charset can precede them. After seeing anything else,
        abort early so that we:
        - don't have to parse the rest of the CSS.
        - don't preload something that the regular parser won't load.

        * html/parser/CSSPreloadScanner.cpp:
        (WebCore::CSSPreloadScanner::scan): Terminate early if we're done with @imports.
        (WebCore::CSSPreloadScanner::tokenize): Terminate early if we see a {} or any style rule.
        (WebCore::CSSPreloadScanner::emitRule): Only @charset or @import are allowed to precede @import.
        * html/parser/CSSPreloadScanner.h: Add DoneParsingImportRules state.

2011-04-05  Takayoshi Kochi <kochi@chromium.org>

        Reviewed by Tony Chang.

        [chromium] Specify 'sans-serif' as a fallback to the default UI font
        'Arial' for non-latin UI scripts (e.g. CJK).
        https://bugs.webkit.org/show_bug.cgi?id=55035

        No new tests, because it may still fail if the system is not configured
        properly to resolve 'sans-serif' to existing real font file, thus even
        manual test is hard to systematically tell it is working properly.

        * rendering/RenderThemeChromiumSkia.cpp

2011-04-05  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        Setting defaultValue on a textarea with a modified value still clobbers the value
        https://bugs.webkit.org/show_bug.cgi?id=57636

        If the dirty flag is true, we shouldn't update the value when the
        defaultValue is updated

        Test: fast/forms/textarea-set-defaultvalue-after-value.html

        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::childrenChanged):
        (WebCore::HTMLTextAreaElement::setDefaultValue):

2011-04-04  Kent Tamura  <tkent@chromium.org>

        Add a case label which was unexpectedly removed in r82899.
        https://bugs.webkit.org/show_bug.cgi?id=50661

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::extractPseudoType):

2011-04-04  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/7709452> Implement Default Ruby Overhang Behavior
        https://bugs.webkit.org/show_bug.cgi?id=49334

        Tests: fast/ruby/overhang-horizontal.html
               fast/ruby/overhang-vertical.html

        This is a first cut at ruby overhang. It allows ruby text to hang over other
        text of equal or smaller size. Two notable omissions are that max preferred
        width computation was not patched, so it will overshoot, and that overhang
        ignores the width of the adjoining text runs.

        * rendering/RenderBlock.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::computeInlineDirectionPositionsForLine): Adjust margins
        of ruby runs for overhang.
        (WebCore::RenderBlock::fitBelowFloats): Maintain the increase in line width to
        compensate for overhang.
        (WebCore::RenderBlock::findNextLineBreak): When encountering
        a ruby run, increase the line width to account for the fact that overhang will be
        collapsed.
        * rendering/RenderRubyRun.cpp:
        (WebCore::RenderRubyRun::getOverhang): Added. Allows ruby to overhang if
        the adjoining renderer is text with equal or smaller font size.
        * rendering/RenderRubyRun.h:
        (WebCore::toRenderRubyRun):

2011-04-04  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/57384> CFNetwork and WebCore load priorities should match

        Reviewed by Alexey Proskuryakov.

        * WebCore.exp.in: Export wkSetHTTPPipeliningMaximumPriority().
        * platform/mac/WebCoreSystemInterface.h:
        (wkSetHTTPPipeliningMaximumPriority): Added function pointer
        declaration.
        * platform/mac/WebCoreSystemInterface.mm:
        (wkSetHTTPPipeliningMaximumPriority): Added function pointer.
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::initializeMaximumHTTPConnectionCountPerHost): Call
        wkSetHTTPPipeliningMaximumPriority() to set the maximum HTTP
        pipelining priority.
        * platform/network/cf/ResourceRequestCFNet.h:
        (WebCore::toResourceLoadPriority): Renamed from
        mapHTTPPipeliningPriorityToResourceLoadPriority().  Updated to
        to handle Unresolved case.
        (WebCore::toHTTPPipeliningPriority): Renamed from
        mapResourceLoadPriorityToHTTPPipeliningPriority().  Updated to
        handle Unresolved case.
        * platform/network/mac/ResourceRequestMac.mm:
        (WebCore::ResourceRequest::doUpdateResourceRequest): Switched to
        use toResourceLoadPriority().
        (WebCore::ResourceRequest::doUpdatePlatformRequest): Switched to
        use toHTTPPipeliningPriority().  Moved
        shouldForceHTTPPipeliningPriorityHigh() check into the argument
        of toHTTPPipeliningPriority() instead of hard-coding a
        now-incorrect value.

2011-04-04  MORITA Hajime  <morrita@google.com>

        Reviewed by Kent Tamura.

        Convert <meter> shadow DOM to a DOM-based shadow.
        https://bugs.webkit.org/show_bug.cgi?id=50661
        
        Eliminated a large part of <meter> custom layout code,
        which is replaced by a shadow tree.
        Note that the shadow tree is created on construction time and
        will remain during the host HTMLMeterElement lifecycle.
        
        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::setProperty):
        * css/CSSMutableStyleDeclaration.h:
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::pseudoId):
        (WebCore::nameToPseudoTypeMap):
        (WebCore::CSSSelector::extractPseudoType):
        * css/CSSSelector.h:
        * css/html.css:
        (meter):
        (meter::-webkit-meter-bar):
        (meter::-webkit-meter-optimum-value):
        (meter::-webkit-meter-suboptimum-value):
        (meter::-webkit-meter-even-less-good-value):
        * html/HTMLMeterElement.cpp:
        (WebCore::HTMLMeterElement::~HTMLMeterElement):
        (WebCore::HTMLMeterElement::parseMappedAttribute):
        (WebCore::HTMLMeterElement::attach):
        (WebCore::HTMLMeterElement::valueRatio):
        (WebCore::HTMLMeterElement::didElementStateChange):
        (WebCore::HTMLMeterElement::createShadowSubtree):
        * html/HTMLMeterElement.h:
        * html/shadow/MeterShadowElement.cpp: Added.
        (WebCore::MeterShadowElement::MeterShadowElement):        
        (WebCore::MeterShadowElement::meterElement):
        (WebCore::MeterShadowElement::rendererIsNeeded):
        (WebCore::MeterBarElement::shadowPseudoId):
        (WebCore::MeterValueElement::shadowPseudoId):
        (WebCore::MeterValueElement::setWidthPercentage):
        * html/shadow/MeterShadowElement.h: Added.
        (WebCore::MeterBarElement::MeterBarElement):
        (WebCore::MeterBarElement::create):
        (WebCore::MeterValueElement::MeterValueElement):
        (WebCore::MeterValueElement::create):
        * rendering/RenderMeter.cpp:
        (WebCore::RenderMeter::RenderMeter):
        (WebCore::RenderMeter::~RenderMeter):
        (WebCore::RenderMeter::valueRatio):
        * rendering/RenderMeter.h:
        (WebCore::RenderMeter::renderName):
        (WebCore::RenderMeter::isMeter):
        (WebCore::RenderMeter::requiresForcedStyleRecalcPropagation):
        (WebCore::RenderMeter::canHaveChildren):

2011-04-04  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Adam Barth.

        Introduce EventDispatchMediator abstraction, which encapsulate all
        non-trivial logic around firing a specific type of an event.
        https://bugs.webkit.org/show_bug.cgi?id=57562

        Refactoring, covered by existing tests.

        * dom/Event.cpp:
        (WebCore::EventDispatchMediator::EventDispatchMediator): Added.
        (WebCore::EventDispatchMediator::~EventDispatchMediator): Added.
        (WebCore::EventDispatchMediator::dispatchEvent): Added.
        (WebCore::EventDispatchMediator::event): Added.
        * dom/Event.h: Added decl.
        * dom/EventDispatcher.cpp:
        (WebCore::EventDispatcher::dispatchEvent): Changed to use EventDispatchMediator.
        * dom/EventDispatcher.h: Updated decls.
        * dom/KeyboardEvent.cpp:
        (WebCore::KeyboardEventDispatchMediator::KeyboardEventDispatchMediator): Added.
        (WebCore::KeyboardEventDispatchMediator::dispatchEvent): Added.
        * dom/KeyboardEvent.h: Updated decls
        * dom/Node.cpp:
        (WebCore::Node::dispatchEvent): Changed to use EventDispatchMediator.
        (WebCore::Node::dispatchKeyEvent): Changed to use KeyboardEventDispatchMediator.

2011-04-04  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [Cairo] Memory leak in RefPtrCairo
        https://bugs.webkit.org/show_bug.cgi?id=57758

        No new tests. This just fixes a memory leak.

        * platform/graphics/cairo/RefPtrCairo.cpp:
        (WTF::derefIfNotNull): Deref should unref the cairo_font_fact_t, not reference it.

2011-04-04  Adrienne Walker  <enne@google.com>

        Unreviewed, rolling out r82880.
        http://trac.webkit.org/changeset/82880
        https://bugs.webkit.org/show_bug.cgi?id=50661

        Meter elements not rendered in Chromium Linux layout tests

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSMutableStyleDeclaration.cpp:
        * css/CSSMutableStyleDeclaration.h:
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::pseudoId):
        (WebCore::nameToPseudoTypeMap):
        (WebCore::CSSSelector::extractPseudoType):
        * css/CSSSelector.h:
        * css/html.css:
        (meter):
        (meter::-webkit-meter):
        (meter::-webkit-meter-bar):
        (meter::-webkit-meter-optimum-value):
        (meter::-webkit-meter-suboptimal-value):
        (meter::-webkit-meter-even-less-good-value):
        * html/HTMLMeterElement.cpp:
        (WebCore::HTMLMeterElement::create):
        (WebCore::HTMLMeterElement::parseMappedAttribute):
        (WebCore::HTMLMeterElement::attach):
        * html/HTMLMeterElement.h:
        * html/shadow/MeterShadowElement.cpp: Removed.
        * html/shadow/MeterShadowElement.h: Removed.
        * rendering/RenderMeter.cpp:
        (WebCore::RenderMeter::RenderMeter):
        (WebCore::RenderMeter::~RenderMeter):
        (WebCore::RenderMeter::createPart):
        (WebCore::RenderMeter::updateFromElement):
        (WebCore::RenderMeter::layoutParts):
        (WebCore::RenderMeter::styleDidChange):
        (WebCore::RenderMeter::shouldHaveParts):
        (WebCore::RenderMeter::valueRatio):
        (WebCore::RenderMeter::barPartRect):
        (WebCore::RenderMeter::valuePartRect):
        (WebCore::RenderMeter::valuePseudoId):
        (WebCore::RenderMeter::barPseudoId):
        (WebCore::RenderMeter::detachShadows):
        (WebCore::RenderMeter::updateShadows):
        * rendering/RenderMeter.h:
        (WebCore::RenderMeter::renderName):
        (WebCore::RenderMeter::isMeter):
        (WebCore::RenderMeter::shadowAttached):

2011-04-04  Chang Shu  <cshu@webkit.org>

        Reviewed by Ryosuke Niwa.

        setContentEditable with true/false/inherit string is not working properly
        https://bugs.webkit.org/show_bug.cgi?id=52058

        Move isContentEditable from HTMLElement to Node. Thus, Node provides two functions for
        checking editability: rendererIsEditable and isContentEdiable. The former is a fast path,
        which does NOT trigger layout and only checks the render style of usermodify. The latter
        updates the layout first to make sure the render style syncs with DOM contenteditable 
        attribute. Certain call sites that need to call isContentEditable rather than rendererIsEditable
        are also updated in the patch. But a complete fix will follow up in bug 57244.

        This patch fixes all the failed layout tests related to set contenteditable.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isReadOnly):
        * dom/Node.cpp:
        (WebCore::Node::isContentEditable):
        (WebCore::Node::shouldUseInputMethod):
        * dom/Node.h:
        * html/HTMLElement.cpp:
        * html/HTMLElement.h:

2011-04-04  Roland Steiner  <rolandsteiner@chromium.org>

        Reviewed by Dimitri Glazkov.

        Bug 57689 - Extract scoping functionality from Document
        https://bugs.webkit.org/show_bug.cgi?id=57689

        Moved selfOnlyRef (renamed to guardRef), element ID, image map
        and accesss key functionalities from Document to a new base
        class TreeScope.

        TreeShared: made removedLastRef protected

        No new tests. (refactoring)

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::destroyScope):
        (WebCore::Document::getElementById):
        (WebCore::Document::childrenChanged):
        (WebCore::Document::scheduleStyleRecalc):
        (WebCore::Document::attach):
        (WebCore::Document::detach):
        * dom/Document.h:
        (WebCore::Node::Node):
        * dom/DocumentOrderedMap.cpp:
        (WebCore::DocumentOrderedMap::get):
        (WebCore::DocumentOrderedMap::getElementById):
        (WebCore::DocumentOrderedMap::getElementByMapName):
        (WebCore::DocumentOrderedMap::getElementByLowercasedMapName):
        * dom/DocumentOrderedMap.h:
        * dom/DOMAllInOne.cpp:
        * dom/Node.cpp:
        (WebCore::Node::~Node):
        (WebCore::Node::setDocument):
        * dom/Node.h:
        * dom/TreeScope.cpp: Added.
        * dom/TreeScope.h: Added.
        * platform/TreeShared.h:
        (WebCore::TreeShared::removedLastRef): made protected

2011-04-04  MORITA Hajime  <morrita@google.com>

        Reviewed by Dimitri Glazkov.

        Convert <meter> shadow DOM to a DOM-based shadow.
        https://bugs.webkit.org/show_bug.cgi?id=50661
        
        Eliminated a large part of <meter> custom layout code,
        which is replaced by a shadow tree.
        Note that the shadow tree is created on construction time and
        will remain during the host HTMLMeterElement lifecycle.
        
        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::setProperty):
        * css/CSSMutableStyleDeclaration.h:
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::pseudoId):
        (WebCore::nameToPseudoTypeMap):
        (WebCore::CSSSelector::extractPseudoType):
        * css/CSSSelector.h:
        * css/html.css:
        (meter):
        (meter::-webkit-meter-bar):
        (meter::-webkit-meter-optimum-value):
        (meter::-webkit-meter-suboptimum-value):
        (meter::-webkit-meter-even-less-good-value):
        * html/HTMLMeterElement.cpp:
        (WebCore::HTMLMeterElement::~HTMLMeterElement):
        (WebCore::HTMLMeterElement::parseMappedAttribute):
        (WebCore::HTMLMeterElement::attach):
        (WebCore::HTMLMeterElement::valueRatio):
        (WebCore::HTMLMeterElement::didElementStateChange):
        (WebCore::HTMLMeterElement::createShadowSubtree):
        * html/HTMLMeterElement.h:
        * html/shadow/MeterShadowElement.cpp: Added.
        (WebCore::MeterShadowElement::MeterShadowElement):        
        (WebCore::MeterShadowElement::meterElement):
        (WebCore::MeterShadowElement::rendererIsNeeded):
        (WebCore::MeterBarElement::shadowPseudoId):
        (WebCore::MeterValueElement::shadowPseudoId):
        (WebCore::MeterValueElement::setWidthPercentage):
        * html/shadow/MeterShadowElement.h: Added.
        (WebCore::MeterBarElement::MeterBarElement):
        (WebCore::MeterBarElement::create):
        (WebCore::MeterValueElement::MeterValueElement):
        (WebCore::MeterValueElement::create):
        * rendering/RenderMeter.cpp:
        (WebCore::RenderMeter::RenderMeter):
        (WebCore::RenderMeter::~RenderMeter):
        (WebCore::RenderMeter::valueRatio):
        * rendering/RenderMeter.h:
        (WebCore::RenderMeter::renderName):
        (WebCore::RenderMeter::isMeter):
        (WebCore::RenderMeter::requiresForcedStyleRecalcPropagation):
        (WebCore::RenderMeter::canHaveChildren):

2011-04-04  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] WebGL support
        https://bugs.webkit.org/show_bug.cgi?id=31517

        Add WebGL support for the GTK+ bits of WebCore.

        No new tests. This will be covered by the existing WebGL tests once
        the bots are capable of running WebGL tests.

        * GNUmakefile.am: Added new files required for WebGL support.
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext): Extend #ifdef to cover GTK+ as well, which does not
        yet support accelerated compositing.
        * platform/graphics/ANGLEWebKitBridge.h: Update to reflect the fact that ANGLE isn't compiled as
        a framework for GTK+.
        * platform/graphics/GraphicsContext3D.h:
        (WebCore::GraphicsContext3D::platformTexture): Added a declaration of this method for Cairo.
        (WebCore::GraphicsContext3D::paintsIntoCanvasBuffer): Ditto.
        * platform/graphics/cairo/GraphicsContext3DCairo.cpp: Added.
        (WebCore::GraphicsContext3D::getImageData): Added.
        (WebCore::GraphicsContext3D::paintToCanvas): Added.
        * platform/graphics/cairo/OpenGLShims.cpp: Added. This file controls loading of GL extension
        functions dynamically. They have different names across the different vendors' GL implementations.
        (WebCore::lookupOpenGLFunctionAddress): Added
        (WebCore::openGLFunctionTable): Added
        (WebCore::initializeOpenGLShims): Added
        * platform/graphics/cairo/OpenGLShims.h: Added.
        * platform/graphics/gtk/DrawingBufferGtk.cpp: Added.
        (WebCore::DrawingBuffer::DrawingBuffer): Very generic implementation for Cairo.
        (WebCore::DrawingBuffer::~DrawingBuffer): Ditto.
        (WebCore::DrawingBuffer::didReset): Ditto.
        (WebCore::DrawingBuffer::platformColorBuffer): Ditto.
        * platform/graphics/gtk/GraphicsContext3DGtk.cpp: Added.
        (WebCore::GraphicsContext3D::create): Initial implementation.
        (WebCore::GraphicsContext3D::GraphicsContext3D): Ditto.
        (WebCore::GraphicsContext3D::~GraphicsContext3D): Ditto.
        (WebCore::GraphicsContext3D::makeContextCurrent): Ditto.
        (WebCore::GraphicsContext3D::platformGraphicsContext3D): Ditto.
        (WebCore::GraphicsContext3D::isGLES2Compliant): Ditto.
        * platform/graphics/gtk/GraphicsContext3DInternal.cpp: Added.
        (sharedDisplay): Added this shared display which is required by some
        display drivers.
        (WebCore::activeGraphicsContexts): This method keeps track of all active GraphicsContext3D
        contexts, in order to clean them up at exit. This prevents crashes on certain OpenGL drivers.
        (WebCore::GraphicsContext3DInternal::addActiveGraphicsContext): Ditto.
        (WebCore::GraphicsContext3DInternal::removeActiveGraphicsContext): Ditto.
        (WebCore::GraphicsContext3DInternal::cleanupActiveContextsAtExit): Ditto.
        (WebCore::GraphicsContext3DInternal::create): Figure out the best way to create an OpenGL
        context given the current environment.
        (WebCore::GraphicsContext3DInternal::createPbufferContext): Pbuffer context initializer.
        (WebCore::GraphicsContext3DInternal::createPixmapContext): Pixmap context initializer.
        (WebCore::GraphicsContext3DInternal::GraphicsContext3DInternal): Initial implementation.
        (WebCore::GraphicsContext3DInternal::~GraphicsContext3DInternal): Ditto.
        (WebCore::GraphicsContext3DInternal::makeContextCurrent): Ditto.
        * platform/graphics/gtk/GraphicsContext3DInternal.h: Added.
        * platform/graphics/opengl/Extensions3DOpenGL.cpp: Added generic implementation.
        (WebCore::Extensions3DOpenGL::ensureEnabled): Ditto.
        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::GraphicsContext3D::reshape): Test for the context using the public API rather than
        the private bits that are specific to the Apple port.

2011-04-04  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Dan Bernstein.

        REGRESSION (WebKit2): Caps-Lock indicator sometimes doesn't appear in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=51230
        <rdar://problem/8780989>

        <rdar://problem/9015250> REGRESSION (WebKit2): Key events not fired for modifier keys

        * page/EventHandler.cpp: (WebCore::EventHandler::keyEvent): Moved Caps Lock handling from
        WebKits to WebCore, because WebKit shouldn't be smart.

2011-04-04  Steve Falkenburg  <sfalken@apple.com>

        Fix Windows build warning.

        * WebCore.vcproj/WebCore.vcproj: Exclude EventQueue.cpp in Debug_All build.

2011-04-04  Adam Roben  <aroben@apple.com>

        Attempted Mac build fix, part III

        * WebCore.exp.in: Export PlatformCALayer::setGeometryFlipped. Also resorted some symbols.

2011-04-04  Andy Estes  <aestes@apple.com>

        Fix the Mac build.

        * WebCore.exp.in:

2011-04-04  David Dorwin  <ddorwin@chromium.org>

        Reviewed by David Levin.

        Chromium Mac crashes when entering fullscreen
        https://bugs.webkit.org/show_bug.cgi?id=57483

        Override extraFullScreenStyleSheet in RenderThemeChromiumMac to avoid hitting the ASSERT_NOT_REACHED in RenderThemeMac.

        * WebCore.gyp/WebCore.gyp:
        * rendering/RenderThemeChromiumMac.h:
        * rendering/RenderThemeChromiumMac.mm:
        (WebCore::RenderThemeChromiumMac::extraFullScreenStyleSheet):

2011-04-04  Adam Roben  <aroben@apple.com>

        Attempted Mac build fix, part II

        * WebCore.xcodeproj/project.pbxproj: Marked PlatformCALayerClient.h and
        PlatformCAAnimation.h as private so that WebKit2 can #include them (transitively).

2011-04-04  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Remove unused AnalyzeWithLargeStack code from Windows build files
        https://bugs.webkit.org/show_bug.cgi?id=57771
        
        This was used for us to build with prefast automatically,
        but it is out-of-date and hasn't been used for some time.
        Removing completely for now.

        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcproj/WebCorePreBuild.cmd:

2011-04-01  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Simon Fraser.

        [CG] Do not accelerate small canvases
        https://bugs.webkit.org/show_bug.cgi?id=57596

        No new tests. No outward behavior changes.

        * platform/graphics/cg/ImageBufferCG.cpp:

2011-04-04  Adam Roben  <aroben@apple.com>

        Attempted Mac build fix

        * WebCore.xcodeproj/project.pbxproj: Marked PlatformCALayer.h and GraphicsLayerCA.h private
        so that WebKit can #include them.

2011-04-04  Malcolm MacLeod  <mmacleod@webmail.co.za>

        Reviewed by Kevin Ollivier.

        [wx] Implement support for temporary files.
        
        https://bugs.webkit.org/show_bug.cgi?id=57772

        * platform/FileSystem.h:
        * platform/wx/FileSystemWx.cpp:
        (WebCore::getFileModificationTime):
        (WebCore::openTemporaryFile):
        (WebCore::closeFile):
        (WebCore::writeToFile):

2011-04-01  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        Make StructureChain GC allocated
        https://bugs.webkit.org/show_bug.cgi?id=56695

        Update for new Structure marking function

        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::markChildren):

2011-04-04  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: add support for the enumerated types in the protocol.
        https://bugs.webkit.org/show_bug.cgi?id=57761

        * inspector/Inspector.json:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::setPauseOnExceptions):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::resourceRetrievedByXMLHttpRequestImpl):
        (WebCore::InspectorInstrumentation::scriptImportedImpl):
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::cachedResourceTypeString):
        (WebCore::InspectorResourceAgent::didReceiveResponse):
        (WebCore::InspectorResourceAgent::setInitialScriptContent):
        (WebCore::InspectorResourceAgent::setInitialXHRContent):
        * inspector/InspectorResourceAgent.h:
        * inspector/front-end/ScriptsPanel.js:
        * inspector/generate-inspector-idl:

2011-04-04  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: InspectorRuntimeAgent should not depend on Page
        https://bugs.webkit.org/show_bug.cgi?id=57759

        Descendants of InspectorRuntimeAgent should implement a method providing access to the default
        inspected state used for console evaluations.

        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent): runtime agent is created and deleted along with other agents.
        (WebCore::InspectorAgent::setFrontend):
        * inspector/InspectorAgent.h:
        * inspector/InspectorRuntimeAgent.cpp:
        (WebCore::InspectorRuntimeAgent::create):
        (WebCore::InspectorRuntimeAgent::InspectorRuntimeAgent):
        (WebCore::InspectorRuntimeAgent::evaluate):
        * inspector/InspectorRuntimeAgent.h:
        (WebCore::InspectorRuntimeAgent::InspectedStateProvider::~InspectedStateProvider):

2011-04-04  Yong Li  <yoli@rim.com>

        Reviewed by Antonio Gomes.

        https://bugs.webkit.org/show_bug.cgi?id=55969
        Fix the issue that document state is not saved when
        going backward and ending up with error page.

        Test: platform/qt/fast/history/back-to-unreachable-url-then-forward.html

        (For manual test, load a non-existent html first, then load
        fast/history/resources/check-scroll-position.html, then go
        back and go forward. If it doesn't show "SUCCESS" at the bottom
        of the page, your browser has failed the test)

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

2011-04-04  Sergio Villar Senin  <svillar@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Fix make distcheck for 1.4.0
        https://bugs.webkit.org/show_bug.cgi?id=57750

        Added a missing header file to the Makefile

        * GNUmakefile.am:

2011-04-04  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] http/tests/plugins/post-url-file.html fails on GTK+
        https://bugs.webkit.org/show_bug.cgi?id=55826

        Correct the implementation of handlePostReadFile which uses GIO APIs and
        actually resizes the buffer to fit the entire size of the file data. This
        was likely leading to memory corruption until now.

        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::handlePostReadFile): Fix this method.

2011-04-04  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: [Extensions API] add notifications on panels shown/hidden
        https://bugs.webkit.org/show_bug.cgi?id=57752

        * inspector/front-end/ExtensionAPI.js:
        (WebInspector.injectedExtensionAPI.PanelImpl):
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype.notifyPanelShown):
        (WebInspector.ExtensionServer.prototype.notifyPanelHidden):
        * inspector/front-end/Panel.js:
        (WebInspector.Panel.prototype.show):
        (WebInspector.Panel.prototype.hide):

2011-04-04  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: search in resources panel is broken.
        https://bugs.webkit.org/show_bug.cgi?id=57631

        Search in resources panel should trigger source frame content load.

        * inspector/front-end/Panel.js:
        (WebInspector.Panel.prototype.jumpToNextSearchResult):
        (WebInspector.Panel.prototype.jumpToPreviousSearchResult):
        * inspector/front-end/ResourcesPanel.js:
        * inspector/front-end/SearchController.js:
        (WebInspector.SearchController.prototype.handleShortcut):
        (WebInspector.SearchController.prototype.focusSearchField):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.show):
        (WebInspector.SourceFrame.prototype._ensureContentLoaded):
        (WebInspector.SourceFrame.prototype.performSearch):

2011-04-03  Eric Seidel  <eric@webkit.org>

        Reviewed by Ryosuke Niwa.

        Split out UnicodeBidi enum into its own header (to allow use in platform)
        https://bugs.webkit.org/show_bug.cgi?id=57722

        unicode-bidi is a CSS concept.  However the same concept is really needed throughout
        the bidi code in platform as well.  So I'm moving the enum to platform.
        The only part of the enum which doesn't make much sense to platform/ is "normal".

        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSPrimitiveValueMappings.h:
        * platform/text/UnicodeBidi.h: Added.
        * rendering/style/RenderStyle.h:
        * rendering/style/RenderStyleConstants.h:

2011-04-04  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Highlighted search tokens would not be shown on long lines in the text viewer
        https://bugs.webkit.org/show_bug.cgi?id=57749

        * inspector/front-end/TextViewer.js:
        (WebInspector.TextEditorMainPanel.prototype.markAndRevealRange):
        (WebInspector.TextEditorMainPanel.prototype._paintLine):

2011-04-04  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Incorrectly reports warning on missing/incorrect content-type for 304s
        https://bugs.webkit.org/show_bug.cgi?id=48525

        * inspector/front-end/Resource.js:
        (WebInspector.Resource.prototype._mimeTypeIsConsistentWithType):

2011-04-01  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: appropriateSelectorForNode() invokes the "localName" getter on DOMNode rather than function
        https://bugs.webkit.org/show_bug.cgi?id=57632

        Moved the affected method onto the DOMNode.prototype as "appropriateSelectorFor".

        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMNode.prototype.appropriateSelectorFor):
        * inspector/front-end/EventListenersSidebarPane.js:
        ():
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.prototype.addBlankSection):
        * inspector/front-end/utilities.js:

2011-04-04  Andrey Kosyakov  <caseq@chromium.org>

        Unreviewed. Followup to an incomplete commit in r82806.

        * inspector/front-end/ExtensionAPI.js:
        (WebInspector.injectedExtensionAPI.PanelWithSidebarImpl.prototype.createSidebarPane):
        (WebInspector.injectedExtensionAPI.ExtensionSidebarPaneImpl):
        (WebInspector.injectedExtensionAPI.ExtensionSidebarPaneImpl.prototype.setHeight):
        (WebInspector.injectedExtensionAPI.ExtensionSidebarPaneImpl.prototype.setExpression):
        (WebInspector.injectedExtensionAPI):
        * inspector/front-end/ExtensionPanel.js:
        (WebInspector.ExtensionSidebarPane):
        (WebInspector.ExtensionSidebarPane.prototype.setPage):
        (WebInspector.ExtensionSidebarPane.prototype._setObject):
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer):
        (WebInspector.ExtensionServer.prototype.notifyExtensionSidebarUpdated):
        (WebInspector.ExtensionServer.prototype._onCreatePanel):
        (WebInspector.ExtensionServer.prototype._onCreateSidebarPane):
        (WebInspector.ExtensionServer.prototype.createClientIframe):
        (WebInspector.ExtensionServer.prototype._onSetSidebarContent):

2011-04-04  Yury Semikhatsky  <yurys@chromium.org>

        Unreviewed. Fix Qt minimal build.

        * inspector/InspectorFrontendChannel.h:

2011-04-01  Sergey Vorobyev  <sergeyvorobyev@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Separate sendMessageToFrontend function
        from InspectorClient to individual interface.
        https://bugs.webkit.org/show_bug.cgi?id=57548

        Refactoring - covered with existing inspector tests.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/CodeGeneratorInspector.pm:
        * inspector/InspectorClient.h:
        * inspector/InspectorFrontendChannel.h: Added.
        (WebCore::InspectorFrontendChannel::~InspectorFrontendChannel):

2011-04-04  Nico Weber  <thakis@chromium.org>

        Reviewed by Eric Seidel.

        Prefer a using directive over qualified names in LocalizedNumberICU.cpp
        https://bugs.webkit.org/show_bug.cgi?id=57742

        Requested by ap in https://bugs.webkit.org/show_bug.cgi?id=57715

        * platform/text/LocalizedNumberICU.cpp:
        (WebCore::createFormatterForCurrentLocale):
        (WebCore::numberFormatter):
        (WebCore::parseLocalizedNumber):
        (WebCore::formatLocalizedNumber):

2011-04-04  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Breakpoints in the gutter stay static while editing the text
        https://bugs.webkit.org/show_bug.cgi?id=57616

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame):
        (WebInspector.SourceFrame.prototype._saveViewerState):
        (WebInspector.SourceFrame.prototype._restoreViewerState):
        (WebInspector.SourceFrame.prototype._endEditing):
        (WebInspector.SourceFrame.prototype._lineNumberAfterEditing):
        (WebInspector.SourceFrame.prototype.addBreakpoint):
        (WebInspector.SourceFrame.prototype.removeBreakpoint):
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer.prototype._syncDecorationsForLine):
        (WebInspector):
        (WebInspector.TextEditorChunkedPanel.prototype.removeDecoration):
        (WebInspector.TextEditorChunkedPanel.prototype.makeLineAChunk):
        (WebInspector.TextEditorChunkedPanel.prototype._splitChunkOnALine):
        (WebInspector.TextEditorMainPanel.prototype._splitChunkOnALine):

2011-04-04  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: remove obsolete doc generating code from CodeGenerator.
        https://bugs.webkit.org/show_bug.cgi?id=57748

        * inspector/CodeGeneratorInspector.pm:

2011-04-04  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: [Extensions API] Merge WatchExpressionSidebarPane into ExtensionSidebarPane
        https://bugs.webkit.org/show_bug.cgi?id=57622

        Merged WatchExpressionSidebarPane into ExtensionSidebarPane, added setPage(url).
        Fixed wrong getter in schema (scripts -> elements)

        * inspector/front-end/ExtensionAPI.js:
        (WebInspector.injectedExtensionAPI.WatchExpressionSidebarPaneImpl.prototype.setObject):
        (WebInspector.injectedExtensionAPI.WatchExpressionSidebarPaneImpl.prototype.setPage):
        * inspector/front-end/ExtensionAPISchema.json:
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype._onSetSidebarPage):

2011-04-04  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: introduce support of 'optional' flag for command arguments.
        https://bugs.webkit.org/show_bug.cgi?id=57698

        * inspector/CodeGeneratorInspector.pm:
        * inspector/Inspector.json:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::setBreakpointByUrl):
        (WebCore::InspectorDebuggerAgent::setBreakpoint):
        (WebCore::InspectorDebuggerAgent::evaluateOnCallFrame):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::reloadPage):
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::getResourceContent):
        * inspector/InspectorResourceAgent.h:
        * inspector/InspectorRuntimeAgent.cpp:
        (WebCore::InspectorRuntimeAgent::evaluate):
        * inspector/InspectorRuntimeAgent.h:
        * inspector/generate-inspector-idl:

2011-04-04  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: InjectedScriptManager should not try to access inspected window in case of workers
        https://bugs.webkit.org/show_bug.cgi?id=57637

        * bindings/js/JSInjectedScriptManager.cpp:
        (WebCore::InjectedScriptManager::injectedScriptFor):
        * bindings/v8/custom/V8InjectedScriptManager.cpp:
        (WebCore::InjectedScriptManager::injectedScriptFor):
        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::InjectedScript):
        (WebCore::InjectedScript::canAccessInspectedWindow):
        * inspector/InjectedScript.h:
        * inspector/InjectedScriptManager.cpp:
        (WebCore::InjectedScriptManager::createForPage):
        (WebCore::InjectedScriptManager::createForWorker):
        (WebCore::InjectedScriptManager::InjectedScriptManager): access check function is passed as a parameter to the constructor
        and it depends on which type of context we're inspecting(worker or page).
        (WebCore::InjectedScriptManager::canAccessInspectedWorkerContext):
        * inspector/InjectedScriptManager.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):

2011-04-04  Ryuan Choi  <ryuan.choi@samsung.com>

        Reviewed by Eric Seidel.

        V8StringCallback.cpp requires V8Binding.h
        https://bugs.webkit.org/show_bug.cgi?id=57699

        No new tests required because of just adding header file.

        * bindings/scripts/CodeGeneratorV8.pm:

2011-04-03  Ryuan Choi  <ryuan.choi@samsung.com>

        Reviewed by Eric Seidel.

        [CMAKE] Clean duplicated files in WebCore_Sources
        https://bugs.webkit.org/show_bug.cgi?id=57741

        No new tests, Only duplicated files were removed.

        * CMakeLists.txt:

2011-04-03  Luke Macpherson   <macpherson@chromium.org>

        Reviewed by Darin Adler.

        Fix 2-space indentation introduced in bug 54706.
        https://bugs.webkit.org/show_bug.cgi?id=57740

        No new tests - whitespace changes only.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        Convert 2-space indentation to 4-space indentation.

2011-04-03  Luke Macpherson   <macpherson@chromium.org>

        Reviewed by Dimitri Glazkov.

        Make CSSStyleApplyProperty non-copyable
        https://bugs.webkit.org/show_bug.cgi?id=57738

        No new functionality added so no new tests required.

        * css/CSSStyleApplyProperty.h:
        Added WTF_MAKE_NONCOPYABLE(CSSStyleApplyProperty) to ensure singleton stays single.

2011-04-03  Dan Bernstein  <mitz@apple.com>

        Reviewed by Maciej Stachowiak.

        fast/images/extra-image-in-image-document.html crashes when run after embed-image.html
        https://bugs.webkit.org/show_bug.cgi?id=57733

        The crash happens because resetting the page scale as part of preparing the WebView for the
        next test triggered layout, which in turn caused a plug-in to make a resource request, and
        DumpRenderTree's delegate to be dispatched. The delegate doesn’t expect to be called between
        tests, and it references the layout test controller, which is null.

        * page/Frame.cpp:
        (WebCore::Frame::scalePage): Avoid an unnecessary layout if the page scale isn’t changing. This
        is more efficient, and has the side effect of avoiding the crash in DumpRenderTree, although
        DumpRenderTree could still crash when after a test with disabled plug-ins and a non-1 page scale.
        I think there are currently no such tests, so I am not fixing DumpRenderTree.

2011-04-03  Eric Seidel  <eric@webkit.org>

        Reviewed by Ryosuke Niwa.

        Teach InlineIterator how to work from any root, not just a RenderBlock
        https://bugs.webkit.org/show_bug.cgi?id=57726

        For implementing bidi-unicode: isolate, we need to be able to run the
        bidi algorithm over a subtree of inlines, not just from a block root.
        This is the first step in making this possible.

        * rendering/InlineIterator.h:
        (WebCore::InlineIterator::InlineIterator):
        (WebCore::InlineIterator::root):
        (WebCore::bidiNext):
        (WebCore::bidiFirst):
        (WebCore::InlineIterator::increment):
        (WebCore::InlineBidiResolver::appendRun):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::findNextLineBreak):

2011-04-03  Eric Seidel  <eric@webkit.org>

        Reviewed by Dan Bernstein.

        Split out handling of trailing spaces from layoutInlineChildren
        https://bugs.webkit.org/show_bug.cgi?id=57432

        There is much more we could split out from this function, but this is a start.

        I suspect this is very hot code.  Hopefully the compiler will do the right thing.
        If it doesn't the Chromium PLT bots will tell us.

        * rendering/RenderBlock.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::handleTrailingSpaces):
        (WebCore::RenderBlock::layoutInlineChildren):

2011-03-21  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        editing commands shouldn't run when there's no body
        https://bugs.webkit.org/show_bug.cgi?id=56771

        The bug was caused by WebKit's not checking the existence of root editable element
        in enabled* functions. Although isContentEditable returns true whenever we're in design mode,
        we should not run editing commands in a document without a body element editable because
        doing so results in appending a non-body element to the document node.

        Fixed the bug by modifying various enabled* functions to ensure we have a root editable element.
        New behavior tries to match that of Firefox except StyleWithCSS, which Firefox seems to ignore
        when there are no body element. Since StyleWithCSS is a document's state or property, we allow
        execCommand('StyleWithCSS') even in a document without a body element.

        WebKit's and Firefox's behaviors also deviate in insert-image-with-selecting-document.html.
        Whereas WebKit respects selection set by script and ignores execCommand, Firefox modifies
        the selection when document.write("x") is ran and successfully inserts image.

        Thus, empty-document-delete.html and empty-document-justify-right.html both pass on Firefox
        while empty-document-stylewithcss.html and insert-image-with-selecting-document.html both fail.

        Since Internet Explorer does not allow execCommand to run under design mode properly, we could
        not test its behavior.

        Tests: editing/editability/empty-document-delete.html
               editing/editability/empty-document-justify-right.html
               editing/editability/empty-document-stylewithcss.html
               editing/execCommand/insert-image-with-selecting-document.html

        * editing/Editor.cpp:
        (WebCore::Editor::canEdit): Verify that the root editable element exists
        instead of just checking that selection endpoints are editable because
        selection endpoints could be document node without a body element in design mode
        and we don't want to consider such a document editable.
        (WebCore::Editor::canDelete): Ditto.
        * editing/EditorCommand.cpp:
        (WebCore::enabledInEditableText): Ditto.
        (WebCore::enabledInRichlyEditableText): Ditto.
        (WebCore::enabledDelete): Call enabledCut and enabledInEditableText instead
        of duplicating the code in order to fix the same bug.

2011-04-02  Dan Bernstein  <mitz@apple.com>

        Reviewed by Maciej Stachowiak.

        REGRESSION (r82786): Media controls render incorrectly on GTK and Qt
        https://bugs.webkit.org/show_bug.cgi?id=57719

        r82786 exposed an incorrect assumption inRenderMediaControlTimeDisplay::layout()
        that the timeline container is the parent of the time display. This is not true
        with the GTK media style, where the current time display is an inline box, and
        thus wrapped in an anonymous flexible box. The code was incorrectly considering
        the width of the anonymous box and deciding to hide the time display. Prior to
        r82786, this mistake was corrected by the call to computeLogicalWidth() in line layout.

        * rendering/MediaControlElements.cpp:
        (WebCore::RenderMediaControlTimeDisplay::layout): Changed to skip past anonymous ancestors.

2011-04-02  Nico Weber  <thakis@chromium.org>

        Reviewed by Adam Barth.

        Explicitly use icu namespace for ports building with U_USING_ICU_NAMESPACE=0

        By default, ICU includes |using namespace icu;| in its header files
        for backwards compatibility. Clients can define
        U_USING_ICU_NAMESPACE=0 to tell ICU to not do this. Prefixing all ICU
        classes with |icu::| makes this file compile no matter what
        U_USING_ICU_NAMESPACE is set to.

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

        * platform/text/LocalizedNumberICU.cpp:
        (WebCore::createFormatterForCurrentLocale):
        (WebCore::numberFormatter):
        (WebCore::parseLocalizedNumber):
        (WebCore::formatLocalizedNumber):

2011-04-02  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        Remove an unnecessary extra computeLogicalWidth() from line layout
        https://bugs.webkit.org/show_bug.cgi?id=57711

        Changes in behavior (MathML progression) covered by existing layout tests.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::computeInlineDirectionPositionsForLine): Removed a
        call to computeLogicalWidth(). Because of <http://webkit.org/b/57700>, this
        actually prevents MathML rows from reverting to an incorrect width.

2011-04-02  Dan Bernstein  <mitz@apple.com>

        Reviewed by Beth Dakin.

        <details> marker loses its margin
        https://bugs.webkit.org/show_bug.cgi?id=57713

        * rendering/RenderDetails.cpp:
        (WebCore::RenderDetails::computePreferredLogicalWidths): Override to update
        the marker location.
        * rendering/RenderDetails.h:
        (WebCore::RenderDetails::renderName): Made private.
        (WebCore::RenderDetails::isDetails): Ditto.
        * rendering/RenderDetailsMarker.cpp:
        (WebCore::RenderDetailsMarker::computePreferredLogicalWidths): Set the margins
        in the style, like RenderListMarker does.
        (WebCore::RenderDetailsMarker::layout): Set the margins from the style.

2011-04-02  Andy Estes  <aestes@apple.com>

        Reviewed by Oliver Hunt.

        REGRESSION (r69237): Black border around map elements while using an image map on Mac platform
        https://bugs.webkit.org/show_bug.cgi?id=52518

        Test: fast/images/imagemap-focus-ring-zero-outline-width.html

        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintAreaElementFocusRing): Return early if outlineWidth is 0.

2011-04-02  Beth Dakin  <bdakin@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=57605
        Frame::pageScaleFactor() should not affect getBoundingClientRect() or 
        getClientRects()
        -and corresponding-
        <rdar://problem/9194541>

        New functions adjust*ForPageScale() are analogous to adjust*ForAbsoluteZoom().
        * dom/Element.cpp:
        (WebCore::Element::getClientRects):
        (WebCore::Element::getBoundingClientRect):
        * dom/Range.cpp:
        (WebCore::adjustFloatQuadsForScrollAndAbsoluteZoomAndPageScale):
        (WebCore::Range::getBorderAndTextQuads):
        * rendering/RenderObject.h:
        (WebCore::adjustFloatPointForPageScale):
        (WebCore::adjustFloatQuadForPageScale):
        (WebCore::adjustFloatRectForPageScale):

2011-04-02  Dan Bernstein  <mitz@apple.com>

        Reverted r82775 due to changes in <details> test results, which are
        likely progressions.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::computeInlineDirectionPositionsForLine): Removed a

2011-04-02  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        Remove an unnecessary extra computeLogicalWidth() from line layout
        https://bugs.webkit.org/show_bug.cgi?id=57711

        Changes in behavior (MathML progression) covered by existing layout tests.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::computeInlineDirectionPositionsForLine): Removed a
        call to computeLogicalWidth(). Because of <http://webkit.org/b/57700>, this
        actually prevents MathML rows from reverting to an incorrect width.

2011-04-02  Ryuan Choi  <ryuan.choi@samsung.com>

        Reviewed by Martin Robinson.

        [GTK] Fix leaked pointer in FontGtk.cpp
        https://bugs.webkit.org/show_bug.cgi?id=57307

        Fix a memory leak.

        No new functionality, so no new tests.

        * platform/graphics/gtk/FontGtk.cpp:
        (WebCore::utf16ToUtf8): Rename utf16_to_utf8 and fix indentation.
        (WebCore::convertUniCharToUTF8):

2011-04-02  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: we should be able to have in and out arguments of a command with same name.
        https://bugs.webkit.org/show_bug.cgi?id=57701

        * inspector/CodeGeneratorInspector.pm:
        * inspector/Inspector.json:

2011-04-01  Ilya Tikhonovsky  <loislo@chromium.org>

        Not reviewed trivial change.

        Web Inspector: The page agent should be enabled even if JAVASCRIPT_DEBUGGER is off.
        Followup change for r82281.
        https://bugs.webkit.org/show_bug.cgi?id=57327

        * inspector/InspectorPageAgent.cpp:
        * inspector/InspectorPageAgent.h:

2011-04-01  Michael Saboff  <msaboff@apple.com>

        Reviewed by Darin Adler.

        Cached Resource Overhead Space Usage and Accounting Inaccurate
        https://bugs.webkit.org/show_bug.cgi?id=57488

        Fixed windows test failures.
        Changed the fixed overhead value for ResourceResponse to 3800 bytes.
        Modified ResourceResponse::platformLazyInit() to handle "base" level
        attributes or all attributes.  The base attributes, like URL, status
        code, mime type and a few header fields (mostly cache related) are
        suitable for most resources.  This reduces the per resource memory
        needs by over 1K bytes per resource thus saving memory in the cache.
        Collectively, these two changes bring the overhead memory calculation
        in line with reality.

        No new tests added due to existing tests cover areas of change and
        there is no functional change.  The change is limited to reducing 
        memory usage along existing paths.

        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::canUseCacheValidator):
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::adopt):
        (WebCore::ResourceResponseBase::isHTTP):
        (WebCore::ResourceResponseBase::url):
        (WebCore::ResourceResponseBase::setURL):
        (WebCore::ResourceResponseBase::mimeType):
        (WebCore::ResourceResponseBase::setMimeType):
        (WebCore::ResourceResponseBase::expectedContentLength):
        (WebCore::ResourceResponseBase::setExpectedContentLength):
        (WebCore::ResourceResponseBase::textEncodingName):
        (WebCore::ResourceResponseBase::setTextEncodingName):
        (WebCore::ResourceResponseBase::suggestedFilename):
        (WebCore::ResourceResponseBase::setSuggestedFilename):
        (WebCore::ResourceResponseBase::httpStatusCode):
        (WebCore::ResourceResponseBase::setHTTPStatusCode):
        (WebCore::ResourceResponseBase::httpStatusText):
        (WebCore::ResourceResponseBase::setHTTPStatusText):
        (WebCore::ResourceResponseBase::httpHeaderField):
        (WebCore::ResourceResponseBase::setHTTPHeaderField):
        (WebCore::ResourceResponseBase::httpHeaderFields):
        (WebCore::ResourceResponseBase::parseCacheControlDirectives):
        (WebCore::ResourceResponseBase::hasCacheValidatorFields):
        (WebCore::ResourceResponseBase::date):
        (WebCore::ResourceResponseBase::age):
        (WebCore::ResourceResponseBase::expires):
        (WebCore::ResourceResponseBase::lastModified):
        (WebCore::ResourceResponseBase::isAttachment):
        (WebCore::ResourceResponseBase::setLastModifiedDate):
        (WebCore::ResourceResponseBase::lastModifiedDate):
        (WebCore::ResourceResponseBase::wasCached):
        (WebCore::ResourceResponseBase::connectionReused):
        (WebCore::ResourceResponseBase::setConnectionReused):
        (WebCore::ResourceResponseBase::connectionID):
        (WebCore::ResourceResponseBase::setConnectionID):
        (WebCore::ResourceResponseBase::resourceLoadTiming):
        (WebCore::ResourceResponseBase::setResourceLoadTiming):
        (WebCore::ResourceResponseBase::resourceLoadInfo):
        (WebCore::ResourceResponseBase::setResourceLoadInfo):
        (WebCore::ResourceResponseBase::lazyInit):
        * platform/network/ResourceResponseBase.h:
        (WebCore::ResourceResponseBase::platformLazyInit):
        * platform/network/cf/ResourceResponse.h:
        (WebCore::ResourceResponse::ResourceResponse):
        (WebCore::ResourceResponse::memoryUsage):
        * platform/network/cf/ResourceResponseCFNet.cpp:
        (WebCore::ResourceResponse::platformLazyInit):
        * platform/network/mac/ResourceResponseMac.mm:
        (WebCore::ResourceResponse::platformLazyInit):

2011-04-01  Anantanarayanan G Iyengar  <ananta@chromium.org>

        Reviewed by Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=45855
        Windowless plugins added dynamically to the DOM should receive paint events.
        This is done by ensuring that the plugin widget is marked for painting when
        it is added.

        Test: plugins/windowless_plugin_paint_test.html

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

2011-04-01  Mike Reed  <reed@google.com>

        Reviewed by James Robinson.

        always use native font rendering on skia_gpu
        fixes a crash when SKIA_GPU is enabled, as we can't call getTopPlatformDevice()
        https://bugs.webkit.org/show_bug.cgi?id=57663

        No new tests. existing rendering tests will exercise this

        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::isNativeFontRenderingAllowed):

2011-04-01  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r82712, r82729, and r82746.
        http://trac.webkit.org/changeset/82712
        http://trac.webkit.org/changeset/82729
        http://trac.webkit.org/changeset/82746
        https://bugs.webkit.org/show_bug.cgi?id=57682

        fast/frames/frame-programmatic-noresize.html is failing on
        Windows bots. Will look into this offline. (Requested by dydx
        on #webkit).

        * html/HTMLFrameElement.cpp:
        (WebCore::HTMLFrameElement::HTMLFrameElement):
        (WebCore::HTMLFrameElement::attach):
        (WebCore::HTMLFrameElement::parseMappedAttribute):
        * html/HTMLFrameElement.h:
        (WebCore::HTMLFrameElement::noResize):
        * rendering/RenderFrame.cpp:
        * rendering/RenderFrame.h:
        * rendering/RenderFrameSet.cpp:
        * rendering/RenderFrameSet.h:

2011-04-01  Adam Barth  <abarth@webkit.org>

        Reviewed by Tony Chang.

        Valgrind error in _ZN7WebCore8Document11updateTitleERKNS_19StringWithDirectionE
        https://bugs.webkit.org/show_bug.cgi?id=57656

        We should initialize memory when constructing objects.

        * platform/text/StringWithDirection.h:
        (WebCore::StringWithDirection::StringWithDirection):

2011-04-01  Jer Noble  <jer.noble@apple.com>

        Reviewed by Darin Adler.

        WebKit2: Link from PDF opens in a new tab instead of in the same tab
        https://bugs.webkit.org/show_bug.cgi?id=57528

        * WebCore.exp.in: Export MouseEvent::create().

2011-04-01  John Bauman  <jbauman@chromium.org>

        Reviewed by Kenneth Russell.

        Avoid decoding images twice in texImage2D
        https://bugs.webkit.org/show_bug.cgi?id=51498

        Make sure to redecode the image only if it's not opaque and texImage2D
        wouldn't premultiply it anyway.

        * platform/graphics/BitmapImage.h:
        * platform/graphics/cg/GraphicsContext3DCG.cpp:
        (WebCore::GraphicsContext3D::getImageData):
        * platform/graphics/skia/GraphicsContext3DSkia.cpp:
        (WebCore::GraphicsContext3D::getImageData):

2011-04-01  Alexey Proskuryakov  <ap@apple.com>

        32-bit Mac build fix.

        * dom/KeyboardEvent.h: (WebCore::KeypressCommand::KeypressCommand): Use 0U to index a String
        to avoid ambiguity.

2011-04-01  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        Make WebKit2 text input handling more like WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=57649

        * dom/KeyboardEvent.h: (WebCore::KeypressCommand::KeypressCommand): Put back the assertions
        we used to have. It is dangerous to confuse editor commands and selector names - besides the
        presence of a semicolon, they sometimes have different names, and WebKit2 failed to map those.

2011-04-01  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r82711.
        http://trac.webkit.org/changeset/82711
        https://bugs.webkit.org/show_bug.cgi?id=57657

        Made every test crash on XP and Win7 (Requested by
        abarth|gardening on #webkit).

        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::canUseCacheValidator):
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::adopt):
        (WebCore::ResourceResponseBase::isHTTP):
        (WebCore::ResourceResponseBase::url):
        (WebCore::ResourceResponseBase::setURL):
        (WebCore::ResourceResponseBase::mimeType):
        (WebCore::ResourceResponseBase::setMimeType):
        (WebCore::ResourceResponseBase::expectedContentLength):
        (WebCore::ResourceResponseBase::setExpectedContentLength):
        (WebCore::ResourceResponseBase::textEncodingName):
        (WebCore::ResourceResponseBase::setTextEncodingName):
        (WebCore::ResourceResponseBase::suggestedFilename):
        (WebCore::ResourceResponseBase::setSuggestedFilename):
        (WebCore::ResourceResponseBase::httpStatusCode):
        (WebCore::ResourceResponseBase::setHTTPStatusCode):
        (WebCore::ResourceResponseBase::httpStatusText):
        (WebCore::ResourceResponseBase::setHTTPStatusText):
        (WebCore::ResourceResponseBase::httpHeaderField):
        (WebCore::ResourceResponseBase::setHTTPHeaderField):
        (WebCore::ResourceResponseBase::httpHeaderFields):
        (WebCore::ResourceResponseBase::parseCacheControlDirectives):
        (WebCore::ResourceResponseBase::date):
        (WebCore::ResourceResponseBase::age):
        (WebCore::ResourceResponseBase::expires):
        (WebCore::ResourceResponseBase::lastModified):
        (WebCore::ResourceResponseBase::isAttachment):
        (WebCore::ResourceResponseBase::setLastModifiedDate):
        (WebCore::ResourceResponseBase::lastModifiedDate):
        (WebCore::ResourceResponseBase::wasCached):
        (WebCore::ResourceResponseBase::connectionReused):
        (WebCore::ResourceResponseBase::setConnectionReused):
        (WebCore::ResourceResponseBase::connectionID):
        (WebCore::ResourceResponseBase::setConnectionID):
        (WebCore::ResourceResponseBase::resourceLoadTiming):
        (WebCore::ResourceResponseBase::setResourceLoadTiming):
        (WebCore::ResourceResponseBase::resourceLoadInfo):
        (WebCore::ResourceResponseBase::setResourceLoadInfo):
        (WebCore::ResourceResponseBase::lazyInit):
        * platform/network/ResourceResponseBase.h:
        (WebCore::ResourceResponseBase::platformLazyInit):
        * platform/network/cf/ResourceResponse.h:
        (WebCore::ResourceResponse::ResourceResponse):
        (WebCore::ResourceResponse::memoryUsage):
        * platform/network/cf/ResourceResponseCFNet.cpp:
        (WebCore::ResourceResponse::platformLazyInit):
        * platform/network/mac/ResourceResponseMac.mm:
        (WebCore::ResourceResponse::platformLazyInit):

2011-04-01  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Simon Fraser.

        Behavior of isAccelerated() for a IOSurface-backed canvas should be consistent with accelerated status of its ImageBuffer
        https://bugs.webkit.org/show_bug.cgi?id=57651

        No new tests. This patch does not affect outward behavior.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::isAccelerated):
        * platform/graphics/ImageBuffer.h:
        (WebCore::ImageBuffer::isAccelerated):

2011-04-01  Daniel Bates  <dbates@rim.com>

        Reviewed by Darin Adler.

        Frame's noResize attribute can not be set by JavaScript
        https://bugs.webkit.org/show_bug.cgi?id=14845

        Tests: fast/frames/frame-inherit-noresize-from-frameset.html
               fast/frames/frame-programmatic-noresize.html
               fast/frames/frame-with-noresize-can-be-resized-after-removal-of-noresize.html
               fast/frames/frame-with-noresize-can-be-resized-after-setting-noResize-to-false.html

        Implements support to programmatically allow and disallow frame resizing.

        Currently, HTMLFrameElement::parseMappedAttribute() is hardcoded to disallow frame resize (i.e.
        m_noResize = true) when either the noresize DOM attribute is specified (or existed at some
        point in time) or the value of the noResize attribute is modified. Instead we should allow/disallow
        frame resize depending on the presence of the noresize DOM attribute/the value of the noResize
        attribute.

        * html/HTMLFrameElement.cpp:
        (WebCore::HTMLFrameElement::HTMLFrameElement):
        (WebCore::HTMLFrameElement::noResize): Made this a non-inline function since this
        code path isn't performance critical.
        (WebCore::HTMLFrameElement::attach): Removed code to inherit noresize attribute from
        parent <frameset> since this functionality is part of RenderFrameSet::computeEdgeInfo().
        (WebCore::HTMLFrameElement::parseMappedAttribute):
        * html/HTMLFrameElement.h:
        * rendering/RenderFrame.cpp:
        (WebCore::RenderFrame::updateFromElement): Added.
        * rendering/RenderFrame.h:
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::notifyFrameEdgeInfoChanged): Added.
        * rendering/RenderFrameSet.h:

2011-04-01  Michael Saboff  <msaboff@apple.com>

        Reviewed by Darin Adler.

        Cached Resource Overhead Space Usage and Accounting Inaccurate
        https://bugs.webkit.org/show_bug.cgi?id=57488

        Changed the fixed overhead value for ResourceResponse to 3800 bytes.
        Modified ResourceResponse::platformLazyInit() to handle "base" level
        attributes or all attributes.  The base attributes, like URL, status
        code, mime type and a few header fields (mostly cache related) are
        suitable for most resources.  This reduces the per resource memory
        needs by over 1K bytes per resource thus saving memory in the cache.
        Collectively, these two changes bring the overhead memory calculation
        in line with reality.

        No new tests added due to existing tests cover areas of change and
        there is no functional change.  The change is limited to reducing 
        memory usage along existing paths.

        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::canUseCacheValidator):
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::isHTTP):
        (WebCore::ResourceResponseBase::url):
        (WebCore::ResourceResponseBase::setURL):
        (WebCore::ResourceResponseBase::mimeType):
        (WebCore::ResourceResponseBase::setMimeType):
        (WebCore::ResourceResponseBase::expectedContentLength):
        (WebCore::ResourceResponseBase::setExpectedContentLength):
        (WebCore::ResourceResponseBase::textEncodingName):
        (WebCore::ResourceResponseBase::setTextEncodingName):
        (WebCore::ResourceResponseBase::suggestedFilename):
        (WebCore::ResourceResponseBase::setSuggestedFilename):
        (WebCore::ResourceResponseBase::httpStatusCode):
        (WebCore::ResourceResponseBase::setHTTPStatusCode):
        (WebCore::ResourceResponseBase::httpHeaderField):
        (WebCore::ResourceResponseBase::setHTTPHeaderField):
        (WebCore::ResourceResponseBase::parseCacheControlDirectives):
        (WebCore::ResourceResponseBase::hasCacheValidatorFields):
        (WebCore::ResourceResponseBase::date):
        (WebCore::ResourceResponseBase::age):
        (WebCore::ResourceResponseBase::expires):
        (WebCore::ResourceResponseBase::lastModified):
        (WebCore::ResourceResponseBase::lazyInit):
        * platform/network/ResourceResponseBase.h:
        (WebCore::ResourceResponseBase::platformLazyInit):
        * platform/network/cf/ResourceResponse.h:
        (WebCore::ResourceResponse::ResourceResponse):
        (WebCore::ResourceResponse::memoryUsage):
        * platform/network/cf/ResourceResponseCFNet.cpp:
        * platform/network/mac/ResourceResponseMac.mm:
        (WebCore::ResourceResponse::platformLazyInit):

2011-04-01  Timothy Hatcher  <timothy@apple.com>

        Make momentum scroll event latching work in WebKit2 on Mac.

        <rdar://problem/8751861>

        Reviewed by Darin Adler.

        * WebCore.exp.in: Remove _wkIsLatchingWheelEvent, add _wkGetNSEventMomentumPhase.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleWheelEvent): Set m_useLatchedWheelEventNode based on the
        event's momentumPhase.
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::wheelEvent): Remove the setting of m_useLatchedWheelEventNode.
        It is now done in EventHandler::handleWheelEvent.
        * platform/mac/WebCoreSystemInterface.h: Remove wkIsLatchingWheelEvent, add wkGetNSEventMomentumPhase.
        * platform/mac/WebCoreSystemInterface.mm: Ditto.
        * platform/mac/WheelEventMac.mm:
        (WebCore::momentumPhaseForEvent): Return a phase on older Mac system by using wkGetNSEventMomentumPhase.

2011-04-01  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        JavaClass should be an interface and free of JNI types
        https://bugs.webkit.org/show_bug.cgi?id=57533

        This patch fixes JavaClass for V8 only.

        It factors out a JavaClass interface which does not use JNI types.
        This will allow the Java bridge to be used with objects that
        don't use JNI directly. The existing jobject-backed
        implementation is moved to a new JavaClassJobject class which
        implements the interface.

        No new tests, refactoring only.

        * Android.v8bindings.mk:
        * WebCore.gypi:
        * bridge/jni/v8/JavaClassJobjectV8.cpp:
        (JavaClassJobject::JavaClassJobject):
        (JavaClassJobject::~JavaClassJobject):
        (JavaClassJobject::methodsNamed):
        (JavaClassJobject::fieldNamed):
        * bridge/jni/v8/JavaClassJobjectV8.h: Copied from Source/WebCore/bridge/jni/v8/JavaClassV8.h.
        * bridge/jni/v8/JavaClassV8.h:
        (JSC::Bindings::JavaClass::~JavaClass):
        * bridge/jni/v8/JavaInstanceV8.cpp:
        (JavaInstance::getClass):

2011-04-01  Jaehun Lim  <ljaehun.lim@samsung.com>

        Unreviewed build fix.

        Fix build break when font backend is Pango.
        Pango is missed in changeset 80589.

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

        * platform/graphics/pango/FontPlatformData.h:
        (WebCore::FontPlatformData::setOrientation):

2011-04-01  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r82687.
        http://trac.webkit.org/changeset/82687
        https://bugs.webkit.org/show_bug.cgi?id=57643

        This patch broke accessibility aria-treegrid test in Mac
        (Requested by msanchez on #webkit).

        * accessibility/AccessibilityARIAGrid.cpp:
        * accessibility/AccessibilityARIAGrid.h:
        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (atkRole):
        * accessibility/mac/AccessibilityObjectWrapper.mm:

2011-03-31  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Andreas Kling.

        Whenever a relayout is trigger for SVGPath, make sure
        to clear its previous marker layout info. This helps
        to prevent removed markers from being used.
        https://bugs.webkit.org/show_bug.cgi?id=57492

        Test: svg/dom/path-marker-removed-crash.svg

        * rendering/svg/RenderSVGPath.cpp:
        (WebCore::RenderSVGPath::layout):
        * rendering/svg/SVGMarkerLayoutInfo.cpp:
        (WebCore::SVGMarkerLayoutInfo::clear):
        * rendering/svg/SVGMarkerLayoutInfo.h:

2011-04-01  Rob Buis  <rwlbuis@gmail.com>

        Reviewed by Nikolas Zimmermann.

        https://bugs.webkit.org/show_bug.cgi?id=55750
        SVG <image> referenced by <use> is displayed incorrectly

        Reintroduce old behaviour for valid base URI, for invalid
        keep using document base URI.
        Fixes regression of W3C-SVG-1.1/struct-image-07-t.svg.

        Test: svg/custom/image-base-uri.svg

        * svg/SVGImageLoader.cpp:
        (WebCore::SVGImageLoader::sourceURI):

2011-04-01  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Chris Fleizach.

        ARIA Grid tables should return GridRole in roleValue() method
        https://bugs.webkit.org/show_bug.cgi?id=57614

        This change does not need any test since it doesn't change anything
        from the point of view of the consumers (Assistive Technoglogies).
        It's just an internal change to simplify identifying HTML and ARIA
        tables by calling to the AccessibilityObject::roleValue method.

        * accessibility/AccessibilityARIAGrid.h:
        * accessibility/AccessibilityARIAGrid.cpp:
        (WebCore::AccessibilityARIAGrid::roleValue): Return GridRole.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (atkRole): Removed unneeded comment.

        * accessibility/mac/AccessibilityObjectWrapper.mm: Map GridRole to
        NSAccessibilityTableRole, to keep the same behaviour.

2011-04-01  MORITA Hajime  <morrita@google.com>

        Reviewed by Dimitri Glazkov.

        <meter> can only support horizontal indicator
        https://bugs.webkit.org/show_bug.cgi?id=56001

        - Removed code which deals with the direction and
          left the horizontal path.
        - Removed "horizontal" from related names which is now
          redundant.
        
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::pseudoId):
        (WebCore::nameToPseudoTypeMap):
        (WebCore::CSSSelector::extractPseudoType):
        * css/CSSSelector.h:
        * css/html.css:
        (meter::-webkit-meter-bar):
        (meter::-webkit-meter-optimum-value):
        (meter::-webkit-meter-suboptimal-value):
        (meter::-webkit-meter-even-less-good-value):
        * rendering/RenderMeter.cpp:
        (WebCore::RenderMeter::~RenderMeter):
        (WebCore::RenderMeter::createPart):
        (WebCore::RenderMeter::updateFromElement):
        (WebCore::RenderMeter::layoutParts):
        (WebCore::RenderMeter::styleDidChange):
        (WebCore::RenderMeter::shouldHaveParts):
        (WebCore::RenderMeter::valuePartRect):
        (WebCore::RenderMeter::valuePseudoId):
        (WebCore::RenderMeter::barPseudoId):
        (WebCore::RenderMeter::detachShadows):
        (WebCore::RenderMeter::updateShadows):
        * rendering/RenderMeter.h:
        (WebCore::RenderMeter::shadowAttached):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::supportsMeter):
        * rendering/RenderTheme.h:
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintMeter):
        (WebCore::RenderThemeMac::supportsMeter):
        * rendering/style/RenderStyleConstants.h:

2011-03-23  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: fix reveal line in formatted script.
        https://bugs.webkit.org/show_bug.cgi?id=56941

        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.JavaScriptBreakpointsSidebarPane):
        (WebInspector.JavaScriptBreakpointsSidebarPane.prototype._breakpointClicked):
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype.sourceFileForScriptURL):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkPanel.prototype.canShowAnchorLocation):
        (WebInspector.NetworkPanel.prototype.showAnchorLocation):
        * inspector/front-end/Panel.js:
        (WebInspector.Panel.prototype.canShowAnchorLocation):
        (WebInspector.Panel.prototype.showAnchorLocation):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.canShowAnchorLocation):
        (WebInspector.ResourcesPanel.prototype.showAnchorLocation):
        (WebInspector.ResourcesPanel.prototype.showResource):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype.canShowAnchorLocation):
        (WebInspector.ScriptsPanel.prototype.showAnchorLocation):
        (WebInspector.ScriptsPanel.prototype._showSourceLine):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.highlightLine):
        (WebInspector.SourceFrame.prototype._createTextViewer):
        * inspector/front-end/inspector.js:
        (WebInspector.documentClick.followLink):
        (WebInspector.documentClick):
        (WebInspector._showAnchorLocation):

2011-04-01  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: make editScriptSource a Script's method.
        https://bugs.webkit.org/show_bug.cgi?id=57615

        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel.prototype.editScriptSource):
        (WebInspector.DebuggerModel.prototype._didEditScriptSource):
        * inspector/front-end/Script.js:
        (WebInspector.Script.prototype.requestSource):
        (WebInspector.Script.prototype.editSource):

2011-04-01  Pavel Feldman  <pfeldman@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: event should have "data" attribute, not "body"
        https://bugs.webkit.org/show_bug.cgi?id=57628

        * inspector/CodeGeneratorInspector.pm:

2011-04-01  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: checkboxes are broken in xhr breakpoints sidebar pane.
        https://bugs.webkit.org/show_bug.cgi?id=57610

        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.XHRBreakpointsSidebarPane.prototype._checkboxClicked):

2011-04-01  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: up/down keys are not treating hex numbers properly while editing styles.
        https://bugs.webkit.org/show_bug.cgi?id=40522

        Drive-by: fix inc/dec for numbers like ".5"

        Test: inspector/styles/up-down-numerics-and-colors.html

        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertyTreeElement.prototype):

2011-03-30  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: remove dead code from Script.js.
        https://bugs.webkit.org/show_bug.cgi?id=57454

        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel.prototype._parsedScriptSource):
        (WebInspector.DebuggerModel.prototype._failedToParseScriptSource):
        * inspector/front-end/Script.js:
        (WebInspector.Script):
        (WebInspector.Script.prototype.requestSource.didGetScriptSource):
        (WebInspector.Script.prototype.requestSource):

2011-04-01  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r82667.
        http://trac.webkit.org/changeset/82667
        https://bugs.webkit.org/show_bug.cgi?id=57612

        Breaks Leopard layout tests (Requested by podivilov on
        #webkit).

        * GNUmakefile.am:
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel):
        (WebInspector.DebuggerPresentationModel.prototype.toggleFormatSourceFiles):

2011-03-30  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: remove unused SourceFrameContent class.
        https://bugs.webkit.org/show_bug.cgi?id=57453

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/ResourceView.js:
        (WebInspector.SourceFrameDelegateForResourcesPanel.prototype.requestContent):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.SourceFrameDelegateForScriptsPanel.prototype.requestContent):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._createTextViewer):
        * inspector/front-end/SourceFrameContent.js: Removed.
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:

2011-03-30  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: add test for script formatter worker.
        https://bugs.webkit.org/show_bug.cgi?id=57447

        Test: inspector/debugger/script-formatter.html

        * GNUmakefile.am:
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel):
        (WebInspector.DebuggerPresentationModel.prototype.toggleFormatSourceFiles):

2011-03-30  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [chromium] script formatting doesn't work when all scripts are concatenated.
        https://bugs.webkit.org/show_bug.cgi?id=57446

        * inspector/front-end/ScriptFormatterWorker.js:

2011-04-01  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: allow file access from inspector page so inspector can use workers.
        https://bugs.webkit.org/show_bug.cgi?id=57339

        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::InspectorFrontendClientLocal):

2011-03-31  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: inspected page crashes on attempt to log object with broken .toString
        https://bugs.webkit.org/show_bug.cgi?id=57557

        If ScriptValue.toString causes a JavaScript exception, the exception is cleared
        before returning from the toString method.

        Test: inspector/console/console-log-toString-object.html

        * bindings/js/ScriptValue.cpp:
        (WebCore::ScriptValue::toString):
        * bindings/js/ScriptValue.h:
        * bindings/v8/ScriptValue.cpp:
        (WebCore::ScriptValue::toString):

2011-03-31  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Pavel Feldman.

        - removed documentWide parameter to querySelector[All]() (user document node id instead)
        - factor out document request logic within DOMAgent into separate method
        - add querySelector() and querySelectorAll() to DOMAgent.js, assure we have document before calling back-end
        - use the above wrappers for querySelector() and querySelectorAll(), do not call backend directly
        - minor style fixes in Inspector.json
        - more error logging

        Web Inspector: provide front-end wrappers for DOMAgent.querySelector[All]() that take care of fetching the document
        https://bugs.webkit.org/show_bug.cgi?id=57466

        * inspector/Inspector.json:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::querySelector):
        (WebCore::InspectorDOMAgent::querySelectorAll):
        * inspector/InspectorDOMAgent.h:
        * inspector/front-end/AuditRules.js:
        (WebInspector.AuditRules.ImageDimensionsRule.prototype.doRun):
        (WebInspector.AuditRules.ImageDimensionsRule.prototype.doRun.getStyles):
        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleModel.prototype.setRuleSelector.callback):
        (WebInspector.CSSStyleModel.prototype.setRuleSelector):
        (WebInspector.CSSStyleModel.prototype.addRule.callback):
        (WebInspector.CSSStyleModel.prototype.addRule):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMAgent.prototype.requestDocument.onDocumentAvailable):
        (WebInspector.DOMAgent.prototype.requestDocument):
        (WebInspector.DOMAgent.prototype.pushNodeToFrontend):
        (WebInspector.DOMAgent.prototype.pushNodeByPathToFrontend):
        (WebInspector.DOMAgent.prototype._dispatchWhenDocumentAvailable.onDocumentAvailable):
        (WebInspector.DOMAgent.prototype._dispatchWhenDocumentAvailable):
        (WebInspector.DOMAgent.prototype.cancelSearch):
        (WebInspector.DOMAgent.prototype.querySelector):
        (WebInspector.DOMAgent.prototype.querySelectorAll):

2011-04-01  Kent Tamura  <tkent@chromium.org>

        Apply sort-Xcode-project-file.

        * WebCore.xcodeproj/project.pbxproj:

2011-03-31  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r82652.
        http://trac.webkit.org/changeset/82652
        https://bugs.webkit.org/show_bug.cgi?id=57603

        Test still fails (Requested by abarth|gardener on #webkit).

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

2011-03-31  Naoki Takano  <takano.naoki@gmail.com>

        Reviewed by Kent Tamura.

        REGRESSION (r64712): Safari removes the first blank line in a textarea
        https://bugs.webkit.org/show_bug.cgi?id=56434

        Test: fast/forms/textarea-newline.html

        A linefeed removal after a textarea tag is originally processed in WebCore::HTMLTextAreaElement::defaultValue().
        But HTML5 tree builder now removes the linefeed. It means linefeed removal happens twice.
        And devalutValue() removal is not needed anymore.

        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::setDefaultValue): Remove an extra linefeed insertion at the beginning.
        (WebCore::HTMLTextAreaElement::defaultValue): Remove linefeed removal check in default value creation function.

2011-03-31  Luke Macpherson   <macpherson@chromium.org>

        Reviewed by Dimitri Glazkov.

        Remove refcounting of CSSStyleApplyProperty singleton
        https://bugs.webkit.org/show_bug.cgi?id=57592

        No new tests required as no functionality changes.

        * css/CSSStyleApplyProperty.h:

2011-03-31  Anantanarayanan G Iyengar  <ananta@chromium.org>

        Reviewed by Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=45855
        Windowless plugins added dynamically to the DOM should receive paint events.
        This is done by ensuring that the plugin widget is marked for painting when
        it is added.

        Test: plugins/windowless_plugin_paint_test.html

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

2011-03-31  Adam Roben  <aroben@apple.com>

        Add a new AbstractCACFLayerTreeHost base class

        This class exposes the interface that LayerChangesFlusher and PlatformCALayer rely on.
        CACFLayerTreeHost now derives from AbstractCACFLayerTreeHost. In the future, WebKit2's
        LayerTreeHostCA will also derive from it (on Windows).

        This should cause no change in behavior.

        Fixes <http://webkit.org/b/57598> Coupling between CACFLayerTreeHost and other CACF-related
        code is too high

        Reviewed by Anders Carlsson.

        * WebCore.vcproj/WebCore.vcproj: Added AbstractCACFLayerTreeHost, and let VS reorder files.

        * platform/graphics/ca/win/AbstractCACFLayerTreeHost.h: Added.

        * platform/graphics/ca/win/CACFLayerTreeHost.h: Changed to derive from
        AbstractCACFLayerTreeHost, and annotated the overrides of its functions.
        AbstractCACFLayerTreeHost also allows us to get rid of the friend relationship with
        PlatformCALayer.

        * platform/graphics/ca/win/LayerChangesFlusher.cpp:
        (WebCore::LayerChangesFlusher::flushPendingLayerChangesSoon):
        (WebCore::LayerChangesFlusher::cancelPendingFlush):
        (WebCore::LayerChangesFlusher::hookFired):
        * platform/graphics/ca/win/LayerChangesFlusher.h:
        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        (layerTreeHostForLayer):
        (PlatformCALayer::rootLayer):
        (PlatformCALayer::setNeedsCommit):
        (PlatformCALayer::addAnimationForKey):
        (PlatformCALayer::removeAnimationForKey):
        Changed to use AbstractCACFLayerTreeHost instead of using CACFLayerTreeHost directly.

2011-03-31  Andy Estes  <aestes@apple.com>

        Reviewed by Alexey Proskuryakov.

        REGRESSION: Java applet fails to load when <object> has a classid attribute.
        https://bugs.webkit.org/show_bug.cgi?id=52703
        
        Java applets embedded with the object element sometimes use classid to
        specify their main resource. When this is done, the classid is prefixed
        with "java:". Treat these as supported classids in WebKit.

        Test: java/embedding-java-with-object.html

        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::hasValidClassId): If the MIME type is a
        Java Applet type and the classid starts with "java:", the classid
        should be considered valid.

2011-03-31  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed Adam Roben.

        [WinCairo] Implement Missing drawWindowsBitmap method.
        https://bugs.webkit.org/show_bug.cgi?id=57409

        * WebCore.vcproj/WebCore.vcproj: Add new DIBPixelData files.
        * platform/graphics/GraphicsContext.h:
        (WebCore::GraphicsContext::WindowsBitmap::buffer):
        (WebCore::GraphicsContext::WindowsBitmap::bufferLength):
        (WebCore::GraphicsContext::WindowsBitmap::size):
        (WebCore::GraphicsContext::WindowsBitmap::bytesPerRow):
        (WebCore::GraphicsContext::WindowsBitmap::bitsPerPixel):
        (WebCore::GraphicsContext::WindowsBitmap::windowsDIB):
        * platform/graphics/win/GraphicsContextCGWin.cpp:
        (WebCore::CGContextWithHDC):
        (WebCore::GraphicsContext::releaseWindowsContext): Modified to use
        new common routines.
        * platform/graphics/win/GraphicsContextCairoWin.cpp:
        (WebCore::drawBitmapToContext): New common drawing implementation.
        (WebCore::GraphicsContext::releaseWindowsContext): Modified to use
        new common routines.
        (WebCore::GraphicsContext::drawWindowsBitmap):
        * platform/graphics/win/GraphicsContextWin.cpp:
        (WebCore::GraphicsContext::WindowsBitmap::WindowsBitmap): Modified
        to use new DIBPixelData data type.
        * platform/graphics/win/DIBPixelData.cpp: Added.
        (WebCore::DIBPixelData::DIBPixelData):
        (WebCore::DIBPixelData::initialize):
        * platform/graphics/win/DIBPixelData.h: Added.
        (WebCore::DIBPixelData::DIBPixelData):
        (WebCore::DIBPixelData::buffer):
        (WebCore::DIBPixelData::bufferLength):
        (WebCore::DIBPixelData::size):
        (WebCore::DIBPixelData::bytesPerRow):
        (WebCore::DIBPixelData::bitsPerPixel):

2011-03-31  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r81849.
        http://trac.webkit.org/changeset/81849
        https://bugs.webkit.org/show_bug.cgi?id=57588

        CSS Parsing broke with -webkit-calc and introduced crashes
        (Requested by inferno-sec on #webkit).

        * css/CSSGrammar.y:
        * css/CSSParserValues.cpp:
        * css/CSSParserValues.h:
        * css/tokenizer.flex:

2011-03-31  Adam Roben  <aroben@apple.com>

        Don't ref CACFLayerTreeHosts when telling them to flush layer changes

        LayerChangesFlusher was reffing CACFLayerTreeHosts before calling out to them. This would
        have protected us if calling out to one CACFLayerTreeHost could cause a different
        CACFLayerTreeHost to be destroyed. But that isn't possible; each CACFLayerTreeHost is
        associated with its own page, and flushing layer changes doesn't touch any other page. So it
        isn't possible for a CACFLayerTreeHost to be deleted while another one is flushing layer
        changes.

        One benefit of this change is that it will make it easier to make LayerChangesFlusher
        interact with a forthcoming abstract base class, rather than with CACFLayerTreeHost itself.

        This should cause no change in behavior.

        Fixes <http://webkit.org/b/57590> LayerChangesFlusher unnecessarily refs CACFLayerTreeHost
        before calling out to it

        Reviewed by Darin Adler.

        * platform/graphics/ca/win/LayerChangesFlusher.cpp:
        (WebCore::LayerChangesFlusher::hookFired): Just store bare pointers to the
        CACFLayerTreeHosts.

2011-03-31  Antti Koivisto  <antti@apple.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=57574
        Preload scanner fails to pick up resources from document.write() output

        - Scan script inserted source using a separate preload scanner.
        - Make the main preload scanner correctly process the remaining source if script execution blocked the parser.

        Tests: fast/preloader/document-write-2.html
               fast/preloader/document-write.html

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::insert):
        (WebCore::HTMLDocumentParser::appendCurrentInputStreamToPreloadScannerAndScan):
        * html/parser/HTMLDocumentParser.h:
        (WebCore::HTMLDocumentParser::hasPreloadScanner):
        * html/parser/HTMLScriptRunner.cpp:
        (WebCore::HTMLScriptRunner::execute):
        * html/parser/HTMLScriptRunnerHost.h:

2011-03-31  Tony Gentilcore  <tonyg@chromium.org>

        Build fix: Add missing include
        https://bugs.webkit.org/show_bug.cgi?id=57587

        * loader/cache/CachedResourceLoader.cpp:

2011-03-31  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Antti Koivisto.

        PreloadScanner doesn&apos;t find image while executing script in head
        https://bugs.webkit.org/show_bug.cgi?id=45072

        Previously, while parsing the head, no resources in the body would be
        preloaded. After this patch, we will preload scripts and styles in the
        body, although we continue to hold off on all images until the page is 
        first rendered.

        To evaluate this change, I've recorded a sampling of 45 of alexa's top
        sites and replayed them under simulated bandwidth conditions, loading
        each 5-15 times until stddev is small enough.

        Time to the load event improved at the overall average by 3%.
        Most sites are unchanged, but sites with certain blocking patterns had
        big wins -- ebay 19% (331ms), microsoft 15% (226ms), conduit 15% (277ms)
        nytimes 7% (182ms).

        Time to DOM content loaded event improved by 6% with some even bigger
        individual wins.

        First paint time held steady.

        Note that I originally wanted to allow preloading of images while in the
        head, but that regressed first paint time (even though it was better for
        overall load time).

        Test: fast/preloader/scan-body-from-head.html

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::preload):

2011-03-31  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r82616.
        http://trac.webkit.org/changeset/82616
        https://bugs.webkit.org/show_bug.cgi?id=57585

        New test does not pass on Gtk, chromium-mac, chromium-linux
        and possibly elsewhere (Requested by abarth|gardener on
        #webkit).

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

2011-03-31  Adrienne Walker  <enne@google.com>

        Reviewed by James Robinson.

        [chromium] Fix ownership semantics for LayerChromium/CCLayerImpl
        https://bugs.webkit.org/show_bug.cgi?id=57577

        LayerRendererChromium now uses a RefPtr to preserve ownership of all
        of the CCLayerImpl layers that it is using during the update/draw
        pass.  Addtionally, when a LayerChromium is destroyed, the weak
        owner pointer from its CCLayerImpl is correctly unset.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::compareLayerZ):
        (WebCore::LayerRendererChromium::updateAndDrawLayers):
        (WebCore::LayerRendererChromium::updateLayers):
        (WebCore::LayerRendererChromium::drawLayers):
        (WebCore::LayerRendererChromium::updatePropertiesAndRenderSurfaces):
        (WebCore::LayerRendererChromium::drawLayer):
        * platform/graphics/chromium/LayerRendererChromium.h:
        * platform/graphics/chromium/RenderSurfaceChromium.h:
        * platform/graphics/chromium/VideoLayerChromium.cpp:
        (WebCore::VideoLayerChromium::updateCompositorResources):
        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        (WebCore::CCLayerImpl::drawsContent):
        (WebCore::CCLayerImpl::cleanupResources):

2011-03-31  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Rename WebCore's UI_STRING to WEB_UI_STRING to not overlap with WebKit API
        https://bugs.webkit.org/show_bug.cgi?id=57582

        * platform/DefaultLocalizationStrategy.cpp:
        * platform/LocalizedStrings.h:

2011-03-31  Eric Seidel  <eric@webkit.org>

        Reviewed by Ryosuke Niwa.

        Rename BidiResolver::lastBeforeET to m_lastBeforeET to match modern style
        https://bugs.webkit.org/show_bug.cgi?id=57550

        * platform/text/BidiResolver.h:
        (WebCore::::createBidiRunsForLine):

2011-03-31  Anantanarayanan G Iyengar  <ananta@chromium.org>

        Reviewed by James Robinson.

        https://bugs.webkit.org/show_bug.cgi?id=45855
        Windowless plugins added dynamically to the DOM should receive paint events.
        This is done by ensuring that the plugin widget is marked for painting when
        it is added.

        Test: plugins/windowless_plugin_paint_test.html

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

2011-03-31  Stephen White  <senorblanco@chromium.org>

        Reviewed by Kenneth Russell.

        Speed up accelerated path drawing.
        https://bugs.webkit.org/show_bug.cgi?id=57371
        This CL does three things:  re-uses the same vertex and index buffer
        for all path draws, converts all vertex layouts from vec3 to vec2, and
        does a convexity check for polygons before passing them to the
        tesselator.

        Covered by canvas/philip/tests/2d.path.bezierCurveTo.*, and others.

        * platform/graphics/chromium/GLES2Canvas.cpp:
        Replace the Vector<double> for interpolated curves with a
        Vector<FloatPoint>.
        (WebCore::Cubic::evaluate):
        Inline the evaluation function (as Quadratic does).
        (WebCore::GLES2Canvas::GLES2Canvas):
        Initialize the m_pathIndexBuffer.
        (WebCore::GLES2Canvas::~GLES2Canvas):
        Delete the path vertex and index buffers on destruction.
        (WebCore::interpolateQuadratic):
        (WebCore::interpolateCubic):
        Interpolate directly to a Vector<FloatPoint>, rather than
        Vector<double>.
        (WebCore::PolygonData::PolygonData):
        (WebCore::combineData):
        Replace the DoubleVector with a FloatPointVector.
        (WebCore::GLES2Canvas::tesselateAndFillPath):
        Move curve drawing into this function, and rename it to reflect the
        new behaviour.  Re-use the common vertex and index buffers.  If the
        curve consists of a single convex polygon, draw the curve as a single
        triangle fan.  Otherwise, convert it to doubles and pass it to the
        tesselator.
        (WebCore::GLES2Canvas::fillPathInternal):
        * platform/graphics/chromium/GLES2Canvas.h:
        Rename createVertexBufferFromPath() -> tesselateAndFillPath().
        Add a persistent index buffer for all path draws.
        * platform/graphics/gpu/BicubicShader.cpp:
        (WebCore::BicubicShader::create):
        (WebCore::BicubicShader::use):
        * platform/graphics/gpu/ConvolutionShader.cpp:
        (WebCore::ConvolutionShader::create):
        (WebCore::ConvolutionShader::use):
        Use vec2s instead of vec3s for all vertex data.
        * platform/graphics/gpu/LoopBlinnMathUtils.cpp:
        (WebCore::LoopBlinnMathUtils::convexCompare):
        (WebCore::LoopBlinnMathUtils::convexCross):
        (WebCore::LoopBlinnMathUtils::convexCheckTriple):
        (WebCore::LoopBlinnMathUtils::isConvex):
        * platform/graphics/gpu/LoopBlinnMathUtils.h:
        Implement a convexity check, based on the code in Graphics Gems IV.
        * platform/graphics/gpu/Shader.cpp:
        (WebCore::Shader::generateVertex):
        * platform/graphics/gpu/SharedGraphicsContext3D.cpp:
        (WebCore::SharedGraphicsContext3D::useQuadVertices):
        * platform/graphics/gpu/SolidFillShader.cpp:
        (WebCore::SolidFillShader::use):
        * platform/graphics/gpu/TexShader.cpp:
        (WebCore::TexShader::use):
        Use vec2s instead of vec3s for all vertex data.

2011-03-31  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser.

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

        Optimize overflow computations on lines to avoid allocating RenderOverflows in nearly all cases and to avoid even having
        to check the line for overflow in the first place.
        
        For the purposes of overflow computation, an inline object's default containment box for overflow is now assumed to extend
        all the way from lineTop to lineBottom instead of snugly fitting the inline object's own block dimensions. This allows
        replaced objects to be inside spans without triggering overflow allocation.
        
        The overflow accessors on InlineFlowBox have been changed to require passing in the lineTop and lineBottom so that the block
        dimensions can be forced to those values. Because these values are checked during painting and hit testing of lines, the
        lineTop and lineBottom are now passed as arguments to the painting and hit testing functions to avoid repeatedly crawling
        back up to the root box to fetch them.
        
        Added a new boolean flag to all InlineBoxes, knownToHaveNoOverflow(), and optimized for common cases where no overflow can
        possibly be present.  When the bit is set, computeOverflow will just immediately return.
 
        This change speeds up line layout by ~10%.

        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::paint):
        (WebCore::EllipsisBox::nodeAtPoint):
        * rendering/EllipsisBox.h:
        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::paint):
        (WebCore::InlineBox::nodeAtPoint):
        (WebCore::InlineBox::clearKnownToHaveNoOverflow):
        * rendering/InlineBox.h:
        (WebCore::InlineBox::InlineBox):
        (WebCore::InlineBox::logicalFrameRect):
        (WebCore::InlineBox::knownToHaveNoOverflow):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::addToLine):
        (WebCore::InlineFlowBox::placeBoxesInInlineDirection):
        (WebCore::InlineFlowBox::placeBoxesInBlockDirection):
        (WebCore::InlineFlowBox::addBoxShadowVisualOverflow):
        (WebCore::InlineFlowBox::addTextBoxVisualOverflow):
        (WebCore::InlineFlowBox::addReplacedChildOverflow):
        (WebCore::InlineFlowBox::computeOverflow):
        (WebCore::InlineFlowBox::setLayoutOverflow):
        (WebCore::InlineFlowBox::setVisualOverflow):
        (WebCore::InlineFlowBox::setOverflowFromLogicalRects):
        (WebCore::InlineFlowBox::nodeAtPoint):
        (WebCore::InlineFlowBox::paint):
        * rendering/InlineFlowBox.h:
        (WebCore::InlineFlowBox::layoutOverflowRect):
        (WebCore::InlineFlowBox::logicalLeftLayoutOverflow):
        (WebCore::InlineFlowBox::logicalRightLayoutOverflow):
        (WebCore::InlineFlowBox::logicalTopLayoutOverflow):
        (WebCore::InlineFlowBox::logicalBottomLayoutOverflow):
        (WebCore::InlineFlowBox::logicalLayoutOverflowRect):
        (WebCore::InlineFlowBox::visualOverflowRect):
        (WebCore::InlineFlowBox::logicalLeftVisualOverflow):
        (WebCore::InlineFlowBox::logicalRightVisualOverflow):
        (WebCore::InlineFlowBox::logicalTopVisualOverflow):
        (WebCore::InlineFlowBox::logicalBottomVisualOverflow):
        (WebCore::InlineFlowBox::logicalVisualOverflowRect):
        (WebCore::InlineFlowBox::frameRectIncludingLineHeight):
        (WebCore::InlineFlowBox::logicalFrameRectIncludingLineHeight):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::nodeAtPoint):
        (WebCore::InlineTextBox::paint):
        * rendering/InlineTextBox.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::simplifiedNormalFlowLayout):
        (WebCore::RenderBlock::paintEllipsisBoxes):
        (WebCore::RenderBlock::adjustLinePositionForPagination):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::computeInlineDirectionPositionsForLine):
        (WebCore::RenderBlock::layoutInlineChildren):
        (WebCore::RenderBlock::determineStartPosition):
        (WebCore::RenderBlock::matchedEndLine):
        (WebCore::RenderBlock::addOverflowFromInlineChildren):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::hasRenderOverflow):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::linesVisualOverflowBoundingBox):
        * rendering/RenderLineBoxList.cpp:
        (WebCore::RenderLineBoxList::anyLineIntersectsRect):
        (WebCore::RenderLineBoxList::lineIntersectsDirtyRect):
        (WebCore::RenderLineBoxList::paint):
        (WebCore::RenderLineBoxList::hitTest):
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::positionListMarker):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::paintEllipsisBox):
        (WebCore::RootInlineBox::addHighlightOverflow):
        (WebCore::RootInlineBox::paint):
        (WebCore::RootInlineBox::nodeAtPoint):
        (WebCore::RootInlineBox::paddedLayoutOverflowRect):
        * rendering/RootInlineBox.h:
        (WebCore::RootInlineBox::logicalTopVisualOverflow):
        (WebCore::RootInlineBox::logicalBottomVisualOverflow):
        (WebCore::RootInlineBox::logicalTopLayoutOverflow):
        (WebCore::RootInlineBox::logicalBottomLayoutOverflow):
        * rendering/svg/SVGInlineFlowBox.cpp:
        (WebCore::SVGInlineFlowBox::paint):
        * rendering/svg/SVGInlineFlowBox.h:
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::paint):
        * rendering/svg/SVGInlineTextBox.h:
        * rendering/svg/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBox::paint):
        * rendering/svg/SVGRootInlineBox.h:

2011-03-31  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: disable properties abbreviation.
        https://bugs.webkit.org/show_bug.cgi?id=57525

        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::getProperties):
        * inspector/InjectedScript.h:
        * inspector/InjectedScriptSource.js:
        (.):
        ():
        * inspector/Inspector.json:
        * inspector/InspectorRuntimeAgent.cpp:
        (WebCore::InspectorRuntimeAgent::getProperties):
        * inspector/InspectorRuntimeAgent.h:
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.completions.evaluated):
        (WebInspector.ConsoleView.prototype._formatarray):
        * inspector/front-end/ObjectPropertiesSection.js:
        (WebInspector.ObjectPropertiesSection.prototype.update.callback):
        (WebInspector.ObjectPropertiesSection.prototype.update):
        (WebInspector.ObjectPropertyTreeElement.prototype.onpopulate):
        (WebInspector.ObjectPropertyTreeElement.prototype.update):
        (WebInspector.ObjectPropertyTreeElement.prototype.startEditing):
        * inspector/front-end/PropertiesSidebarPane.js:
        (WebInspector.PropertiesSidebarPane.prototype.update.nodePrototypesReady):
        * inspector/front-end/RemoteObject.js:
        (WebInspector.RemoteObject.prototype.getOwnProperties):
        (WebInspector.RemoteObject.prototype.getAllProperties):
        (WebInspector.RemoteObject.prototype._getProperties):
        (WebInspector.LocalJSONObject.prototype.getOwnProperties):
        (WebInspector.LocalJSONObject.prototype.getAllProperties):
        * inspector/front-end/inspector.css:
        (.console-formatted-string, .console-formatted-regexp):

2011-03-31  Adam Roben  <aroben@apple.com>

        Update WKCACFViewLayerTreeHost for changes to WKCACFView API

        This should not result in any change in behavior.

        Fixes <http://webkit.org/b/57560> WKCACFViewLayerTreeHost needs to tell WKCACFView where to
        render

        Reviewed by Darin Adler.

        * platform/graphics/ca/win/WKCACFViewLayerTreeHost.cpp: Updated API declarations.
        (WebCore::WKCACFViewLayerTreeHost::WKCACFViewLayerTreeHost): Tell WKCACFView it should
        render into the window we give it.

2011-03-31  Marius Storm-Olsen  <marius.storm-olsen@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Properly detect phonon include, and avoid double qtLibraryTarget() call
        https://bugs.webkit.org/show_bug.cgi?id=57017

        Build fix. No new tests.

        * WebCore.pri:

2011-03-31  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Pavel Feldman.

        XML viewer is not shown when frame has non-null opener
        https://bugs.webkit.org/show_bug.cgi?id=56384

        Removed opener check in XML viewer

        Test: http/tests/xmlviewer/extensions-api.html

        * xml/XMLTreeViewer.cpp:
        (WebCore::XMLTreeViewer::hasNoStyleInformation):
        * xml/XMLViewer.js:

2011-03-31  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r82589.
        http://trac.webkit.org/changeset/82589
        https://bugs.webkit.org/show_bug.cgi?id=57564

        This patch requires many more updated results than it contains
        (Requested by abarth|gardener on #webkit).

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::pseudoId):
        (WebCore::nameToPseudoTypeMap):
        (WebCore::CSSSelector::extractPseudoType):
        * css/CSSSelector.h:
        * css/html.css:
        (meter::-webkit-meter-horizontal-bar):
        (meter::-webkit-meter-vertical-bar):
        (meter::-webkit-meter-horizontal-optimum-value):
        (meter::-webkit-meter-horizontal-suboptimal-value):
        (meter::-webkit-meter-horizontal-even-less-good-value):
        (meter::-webkit-meter-vertical-optimum-value):
        (meter::-webkit-meter-vertical-suboptimal-value):
        (meter::-webkit-meter-vertical-even-less-good-value):
        * rendering/RenderMeter.cpp:
        (WebCore::MeterPartElement::MeterPartElement):
        (WebCore::MeterPartElement::createForPart):
        (WebCore::MeterPartElement::hide):
        (WebCore::MeterPartElement::restoreVisibility):
        (WebCore::MeterPartElement::updateStyleForPart):
        (WebCore::MeterPartElement::saveVisibility):
        (WebCore::RenderMeter::~RenderMeter):
        (WebCore::RenderMeter::createPart):
        (WebCore::RenderMeter::updateFromElement):
        (WebCore::RenderMeter::layoutParts):
        (WebCore::RenderMeter::shouldHaveParts):
        (WebCore::RenderMeter::valuePartRect):
        (WebCore::RenderMeter::orientation):
        (WebCore::RenderMeter::valuePseudoId):
        (WebCore::RenderMeter::barPseudoId):
        * rendering/RenderMeter.h:
        (WebCore::RenderMeter::shadowAttached):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::supportsMeter):
        * rendering/RenderTheme.h:
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintMeter):
        (WebCore::RenderThemeMac::supportsMeter):
        * rendering/style/RenderStyleConstants.h:

2011-03-31  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Link explicitly with XRender on Linux/Unix
        https://bugs.webkit.org/show_bug.cgi?id=57558

        * GNUmakefile.am: add XRender CFLAGS.

2011-03-31  Eric Seidel  <eric@webkit.org>

        Reviewed by Ryosuke Niwa.

        Rename BidiResolver::emptyRun to m_emtpyRun to match modern style
        https://bugs.webkit.org/show_bug.cgi?id=57549

        * platform/text/BidiResolver.h:
        (WebCore::BidiResolver::BidiResolver):
        (WebCore::::appendRun):
        (WebCore::::lowerExplicitEmbeddingLevel):
        (WebCore::::raiseExplicitEmbeddingLevel):
        (WebCore::::deleteRuns):
        (WebCore::::createBidiRunsForLine):
        * rendering/InlineIterator.h:
        (WebCore::InlineBidiResolver::appendRun):

2011-03-31  Tom Sepez  <tsepez@chromium.org>

        Reviewed by Eric Seidel.

        Make ContainerNode::insertIntoDocument() collect all nodes before
        operating on any of them.  Add small helper function and use it
        througout the file where this action is already taking place.
        https://bugs.webkit.org/show_bug.cgi?id=57265
        
        Test: svg/dom/range-delete.html

        * dom/ContainerNode.cpp:
        (WebCore::collectNodes):
        (WebCore::collectTargetNodes):
        (WebCore::ContainerNode::takeAllChildrenFrom):
        (WebCore::willRemoveChildren):
        (WebCore::ContainerNode::insertedIntoDocument):

2011-03-31  Satish Sampath  <satish@chromium.org>

        Reviewed by Steve Block.

        While drawing a speech input button, validate that the node is really a speech input button.
        https://bugs.webkit.org/show_bug.cgi?id=57469

        Test: fast/speech/speech-style-on-non-speech-elements.html

        * dom/Element.h:
        (WebCore::Element::isInputFieldSpeechButtonElement):
        * html/shadow/TextControlInnerElements.h:
        (WebCore::InputFieldSpeechButtonElement::isInputFieldSpeechButtonElement):
        (WebCore::toInputFieldSpeechButtonElement):
        * rendering/RenderInputSpeech.cpp:
        (WebCore::RenderInputSpeech::paintInputFieldSpeechButton):

2011-03-31  Ryosuke Niwa  <rniwa@webkit.org>

        Build fix after r82588. Reverted unintentional change.

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::modifyMovingLeft):

2011-03-31  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Warnings happening because of unhandled switch cases in AccessibilityObjectWrapperAtk
        https://bugs.webkit.org/show_bug.cgi?id=57534

        Fix compilation warnings.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (getAttributeSetForAccessibilityObject): Add unhandled cases.

2011-03-30  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: remove unnecessary newBody output parameter from editScriptSource protocol method.
        https://bugs.webkit.org/show_bug.cgi?id=57444

        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::editScriptSource):
        * bindings/js/ScriptDebugServer.h:
        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::editScriptSource):
        * bindings/v8/ScriptDebugServer.h:
        * inspector/Inspector.json:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::editScriptSource):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel.prototype.editScriptSource):
        (WebInspector.DebuggerModel.prototype._didEditScriptSource):
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype.editScriptSource.didEditScriptSource):
        (WebInspector.DebuggerPresentationModel.prototype.editScriptSource):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._handleSave.didEditScriptSource):
        (WebInspector.SourceFrame.prototype._handleSave):

2011-03-30  MORITA Hajime <morrita@google.com>

        Reviewed by Dimitri Glazkov.

        <meter> can only support horizontal indicator
        https://bugs.webkit.org/show_bug.cgi?id=56001

        - Removed code which deals with the direction and
          left the horizontal path.
        - Removed "horizontal" from related names which is now
          redundant.
        
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::pseudoId):
        (WebCore::nameToPseudoTypeMap):
        (WebCore::CSSSelector::extractPseudoType):
        * css/CSSSelector.h:
        * css/html.css:
        (meter::-webkit-meter-bar):
        (meter::-webkit-meter-optimum-value):
        (meter::-webkit-meter-suboptimal-value):
        (meter::-webkit-meter-even-less-good-value):
        * rendering/RenderMeter.cpp:
        (WebCore::RenderMeter::~RenderMeter):
        (WebCore::RenderMeter::createPart):
        (WebCore::RenderMeter::updateFromElement):
        (WebCore::RenderMeter::layoutParts):
        (WebCore::RenderMeter::styleDidChange):
        (WebCore::RenderMeter::shouldHaveParts):
        (WebCore::RenderMeter::valuePartRect):
        (WebCore::RenderMeter::valuePseudoId):
        (WebCore::RenderMeter::barPseudoId):
        (WebCore::RenderMeter::detachShadows):
        (WebCore::RenderMeter::updateShadows):
        * rendering/RenderMeter.h:
        (WebCore::RenderMeter::shadowAttached):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::supportsMeter):
        * rendering/RenderTheme.h:
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintMeter):
        (WebCore::RenderThemeMac::supportsMeter):
        * rendering/style/RenderStyleConstants.h:

2011-03-30  Xiaomei Ji  <xji@chromium.org>

        Reviewed by Ryosuke Niwa.

        Experiment with moving caret by word in visual order.
        https://bugs.webkit.org/show_bug.cgi?id=57336

        Follow Firefox's convention in Windows, 
        In LTR block, word break visually moves cursor to the left boundary of words,
        In RTL block, word break visually moves cursor to the right boundary of words.

        This is the 1st version of implementing "move caret by word in visual order".
        It only works in the following situation:
        1. For a LTR box in a LTR block or a RTL box in RTL block, 
        when caret is at the left boundary of the box and we are looking for 
        the word boundary in right.
        2. For a LTR or RTL box in a LTR block, when caret is at the left boundary
        of the box and we are looking for the word boundary in left and 
        previous box is a LTR box.
        3. For a LTR or RTL box in a RTL block, when the caret is at the right 
        boundary of the box and we are looking for the word boundary in right and next box is RTL box.

        An experimental granularity is introduced, as a side effect, functions having switch statements
        to handle those granularities have to add more one case to handle this new granularity.
        The experimental granularity is exposed though JS by '-webkit-visual-word".

        The overall algorithm is looping through inline boxes visually and looking
        for the visually nearest word break position. 

        Test: editing/selection/move-by-word-visually.html

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::modifyExtendingRight):
        (WebCore::SelectionController::modifyExtendingForward):
        (WebCore::SelectionController::modifyMovingRight):
        (WebCore::SelectionController::modifyMovingForward):
        (WebCore::SelectionController::modifyExtendingLeft):
        (WebCore::SelectionController::modifyExtendingBackward):
        (WebCore::SelectionController::modifyMovingLeft):
        (WebCore::SelectionController::modifyMovingBackward):
        * editing/TextGranularity.h:
        * editing/VisibleSelection.cpp:
        (WebCore::VisibleSelection::setStartAndEndFromBaseAndExtentRespectingGranularity):
        * editing/visible_units.cpp:
        (WebCore::previousWordBreakInBoxInsideBlockWithSameDirectionality):
        (WebCore::wordBoundaryInBox):
        (WebCore::wordBoundaryInAdjacentBoxes):
        (WebCore::leftWordBoundary):
        (WebCore::rightWordBoundary):
        (WebCore::leftWordPosition):
        (WebCore::rightWordPosition):
        * editing/visible_units.h:
        * page/DOMSelection.cpp:
        (WebCore::DOMSelection::modify):

2011-03-31  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        Move coordinate-computing logic into MouseRelatedEvent.
        https://bugs.webkit.org/show_bug.cgi?id=57521

        Refactoring, covered by existing tests.

        * dom/EventDispatcher.cpp:
        (WebCore::EventDispatcher::dispatchWheelEvent): Yank calculation of
            coordinates out.
        (WebCore::EventDispatcher::dispatchMouseEvent): Ditto.
        * dom/MouseEvent.cpp:
        (WebCore::MouseEvent::create): Add coordinate-computing logic.
        * dom/MouseEvent.h: Adjust decl to reflect new meaning of params.
        * dom/MouseRelatedEvent.cpp:
        (WebCore::MouseRelatedEvent::MouseRelatedEvent): Ditto.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::dispatchDragEvent): Ditto.

2011-03-30  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: document CSS agent.
        https://bugs.webkit.org/show_bug.cgi?id=57435

        * inspector/Inspector.json:

2011-03-31  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: remove periods at the end of error messages
        https://bugs.webkit.org/show_bug.cgi?id=57544

        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::getProperties):
        (WebCore::InjectedScript::makeObjectCall):
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::elementForId):
        (WebCore::InspectorCSSAgent::styleSheetForId):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::assertNode):
        (WebCore::InspectorDOMAgent::assertElement):
        (WebCore::InspectorDOMAgent::assertHTMLElement):
        (WebCore::InspectorDOMAgent::querySelector):
        (WebCore::InspectorDOMAgent::querySelectorAll):
        (WebCore::InspectorDOMAgent::setAttribute):
        (WebCore::InspectorDOMAgent::removeAttribute):
        (WebCore::InspectorDOMAgent::removeNode):
        (WebCore::InspectorDOMAgent::setNodeValue):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::setPauseOnExceptionsState):
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::resourceContent):
        (WebCore::InspectorResourceAgent::resourceContentBase64):
        (WebCore::InspectorResourceAgent::getResourceContent):
        * inspector/InspectorRuntimeAgent.cpp:
        (WebCore::InspectorRuntimeAgent::setPropertyValue):

2011-03-31  Evan Martin  <evan@chromium.org>

        Reviewed by Eric Seidel.

        <title> should support dir attribute
        https://bugs.webkit.org/show_bug.cgi?id=50961

        Introduce a new StringWithDirection object that carries a String along
        with the TextDirection associated with the String.  Use this object for
        document titles used within WebCore, because in HTML the direction of
        a title can be set with the 'dir' attribute.

        Put FIXMEs at the WebKit level to expose the new direction information
        to clients.

        No behavioral change intended, so no new tests.  A follow-up will expose
        the title direction and hopefully can be accompanied by tests that
        verify it is correct.

        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::updateTitle):
        (WebCore::Document::setTitle):
        (WebCore::Document::removeTitle):
        * dom/Document.h:
        (WebCore::Document::title):
        * html/HTMLTitleElement.cpp:
        (WebCore::HTMLTitleElement::HTMLTitleElement):
        (WebCore::HTMLTitleElement::childrenChanged):
        (WebCore::HTMLTitleElement::text):
        (WebCore::HTMLTitleElement::textWithDirection):
        * html/HTMLTitleElement.h:
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::setTitle):
        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::title):
        * loader/EmptyClients.h:
        (WebCore::EmptyFrameLoaderClient::dispatchDidReceiveTitle):
        (WebCore::EmptyFrameLoaderClient::setTitle):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::receivedFirstData):
        (WebCore::FrameLoader::commitProvisionalLoad):
        (WebCore::FrameLoader::setTitle):
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::updateForBackForwardNavigation):
        (WebCore::HistoryController::updateForReload):
        (WebCore::HistoryController::updateForRedirectWithLockedBackForwardList):
        (WebCore::HistoryController::updateForClientRedirect):
        (WebCore::HistoryController::updateForCommit):
        (WebCore::HistoryController::setCurrentItemTitle):
        (WebCore::HistoryController::initializeItem):
        * loader/HistoryController.h:
        * platform/text/StringWithDirection.h: Added.
        (WebCore::StringWithDirection::StringWithDirection):
        (WebCore::StringWithDirection::operator==):
        (WebCore::StringWithDirection::operator!=):
        * svg/SVGTitleElement.cpp:
        (WebCore::SVGTitleElement::insertedIntoDocument):
        (WebCore::SVGTitleElement::childrenChanged):

2011-03-31  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: CSS domain - make a "range" object, get rid of "properties" object for Style objects
        https://bugs.webkit.org/show_bug.cgi?id=57538

        * inspector/InspectorStyleSheet.cpp:
        (WebCore::buildSourceRangeObject):
        (WebCore::InspectorStyle::buildObjectForStyle):
        (WebCore::InspectorStyle::populateObjectWithStyleProperties):
        * inspector/front-end/AuditRules.js:
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun.evalCallback.selectorsCallback):
        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleDeclaration):

2011-03-31  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r82565.
        http://trac.webkit.org/changeset/82565
        https://bugs.webkit.org/show_bug.cgi?id=57541

        Caused assertion failures. (Requested by bbandix on #webkit).

        * platform/graphics/filters/FEFlood.cpp:
        (WebCore::FEFlood::setFloodColor):
        (WebCore::FEFlood::setFloodOpacity):
        * platform/graphics/filters/FEFlood.h:
        * platform/graphics/filters/FESpecularLighting.cpp:
        (WebCore::FESpecularLighting::setLightingColor):
        * platform/graphics/filters/FESpecularLighting.h:
        * rendering/svg/RenderSVGResourceFilterPrimitive.cpp:
        * rendering/svg/RenderSVGResourceFilterPrimitive.h:
        * rendering/svg/SVGResourcesCache.cpp:
        (WebCore::SVGResourcesCache::clientStyleChanged):
        * svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::setFilterEffectAttribute):
        * svg/SVGFEFloodElement.cpp:
        * svg/SVGFEFloodElement.h:
        * svg/SVGFESpecularLightingElement.cpp:
        (WebCore::SVGFESpecularLightingElement::setFilterEffectAttribute):

2011-03-31  Renata Hodovan  <reni@webkit.org>

        Reviewed by Dirk Schulze.

        CSS related SVG*Element changes doesn't require relayout
        https://bugs.webkit.org/show_bug.cgi?id=56906

        The changes of some CSS related SVGFilter properties e.g. lighting-color, flood-color, flood-opacity
        need only repaint. To avoid the default invalidation of filters in SVGResourceCache::clientStyleChange()
        we need an early return. So RenderSVGResourceFilterPrimitive::styleDidChange() can handle these properties
        via RenderSVGResourceFilter::primitiveAttributeChanged() the same way like we do it for the other SVGAttributes.

        Tests: svg/dynamic-updates/SVGFEDiffuseLightingElement-inherit-lighting-color-css-prop.html
               svg/dynamic-updates/SVGFEFloodElement-inherit-flood-color.html
               svg/dynamic-updates/SVGFESpecularLightingElement-inherit-lighting-color-css-prop.html
               svg/dynamic-updates/SVGFESpecularLightingElement-lighting-color-css-prop.html

        * platform/graphics/filters/FEFlood.cpp:
        (WebCore::FEFlood::setFloodColor):
        (WebCore::FEFlood::setFloodOpacity):
        * platform/graphics/filters/FEFlood.h:
        * platform/graphics/filters/FESpecularLighting.cpp:
        (WebCore::FESpecularLighting::setLightingColor):
        * platform/graphics/filters/FESpecularLighting.h:
        * rendering/svg/RenderSVGResourceFilterPrimitive.cpp:
        (WebCore::RenderSVGResourceFilterPrimitive::styleDidChange):
        * rendering/svg/RenderSVGResourceFilterPrimitive.h:
        * rendering/svg/SVGResourcesCache.cpp:
        (WebCore::SVGResourcesCache::clientStyleChanged):
        * svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::setFilterEffectAttribute):
        * svg/SVGFEFloodElement.cpp:
        (WebCore::SVGFEFloodElement::setFilterEffectAttribute):
        * svg/SVGFEFloodElement.h:
        * svg/SVGFESpecularLightingElement.cpp:
        (WebCore::SVGFESpecularLightingElement::setFilterEffectAttribute):

2011-03-29  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Pavel Feldman.

        XML Viewer: declared namespaces are not rendered.
        https://bugs.webkit.org/show_bug.cgi?id=56262

        XML viewer rewritten on javascript.

        * CMakeLists.txt:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::doEnd):
        * xml/XMLTreeViewer.cpp:
        (WebCore::XMLTreeViewer::transformDocumentToTreeView):
        * xml/XMLViewer.css: Added.
        * xml/XMLViewer.js: Added.
        * xml/XMLViewer.xsl: Removed.
        * xml/XSLStyleSheet.h:

2011-03-31  Jaehun Lim  <ljaehun.lim@samsung.com>

        Unreviewed build fix.

        Fix build break after rolling out r82496
        https://bugs.webkit.org/show_bug.cgi?id=57536

        * platform/efl/RenderThemeEfl.cpp:

2011-03-31  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Pavel Feldman.

        Web Inspector: execution line is displayed incorrectly after source editing.
        https://bugs.webkit.org/show_bug.cgi?id=57229

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._saveViewerState):
        (WebInspector.SourceFrame.prototype._restoreViewerState):
        (WebInspector.SourceFrame.prototype._startEditing):
        (WebInspector.SourceFrame.prototype._endEditing):
        (WebInspector.SourceFrame.prototype._createTextViewer):
        (WebInspector.SourceFrame.prototype.setExecutionLine):
        (WebInspector.SourceFrame.prototype._handleSave.didEditScriptSource):
        (WebInspector.SourceFrame.prototype._handleSave):
        (WebInspector.SourceFrame.prototype._handleRevertEditing):
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextEditorChunkedPanel.prototype.addDecoration):
        (WebInspector.TextEditorChunkedPanel.prototype.removeDecoration):
        (WebInspector.TextEditorMainPanel.prototype.makeLineAChunk):
        (WebInspector.TextEditorMainPanel.prototype._positionToSelection):

2011-03-30  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Make the CSStyle "shorthandValues" name-value map an array
        https://bugs.webkit.org/show_bug.cgi?id=57452

        No new tests, as this is a refactoring.

        * inspector/InspectorCSSAgent.cpp:
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyle::populateObjectWithStyleProperties):
        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleDeclaration):
        (WebInspector.CSSStyleDeclaration.buildShorthandValueMap):

2011-03-30  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        JavaField should not expose JavaString in its API
        https://bugs.webkit.org/show_bug.cgi?id=55766

        This patch fixes JavaField for V8 only.
        - Factors out a JavaField interface which does not use JNI types.
          This will allow the Java bridge to be used with objects that
          don't use JNI directly. The existing jobject-backed
          implementation is moved to a new JavaFieldJobject class which
          implements the interface.
        - Use WTF::String in place of JavaString in the API, as JavaString
          exposes JNI types in its interface.

        No new tests, refactoring only.

        * Android.v8bindings.mk:
        * WebCore.gypi:
        * bridge/jni/JavaMethod.h:
        (JSC::Bindings::JavaMethod::~JavaMethod):
        * bridge/jni/JobjectWrapper.h:
        * bridge/jni/v8/JavaClassV8.cpp:
        (JavaClass::JavaClass):
        * bridge/jni/v8/JavaFieldJobjectV8.cpp:
        (JavaFieldJobject::JavaFieldJobject):
        * bridge/jni/v8/JavaFieldJobjectV8.h:
        (JSC::Bindings::JavaFieldJobject::name):
        (JSC::Bindings::JavaFieldJobject::typeClassName):
        (JSC::Bindings::JavaFieldJobject::type):
        * bridge/jni/v8/JavaFieldV8.h:
        (JSC::Bindings::JavaField::~JavaField):
        * bridge/jni/v8/JavaInstanceV8.cpp:
        (JavaInstance::getField):

2011-03-31  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Ryosuke Niwa.

        Clean up from r82447.
        https://bugs.webkit.org/attachment.cgi?bugid=57532

        No new tests since this doesn't change behavior.

        * rendering/RenderBlock.cpp: Removing unnecessary visible_units.h include.
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::getLogicalStartBoxWithNode): Making const.
        (WebCore::RootInlineBox::getLogicalEndBoxWithNode): Ditto.
        * rendering/RootInlineBox.h:

2011-03-31  Benjamin Kalman  <kalman@chromium.org>

        Reviewed by Ojan Vafai.

        DeleteSelectionCommand::removeNode tries to insert block placeholder in non-editable table cell positions
        https://bugs.webkit.org/show_bug.cgi?id=57079

        Test: editing/execCommand/delete-table-with-empty-contents.html

        This bug results in an ASSERT fail in CompositeEditCommand::insertNodeAt, so is only observable in debug builds
        of WebKit.

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::firstEditablePositionInNode):
        (WebCore::DeleteSelectionCommand::removeNode): Use firstEditablePositionInNode rather than firstPositionInNode
        to find anchor node for the placeholder's position, if any.

2011-03-30  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Adam Roben.

        REGRESSION (r82400): Leaks seen beneath CSSParser::createFloatingVectorSelector when parsing UA stylesheet
        https://bugs.webkit.org/show_bug.cgi?id=57478

        * css/CSSGrammar.y:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::sinkFloatingSelectorVector):
        * css/CSSParser.h:

2011-03-30  Dominic Cooney  <dominicc@google.com>

        Reviewed by Dimitri Glazkov.

        Adds layoutTestController.shadowRoot accessor to Mac DRT.
        https://bugs.webkit.org/show_bug.cgi?id=57415

        * WebCore.exp.in: DRT needs to link WebCore::Element::shadowRoot

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

        Reviewed by Dimitri Glazkov.

        Simplify HTMLFormElement::validateInteractively() for asynchronous scroll event
        https://bugs.webkit.org/show_bug.cgi?id=57424

        r75555 made 'scroll' event asynchronous. So we don't need to worry about
        deleting or moving a target node in scrollIntoViewIfNeeded().

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::validateInteractively): Remove unnecessary code.

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

        Reviewed by Darin Adler.

        REGRESSION (r74895): Crash if input.type = 'file' twice
        https://bugs.webkit.org/show_bug.cgi?id=57343

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::updateType):
          Don't call setAttribute() if the type is not changed.

2011-03-30  Jia Pu  <jpu@apple.com>

        Reviewed by Darin Adler.

        Autocorrection panel isn't positioned correctly in Safari (mac) when the zooming is not 1x.
        https://bugs.webkit.org/show_bug.cgi?id=57353
        <rdar://problem/9163983>

        We use Range::textQuads() instead of Range::boundingRect() to compute the position of correction
        panel. The latter function compensates for zooming, which we don't need in this case. We also
        dismiss correction panel when zooming factor is changed. This is done in Frame::setPageAndTextZoomFactors().

        * WebCore.exp.in:
        * dom/Range.cpp:
        (WebCore::Range::textQuads):
        * dom/Range.h:
        * editing/Editor.cpp:
        (WebCore::Editor::windowRectForRange):
        * editing/Editor.h:
        * page/Frame.cpp:
        (WebCore::Frame::setPageAndTextZoomFactors):

2011-03-30  Chris Guillory  <chris.guillory@google.com>

        Reviewed by Dimitri Glazkov.

        Render fonts using skia when requested by platform context.
        https://bugs.webkit.org/show_bug.cgi?id=56441

        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::isNativeFontRenderingAllowed):
        * platform/graphics/skia/PlatformContextSkia.h:
        * platform/graphics/skia/SkiaFontWin.cpp:
        (WebCore::windowsCanHandleTextDrawing):
        (WebCore::skiaDrawText):
        (WebCore::setupPaintForFont):
        (WebCore::paintSkiaText):

2011-03-30  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/9199518> Crash when focusing a styled editable element

        Test: editing/deleting/delete-button-background-image-none.html

        * editing/DeleteButtonController.cpp:
        (WebCore::isDeletableElement): Check all background layers for background images.
        * rendering/style/RenderStyle.h: Removed backgroundImage() as it was only used, incorrectly,
        in the above function.

2011-03-30  Martin Robinson  <mrobinson@igalia.com>

        Try once more to fix the EFL build.

        * platform/efl/RenderThemeEfl.cpp:

2011-03-30  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        Regression: VO cursor doesn't follow KB focus back into HTML view
        https://bugs.webkit.org/show_bug.cgi?id=57509

        In WK2, because the web area never believes focus leave the area, sending the initial
        focus change when moving back into the web area, does not trigger a notification.

        That behavior needs to be overridden by explicitly posting a focused UI element change
        at the appropriate time. This is only used in WK2, hence the absence of a layout test for now.

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

2011-03-30  MORITA Hajime  <morrita@google.com>

        Reviewed by Simon Fraser.

        box-shadow radii stays the same regardless of any spread set
        https://bugs.webkit.org/show_bug.cgi?id=49726

        - Removed special shadowSpread handling path
        - Fixed broken multple inset shadow border computation.

        Test: fast/box-shadow/spread-multiple-inset.html

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintBoxShadow):

2011-03-29  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Simon Fraser.

        Use the Accelerate vImage vectorized (un)premultiplyImageData functions for ImageBufferCG

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

        Test: fast/canvas/getPutImageDataPairTest.html

        * platform/graphics/cg/ImageBufferCG.cpp:

2011-03-30  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Share most vsprops between Release and Production builds in releaseproduction.vsprops
        https://bugs.webkit.org/show_bug.cgi?id=57508

        * WebCore.vcproj/QTMovieWinProduction.vsprops:
        * WebCore.vcproj/QTMovieWinRelease.vsprops:
        * WebCore.vcproj/QTMovieWinReleaseCairoCFLite.vsprops:
        * WebCore.vcproj/WebCoreProduction.vsprops:
        * WebCore.vcproj/WebCoreRelease.vsprops:
        * WebCore.vcproj/WebCoreReleaseCairoCFLite.vsprops:

2011-03-30  Timur Iskhodzhanov  <timurrrr@google.com>

        Reviewed by Alexey Proskuryakov.

        Add some dynamic annotations to JavaScriptCore/wtf
        https://bugs.webkit.org/show_bug.cgi?id=53747

        By using these annotations we can improve the precision of finding
        WebKit errors using dynamic analysis tools like ThreadSanitizer and Valgrind.
        These annotations don't affect the compiled binaries unless USE(DYNAMIC_ANNOTATIONS) is "1".

        These files don't add new functionality, so don't need extra tests.

        * ForwardingHeaders/wtf/DynamicAnnotations.h: Added.

2011-03-30  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Simon Fraser.

        Fix wrong type assumptions in editing code. Move code
        from ASSERTs to hard checks.
        https://bugs.webkit.org/show_bug.cgi?id=57348

        Test: editing/execCommand/remove-format-non-html-element-crash.html

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::getRGBAFontColor):
        (WebCore::ApplyStyleCommand::pushDownInlineStyleAroundNode):
        * editing/DeleteButtonController.cpp:
        (WebCore::enclosingDeletableElement):
        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::textDirection):
        (WebCore::EditingStyle::prepareToApplyAt):
        * editing/Editor.cpp:
        (WebCore::Editor::textDirectionForSelection):
        * editing/FormatBlockCommand.cpp:
        (WebCore::FormatBlockCommand::elementForFormatBlockCommand):

2011-03-30  Stephen White  <senorblanco@chromium.org>

        Reviewed by Kenneth Russell.

        Speed up clipping in accelerated 2D canvas.
        https://bugs.webkit.org/show_bug.cgi?id=57464

        Instead of clearing the entire stencil buffer when removing clipping paths, we erase the path with a DECR stencil operation.
        Covered by canvas/philip/tests/2d.path.clip.intersect.html, and others.

        * platform/graphics/chromium/GLES2Canvas.cpp:
        (WebCore::PathAndTransform::PathAndTransform):
        New structure to keep track of the CTM at the time the clipping path was added.
        (WebCore::GLES2Canvas::State::State):
        Replace m_clippingEnabled with a count of total clipping paths.
        (WebCore::GLES2Canvas::clearRect):
        Check the total clipping path count, instead of m_clippingEnabled.
        (WebCore::GLES2Canvas::fillPath):
        (WebCore::GLES2Canvas::fillRect):
        Perform state application after doing shadows.  This is necessary
        since restore() may now leave clipping enabled.
        (WebCore::GLES2Canvas::clipPath):
        Explicitly specify the stencil operation as INCR.  Store the current
        transformation when saving clipping paths.
        (WebCore::GLES2Canvas::restore):
        Don't clear the stencil buffer and re-draw active paths on each restore.
        Erase the old paths with DECR.
        (WebCore::GLES2Canvas::drawTexturedRect):
        Check m_numClippingPaths instead of m_clippingEnabled.
        (WebCore::GLES2Canvas::beginShadowDraw):
        Perform state application when drawing hard shadows.
        (WebCore::GLES2Canvas::endShadowDraw):
        Check m_numClippingPaths instead of m_clippingEnabled.
        (WebCore::GLES2Canvas::beginStencilDraw):
        Make the stencil op a parameter to beginShadowDraw().
        (WebCore::GLES2Canvas::applyClipping):
        Compare against the total number of stencil paths, not just the ones in
        the current state.
        * platform/graphics/chromium/GLES2Canvas.h:
        Make the stencil op a parameter to beginShadowDraw().

2011-03-29  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        Move factory-like things in EventDispatcher::dispatchMouseEvent to a factory, clean up names and ordering.
        https://bugs.webkit.org/show_bug.cgi?id=57419

        Refactoring, covered by existing tests.

        * dom/EventDispatcher.cpp:
        (WebCore::EventDispatcher::dispatchMouseEvent): Reordered and clarified names.
        * dom/MouseEvent.cpp:
        (WebCore::MouseEvent::create): Added a new factory method that takes PlatformMouseEvent.
        * dom/MouseEvent.h: Added decl.

2011-03-30  Erik Arvidsson  <arv@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Missing DOM bindings for a ping
        https://bugs.webkit.org/show_bug.cgi?id=51955

        Test: fast/dom/ping-attribute-dom-binding.html

        * html/HTMLAnchorElement.idl:
        * html/HTMLAreaElement.idl:

2011-03-30  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed WinCE build fix for r82465.

        * CMakeListsWinCE.txt:

2011-03-30  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Update Windows production build logic for new production configurations
        https://bugs.webkit.org/show_bug.cgi?id=57494

        * WebCore.vcproj/QTMovieWinProduction.vsprops:
        * WebCore.vcproj/WebCore.make:
        * WebCore.vcproj/WebCoreProduction.vsprops:

2011-03-30  Sam Weinig  <sam@webkit.org>

        Reviewed by Brady Eidson.

        WebKit2: Attempting to view css file from url causes it to download
        <rdar://problem/9102611>
        https://bugs.webkit.org/show_bug.cgi?id=57501

        * WebCore.exp.in:
        * platform/MIMETypeRegistry.cpp:
        (WebCore::initializeUnsupportedTextMIMETypes):
        (WebCore::initializeMIMETypeRegistry):
        (WebCore::MIMETypeRegistry::isUnsupportedTextMIMEType):
        (WebCore::MIMETypeRegistry::getUnsupportedTextMIMETypes):
        * platform/MIMETypeRegistry.h:
        Add set of unsupported text MIME types, taken from WebKit/mac.

2011-03-30  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Darin Adler.
        
        Crash when closing "Add Bookmark" dialog using the Enter Key
        https://bugs.webkit.org/show_bug.cgi?id=57294
        <rdar://problem/9044756>

        Protect the FrameView in EventHandler::keyEvent, like we do in other EventHandler
        functions that could destroy the frame.

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

2011-03-30  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r82463.
        http://trac.webkit.org/changeset/82463
        https://bugs.webkit.org/show_bug.cgi?id=57482

        Assertion failure in Node::rendererIsEditable on multiple
        editing tests (Requested by aroben|meeting on #webkit).

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator EUnicodeBidi):
        * css/CSSValueKeywords.in:
        * rendering/style/RenderStyle.h:
        * rendering/style/RenderStyleConstants.h:

2011-03-24  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] QNetworkReplyHandler refactoring: signal sequence.
        https://bugs.webkit.org/show_bug.cgi?id=57049

        This is the first step in QNetworkReplyHandler. The main objective here is to create simple invariants:

            1 - that the signals metadatachanged, readyRead and finished will come in this order.
            2 - that signals metadatachanged and finished will be called exactly once.

        Having these invariants further simplifications will be possible and will come in future patches.

        Class QNetworkReplyWrapper was created to handle QNetworkReply object. To connect to the signals of it
        instead of connecting to the signals of QNetworkReply is what guarantees the sequence of the signals.
        QNetworkReplyWrapper will be used in future to perform mime type sniffing before sending
        metadatachanged signal.

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyWrapper::QNetworkReplyWrapper):
        (WebCore::QNetworkReplyWrapper::~QNetworkReplyWrapper):
        (WebCore::QNetworkReplyWrapper::release):
        (WebCore::QNetworkReplyWrapper::resetConnections):
        (WebCore::QNetworkReplyWrapper::receiveMetaData):
        (WebCore::QNetworkReplyWrapper::didReceiveFinished):
        (WebCore::QNetworkReplyHandler::QNetworkReplyHandler):
        (WebCore::QNetworkReplyHandler::resetState):
        (WebCore::QNetworkReplyHandler::release):
        (WebCore::QNetworkReplyHandler::finish):
        (WebCore::QNetworkReplyHandler::sendResponseIfNeeded):
        (WebCore::QNetworkReplyHandler::redirect):
        (WebCore::QNetworkReplyHandler::forwardData):
        (WebCore::QNetworkReplyHandler::sendNetworkRequest):
        (WebCore::QNetworkReplyHandler::start):
        * platform/network/qt/QNetworkReplyHandler.h:
        (WebCore::QNetworkReplyWrapper::reply):
        (WebCore::QNetworkReplyWrapper::redirectionTargetUrl):
        (WebCore::QNetworkReplyWrapper::encoding):
        (WebCore::QNetworkReplyWrapper::advertisedMimeType):
        (WebCore::QNetworkReplyHandler::reply):

2011-03-30  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Rename Windows configuration Release_LTCG to Production for clarity
        https://bugs.webkit.org/show_bug.cgi?id=57465

        * WebCore.vcproj/QTMovieWin.vcproj:
        * WebCore.vcproj/QTMovieWinProduction.vsprops: Copied from Source/WebCore/WebCore.vcproj/QTMovieWinReleaseLTCG.vsprops.
        * WebCore.vcproj/QTMovieWinReleaseLTCG.vsprops: Removed.
        * WebCore.vcproj/WebCore.sln:
        * WebCore.vcproj/WebCore.submit.sln:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcproj/WebCoreGenerated.vcproj:
        * WebCore.vcproj/WebCoreProduction.vsprops: Copied from Source/WebCore/WebCore.vcproj/WebCoreReleaseLTCG.vsprops.
        * WebCore.vcproj/WebCoreReleaseLTCG.vsprops: Removed.

2011-03-30  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Anders Carlsson.
        
        ASSERT(cookieStorageAdapter) when calling stopObservingCookieChanges after WebProcess has crashed
        https://bugs.webkit.org/show_bug.cgi?id=57477
        <rdar://problem/9178751>
        
        If someone has called startObservingCookieChanges, and the WebProcess crashes and restarts, the UIProcess
        will call stopObservingCookieChanges when cookieStorageAdapter is nil.
        
        The assert is wrong when the web process crashes, and there is no harm in dispatching a message to nil,
        so remove the assert.
        
        * platform/network/mac/CookieStorageMac.mm:
        (WebCore::stopObservingCookieChanges):

2011-03-30  Sam Weinig  <sam@webkit.org>

        Fix Leopard build.

        * platform/DefaultLocalizationStrategy.cpp:
        (WebCore::DefaultLocalizationStrategy::contextMenuItemTagLookUpInDictionary):

2011-03-30  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add default localization strategy that can be shared by WebKit1 and WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=57406

        Currently, only WebKit2 uses this default strategy, but WebKit1 should be able
        to adopt it soon.

        * platform/DefaultLocalizationStrategy.cpp: Copied from Source/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.cpp.
        (WebCore::DefaultLocalizationStrategy::DefaultLocalizationStrategy):
        * platform/DefaultLocalizationStrategy.h: Copied from Source/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.h.
        Copy the implementation of the Localization strategy from WebKit2 into a shared default strategy.

        * platform/LocalizedStrings.cpp:
        (WebCore::localizedString):
        Add default implementation of localization bottleneck function.

        * platform/LocalizedStrings.h:
        Add localization macros here, instead of defining them in the above layer.

        * platform/PlatformStrategies.cpp:
        (WebCore::PlatformStrategies::createLocalizationStrategy):
        * platform/PlatformStrategies.h:
        Add default implementation of strategy creation function which creates the default strategy.

        * platform/win/LocalizedStringsWin.cpp: Copied from Source/WebCore/platform/mac/LocalizedStringsMac.mm.
        (WebCore::localizedString):
        Add stub for windows, this will be update to pull from the bundle in a follow up patch.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.exp.in:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        Add new files.

2011-03-30  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Darin Adler.

        CSS: Slow parsing of rgb() with percent values
        https://bugs.webkit.org/show_bug.cgi?id=16708

        Implement fast-path parsing for percentage color values.

        Gain ~30% speedup on  http://canvex.lazyilluminati.com/misc/3d.html

        Relanding with rounding fix after it was rolled out in r82315.

        * css/CSSParser.cpp:
        (WebCore::checkForValidDouble): Extend to return the number of characters forming a valid double.
        (WebCore::parseDouble): Function for parsing double values if they are valid.
        (WebCore::parseColorIntOrPercentage): Extend parseColorInt to deal with percentage values.
        (WebCore::parseAlphaValue): Use the new functions.
        (WebCore::CSSParser::parseColor): Ditto.

2011-03-30  Ofri Wolfus  <ofri@dhcp-172-28-40-178.tlv.corp.google.com>

        Reviewed by Eric Seidel.

        Add support for parsing unicode-bidi: -webkit-plaintext.
        https://bugs.webkit.org/show_bug.cgi?id=57457

        Test: css3/unicode-bidi-plaintext-parse.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator EUnicodeBidi):
        * css/CSSValueKeywords.in:
        * rendering/style/RenderStyle.h:
        * rendering/style/RenderStyleConstants.h:

2011-03-30  Andreas Kling  <kling@webkit.org>

        Reviewed by Benjamin Poulain.

        [Qt] Remove unused variables in GraphicsContext::fillRect()

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

2011-03-30  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Eric Seidel.

        REGRESSION(r82419): New pixel test failure fast/box-shadow/basic-shadows.html
        https://bugs.webkit.org/show_bug.cgi?id=57442

        When checking the position of the inline iterator in the logicallyLastRun, we should not consider BR as text.

        No new tests as existing test covers this case.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::reachedEndOfTextRenderer):

2011-03-30  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Chris Fleizach.

        AX: GTK: ARIA role is not respected on <p> <label> <div> and <form>
        https://bugs.webkit.org/show_bug.cgi?id=47636

        Define new roles in WebCore and map them to ATK accordingly.

        Test: platform/gtk/accessibility/aria-roles-unignored.html

        * accessibility/AccessibilityObject.h: Added new roles to
        represent paragraphs, labels, forms and div sections.
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):
        Return ParagraphRole, LabelRole, FormRole and DivRole when needed
        for the GTK platform only.
        * accessibility/gtk/AccessibilityObjectAtk.cpp:
        (WebCore::AccessibilityObject::allowsTextRanges): Consider the new
        roles now that those kind of nodes won't return true to isGroup().
        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (atkRole): Map new WebCore roles to ATK Roles.
        (webkit_accessible_get_role): Remove code to define roles for
        paragraphs, labels, forms and divs based on node's tag name.

        Update mappings for the Mac platform.

        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (createAccessibilityRoleMap): Add explicit mappings from the new
        roles introduced to NSAccessibilityGroupRole.

2011-03-30  Yury Semikhatsky  <yurys@chromium.org>

        Unreviewed. Build fix for Efl and Qt Win.

        * inspector/PageDebuggerAgent.cpp: removed ENABLE(WORKERS) guard from code that has nothing to do with workers.

2011-03-30  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: audit run never completes, fails in DOMAgent.js
        https://bugs.webkit.org/show_bug.cgi?id=57349

        - assure document is present before calling DOMAgent.querySelectAll()

        * inspector/front-end/AuditRules.js:
        (WebInspector.AuditRules.ImageDimensionsRule.prototype.doRun):

2011-03-30  Yury Semikhatsky  <yurys@chromium.org>

        Unreviewed. Build fix.

        * UseJSC.cmake: fix typo PageDebugServer -> PageScriptDebugServer

2011-03-30  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: split debugger agent into Page and Worker-specific ones
        https://bugs.webkit.org/show_bug.cgi?id=57345

        ScriptDebugServer and InspectorDebuggerAgent contain only functionality common
        for Worker and Page debugger. All specifics is moved into Page/WorkerScriptDebugServer
        and Page/WorkerDebuggerAgent.

        * CMakeLists.txt:
        * GNUmakefile.am:
        * UseJSC.cmake:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::JSInjectedScriptHost::currentCallFrame):
        * bindings/js/PageScriptDebugServer.cpp: Added.
        (WebCore::toPage):
        (WebCore::PageScriptDebugServer::shared):
        (WebCore::PageScriptDebugServer::PageScriptDebugServer):
        (WebCore::PageScriptDebugServer::~PageScriptDebugServer):
        (WebCore::PageScriptDebugServer::addListener):
        (WebCore::PageScriptDebugServer::removeListener):
        (WebCore::PageScriptDebugServer::recompileAllJSFunctions):
        (WebCore::PageScriptDebugServer::getListenersForGlobalObject):
        (WebCore::PageScriptDebugServer::didPause):
        (WebCore::PageScriptDebugServer::didContinue):
        (WebCore::PageScriptDebugServer::didRemoveLastListener):
        (WebCore::PageScriptDebugServer::setJavaScriptPaused):
        * bindings/js/PageScriptDebugServer.h: Added.
        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::ScriptDebugServer):
        (WebCore::ScriptDebugServer::sourceParsed):
        (WebCore::ScriptDebugServer::dispatchFunctionToListeners):
        (WebCore::ScriptDebugServer::createCallFrameAndPauseIfNeeded):
        (WebCore::ScriptDebugServer::updateCallFrameAndPauseIfNeeded):
        (WebCore::ScriptDebugServer::pauseIfNeeded):
        * bindings/js/ScriptDebugServer.h:
        * bindings/js/WorkerScriptDebugServer.cpp: Added.
        (WebCore::WorkerScriptDebugServer::WorkerScriptDebugServer):
        (WebCore::WorkerScriptDebugServer::addListener):
        (WebCore::WorkerScriptDebugServer::removeListener):
        * bindings/js/WorkerScriptDebugServer.h: Added.
        (WebCore::WorkerScriptDebugServer::~WorkerScriptDebugServer):
        (WebCore::WorkerScriptDebugServer::recompileAllJSFunctions):
        (WebCore::WorkerScriptDebugServer::getListenersForGlobalObject):
        (WebCore::WorkerScriptDebugServer::didPause):
        (WebCore::WorkerScriptDebugServer::didContinue):
        * bindings/v8/PageScriptDebugServer.cpp: Added.
        (WebCore::retrieveFrame):
        (WebCore::PageScriptDebugServer::shared):
        (WebCore::PageScriptDebugServer::PageScriptDebugServer):
        (WebCore::PageScriptDebugServer::addListener):
        (WebCore::PageScriptDebugServer::removeListener):
        (WebCore::PageScriptDebugServer::setClientMessageLoop):
        (WebCore::PageScriptDebugServer::getDebugListenerForContext):
        (WebCore::PageScriptDebugServer::runMessageLoopOnPause):
        (WebCore::PageScriptDebugServer::quitMessageLoopOnPause):
        * bindings/v8/PageScriptDebugServer.h: Added.
        (WebCore::PageScriptDebugServer::setEnabled):
        (WebCore::PageScriptDebugServer::ClientMessageLoop::~ClientMessageLoop):
        (WebCore::PageScriptDebugServer::~PageScriptDebugServer):
        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::ScriptDebugServer):
        (WebCore::ScriptDebugServer::setPauseOnNextStatement):
        (WebCore::ScriptDebugServer::breakProgram):
        (WebCore::ScriptDebugServer::continueProgram):
        (WebCore::ScriptDebugServer::stepIntoStatement):
        (WebCore::ScriptDebugServer::stepOverStatement):
        (WebCore::ScriptDebugServer::stepOutOfFunction):
        (WebCore::ScriptDebugServer::editScriptSource):
        (WebCore::toScriptDebugServer):
        (WebCore::ScriptDebugServer::breakProgramCallback):
        (WebCore::ScriptDebugServer::v8DebugEventCallback):
        (WebCore::ScriptDebugServer::handleV8DebugEvent):
        (WebCore::ScriptDebugServer::isPaused):
        * bindings/v8/ScriptDebugServer.h:
        * bindings/v8/WorkerScriptDebugServer.cpp: Added.
        (WebCore::WorkerScriptDebugServer::WorkerScriptDebugServer):
        (WebCore::WorkerScriptDebugServer::addListener):
        (WebCore::WorkerScriptDebugServer::removeListener):
        * bindings/v8/WorkerScriptDebugServer.h: Added.
        (WebCore::WorkerScriptDebugServer::~WorkerScriptDebugServer):
        (WebCore::WorkerScriptDebugServer::getDebugListenerForContext):
        (WebCore::WorkerScriptDebugServer::runMessageLoopOnPause):
        (WebCore::WorkerScriptDebugServer::quitMessageLoopOnPause):
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::V8InjectedScriptHost::currentCallFrameCallback):
        * inspector/InjectedScriptHost.h:
        (WebCore::InjectedScriptHost::init):
        (WebCore::InjectedScriptHost::debuggerAgent):
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::InspectorDebuggerAgent):
        (WebCore::InspectorDebuggerAgent::enable):
        (WebCore::InspectorDebuggerAgent::disable):
        (WebCore::InspectorDebuggerAgent::setBreakpointsActive):
        (WebCore::InspectorDebuggerAgent::removeBreakpoint):
        (WebCore::InspectorDebuggerAgent::continueToLocation):
        (WebCore::InspectorDebuggerAgent::resolveBreakpoint):
        (WebCore::InspectorDebuggerAgent::editScriptSource):
        (WebCore::InspectorDebuggerAgent::schedulePauseOnNextStatement):
        (WebCore::InspectorDebuggerAgent::cancelPauseOnNextStatement):
        (WebCore::InspectorDebuggerAgent::resume):
        (WebCore::InspectorDebuggerAgent::stepOver):
        (WebCore::InspectorDebuggerAgent::stepInto):
        (WebCore::InspectorDebuggerAgent::stepOut):
        (WebCore::InspectorDebuggerAgent::setPauseOnExceptionsState):
        (WebCore::InspectorDebuggerAgent::didPause):
        (WebCore::InspectorDebuggerAgent::breakProgram):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::disable):
        (WebCore::InspectorProfilerAgent::enable):
        (WebCore::InspectorProfilerAgent::startUserInitiatedProfiling):
        * inspector/PageDebuggerAgent.cpp: Added.
        (WebCore::PageDebuggerAgent::create):
        (WebCore::PageDebuggerAgent::PageDebuggerAgent):
        (WebCore::PageDebuggerAgent::~PageDebuggerAgent):
        (WebCore::PageDebuggerAgent::startListeningScriptDebugServer):
        (WebCore::PageDebuggerAgent::stopListeningScriptDebugServer):
        (WebCore::PageDebuggerAgent::scriptDebugServer):
        * inspector/PageDebuggerAgent.h: Added.
        * inspector/WorkerDebuggerAgent.cpp: Added.
        (WebCore::WorkerDebuggerAgent::create):
        (WebCore::WorkerDebuggerAgent::WorkerDebuggerAgent):
        (WebCore::WorkerDebuggerAgent::~WorkerDebuggerAgent):
        (WebCore::WorkerDebuggerAgent::startListeningScriptDebugServer):
        (WebCore::WorkerDebuggerAgent::stopListeningScriptDebugServer):
        (WebCore::WorkerDebuggerAgent::scriptDebugServer):
        * inspector/WorkerDebuggerAgent.h: Added.

2011-03-30  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Ryosuke Niwa.

        Clicking below last line of right-to-left editable text that puts caret in the wrong place
        https://bugs.webkit.org/show_bug.cgi?id=38087

        Moving getLogical[Start/End]BoxWithNode to RootInlineBox and using it in positionForPointWithInlineChildren
        instead of lastLeafChild, which wasn't correct in the RTL case.

        Test: editing/selection/click-below-rtl-text.html

        * editing/visible_units.cpp:
        (WebCore::logicalStartPositionForLine): Moved to RootInlineBox.
        (WebCore::logicalEndPositionForLine): Ditto.
        * editing/visible_units.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::positionForPointWithInlineChildren): Useing getLogicalEndBoxWithNode instead
        of lastLeafChild.
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::getLogicalStartBoxWithNode): Moved and refactored.
        (WebCore::RootInlineBox::getLogicalEndBoxWithNode): Ditto.
        * rendering/RootInlineBox.h:

2011-03-30  Yury Semikhatsky  <yurys@chromium.org>

        Unreviewed. Rollout r82438 and r82436.

        * CMakeLists.txt:
        * GNUmakefile.am:
        * UseJSC.cmake:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::JSInjectedScriptHost::currentCallFrame):
        * bindings/js/PageScriptDebugServer.cpp: Removed.
        * bindings/js/PageScriptDebugServer.h: Removed.
        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::shared):
        (WebCore::ScriptDebugServer::ScriptDebugServer):
        (WebCore::ScriptDebugServer::addListener):
        (WebCore::ScriptDebugServer::removeListener):
        (WebCore::ScriptDebugServer::hasListenersInterestedInPage):
        (WebCore::toPage):
        (WebCore::ScriptDebugServer::sourceParsed):
        (WebCore::ScriptDebugServer::dispatchFunctionToListeners):
        (WebCore::ScriptDebugServer::setJavaScriptPaused):
        (WebCore::ScriptDebugServer::createCallFrameAndPauseIfNeeded):
        (WebCore::ScriptDebugServer::updateCallFrameAndPauseIfNeeded):
        (WebCore::ScriptDebugServer::pauseIfNeeded):
        (WebCore::ScriptDebugServer::recompileAllJSFunctions):
        (WebCore::ScriptDebugServer::didAddListener):
        (WebCore::ScriptDebugServer::didRemoveListener):
        * bindings/js/ScriptDebugServer.h:
        * bindings/js/WorkerScriptDebugServer.cpp: Removed.
        * bindings/js/WorkerScriptDebugServer.h: Removed.
        * bindings/v8/PageScriptDebugServer.cpp: Removed.
        * bindings/v8/PageScriptDebugServer.h: Removed.
        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::retrieveFrame):
        (WebCore::ScriptDebugServer::shared):
        (WebCore::ScriptDebugServer::ScriptDebugServer):
        (WebCore::ScriptDebugServer::addListener):
        (WebCore::ScriptDebugServer::removeListener):
        (WebCore::ScriptDebugServer::setPauseOnNextStatement):
        (WebCore::ScriptDebugServer::breakProgram):
        (WebCore::ScriptDebugServer::continueProgram):
        (WebCore::ScriptDebugServer::stepIntoStatement):
        (WebCore::ScriptDebugServer::stepOverStatement):
        (WebCore::ScriptDebugServer::stepOutOfFunction):
        (WebCore::ScriptDebugServer::editScriptSource):
        (WebCore::ScriptDebugServer::setEnabled):
        (WebCore::ScriptDebugServer::breakProgramCallback):
        (WebCore::ScriptDebugServer::v8DebugEventCallback):
        (WebCore::ScriptDebugServer::handleV8DebugEvent):
        (WebCore::ScriptDebugServer::didResume):
        * bindings/v8/ScriptDebugServer.h:
        (WebCore::ScriptDebugServer::pageCreated):
        (WebCore::ScriptDebugServer::ClientMessageLoop::~ClientMessageLoop):
        (WebCore::ScriptDebugServer::setClientMessageLoop):
        * bindings/v8/WorkerScriptDebugServer.cpp: Removed.
        * bindings/v8/WorkerScriptDebugServer.h: Removed.
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::V8InjectedScriptHost::currentCallFrameCallback):
        * inspector/InjectedScriptHost.h:
        (WebCore::InjectedScriptHost::init):
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::create):
        (WebCore::InspectorDebuggerAgent::InspectorDebuggerAgent):
        (WebCore::InspectorDebuggerAgent::enable):
        (WebCore::InspectorDebuggerAgent::disable):
        (WebCore::InspectorDebuggerAgent::setBreakpointsActive):
        (WebCore::InspectorDebuggerAgent::removeBreakpoint):
        (WebCore::InspectorDebuggerAgent::continueToLocation):
        (WebCore::InspectorDebuggerAgent::resolveBreakpoint):
        (WebCore::InspectorDebuggerAgent::editScriptSource):
        (WebCore::InspectorDebuggerAgent::schedulePauseOnNextStatement):
        (WebCore::InspectorDebuggerAgent::cancelPauseOnNextStatement):
        (WebCore::InspectorDebuggerAgent::resume):
        (WebCore::InspectorDebuggerAgent::stepOver):
        (WebCore::InspectorDebuggerAgent::stepInto):
        (WebCore::InspectorDebuggerAgent::stepOut):
        (WebCore::InspectorDebuggerAgent::setPauseOnExceptionsState):
        (WebCore::InspectorDebuggerAgent::didPause):
        (WebCore::InspectorDebuggerAgent::breakProgram):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::disable):
        (WebCore::InspectorProfilerAgent::enable):
        (WebCore::InspectorProfilerAgent::startUserInitiatedProfiling):
        * inspector/PageDebuggerAgent.cpp: Removed.
        * inspector/PageDebuggerAgent.h: Removed.
        * inspector/WorkerDebuggerAgent.cpp: Removed.
        * inspector/WorkerDebuggerAgent.h: Removed.

2011-03-30  Yury Semikhatsky  <yurys@chromium.org>

        Unreviewed. Fix compilation on Windows and EFL.

        * CMakeLists.txt:
        * bindings/js/JSBindingsAllInOne.cpp:

2011-03-30  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: split debugger agent into Page and Worker-specific ones
        https://bugs.webkit.org/show_bug.cgi?id=57345

        ScriptDebugServer and InspectorDebuggerAgent contain only functionality common
        for Worker and Page debugger. All specifics is moved into Page/WorkerScriptDebugServer
        and Page/WorkerDebuggerAgent.

        * GNUmakefile.am:
        * UseJSC.cmake:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::JSInjectedScriptHost::currentCallFrame):
        * bindings/js/PageScriptDebugServer.cpp: Added.
        (WebCore::toPage):
        (WebCore::PageScriptDebugServer::shared):
        (WebCore::PageScriptDebugServer::PageScriptDebugServer):
        (WebCore::PageScriptDebugServer::~PageScriptDebugServer):
        (WebCore::PageScriptDebugServer::addListener):
        (WebCore::PageScriptDebugServer::removeListener):
        (WebCore::PageScriptDebugServer::recompileAllJSFunctions):
        (WebCore::PageScriptDebugServer::getListenersForGlobalObject):
        (WebCore::PageScriptDebugServer::didPause):
        (WebCore::PageScriptDebugServer::didContinue):
        (WebCore::PageScriptDebugServer::didRemoveLastListener):
        (WebCore::PageScriptDebugServer::setJavaScriptPaused):
        * bindings/js/PageScriptDebugServer.h: Added.
        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::ScriptDebugServer):
        (WebCore::ScriptDebugServer::sourceParsed):
        (WebCore::ScriptDebugServer::dispatchFunctionToListeners):
        (WebCore::ScriptDebugServer::createCallFrameAndPauseIfNeeded):
        (WebCore::ScriptDebugServer::updateCallFrameAndPauseIfNeeded):
        (WebCore::ScriptDebugServer::pauseIfNeeded):
        * bindings/js/ScriptDebugServer.h:
        * bindings/js/WorkerScriptDebugServer.cpp: Added.
        (WebCore::WorkerScriptDebugServer::WorkerScriptDebugServer):
        (WebCore::WorkerScriptDebugServer::addListener):
        (WebCore::WorkerScriptDebugServer::removeListener):
        * bindings/js/WorkerScriptDebugServer.h: Added.
        (WebCore::WorkerScriptDebugServer::~WorkerScriptDebugServer):
        (WebCore::WorkerScriptDebugServer::recompileAllJSFunctions):
        (WebCore::WorkerScriptDebugServer::getListenersForGlobalObject):
        (WebCore::WorkerScriptDebugServer::didPause):
        (WebCore::WorkerScriptDebugServer::didContinue):
        * bindings/v8/PageScriptDebugServer.cpp: Added.
        (WebCore::retrieveFrame):
        (WebCore::PageScriptDebugServer::shared):
        (WebCore::PageScriptDebugServer::PageScriptDebugServer):
        (WebCore::PageScriptDebugServer::addListener):
        (WebCore::PageScriptDebugServer::removeListener):
        (WebCore::PageScriptDebugServer::setClientMessageLoop):
        (WebCore::PageScriptDebugServer::getDebugListenerForContext):
        (WebCore::PageScriptDebugServer::runMessageLoopOnPause):
        (WebCore::PageScriptDebugServer::quitMessageLoopOnPause):
        * bindings/v8/PageScriptDebugServer.h: Added.
        (WebCore::PageScriptDebugServer::setEnabled):
        (WebCore::PageScriptDebugServer::ClientMessageLoop::~ClientMessageLoop):
        (WebCore::PageScriptDebugServer::~PageScriptDebugServer):
        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::ScriptDebugServer):
        (WebCore::ScriptDebugServer::setPauseOnNextStatement):
        (WebCore::ScriptDebugServer::breakProgram):
        (WebCore::ScriptDebugServer::continueProgram):
        (WebCore::ScriptDebugServer::stepIntoStatement):
        (WebCore::ScriptDebugServer::stepOverStatement):
        (WebCore::ScriptDebugServer::stepOutOfFunction):
        (WebCore::ScriptDebugServer::editScriptSource):
        (WebCore::toScriptDebugServer):
        (WebCore::ScriptDebugServer::breakProgramCallback):
        (WebCore::ScriptDebugServer::v8DebugEventCallback):
        (WebCore::ScriptDebugServer::handleV8DebugEvent):
        (WebCore::ScriptDebugServer::isPaused):
        * bindings/v8/ScriptDebugServer.h:
        * bindings/v8/WorkerScriptDebugServer.cpp: Added.
        (WebCore::WorkerScriptDebugServer::WorkerScriptDebugServer):
        (WebCore::WorkerScriptDebugServer::addListener):
        (WebCore::WorkerScriptDebugServer::removeListener):
        * bindings/v8/WorkerScriptDebugServer.h: Added.
        (WebCore::WorkerScriptDebugServer::~WorkerScriptDebugServer):
        (WebCore::WorkerScriptDebugServer::getDebugListenerForContext):
        (WebCore::WorkerScriptDebugServer::runMessageLoopOnPause):
        (WebCore::WorkerScriptDebugServer::quitMessageLoopOnPause):
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::V8InjectedScriptHost::currentCallFrameCallback):
        * inspector/InjectedScriptHost.h:
        (WebCore::InjectedScriptHost::init):
        (WebCore::InjectedScriptHost::debuggerAgent):
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::InspectorDebuggerAgent):
        (WebCore::InspectorDebuggerAgent::enable):
        (WebCore::InspectorDebuggerAgent::disable):
        (WebCore::InspectorDebuggerAgent::setBreakpointsActive):
        (WebCore::InspectorDebuggerAgent::removeBreakpoint):
        (WebCore::InspectorDebuggerAgent::continueToLocation):
        (WebCore::InspectorDebuggerAgent::resolveBreakpoint):
        (WebCore::InspectorDebuggerAgent::editScriptSource):
        (WebCore::InspectorDebuggerAgent::schedulePauseOnNextStatement):
        (WebCore::InspectorDebuggerAgent::cancelPauseOnNextStatement):
        (WebCore::InspectorDebuggerAgent::resume):
        (WebCore::InspectorDebuggerAgent::stepOver):
        (WebCore::InspectorDebuggerAgent::stepInto):
        (WebCore::InspectorDebuggerAgent::stepOut):
        (WebCore::InspectorDebuggerAgent::setPauseOnExceptionsState):
        (WebCore::InspectorDebuggerAgent::didPause):
        (WebCore::InspectorDebuggerAgent::breakProgram):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::disable):
        (WebCore::InspectorProfilerAgent::enable):
        (WebCore::InspectorProfilerAgent::startUserInitiatedProfiling):
        * inspector/PageDebuggerAgent.cpp: Added.
        (WebCore::PageDebuggerAgent::create):
        (WebCore::PageDebuggerAgent::PageDebuggerAgent):
        (WebCore::PageDebuggerAgent::~PageDebuggerAgent):
        (WebCore::PageDebuggerAgent::startListeningScriptDebugServer):
        (WebCore::PageDebuggerAgent::stopListeningScriptDebugServer):
        (WebCore::PageDebuggerAgent::scriptDebugServer):
        * inspector/PageDebuggerAgent.h: Added.
        * inspector/WorkerDebuggerAgent.cpp: Added.
        (WebCore::WorkerDebuggerAgent::create):
        (WebCore::WorkerDebuggerAgent::WorkerDebuggerAgent):
        (WebCore::WorkerDebuggerAgent::~WorkerDebuggerAgent):
        (WebCore::WorkerDebuggerAgent::startListeningScriptDebugServer):
        (WebCore::WorkerDebuggerAgent::stopListeningScriptDebugServer):
        (WebCore::WorkerDebuggerAgent::scriptDebugServer):
        * inspector/WorkerDebuggerAgent.h: Added.

2011-03-30  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Make the getStylesForNode result "styleAttributes" value an array rather than a map
        https://bugs.webkit.org/show_bug.cgi?id=57440

        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::getStylesForNode):
        (WebCore::InspectorCSSAgent::buildArrayForAttributeStyles):
        * inspector/InspectorCSSAgent.h:
        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleModel.prototype.getStylesAsync):

2011-03-30  Evan Martin  <evan@chromium.org>

        Reviewed by Ryosuke Niwa.

        Fix a last-second ASSERT in previous change that was wrong.

        * dom/Document.cpp:
        (WebCore::Document::setTitle):

2011-03-30  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Eric Seidel.

        RTL:  Directionality always reset on hard line break
        https://bugs.webkit.org/show_bug.cgi?id=23124

        No longer clearing all BidiContexts when we hit a hard line break.
        Instead, directionality applied by DOM elements is preserved by
        reconstructing the context stack ignoring those that didn't come
        from the DOM.

        Test: fast/text/international/bidi-br-as-paragraph-separator.html

        * platform/text/BidiContext.cpp:
        (WebCore::BidiContext::createUncached):
        (WebCore::BidiContext::create):
        (WebCore::copyContextAndRebaselineLevel): Helper to make a copy of a context
        and recalculate its bidi level.
        (WebCore::BidiContext::copyStackRemovingUnicodeEmbeddingContexts): Returns the top of
        a BidiContext stack that's equivalent but without contexts from Unicode directional
        characters.
        (WebCore::operator==): Now takes into account embedding source.
        * platform/text/BidiContext.h:
        (WebCore::BidiContext::source): Enum to specify whether an embedded
        bidirectional control came from the DOM/Style or Unicode characters
        (WebCore::BidiContext::BidiContext):
        * platform/text/BidiResolver.h:
        (WebCore::BidiEmbedding::BidiEmbedding): An embedding is now a direction
        and a hint about where it came from so we can differentiate DOM directions
        from unicode direction control characters.
        (WebCore::BidiEmbedding::direction):
        (WebCore::BidiEmbedding::source):
        (WebCore::::embed): Now takes a source as well as a direction.
        (WebCore::::commitExplicitEmbedding):
        (WebCore::::createBidiRunsForLine):
        * rendering/InlineIterator.h:
        (WebCore::bidiNext):
        (WebCore::bidiFirst):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::determineStartPosition):

2011-03-30  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        JavaMethod should not expose JavaString in its API
        https://bugs.webkit.org/show_bug.cgi?id=55765

        - Factors out a JavaMethod interface which does not use JNI types.
          This will allow the Java bridge to be used with objects that
          don't use JNI directly. The existing jobject-backed
          implementation is moved to a new JavaMethodJobject class which
          implements the interface.
        - Use WTF::String in place of JavaString in the API, as JavaString
          exposes JNI types in its interface.
        - Remove the method ID as it uses JNI types.

        No new tests, refactoring only.

        * Android.jscbindings.mk:
        * Android.v8bindings.mk:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * bridge/jni/JavaMethod.h:
        * bridge/jni/JavaMethodJobject.cpp:
        (JavaMethodJobject::JavaMethodJobject):
        (JavaMethodJobject::~JavaMethodJobject):
        (appendClassName):
        (JavaMethodJobject::signature):
        * bridge/jni/JavaMethodJobject.h: Copied from Source/WebCore/bridge/jni/JavaMethod.h.
        (JSC::Bindings::JavaMethodJobject::name):
        (JSC::Bindings::JavaMethodJobject::returnTypeClassName):
        (JSC::Bindings::JavaMethodJobject::parameterAt):
        (JSC::Bindings::JavaMethodJobject::returnType):
        (JSC::Bindings::JavaMethodJobject::isStatic):
        (JSC::Bindings::JavaMethodJobject::numParameters):
        * bridge/jni/jsc/JavaClassJSC.cpp:
        (JavaClass::JavaClass):
        * bridge/jni/jsc/JavaInstanceJSC.cpp:
        (JavaInstance::invokeMethod):
        * bridge/jni/v8/JavaClassV8.cpp:
        (JavaClass::JavaClass):
        * bridge/jni/v8/JavaInstanceV8.cpp:
        (JavaInstance::invokeMethod):

2011-03-30  Evan Martin  <evan@chromium.org>

        Reviewed by Ryosuke Niwa.

        clean up Document's handling of title changes
        https://bugs.webkit.org/show_bug.cgi?id=57433

        Document::setTitle has two entry points:
        1) from DOM bindings, like document.title="foo"
        2) from title tags, like <title>foo</title> in HTML

        Split these two code paths to make the code easier to follow.
        Also, replace the repeated pattern of
            m_rawTitle = "foo"; updateTitle();
        with
            updateTitle("foo");

        * dom/Document.cpp:
        (WebCore::Document::updateTitle):
        (WebCore::Document::setTitle):
        (WebCore::Document::setTitleElement):
        (WebCore::Document::removeTitle):
        * dom/Document.h:
        * html/HTMLTitleElement.cpp:
        (WebCore::HTMLTitleElement::insertedIntoDocument):
        (WebCore::HTMLTitleElement::childrenChanged):
        * svg/SVGTitleElement.cpp:
        (WebCore::SVGTitleElement::insertedIntoDocument):
        (WebCore::SVGTitleElement::childrenChanged):

2011-03-30  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Ryosuke Niwa.

        BreakBlockQuoteCommand assumes all li tags have list item renderers
        https://bugs.webkit.org/show_bug.cgi?id=57253

        Checking that the renderers of li nodes are actually RenderListItems
        before treating them as such.

        Test: editing/execCommand/crash-breaking-blockquote-with-list.html

        * editing/BreakBlockquoteCommand.cpp:
        (WebCore::BreakBlockQuoteCommand::doApply):

2011-03-30  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: fixing typo in the inspector front-end.

        Web Inspector: REGRESSION: Broken live edit errors handling
        https://bugs.webkit.org/show_bug.cgi?id=57436

        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel.prototype._didEditScriptSource):

2011-03-30  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Eric Seidel.

        Left/Right borders/padding/margins are not always added correctly when rendering multiline inline boxes with bidi elements
        https://bugs.webkit.org/show_bug.cgi?id=9272


        Also fixes https://bugs.webkit.org/show_bug.cgi?id=47210 and https://bugs.webkit.org/show_bug.cgi?id=8392.

        Change how we decide if an InlineFlowBox is the last one for its renderer. Use the position of resolver's logicallyLastRun
        to decide if there is more text in the next line.

        Tests: fast/borders/rtl-border-01.html
               fast/borders/rtl-border-02.html
               fast/borders/rtl-border-03.html
               fast/borders/rtl-border-04.html
               fast/borders/rtl-border-05.html

        * rendering/InlineFlowBox.cpp:
        (WebCore::isAnsectorAndWithinBlock):
        (WebCore::InlineFlowBox::determineSpacingForFlowBoxes):
        * rendering/InlineFlowBox.h:
        * rendering/RenderBlock.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::constructLine):
        (WebCore::reachedEndOfTextRenderer):
        (WebCore::RenderBlock::layoutInlineChildren):

2011-03-29  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Eric Seidel.

        REGRESSION (r68976): Incorrect bidi rendering in SVG text
        https://bugs.webkit.org/show_bug.cgi?id=53980

        Deconvolute SVGTextLayoutEngine code, which was confusing due to the simultaneous processing of the rendered text
        in visual and logical order. Added several helper methods to make the code more readable.

        Fix Unicode directional formatting characters support, now works as expected.

        Test: svg/text/bidi-embedded-direction.svg

        * editing/visible_units.cpp: Refactor getLeafBoxesInLogicalOrder(), move to InlineFlowBox.
        (WebCore::getLogicalStartBoxAndNode): Use new collectLeafBoxesInLogicalOrder() method in InlineFlowBox.
        (WebCore::getLogicalEndBoxAndNode): Ditto.
        * rendering/InlineFlowBox.cpp: Add new helper function, that returns a list of all leaf boxes in logical order.
        (WebCore::InlineFlowBox::collectLeafBoxesInLogicalOrder):
        * rendering/InlineFlowBox.h:
        * rendering/svg/RenderSVGText.cpp: Actually trigger reordering the x/y/dx/dy/rotate value lists, if needed.
        (WebCore::RenderSVGText::RenderSVGText):
        (WebCore::RenderSVGText::layout):
        * rendering/svg/RenderSVGText.h: Ditto.
        (WebCore::RenderSVGText::layoutAttributes):
        (WebCore::RenderSVGText::needsReordering):
        * rendering/svg/SVGRootInlineBox.cpp: Use new InlineFlowBox::collectLeafBoxesINLogicalOrder(), with a custom "inline box reverse" implementation,
                                              which not only reverses the order of InlineBoxes, but also the order of the x/y/dx/dy/rotate value lists, if needed.
        (WebCore::SVGRootInlineBox::computePerCharacterLayoutInformation):
        (WebCore::SVGRootInlineBox::layoutCharactersInTextBoxes):
        (WebCore::swapItems):
        (WebCore::reverseInlineBoxRangeAndValueListsIfNeeded):
        (WebCore::SVGRootInlineBox::reorderValueLists):
        * rendering/svg/SVGRootInlineBox.h:
        * rendering/svg/SVGTextLayoutAttributes.cpp: Store RenderSVGInlineText* pointer, where we belong to.
        (WebCore::SVGTextLayoutAttributes::SVGTextLayoutAttributes):
        (WebCore::SVGTextLayoutAttributes::dump):
        * rendering/svg/SVGTextLayoutAttributes.h:
        (WebCore::SVGTextLayoutAttributes::context):
        * rendering/svg/SVGTextLayoutAttributesBuilder.cpp: Pass RenderSVGInlineText* object when creating SVGTextLayoutAttributes.
        (WebCore::SVGTextLayoutAttributesBuilder::buildLayoutAttributesForTextSubtree):
        (WebCore::SVGTextLayoutAttributesBuilder::propagateLayoutAttributes):
        * rendering/svg/SVGTextLayoutAttributesBuilder.h:
        * rendering/svg/SVGTextLayoutEngine.cpp: Rewrite & cleanup the main layout algorithm, to be less confusing.
        (WebCore::SVGTextLayoutEngine::SVGTextLayoutEngine):
        (WebCore::SVGTextLayoutEngine::updateRelativePositionAdjustmentsIfNeeded):
        (WebCore::SVGTextLayoutEngine::recordTextFragment):
        (WebCore::SVGTextLayoutEngine::currentLogicalCharacterAttributes):
        (WebCore::SVGTextLayoutEngine::currentLogicalCharacterMetrics):
        (WebCore::SVGTextLayoutEngine::currentVisualCharacterMetrics):
        (WebCore::SVGTextLayoutEngine::advanceToNextLogicalCharacter):
        (WebCore::SVGTextLayoutEngine::advanceToNextVisualCharacter):
        (WebCore::SVGTextLayoutEngine::layoutTextOnLineOrPath):
        * rendering/svg/SVGTextLayoutEngine.h:

2011-03-30  Ilya Tikhonovsky  <loislo@chromium.org>

        Not reviewed trivial change.

        Web Inspector: Remove unnecessary function arguments after r82281.
        https://bugs.webkit.org/show_bug.cgi?id=57327

        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::didCommitLoad):
        (WebCore::InspectorAgent::domContentLoadedEventFired):
        * inspector/InspectorAgent.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::domContentLoadedEventFiredImpl):
        (WebCore::InspectorInstrumentation::didCommitLoadImpl):

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

        Reviewed by Ojan Vafai.

        H1 element should have different default style if it is in HTML5 sectioning elements.
        https://bugs.webkit.org/show_bug.cgi?id=52693

        Test: fast/css/h1-in-section-elements.html

        * css/html.css: Add font-size and margin declarations to follow HTML5 specification.
        (:-webkit-any(article,aside,nav,section) h1):
        (:-webkit-any(article,aside,nav,section) :-webkit-any(article,aside,nav,section) h1):
        (:-webkit-any(article,aside,nav,section) :-webkit-any(article,aside,nav,section) :-webkit-any(article,aside,nav,section) h1):
        (:-webkit-any(article,aside,nav,section) :-webkit-any(article,aside,nav,section) :-webkit-any(article,aside,nav,section) :-webkit-any(article,aside,nav,section) h1):
        (:-webkit-any(article,aside,nav,section) :-webkit-any(article,aside,nav,section) :-webkit-any(article,aside,nav,section) :-webkit-any(article,aside,nav,section) :-webkit-any(article,aside,nav,section) h1):

2011-03-29  Beth Dakin  <bdakin@apple.com>

        Reviewed by Maciej Stachowiak.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=57408
        webkit-min-device-pixel-ratio media query doesn't work post-SnowLeopard 
        -and corresponding-
        <rdar://problem/8665411>

        * platform/mac/PlatformScreenMac.mm:
        (WebCore::windowScaleFactor):
        (WebCore::toUserSpace):
        (WebCore::toDeviceSpace):

2011-03-29  Eric Seidel  <eric@webkit.org>

        Reviewed by Dimitri Glazkov.

        Rename BidiResolver::eor and sor to m_eor and m_sor to match modern style
        https://bugs.webkit.org/show_bug.cgi?id=57369

        I considered renaming these to m_endOfRun and m_startOfRun but decided
        that was too verbose for now (given how often they're used).  I suspect
        with a bit more refactoring we'll find they're not used very often and can be renamed
        if so desired.

        * platform/text/BidiResolver.h:
        (WebCore::::appendRun):
        (WebCore::::checkDirectionInLowerRaiseEmbeddingLevel):
        (WebCore::::lowerExplicitEmbeddingLevel):
        (WebCore::::raiseExplicitEmbeddingLevel):
        (WebCore::::createBidiRunsForLine):
        * rendering/InlineIterator.h:
        (WebCore::InlineBidiResolver::appendRun):

2011-03-29  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [Chromium] Remove exact retained size request in detailed heap snapshots.
        https://bugs.webkit.org/show_bug.cgi?id=57351

        * bindings/js/ScriptHeapSnapshot.h:
        * bindings/v8/ScriptHeapSnapshot.cpp:
        * bindings/v8/ScriptHeapSnapshot.h:
        * inspector/Inspector.json:
        * inspector/InspectorProfilerAgent.cpp:
        * inspector/InspectorProfilerAgent.h:
        * inspector/front-end/DetailedHeapshotGridNodes.js:
        (WebInspector.HeapSnapshotGenericObjectNode):
        (WebInspector.HeapSnapshotGenericObjectNode.prototype.get data):
        * inspector/front-end/DetailedHeapshotView.js:
        (WebInspector.DetailedHeapshotView.prototype._mouseClickInContainmentGrid):

2011-03-29  Eric Seidel  <eric@webkit.org>

        Reviewed by Ryosuke Niwa.

        Split more logic out from createBidiRunsForLine for readability
        https://bugs.webkit.org/show_bug.cgi?id=57341

        I marked reorderRunsFromLevels inline, but it probably doesn't actually need to (or want to) be.
        This lops another large hunk off of reorderRunsFromLevels further reducing the size and complexity.

        * platform/text/BidiResolver.h:
        (WebCore::::reorderRunsFromLevels):
        (WebCore::::createBidiRunsForLine):

2011-03-29  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        Make validation message bubble testable
        https://bugs.webkit.org/show_bug.cgi?id=57290

        Introduce a setting for validation message timer so that we can configure
        how long we show a validation message bubble.

        Test: fast/forms/validation-message-appearance.html

        * html/ValidationMessage.cpp:
        (WebCore::ValidationMessage::setMessageDOMAndStartTimer):
          Don't set a timer if the timer magnification value is 0 or negative.
          Otherwise, hides the bubble length * magnification / 1000 seconds.
        * page/Settings.cpp:
        (WebCore::Settings::Settings): Initialize the timer magnification value.
        * page/Settings.h:
        (WebCore::Settings::setValidationMessageTimerMagnification): Added.
        (WebCore::Settings::validationMessageTimerMaginification): Added.

2011-03-29  Dimitri Glazkov  <dglazkov@chromium.org>

        Remove the extraneous declaration I accidentally added in r82376.

        * dom/MouseEvent.h: Removed createSimulated decl.

2011-03-29  James Robinson  <jamesr@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] Compositor crash with show-layer-borders flag
        https://bugs.webkit.org/show_bug.cgi?id=57292

        Synchronize the debug border color/width with other properties to ensure the appropriate
        CCLayerImpl exists.  Code is only exercised with a debugging command line flag so no layout
        test.

        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::pushPropertiesTo):
        (WebCore::LayerChromium::setBorderColor):
        (WebCore::LayerChromium::setBorderWidth):
        * platform/graphics/chromium/LayerChromium.h:

2011-03-29  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Adam Barth.

        Teach the preload scanner about &lt;input type=image&gt;
        https://bugs.webkit.org/show_bug.cgi?id=57404

        I did a very rough sample of the top 50 web pages to see how many of each
        HTML resource type they include:
        img src: 1,359
        script src: 276
        link href: 256
        iframe src: 104
        input src: 50
        embed src: 37
        @import: 13
        object data: 11

        Based on this, it seems worthwhile to preload inputs and iframes (possibly embed).
        This patch only does inputs.

        Test: fast/preloader/input.html

        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::HTMLNames::PreloadTask::PreloadTask):
        (WebCore::HTMLNames::PreloadTask::processAttributes):
        (WebCore::HTMLNames::PreloadTask::inputTypeAttributeIsImage):
        (WebCore::HTMLNames::PreloadTask::preload):

2011-03-29  Luke Macpherson   <macpherson@chromium.org>

        Reviewed by David Levin.

        Improve the massive switch statement in CSSStyleSelector::applyProperty.
        https://bugs.webkit.org/show_bug.cgi?id=56288

        No new tests are needed because no new functionality exposed.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        Asserted that cases implemented in the CSSStyleApplyProperty lookup table are unreachable.
        Updated comment.

2011-03-29  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        Introduce SimulatedMouseEvent and teach EventDispatcher how to use it.
        https://bugs.webkit.org/show_bug.cgi?id=57402

        No functional changes, covered by existing tests.

        * dom/EventDispatcher.cpp:
        (WebCore::EventDispatcher::dispatchSimulatedClick): Changed to use SimulatedMouseEvent.
        (WebCore::EventDispatcher::dispatchMouseEvent): Combined two dispatchMouseEvent methods
            into one, now that simulated-click events don't need one.
        * dom/EventDispatcher.h: Updated decls.
        * dom/MouseEvent.cpp:
        (WebCore::SimulatedMouseEvent::create): Added.
        (WebCore::SimulatedMouseEvent::~SimulatedMouseEvent): Added.
        (WebCore::SimulatedMouseEvent::SimulatedMouseEvent): Added.
        * dom/MouseEvent.h: Made constructor protected.

2011-03-29  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * WebCore.exp.in:

2011-03-29  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        JavaInstance should not use jvalue in its API
        https://bugs.webkit.org/show_bug.cgi?id=57019

        This change updates JavaInstance for V8 to use JavaValue, rather than
        jvalue, in its API. This will allow us to create an API for
        JavaInstance that is independent of JNI, to allow it to be
        implemented on platforms that do not use JNI directly.

        Refactoring only, no new tests.

        * bridge/jni/v8/JavaInstanceV8.cpp:
        (JavaInstance::invokeMethod):
        (JavaInstance::getField):
        * bridge/jni/v8/JavaInstanceV8.h:
        * bridge/jni/v8/JavaNPObjectV8.cpp:
        (JSC::Bindings::JavaNPObjectInvoke):
        (JSC::Bindings::JavaNPObjectGetProperty):
        * bridge/jni/v8/JavaValueV8.h:

2011-03-29  Eric Seidel  <eric@webkit.org>

        Reviewed by Dimitri Glazkov.

        Rename BidiResolver::last to m_last to match modern style
        https://bugs.webkit.org/show_bug.cgi?id=57367

        * platform/text/BidiResolver.h:
        (WebCore::::lowerExplicitEmbeddingLevel):
        (WebCore::::raiseExplicitEmbeddingLevel):
        (WebCore::::createBidiRunsForLine):

2011-03-29  Justin Schuh  <jschuh@chromium.org>

        Reviewed by Maciej Stachowiak.

        SVGComponentTransferFunctionElement should validate type
        https://bugs.webkit.org/show_bug.cgi?id=56960

        Test: svg/filters/feComponentTransfer-style-crash.xhtml

        * svg/SVGComponentTransferFunctionElement.cpp:
        (WebCore::SVGComponentTransferFunctionElement::svgAttributeChanged):
        * svg/SVGComponentTransferFunctionElement.h:

2011-03-29  Thomas Klausner  <tk@giga.or.at>

        Reviewed by David Levin.

        png-1.5 fixes
        https://bugs.webkit.org/show_bug.cgi?id=54406

        Fix compilation with png-1.5: struct members were hidden, and
        a new API to terminate data processing was added (especially for
        WebKit).

        Compilation fixes, so no new tests.

        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageDecoder::headerAvailable):
        (WebCore::PNGImageDecoder::rowAvailable):

2011-03-29  Gavin Peters  <gavinp@chromium.org>

        Reviewed by Tony Gentilcore.

        Add beforeload to icon and prefetch link rel types
        https://bugs.webkit.org/show_bug.cgi?id=56424

        Over in https://lists.webkit.org/pipermail/webkit-dev/2011-February/016034.html , a webkit-dev
        thread, I've discussed my hopes for the link element, and adding the link header.  This
        change helps improve the link header by making it participate in the beforeload event in
        two more important cases.

        Tests: fast/dom/HTMLLinkElement/prefetch-beforeload.html
               http/tests/misc/link-rel-icon-beforeload.html
               webarchive/test-link-rel-icon-beforeload.html

        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::checkBeforeLoadEvent):
        (WebCore::HTMLLinkElement::process):
        * html/HTMLLinkElement.h:

2011-03-29  Eric Seidel  <eric@webkit.org>

        Reviewed by Dimitri Glazkov.

        Rename BidiResolver::current to BidiResolver::m_current to match modern style
        https://bugs.webkit.org/show_bug.cgi?id=57363

        I was very confused by current until I realized it was a member variable.
        I also did m_reachedEndOfLine since that was small.

        * platform/text/BidiResolver.h:
        (WebCore::BidiResolver::position):
        (WebCore::BidiResolver::setPosition):
        (WebCore::BidiResolver::increment):
        (WebCore::::createBidiRunsForLine):

2011-03-29  Geoff Pike  <gpike@chromium.org>

        Reviewed by Dimitri Glazkov.

        In HitTestResult objects, initialize the ListHashSet<RefPtr<Node> >
        lazily.  In my informal testing it seems to be used hardly at all, so
        it's wasteful to create it eagerly.  Initializing a ListHashSet
        is expensive because a ListHashSet initially has space for 256
        elements, and that space is memset to 0.

        This change should improve performance but have no impact on
        correctness.  On x86-64, for example, the change cuts the
        cost of HitTestResult(IntPoint()) in EventHandler::mouseMoved()
        from ~1700 cycles to ~300 cycles.

        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::HitTestResult): copy *m_rectBasedTestResult if m_rectBasedTestResult isn't 0
        (WebCore::HitTestResult::operator=): copy *m_rectBasedTestResult if m_rectBasedTestResult isn't 0
        (WebCore::HitTestResult::addNodeToRectBasedTestResult): use mutableRectBasedTestResult() rather than m_rectBasedTestResult
        (WebCore::HitTestResult::append): append *(other.m_rectBasedTestResult) if other.m_rectBasedTestResult isn't 0
        * rendering/HitTestResult.h:
        (WebCore::HitTestResult::rectBasedTestResult): Add a typedef for ListHashSet<RefPtr<Node> > to ease readability.  Change m_rectBasedTestResult from ListHashSet<RefPtr<Node> > to an OwnPtr of same.  Modify rectBasedTestResult() and add mutableRectBasedTestResult().

2011-03-29  Timothy Hatcher  <timothy@apple.com>

        Update the order of the context menu to better match AppKit on Mac.

        <rdar://problem/9054893>

        Reviewed by John Sullivan.

        * English.lproj/Localizable.strings: Updated.
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::populate): Update the order of items on Mac.
        * platform/LocalizationStrategy.h:
        * platform/LocalizedStrings.cpp:
        (WebCore::contextMenuItemTagLookUpInDictionary): Added argument for selected string.
        * platform/LocalizedStrings.h:
        * platform/android/LocalizedStringsAndroid.cpp:
        (WebCore::contextMenuItemTagLookUpInDictionary): Ditto.
        * platform/brew/LocalizedStringsBrew.cpp:
        (WebCore::contextMenuItemTagLookUpInDictionary): Ditto.
        * platform/efl/LocalizedStringsEfl.cpp:
        (WebCore::contextMenuItemTagLookUpInDictionary): Ditto.
        * platform/gtk/LocalizedStringsGtk.cpp:
        (WebCore::contextMenuItemTagLookUpInDictionary): Ditto.
        * platform/haiku/LocalizedStringsHaiku.cpp:
        (WebCore::contextMenuItemTagLookUpInDictionary): Ditto.
        * platform/wx/LocalizedStringsWx.cpp:
        (WebCore::contextMenuItemTagLookUpInDictionary): Ditto.

2011-03-29  Dean Jackson  <dino@apple.com>

        Reviewed by Chris Marrin and Ken Russell.

        https://bugs.webkit.org/show_bug.cgi?id=57248
        Occlusion issues with WebGL in Safari

        The depth buffer on Safari ports was being set up with a
        maximum of 16 bits. Now we use a combined 24/8 depth/stencil
        buffer on Mac ports.

        No new tests as this is the setting for a particular port. Other
        ports may use different defaults.

        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::GraphicsContext3D::validateAttributes):
        - use Extensions3D to test for depth and multisample extensions
          rather than querying OpenGL directly.
        (WebCore::GraphicsContext3D::reshape):
        - use a 24bit depth buffer when the extension is enabled.

2011-03-29  Dimitri Glazkov  <dglazkov@chromium.org>

        Sorted XCode project. It's gotten quite out of sorts.

        * WebCore.xcodeproj/project.pbxproj: Ran sort-XCode-project-file.

2011-03-29  Emil A Eklund  <eae@chromium.org>

        Reviewed by Dimitri Glazkov.

        DatasetDOMStringMap::item and ::contains copies attribute name string
        https://bugs.webkit.org/show_bug.cgi?id=55645

        Change propertyNameMatchesAttributeName to match without creating a copy
        of the string.

        * dom/DatasetDOMStringMap.cpp:
        (WebCore::propertyNameMatchesAttributeName):

2011-03-29  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed rollout r82282, part of r82288, r82298.

        * css/CSSParser.cpp:
        (WebCore::parseColorInt):
        (WebCore::isValidDouble):
        (WebCore::parseAlphaValue):
        (WebCore::CSSParser::parseColor):

2011-03-25  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Dave Hyatt.

        https://bugs.webkit.org/show_bug.cgi?id=55981
        Second round of clean-ups, aimed at supporting GTK with the
        same unified FontPlatformData header.  This version removes
        some unneeded WinCairo code, and aligns the WinCairo and
        GTK ports to reduce code duplication.

        * WebCore.vcproj/WebCore.vcproj: Get rid of a dangling reference
          to an old WinCairo file.
        * platform/graphics/FontPlatformData.h: Remove unneeded member
          for m_fontFace, which is a member of m_scaledFont.  Switch to
          standard Cairo hashing.
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::font):
        (WebCore::FontPlatformData::scaledFont):
        (WebCore::FontPlatformData::hash):
        (WebCore::FontPlatformData::isHashTableDeletedValue):
        (WebCore::FontPlatformData::hashTableDeletedFontValue):
        * platform/graphics/win/FontCacheWin.cpp: Update to no longer use
          the unnecessary fontFace() accessor.
        (WebCore::FontCache::createFontPlatformData):
        * platform/graphics/win/FontCustomPlatformDataCairo.cpp:
        * platform/graphics/win/FontPlatformDataCairoWin.cpp:
        (WebCore::FontPlatformData::platformDataInit):
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::~FontPlatformData):
        (WebCore::FontPlatformData::platformDataAssign):
        (WebCore::FontPlatformData::platformIsEqual):
        * platform/graphics/win/FontPlatformDataWin.cpp:
        (WebCore::FontPlatformData::FontPlatformData):

2011-03-29  Jian Li  <jianli@chromium.org>

        Reviewed by Adam Barth.

        Inline worker powered by blob URL does not work with files URL even if
        allowFileAccessFromFileURLs is enabled
        https://bugs.webkit.org/show_bug.cgi?id=56063

        Test: fast/files/workers/inline-worker-via-blob-url.html

        * fileapi/BlobURL.cpp: Removed unneeded getOrigin() method.
        * fileapi/BlobURL.h: Removed unneeded getOrigin() method.
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::SecurityOrigin): Extended the logic to handle
        filesystem URL also to blob URL. Also fixed the problem that m_isUnique
        is incorrectly set for blob and filesystem URLs.
        (WebCore::SecurityOrigin::create): Removed the special logic for blob URL
        since we use the same logic in SecurityOrigin constructor as filesystem
        URL.
        (WebCore::SecurityOrigin::canRequest): Removed the special logic for blob
        URL since it is not needed with the fix in SecurityOrigin constructor.

2011-03-29  Timothy Hatcher  <timothy@apple.com>

        Update WebCore Localizable.strings to contain WebCore, WebKit/mac and WebKit2 strings.

        https://webkit.org/b/57354

        Reviewed by Sam Weinig.

        * English.lproj/Localizable.strings: Updated.
        * StringsNotToBeLocalized.txt: Removed. To hard to maintain in WebCore.
        * platform/network/cf/LoaderRunLoopCF.h: Remove a single quote in an #error so
        extract-localizable-strings does not complain about unbalanced single quotes.

2011-03-29  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r82295 and r82300.
        http://trac.webkit.org/changeset/82295
        http://trac.webkit.org/changeset/82300
        https://bugs.webkit.org/show_bug.cgi?id=57380

        This patch breaks compile on Chromium (Requested by
        abarth|gardener on #webkit).

        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):
        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (atkRole):
        (webkit_accessible_get_role):
        * accessibility/mac/AccessibilityObjectWrapper.mm:

2011-03-29  Anders Carlsson  <andersca@apple.com>

        Fix clang build.

        * platform/text/BidiResolver.h:
        (WebCore::::createBidiRunsForLine):

2011-03-29  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Use per-configuration vsprops in WebCore to avoid WebKitVSPropsRedirectionDir removal by MSVC IDE
        https://bugs.webkit.org/show_bug.cgi?id=57378

        Visual Studio's IDE was removing instances of $(WebKitVSPropsRedirectionDir) from
        InheritedPropertySheet rules in our vcproj files when the vcproj was edited from within
        the IDE. To avoid this, add a separate vsprops file for each project configuration that
        contains the required inherited property sheets.

        * WebCore.vcproj/QTMovieWin.vcproj:
        * WebCore.vcproj/QTMovieWinDebug.vsprops: Added.
        * WebCore.vcproj/QTMovieWinDebugAll.vsprops: Added.
        * WebCore.vcproj/QTMovieWinDebugCairoCFLite.vsprops: Added.
        * WebCore.vcproj/QTMovieWinRelease.vsprops: Added.
        * WebCore.vcproj/QTMovieWinReleaseCairoCFLite.vsprops: Added.
        * WebCore.vcproj/QTMovieWinReleaseLTCG.vsprops: Added.
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcproj/WebCoreDebug.vsprops: Added.
        * WebCore.vcproj/WebCoreDebugAll.vsprops: Added.
        * WebCore.vcproj/WebCoreDebugCairoCFLite.vsprops: Added.
        * WebCore.vcproj/WebCoreRelease.vsprops: Added.
        * WebCore.vcproj/WebCoreReleaseCairoCFLite.vsprops: Added.
        * WebCore.vcproj/WebCoreReleaseLTCG.vsprops: Added.

2011-03-29  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/9194927> REGRESSION (r81691): Page at www.mondaynote.com lays out incorrectly
        
        Back out the optimization that stopped when it hit the first float. This was an incorrect optimization
        and can't be done without more work.

        Added fast/block/float/float-forced-below-other-floats.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::logicalLeftOffsetForLine):
        (WebCore::RenderBlock::logicalRightOffsetForLine):

2011-03-29  Eric Seidel  <eric@webkit.org>

        Reviewed by Ryosuke Niwa.

        Start to clean up BidiResolver::createBidiRunsForLine so that mere mortals can understand it
        https://bugs.webkit.org/show_bug.cgi?id=57338

        I'm attempting to break createBidiRunsForLine into understandable pieces
        so that we can tell what it's actually doing.  Our implementation of the
        unicode bidi algorithm is slightly different from the spec in that we
        run it per-line (instead of over the entire paragraph at once).  This is
        great for performance (our implementation is resumable), but it makes
        things a bit tricky to understand.  Splitting createBidiRunsForLine into
        pieces should help make our UBA implementation more readable.

        * platform/text/BidiResolver.h:
        (WebCore::::updateStatusLastFromCurrentDirection):
        (WebCore::::createBidiRunsForLine):

2011-03-29  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Martin Robinson.

        [Gtk] Consistent crash from Google/ARIA combobox click
        https://bugs.webkit.org/show_bug.cgi?id=55883

        Do not call to firstChild() to avoid entering into infinite loops.

        This would happen when current item is a WebCore Group and some of
        its children have either role 'option' or 'menuitem'. Other than
        that the logic behind that call to firstChild() seems to be no
        longer needed so it's safe to remove it.

        Test: platform/gtk/accessibility/aria-options-and-menuitems-crash.html

        * accessibility/gtk/AccessibilityObjectAtk.cpp:
        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject):
        Remove call to firsChild, which was leading to crashes sometimes.

2011-03-29  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Chris Fleizach.

        AX: GTK: ARIA role is not respected on <p> <label> <div> and <form>
        https://bugs.webkit.org/show_bug.cgi?id=47636

        Define new roles in WebCore and map them to ATK accordingly.

        Test: platform/gtk/accessibility/aria-roles-unignored.html

        * accessibility/AccessibilityObject.h: Added new roles to
        represent paragraphs, labels, forms and div sections.
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):
        Return ParagraphRole, LabelRole, FormRole and DivRole when needed.
        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (atkRole): Map new WebCore roles to ATK Roles.
        (webkit_accessible_get_role): Remove code to define roles for
        paragraphs, labels, forms and divs based on node's tag name.

        Update mappings for the Mac platform.

        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (createAccessibilityRoleMap): Add explicit mappings from the new
        roles introduced to NSAccessibilityGroupRole.

2011-03-29  Philippe Normand  <pnormand@igalia.com>

        Unreviewed build fix. Remove ASSERT hitting consitently on GTK.

        * rendering/InlineIterator.h:
        (WebCore::InlineIterator::moveToStartOf):

2011-03-29  Darin Adler  <darin@apple.com>

        Fix some just-introduced build failures.

        * WebCore.pro: Correct spelling of filename.

        * css/CSSParser.cpp:
        (WebCore::parseColorIntOrPercentage): Fix double/int conversion that fails to compile
        on Leopard. Also renamed one local variabel.

        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::didCommitLoad): Removed unused argument names to avoid warning.
        (WebCore::InspectorAgent::domContentLoadedEventFired): Ditto.

2011-03-29  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Darin Adler.

        CSS: Slow parsing of rgb() with percent values
        https://bugs.webkit.org/show_bug.cgi?id=16708

        Implement fast-path parsing for percentage color values.

        Gain ~30% speedup on http://canvex.lazyilluminati.com/misc/3d.html.

        * css/CSSParser.cpp:
        (WebCore::checkForValidDouble): Extend to return the number of characters forming a valid double.
        (WebCore::parseDouble): Function for parsing double values if they are valid.
        (WebCore::parseColorIntOrPercentage): Extend parseColorInt to deal with percentage values.
        (WebCore::parseAlphaValue): Use the new functions.
        (WebCore::CSSParser::parseColor): Ditto.

2011-03-29  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: extract InspectorPageAgent from InspectorAgent.
        https://bugs.webkit.org/show_bug.cgi?id=57327

        There are page related methods and inspector related methods in InspectorAgent.
        It would be nice to extract page specific methods for future usage the rest of methods in workers debugger.

        * GNUmakefile.am:
        * WebCore.gypi:
        * inspector/CodeGeneratorInspector.pm:
        * inspector/Inspector.json:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        (WebCore::InspectorAgent::restoreInspectorStateFromCookie):
        (WebCore::InspectorAgent::didClearWindowObjectInWorld):
        (WebCore::InspectorAgent::setFrontend):
        (WebCore::InspectorAgent::disconnectFrontend):
        (WebCore::InspectorAgent::didCommitLoad):
        (WebCore::InspectorAgent::domContentLoadedEventFired):
        * inspector/InspectorAgent.h:
        (WebCore::InspectorAgent::pageAgent):
        * inspector/InspectorPageAgent.cpp: Added.
        (WebCore::InspectorPageAgent::create):
        (WebCore::InspectorPageAgent::InspectorPageAgent):
        (WebCore::InspectorPageAgent::setFrontend):
        (WebCore::InspectorPageAgent::clearFrontend):
        (WebCore::InspectorPageAgent::addScriptToEvaluateOnLoad):
        (WebCore::InspectorPageAgent::removeAllScriptsToEvaluateOnLoad):
        (WebCore::InspectorPageAgent::reloadPage):
        (WebCore::InspectorPageAgent::openInInspectedWindow):
        (WebCore::InspectorPageAgent::setUserAgentOverride):
        (WebCore::buildObjectForCookie):
        (WebCore::buildArrayForCookies):
        (WebCore::InspectorPageAgent::getCookies):
        (WebCore::InspectorPageAgent::deleteCookie):
        (WebCore::InspectorPageAgent::inspectedURLChanged):
        (WebCore::InspectorPageAgent::restore):
        (WebCore::InspectorPageAgent::didCommitLoad):
        (WebCore::InspectorPageAgent::domContentEventFired):
        (WebCore::InspectorPageAgent::loadEventFired):
        (WebCore::InspectorPageAgent::didClearWindowObjectInWorld):
        (WebCore::InspectorPageAgent::applyUserAgentOverride):
        * inspector/InspectorPageAgent.h: Added.
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::connectFrontend):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didClearWindowObjectInWorldImpl):
        (WebCore::InspectorInstrumentation::applyUserAgentOverrideImpl):
        (WebCore::InspectorInstrumentation::domContentLoadedEventFiredImpl):
        (WebCore::InspectorInstrumentation::loadEventFiredImpl):
        (WebCore::InspectorInstrumentation::didCommitLoadImpl):
        (WebCore::InspectorInstrumentation::retrievePageAgent):
        * inspector/InspectorInstrumentation.h:
        * inspector/InstrumentingAgents.h:
        (WebCore::InstrumentingAgents::InstrumentingAgents):
        (WebCore::InstrumentingAgents::inspectorPageAgent):
        (WebCore::InstrumentingAgents::setInspectorPageAgent):
        * inspector/front-end/AuditsPanel.js:
        (WebInspector.AuditsPanel.prototype._reloadResources):
        * inspector/front-end/CookieItemsView.js:
        (WebInspector.CookieItemsView.prototype._deleteCookie):
        (WebInspector.Cookies.getCookiesAsync):
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype._onReload):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkDataGridNode.prototype._openInNewTab):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.FrameResourceTreeElement.prototype.ondblclick):
        * inspector/front-end/WorkersSidebarPane.js:
        (WebInspector.WorkersSidebarPane.prototype.setInstrumentation):
        * inspector/front-end/inspector.js:
        (WebInspector.openResource):
        (WebInspector.documentKeyDown):

2011-03-29  David Hyatt  <hyatt@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=57276
        
        Add optimizations to make the vertical placement of boxes much faster. Whenever a box is added
        to a line, compare it with the parent box. If we can determine that the child box has the exact
        same height and baseline position as the parent box, then we keep a boolean flag set called
        descendantsHaveSameLineHeightAndBaseline(). If the box is different for any reason then we clear the
        flag up the line box parent chain.

        When it comes time to do computeLogicalboxHeights, we can avoid recurring into the children of
        a box whose descendants all have the same position. When we do placeBoxesInBlockDirection, we
        can do a simplified recursion that just calls adjustBlockDirectionPosition to offset the boxes
        without doing anything else.
        
        Because of the quirks mode rule of only shrinking boxes with no immediate text children, we need
        to track whether a box has text descendants now as well.  When we avoid doing the recursion
        this flag tells us whether the collection of boxes should have an effect on the ascent and descent
        of the line in quirks mode.
 
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::addToLine):
        (WebCore::InlineFlowBox::computeLogicalBoxHeights):
        (WebCore::InlineFlowBox::placeBoxesInBlockDirection):
        (WebCore::InlineFlowBox::nodeAtPoint):
        (WebCore::InlineFlowBox::paintBoxDecorations):
        (WebCore::InlineFlowBox::paintMask):
        * rendering/InlineFlowBox.h:
        (WebCore::InlineFlowBox::InlineFlowBox):
        (WebCore::InlineFlowBox::hasTextDescendants):
        (WebCore::InlineFlowBox::descendantsHaveSameLineHeightAndBaseline):
        (WebCore::InlineFlowBox::clearDescendantsHaveSameLineHeightAndBaseline):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::createLineBoxes):
        (WebCore::RenderBlock::constructLine):
        (WebCore::RenderBlock::computeInlineDirectionPositionsForLine):

2011-03-29  Eric Seidel  <eric@webkit.org>

        Reviewed by Ryosuke Niwa.

        Remove a bunch of duplicate code by adding some InlineIterator helper methods
        https://bugs.webkit.org/show_bug.cgi?id=57326

        Once I started adding these it became clear how much crazy duplicated code
        we had due to treating InlineIterator as a struct and accessing its
        members directly.  We can't quite make the members private yet since
        findNextLineBreak still splits out the members.  But this change
        makes the code much cleaner.

        * rendering/InlineIterator.h:
        (WebCore::InlineIterator::clear):
        (WebCore::InlineIterator::moveToStartOf):i
        (WebCore::InlineIterator::moveTo):
        (WebCore::InlineIterator::increment):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::tryHyphenating):
        (WebCore::RenderBlock::findNextLineBreak):

2011-03-29  Eric Seidel  <eric@webkit.org>

        Reviewed by Ryosuke Niwa.

        Clean up bidiNext by abstracting repeated code
        https://bugs.webkit.org/show_bug.cgi?id=57335

        I also added a comment to explain what bidiNext is actually doing.
        This whole area of code is confusing but need not be.

        * rendering/InlineIterator.h:
        (WebCore::embedCharFromDirection):
        (WebCore::notifyResolverEnteredObject):
        (WebCore::notifyResolverWillExitObject):
        (WebCore::bidiNext):
        (WebCore::bidiFirst):

2011-03-29  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Support external CSS stylesheet freeflow text editing
        https://bugs.webkit.org/show_bug.cgi?id=54397

        In this implementation, Ctrl/Cmd-S commits the current changes into the model.

        * inspector/front-end/ResourceView.js:
        (WebInspector.ResourceView.createResourceView):
        (WebInspector.CSSSourceFrameDelegateForResourcesPanel):
        (WebInspector.CSSSourceFrameDelegateForResourcesPanel.prototype.canEditScriptSource):
        (WebInspector.CSSSourceFrameDelegateForResourcesPanel.prototype.editScriptSource):
        (WebInspector.CSSSourceFrameDelegateForResourcesPanel.prototype.editScriptSource.handleInfos):
        (WebInspector.CSSSourceFrameDelegateForResourcesPanel.prototype._saveStyleSheet):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype._applyDiffMarkup):
        (WebInspector.FrameResourceTreeElement.prototype._contentChanged):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._createTextViewer):

2011-03-29  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Dan Bernstein.

        playbackRate should not be set to defaultPlaybackRate in play()
        https://bugs.webkit.org/show_bug.cgi?id=55943

        Test: media/video-playbackrate.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::playbackRate): No need to ask the media engine for the current
            rate, we already have the current value cached.
        (WebCore::HTMLMediaElement::playInternal): Don't reset the engine's playback rate to 
            the default rate.
        (WebCore::HTMLMediaElement::togglePlayState): Do reset the engine's playback rate to 
            the default rate before triggering playback.
        * manual-tests/media-default-playback-rate.html: Added.

2011-03-28  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Seidel.

        Remove specialization of EventDispatcher with inversion of control.
        https://bugs.webkit.org/show_bug.cgi?id=57285

        Since some events have extra logic around their dispatch, allow them
        to dispatch themselves and specialize the logic. This change only
        converts KeyboardEvent to this model.

        No functional change, covered by existing tests.

        * dom/Event.cpp:
        (WebCore::Event::dispatch): Added.
        * dom/Event.h: Updated decls.
        * dom/EventDispatcher.cpp:
        (WebCore::EventDispatcher::dispatchEvent): Changed to ask event to dispatch
            itself.
        * dom/EventDispatcher.h: Updated decls.
        * dom/KeyboardEvent.cpp:
        (WebCore::KeyboardEvent::dispatch): Added, moving code from EventDispatcher.
        * dom/KeyboardEvent.h: Updated decls.
        * dom/Node.cpp:
        (WebCore::Node::dispatchKeyEvent): Changed to use the new ways.

2011-03-29  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: InspectorDOMAgent has unnecessary dependency from InspectorAgent.
        https://bugs.webkit.org/show_bug.cgi?id=57329

        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        (WebCore::InspectorAgent::setFrontend):
        * inspector/InspectorAgent.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::inspect):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::InspectorDOMAgent):
        (WebCore::InspectorDOMAgent::setFrontend):
        (WebCore::InspectorDOMAgent::handleMousePress):
        (WebCore::InspectorDOMAgent::inspect):
        (WebCore::InspectorDOMAgent::focusNode):
        (WebCore::InspectorDOMAgent::highlight):
        (WebCore::InspectorDOMAgent::hideHighlight):
        * inspector/InspectorDOMAgent.h:
        (WebCore::InspectorDOMAgent::create):

2011-03-29  Eric Seidel  <eric@webkit.org>

        Reviewed by Nikolas Zimmermann.

        Rename InlineIterator::pos to m_pos to match modern style
        https://bugs.webkit.org/show_bug.cgi?id=57342

        Somehow I failed to upload this one earlier, no wonder later patches didn't apply.

        * rendering/InlineIterator.h:
        (WebCore::InlineIterator::InlineIterator):
        (WebCore::operator==):
        (WebCore::operator!=):
        (WebCore::InlineIterator::increment):
        (WebCore::InlineIterator::current):
        (WebCore::InlineBidiResolver::appendRun):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::checkMidpoints):
        (WebCore::RenderBlock::appendRunsForObject):
        (WebCore::RenderBlock::layoutInlineChildren):
        (WebCore::RenderBlock::matchedEndLine):
        (WebCore::tryHyphenating):
        (WebCore::RenderBlock::findNextLineBreak):

2011-03-29  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: document BrowserDebugger agent.
        https://bugs.webkit.org/show_bug.cgi?id=57331

        * inspector/Inspector.json:

2011-03-29  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Fix handling of the CSSAgent.setStyleSheetText() results in CSSStyleModel.js
        https://bugs.webkit.org/show_bug.cgi?id=56310

        Instead of stylesheet ids, CSSAgent.getAllStyleSheets() now returns metainfo objects containing
        "styleSheetId", "sourceURL", "disabled", and "title" fields. The latter three are not returned
        by CSSAgent.getStyleSheet() anymore.

        Test: inspector/styles/get-set-stylesheet-text.html

        * inspector/Inspector.json:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::getAllStyleSheets):
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::buildObjectForStyleSheet):
        (WebCore::InspectorStyleSheet::buildObjectForStyleSheetInfo):
        * inspector/InspectorStyleSheet.h:
        * inspector/front-end/AuditRules.js:
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun.styleSheetCallback):
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun.allStylesCallback):
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun):
        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleModel.prototype._styleSheetChanged.callback):
        (WebInspector.CSSStyleModel.prototype._styleSheetChanged):
        (WebInspector.CSSStyleModel.prototype._onRevert):
        (WebInspector.CSSStyleSheet):
        (WebInspector.CSSStyleSheet.prototype.setText):

2011-03-29  Jeremy Moskovich  <jeremy@chromium.org>

        Reviewed by Eric Seidel.

        Implement text-align:match-parent as -webkit-match-parent.
        https://bugs.webkit.org/show_bug.cgi?id=50951

        Add support to the CSS parser.

        Tests: fast/css/text-align-webkit-match-parent-parse.html
               fast/css/text-align-webkit-match-parent.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * css/CSSValueKeywords.in:

2011-03-29  Eric Seidel  <eric@webkit.org>

        Reviewed by Ryosuke Niwa.

        Rename InlineIterator::nextBreakablePosition to m_nextBreakablePosition to match modern style
        https://bugs.webkit.org/show_bug.cgi?id=57323

        All of these m_nextBreakablePosition = -1 could probably be replaced with
        some new methods.  But I'll do that in a separate change.  Clearly
        m_nextBreakablePosition is just a cached value which should be cleared
        at the right times.  I suspect we may even fail to clear it sometimes when
        we should due to the current used of direct access instead of smarter functions.

        * rendering/InlineIterator.h:
        (WebCore::InlineIterator::InlineIterator):
        (WebCore::InlineIterator::increment):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::tryHyphenating):
        (WebCore::RenderBlock::findNextLineBreak):

2011-03-29  Jeff Miller  <jeffm@apple.com>

        Reviewed by Jon Honeycutt.

        Add WebCore::copyCertificateToData() on Windows
        https://bugs.webkit.org/show_bug.cgi?id=57296

        Create a new win directory in platform/cf and add CertificateCFWin.cpp and CertificateCFWin.h to it.

        * WebCore.vcproj/WebCore.vcproj: Added CertificateCFWin.cpp and CertificateCFWin.h.
        * WebCore.vcproj/copyForwardingHeaders.cmd: Copy all header files in \platform\cf\win\.
        * platform/cf/win: Added.
        * platform/cf/win/CertificateCFWin.cpp: Added.
        (WebCore::deallocCertContext): Added.
        (WebCore::createCertContextDeallocator): Added.
        (WebCore::copyCertificateToData): Added.
        * platform/cf/win/CertificateCFWin.h: Added.

2011-03-29  Eric Seidel  <eric@webkit.org>

        Reviewed by Ryosuke Niwa.

        Rename InlineIterator::block to m_block to match modern style
        https://bugs.webkit.org/show_bug.cgi?id=57321

        I could have made m_block private, since it's only accessed in
        one place outside of InlineIterator (for an ASSERT).  But I chose
        not to do so in this change.

        * rendering/InlineIterator.h:
        (WebCore::InlineIterator::InlineIterator):
        (WebCore::InlineIterator::increment):
        (WebCore::InlineBidiResolver::appendRun):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::findNextLineBreak):

2011-03-29  Leo Yang  <leo.yang@torchmobile.com.cn>

        Reviewed by Nikolas Zimmermann.

        Incorrect offset of svg <use> element which is in <symbol> element
        https://bugs.webkit.org/show_bug.cgi?id=57318

        When webkit expanded a svg <symbol> element in the shadow tree it
        would clone the children of the <symbol>. The children may contain
        SVGShadowTreeContainerElement which was expanded from svg <use>
        element. But the clone operation would clone a
        SVGShadowTreeContainerElement as a svg <g> element. This resulted
        that updateContainerOffset wouldn't update offset for those elements
        which were expand from <use> elements.

        This patch implements cloneElementWithoutAttributesAndChildren for
        SVGShadowTreeContainerElement to make the container clone itself
        correctly.

        Test: svg/custom/use-in-symbol-with-offset.svg

        * rendering/svg/SVGShadowTreeElements.cpp:
        (WebCore::SVGShadowTreeContainerElement::cloneElementWithoutAttributesAndChildren):
        * rendering/svg/SVGShadowTreeElements.h:

2011-03-29  Eric Seidel  <eric@webkit.org>

        Reviewed by Ryosuke Niwa.

        Rename InlineIterator::obj to m_obj to match modern style
        https://bugs.webkit.org/show_bug.cgi?id=57319

        I started this rename after confusion in InlineBidiResolver::appendRun.
        (Which uses an "obj" local in InlineIterator.h.  It's not actually
        masking m_obj because it's a separate class, but I didn't realize
        that at the time because it's in InlineIterator.h which is itself confusing!)

        * rendering/InlineIterator.h:
        (WebCore::InlineIterator::InlineIterator):
        (WebCore::operator==):
        (WebCore::operator!=):
        (WebCore::InlineIterator::increment):
        (WebCore::InlineIterator::atEnd):
        (WebCore::InlineIterator::current):
        (WebCore::InlineIterator::direction):
        (WebCore::InlineBidiResolver::appendRun):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::checkMidpoints):
        (WebCore::RenderBlock::appendRunsForObject):
        (WebCore::RenderBlock::layoutInlineChildren):
        (WebCore::RenderBlock::matchedEndLine):
        (WebCore::skipNonBreakingSpace):
        (WebCore::RenderBlock::requiresLineBox):
        (WebCore::RenderBlock::skipTrailingWhitespace):
        (WebCore::RenderBlock::skipLeadingWhitespace):
        (WebCore::tryHyphenating):
        (WebCore::RenderBlock::findNextLineBreak):

2011-03-29  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: document Timeline domain, make timeline event types of type string.
        https://bugs.webkit.org/show_bug.cgi?id=57299

        * inspector/Inspector.json:
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::pushGCEventRecords):
        (WebCore::InspectorTimelineAgent::start):
        (WebCore::InspectorTimelineAgent::stop):
        (WebCore::InspectorTimelineAgent::willCallFunction):
        (WebCore::InspectorTimelineAgent::didCallFunction):
        (WebCore::InspectorTimelineAgent::willDispatchEvent):
        (WebCore::InspectorTimelineAgent::didDispatchEvent):
        (WebCore::InspectorTimelineAgent::willLayout):
        (WebCore::InspectorTimelineAgent::didLayout):
        (WebCore::InspectorTimelineAgent::willRecalculateStyle):
        (WebCore::InspectorTimelineAgent::didRecalculateStyle):
        (WebCore::InspectorTimelineAgent::willPaint):
        (WebCore::InspectorTimelineAgent::didPaint):
        (WebCore::InspectorTimelineAgent::willWriteHTML):
        (WebCore::InspectorTimelineAgent::didWriteHTML):
        (WebCore::InspectorTimelineAgent::didInstallTimer):
        (WebCore::InspectorTimelineAgent::didRemoveTimer):
        (WebCore::InspectorTimelineAgent::willFireTimer):
        (WebCore::InspectorTimelineAgent::didFireTimer):
        (WebCore::InspectorTimelineAgent::willChangeXHRReadyState):
        (WebCore::InspectorTimelineAgent::didChangeXHRReadyState):
        (WebCore::InspectorTimelineAgent::willLoadXHR):
        (WebCore::InspectorTimelineAgent::didLoadXHR):
        (WebCore::InspectorTimelineAgent::willEvaluateScript):
        (WebCore::InspectorTimelineAgent::didEvaluateScript):
        (WebCore::InspectorTimelineAgent::didScheduleResourceRequest):
        (WebCore::InspectorTimelineAgent::willSendResourceRequest):
        (WebCore::InspectorTimelineAgent::willReceiveResourceData):
        (WebCore::InspectorTimelineAgent::didReceiveResourceData):
        (WebCore::InspectorTimelineAgent::willReceiveResourceResponse):
        (WebCore::InspectorTimelineAgent::didReceiveResourceResponse):
        (WebCore::InspectorTimelineAgent::didFinishLoadingResource):
        (WebCore::InspectorTimelineAgent::didMarkTimeline):
        (WebCore::InspectorTimelineAgent::didMarkDOMContentEvent):
        (WebCore::InspectorTimelineAgent::didMarkLoadEvent):
        (WebCore::InspectorTimelineAgent::addRecordToTimeline):
        (WebCore::InspectorTimelineAgent::didCompleteCurrentRecord):
        (WebCore::InspectorTimelineAgent::pushCurrentRecord):
        * inspector/InspectorTimelineAgent.h:
        (WebCore::InspectorTimelineAgent::TimelineRecordEntry::TimelineRecordEntry):
        * inspector/front-end/TimelineAgent.js:
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype.get _recordStyles):
        (WebInspector.TimelinePanel.prototype._createEventDivider):
        (WebInspector.TimelinePanel.prototype._findParentRecord):
        (WebInspector.TimelinePanel.prototype._innerAddRecordToTimeline):
        (WebInspector.TimelineDispatcher.prototype.started):
        (WebInspector.TimelineDispatcher.prototype.stopped):
        (WebInspector.TimelineDispatcher.prototype.eventRecorded):
        (WebInspector.TimelinePanel.FormattedRecord):
        (WebInspector.TimelinePanel.FormattedRecord.prototype._generatePopupContent):
        (WebInspector.TimelinePanel.FormattedRecord.prototype._getRecordDetails):

2011-03-29  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Pavel Feldman.

        Web Inspector: Fixing live edits tests on chromium.
        https://bugs.webkit.org/show_bug.cgi?id=57316

        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.SourceFrameDelegateForScriptsPanel.prototype.editScriptSource):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._handleSave.didEditScriptSource):
        (WebInspector.SourceFrame.prototype._handleSave):
        (WebInspector.SourceFrameDelegate.prototype.editScriptSource):

2011-03-29  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: fix call frames positions in formatted scripts.
        https://bugs.webkit.org/show_bug.cgi?id=57036

        Introduce PresentationCallFrame class that encapsulates source mapping details from UI components.

        * inspector/front-end/CallStackSidebarPane.js:
        (WebInspector.CallStackSidebarPane.prototype.update.didGetSourceLocation):
        (WebInspector.CallStackSidebarPane.prototype.update):
        (WebInspector.CallStackSidebarPane.prototype.set selectedCallFrame):
        (WebInspector.CallStackSidebarPane.prototype._placardSelected):
        (WebInspector.CallStackSidebarPane.prototype._contextMenu):
        (WebInspector.CallStackSidebarPane.prototype._copyStackTrace):
        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel.prototype._didEditScriptSource):
        (WebInspector.DebuggerModel.prototype.get debuggerPausedDetails):
        (WebInspector.DebuggerModel.prototype._pausedScript):
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel):
        (WebInspector.DebuggerPresentationModel.prototype.editScriptSource.didEditScriptSource):
        (WebInspector.DebuggerPresentationModel.prototype.editScriptSource):
        (WebInspector.DebuggerPresentationModel.prototype.toggleFormatSourceFiles):
        (WebInspector.DebuggerPresentationModel.prototype._debuggerPaused):
        (WebInspector.DebuggerPresentationModel.prototype._debuggerResumed):
        (WebInspector.DebuggerPresentationModel.prototype.set selectedCallFrame):
        (WebInspector.DebuggerPresentationModel.prototype.get selectedCallFrame):
        (WebInspector.DebuggerPresentationModel.prototype._reset):
        (WebInspector.PresenationCallFrame): Call frame wrapper for UI.
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype.evaluateInSelectedCallFrame):
        (WebInspector.ScriptsPanel.prototype._debuggerPaused.else.didGetSourceLocation):
        (WebInspector.ScriptsPanel.prototype._debuggerPaused):
        (WebInspector.ScriptsPanel.prototype._debuggerResumed):
        (WebInspector.ScriptsPanel.prototype._sourceFrameLoaded):
        (WebInspector.ScriptsPanel.prototype._callFrameSelected.didGetSourceLocation):
        (WebInspector.ScriptsPanel.prototype._callFrameSelected):
        (WebInspector.SourceFrameDelegateForScriptsPanel.prototype.evaluateInSelectedCallFrame):
        * inspector/front-end/SourceFile.js:
        (WebInspector.SourceFile.prototype.get content):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._createTextViewer):
        (WebInspector.SourceFrame.prototype.setExecutionLine):
        (WebInspector.SourceFrame.prototype.clearExecutionLine):
        (WebInspector.SourceFrame.prototype._showPopup.showObjectPopup):
        (WebInspector.SourceFrame.prototype._showPopup):

2011-03-29  Emil A Eklund  <eae@chromium.org>

        Reviewed by Darin Adler.

        Fix for execCommand("Delete") with an empty selection.
        https://bugs.webkit.org/show_bug.cgi?id=56652

        Test: editing/execCommand/delete-empty-container.html

        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::makeEditableRootEmpty): Add check for root element.

2011-03-29  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [Chromium] Refactor HeapSnapshot-related code to
        make sure we don't return big amounts of data to forms.
        https://bugs.webkit.org/show_bug.cgi?id=57227

        * inspector/front-end/DetailedHeapshotGridNodes.js:
        (WebInspector.HeapSnapshotGridNode.prototype.populateChildren):
        (WebInspector.HeapSnapshotGenericObjectNode.prototype.get _countPercent):
        (WebInspector.HeapSnapshotObjectNode):
        (WebInspector.HeapSnapshotObjectNode.prototype._createProvider):
        (WebInspector.HeapSnapshotInstanceNode):
        (WebInspector.HeapSnapshotInstanceNode.prototype._createProvider):
        (WebInspector.HeapSnapshotConstructorNode.prototype._createNodesProvider):
        (WebInspector.HeapSnapshotConstructorNode.prototype.get _countPercent):
        (WebInspector.HeapSnapshotDiffNode.prototype._createNodesProvider.createProvider):
        (WebInspector.HeapSnapshotDiffNode.prototype._createNodesProvider):
        (WebInspector.HeapSnapshotDominatorObjectNode.prototype._createProvider):
        * inspector/front-end/DetailedHeapshotView.js:
        (WebInspector.HeapSnapshotContainmentDataGrid.prototype.setDataSource):
        (WebInspector.HeapSnapshotDominatorsDataGrid.prototype.setDataSource):
        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshotNode.prototype.get dominatorIndex):
        (WebInspector.HeapSnapshotNode.prototype.get retainers):
        (WebInspector.HeapSnapshot):
        (WebInspector.HeapSnapshot.prototype.get _allNodes):
        (WebInspector.HeapSnapshot.prototype.get nodeCount):
        (WebInspector.HeapSnapshot.prototype.get rootNodeIndex):
        (WebInspector.HeapSnapshot.prototype.hasId):
        (WebInspector.HeapSnapshot.prototype.get nodeIds):
        (WebInspector.HeapSnapshot.prototype._retainersForNode):
        (WebInspector.HeapSnapshot.prototype._buildRetainers):
        (WebInspector.HeapSnapshot.prototype._buildAggregates):
        (WebInspector.HeapSnapshot.prototype._buildAggregatesIndexes):
        (WebInspector.HeapSnapshot.prototype._buildIdsList):
        (WebInspector.HeapSnapshot.prototype._buildNodeIndex):
        (WebInspector.HeapSnapshotFilteredOrderedIterator):
        (WebInspector.HeapSnapshotFilteredOrderedIterator.prototype.next):
        (WebInspector.HeapSnapshotEdgesProvider):
        (WebInspector.HeapSnapshotNodesProvider):

2011-03-29  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [Chromium] Fix detailed heap snapshots UI.
        https://bugs.webkit.org/show_bug.cgi?id=57235

        Fix two problems:
          1. Text color of grid cells under selection needs to be white, otherwise it's unreadable for some colors;
          2. Long strings need to be truncated in grid, their contents can be shown on hover.

        * inspector/front-end/DetailedHeapshotView.js:
        (WebInspector.DetailedHeapshotView.prototype._getHoverAnchor):
        (WebInspector.DetailedHeapshotView.prototype._showStringContentPopup):
        * inspector/front-end/heapProfiler.css:
        (.detailed-heapshot-view .console-formatted-string):
        (.detailed-heapshot-view .data-grid tr.selected *):
        (.detailed-heapshot-view .data-grid:focus tr.selected *):

2011-03-29  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Highlight visible lines first
        https://bugs.webkit.org/show_bug.cgi?id=57013

        * inspector/front-end/TextViewer.js:
        (WebInspector.TextEditorChunkedPanel.prototype._findFirstVisibleChunkNumber):
        (WebInspector.TextEditorChunkedPanel.prototype._findVisibleChunks):
        (WebInspector.TextEditorChunkedPanel.prototype._findFirstVisibleLineNumber.compareLineRowOffsetTops):
        (WebInspector.TextEditorChunkedPanel.prototype._findFirstVisibleLineNumber):
        (WebInspector.TextEditorMainPanel.prototype._paintScheduledLines):
        (WebInspector.TextEditorMainPanel.prototype._paintLines):
        (WebInspector.TextEditorMainPanel.prototype._paintLineChunks):
        (WebInspector.TextEditorMainPanel.prototype._paintLine):
        (WebInspector.TextEditorMainChunk.prototype.set expanded):

2011-03-29  Emil A Eklund  <eae@chromium.org>

        Reviewed by Dimitri Glazkov.

        Relative mouse coordinates recalculated for each target
        https://bugs.webkit.org/show_bug.cgi?id=57130

        Calculate relative coordinates lazily for mouse events instead of doing
        it for each target. Speeds up dispatching of mouse events in deep dom
        structures significantly, O(n^2) to O(n).

        Also fixes https://bugs.webkit.org/show_bug.cgi?id=34973

        Tests: fast/events/mouse-relative-position.html
               perf/mouse-event.html

        * dom/Event.cpp:
        (WebCore::Event::setTarget):
        * dom/MouseRelatedEvent.cpp:
        (WebCore::MouseRelatedEvent::MouseRelatedEvent):
        (WebCore::MouseRelatedEvent::initCoordinates):
        (WebCore::pageZoomFactor):
        (WebCore::MouseRelatedEvent::receivedTarget):
        (WebCore::MouseRelatedEvent::computeRelativePosition):
        (WebCore::MouseRelatedEvent::layerX):
        (WebCore::MouseRelatedEvent::layerY):
        (WebCore::MouseRelatedEvent::offsetX):
        (WebCore::MouseRelatedEvent::offsetY):
        * dom/MouseRelatedEvent.h:
        * dom/UIEvent.cpp:
        (WebCore::UIEvent::layerX):
        (WebCore::UIEvent::layerY):
        * dom/UIEvent.h:

2011-03-29  Emil A Eklund  <eae@chromium.org>

        Reviewed by Darin Adler.

        getComputedStyle counterIncrement crash @ WebCore::counterToCSSValue
        https://bugs.webkit.org/show_bug.cgi?id=57266

        Add null check to counterToCSSValue.

        Test: fast/css/getComputedStyle/counterIncrement-without-counter.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::counterToCSSValue):

2011-03-29  Gavin Peters  <gavinp@chromium.org>

        Reviewed by Tony Gentilcore.

        Implement onerror events for <link rel=prefetch>
        https://bugs.webkit.org/show_bug.cgi?id=57182

        These events are equired on link elements, see
        http://dev.w3.org/html5/spec/Overview.html#the-link-element

        After a discussion in WebKit-dev about the direction of prefetch in the loader, and about a path
        to adding the Link header, we decided to look at making onerror, onload and onbeforeload events
        more uniformly supported.  See the thread at
        https://lists.webkit.org/pipermail/webkit-dev/2011-February/016034.html .

        It turned out that part of adding onerror for link prefetch was to make the top CachedResource less
        abstract.  It was pure virtual until prefetch became the first consumer to use an unspecialised
        implementation, and this CL continues that by adding a default checkNotify method to it.  As it
        happens there were already two subclasses using what amounted to the generic checkNotify, so I
        also removed those, buying us some code cleanup with the change.

        Test: fast/dom/HTMLLinkElement/prefetch-onerror.html

        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::parseMappedAttribute):
        (WebCore::HTMLLinkElement::onloadTimerFired):
        (WebCore::HTMLLinkElement::notifyFinished):
        * loader/cache/CachedImage.cpp:
        * loader/cache/CachedImage.h:
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::checkNotify):
        (WebCore::CachedResource::data):
        (WebCore::CachedResource::error):
        * loader/cache/CachedResource.h:
        * loader/cache/CachedScript.cpp:
        * loader/cache/CachedScript.h:

2011-03-29  Eric Seidel  <eric@webkit.org>

        Reviewed by Ryosuke Niwa.

        Add support for parsing unicode-bidi: -webkit-isolate
        https://bugs.webkit.org/show_bug.cgi?id=57181

        Test: css3/unicode-bidi-insolate-parse.html

        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator EUnicodeBidi):
        * css/CSSValueKeywords.in:
        * rendering/style/RenderStyleConstants.h:

2011-03-29  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed WinCE build fix for r82193.

        * platform/wince/FileSystemWinCE.cpp:
        (WebCore::openTemporaryFile):

2011-03-28  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r82198.
        http://trac.webkit.org/changeset/82198
        https://bugs.webkit.org/show_bug.cgi?id=57304

        Broke Chromium Win build. (Requested by dave_levin on
        #webkit).

        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageDecoder::headerAvailable):
        (WebCore::PNGImageDecoder::rowAvailable):

2011-03-28  Ofri Wolfus  <ofri@google.com>

        Reviewed by Eric Seidel.

        RTL: Select elements with a size attribute are always left aligned.
        https://bugs.webkit.org/show_bug.cgi?id=50928

        Added support for alignment in RenderListBox.

        Test: fast/forms/listbox-bidi-align.html

        * rendering/RenderListBox.cpp:
        (WebCore::itemOffsetForAlignment):
        (WebCore::RenderListBox::paintItemForeground): Add support for alignment and directionality.

2011-03-28  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Benjamin Poulain.

        [Qt] Change TextureMapperVideoLayer to TextureMapperMediaLayer
        https://bugs.webkit.org/show_bug.cgi?id=57142

        TextureMapperMediaLayer is a better name here because both video and plugins use this layer.
        Remove ENABLE(VIDEO) guard.

        * platform/graphics/qt/MediaPlayerPrivateQt.cpp:
        * platform/graphics/qt/MediaPlayerPrivateQt.h:
        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayerTextureMapper::setContentsToMedia):
        * platform/graphics/texmap/TextureMapperNode.h:
        * platform/graphics/texmap/TextureMapperPlatformLayer.h:
        (WebCore::TextureMapperMediaLayer::layerType):

2011-03-28  Thomas Klausner  <tk@giga.or.at>

        Reviewed by David Levin.

        png-1.5 fixes
        https://bugs.webkit.org/show_bug.cgi?id=54406

        Fix compilation with png-1.5: struct members were hidden, and
        a new API to terminate data processing was added (especially for
        WebKit).

        Compilation fixes, so no new tests.

        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageDecoder::headerAvailable):
        (WebCore::PNGImageDecoder::rowAvailable):

2011-03-28  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Adam Barth.

        Replace fprintf(stderr, ...) with LOG_ERROR
        https://bugs.webkit.org/show_bug.cgi?id=57216

        LOG_ERROR is a better choice here.

        * bridge/jni/v8/JavaClassV8.cpp:
        (JavaClass::JavaClass):

2011-03-28  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        Add a new JavaValue to type to represent a Java value in the Java bridge
        https://bugs.webkit.org/show_bug.cgi?id=57022

        This change introduces a new JavaValue type and uses it in place of jvalue
        in the conversions to and from JavaNPObject used in the V8 Java bridge.

        Refactoring only, no new tests.

        * WebCore.gypi:
        * bridge/jni/JNIUtility.cpp:
        (JSC::Bindings::javaTypeFromClassName):
        (JSC::Bindings::signatureFromJavaType):
        (JSC::Bindings::getJNIField):
        (JSC::Bindings::callJNIMethod):
        * bridge/jni/JavaType.h:
        * bridge/jni/v8/JNIUtilityPrivate.cpp:
        (JSC::Bindings::convertNPVariantToJavaValue):
        (JSC::Bindings::convertJavaValueToNPVariant):
        (JSC::Bindings::jvalueToJavaValue):
        (JSC::Bindings::javaValueToJvalue):
        * bridge/jni/v8/JNIUtilityPrivate.h:
        * bridge/jni/v8/JavaNPObjectV8.cpp:
        (JSC::Bindings::JavaNPObjectInvoke):
        (JSC::Bindings::JavaNPObjectGetProperty):
        * bridge/jni/v8/JavaValueV8.h: Added.
        (JSC::Bindings::JavaValue::JavaValue):

2011-03-28  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Darin Adler.

        Use String instead of CString as return value of openTemporaryFile
        https://bugs.webkit.org/show_bug.cgi?id=55332

        We usually store all paths as UTF-16. Do this for temporary files too.

        * WebCore.exp.in
        * platform/FileSystem.h:
        * platform/android/FileSystemAndroid.cpp:
        * platform/brew/FileSystemBrew.cpp:
        * platform/efl/FileSystemEfl.cpp:
        * platform/gtk/FileSystemGtk.cpp:
        * platform/haiku/FileSystemHaiku.cpp:
        * platform/mac/FileSystemMac.mm:
        * platform/qt/FileSystemQt.cpp:
        * platform/win/FileSystemWin.cpp:
        * platform/wince/FileSystemWinCE.cpp:
        * platform/wx/FileSystemWx.cpp:
        * plugins/PluginStream.cpp:
        (WebCore::PluginStream::destroyStream):
        * plugins/PluginStream.h:

2011-03-28  Jeff Johnson  <opendarwin@lapcatsoftware.com>

        Reviewed by Pavel Feldman.

        Web Inspector: empty, non-functional window
        https://bugs.webkit.org/show_bug.cgi?id=56354

        Check whether DOM local storage is enabled
        before attempting to access window.localStorage.

        No new tests.

        * inspector/front-end/Settings.js:
        (WebInspector.Settings.prototype.findSettingForAllProjects):
        (WebInspector.Settings.prototype._get):
        (WebInspector.Settings.prototype._set):

2011-03-28  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin Adler.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=57286 Alternative fix for: 
        Horizontal scroller stops appearing after going Forward
        -and corresponding-
        <rdar://problem/9026946>

        This patch rolls out revision 79053 and fixes the same bug in a  better way.

        New function resetScrollbarsAndClearContentsSize() calls resetScrollbars() and then 
        sets the contents size to 0. This is called when a document is going into the page 
        cache.
        * dom/Document.cpp:
        (WebCore::Document::setInPageCache):
        (WebCore::FrameView::resetScrollbarsAndClearContentsSize):

        Roll-out of 79053.
        * history/CachedFrame.cpp:
        (WebCore::CachedFrameBase::restore):
        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::reset):
        (WebCore::FrameView::layout):
        * page/FrameView.h:

2011-03-28  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Antti Koivisto.

        fix style sharing with :any and sibling selectors
        https://bugs.webkit.org/show_bug.cgi?id=57211

        Test: fast/css/sibling-selectors.html

        * css/CSSStyleSelector.cpp:
        (WebCore::collectFeaturesFromList):

2011-03-27  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Antti Koivisto.

        fix :-webkit-any(:last-child)
        https://bugs.webkit.org/show_bug.cgi?id=57207

        We were passing the wrong arguments to checkSelector. Also, we were not
        passing through the encounteredLink bool.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::SelectorChecker::checkSelector):
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector):
        * css/CSSStyleSelector.h:

2011-03-27  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Antti Koivisto.

        fix :-webkit-any(:last-child)
        https://bugs.webkit.org/show_bug.cgi?id=57207

        We were passing the wrong arguments to checkSelector. Also, we were not
        passing through the encounteredLink bool.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::SelectorChecker::checkSelector):
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector):
        * css/CSSStyleSelector.h:

2011-03-28  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin Adler.

        REGRESSION(r82152): fast/dom/HTMLAnchorElement/set-href-attribute-pathname.html
        https://bugs.webkit.org/show_bug.cgi?id=57291

        * platform/KURL.cpp:
        (WebCore::KURL::parse): Instead of considering URLs with
        credentials but no host invalid, consider them to have a host
        ending in @ (which fails down the line)/

2011-03-28  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        Fix some problems of the appearance of form validation message bubble.
        https://bugs.webkit.org/show_bug.cgi?id=57208

        No new tests. Validation message bubble appearance is not testable
        because it depends on a timer.

        * css/html.css:
        (::-webkit-validation-bubble):
        (::-webkit-validation-bubble-message):
        (::-webkit-validation-bubble-arrow):
        (::-webkit-validation-bubble-arrow-clipper):
          - Explicitly set margin, padding, and color.
          - Make the shadow darker.
          - Make the background color darker.
          - Make opacity larger.
          - Make the border color lighter.
          - Add inset shadows
          - Change the implementation of an arrow.
            Stop making a right triangle by the border trick.
            Use -webkit-transform instead.
          - Make min-width workable by changing display property of
            -webkit-validation-bubble to "inline-block".
        * html/ValidationMessage.cpp:
        (WebCore::ValidationMessage::buildBubbleTree):
          Change the node structure. Before this change, -webkit-validation-bubble
          had three DIVs inside. After this change, it has two DIVs;
          -webkit-validation-bubble-arrow-clipper and
          -webkit-validation-bubble-message, and
          -webkit-validation-bubble-arrow-clipper contains
          -webkit-validation-bubble-arrow.

2011-03-28  Enrica Casucci  <enrica@apple.com>

        Reviewed by Sam Weinig.

        REGRESSION: Can't enter pasted with context or Edit menu text in search or address field in the browser.
        https://bugs.webkit.org/show_bug.cgi?id=57275
        <rdar://problem/8246691>

        We need to classify cut and paste actions as user typing actions even when
        the action is triggered by a context menu selection to
        allow the propagation of the textDidChangeInTextField event.

        * editing/EditorCommand.cpp:
        The following methods have been modified to properly set up
        the UserTypingGestureAction when the command source is the
        menu or a key binding sequence.
        (WebCore::executeCut):
        (WebCore::executePaste):
        (WebCore::executePasteAndMatchStyle):
        (WebCore::executePasteAsPlainText):
        (WebCore::executeDelete):
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected): Changed to
        call execute command instead of referring to the specific method in
        the editor class.

2011-03-28  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        instanceof Array test fails when using iframes
        https://bugs.webkit.org/show_bug.cgi?id=17250

        Update for new function and date apis

        Test: fast/js/js-constructors-use-correct-global.html

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::jsDateOrNull):
        * bindings/js/JSLazyEventListener.cpp:
        (WebCore::JSLazyEventListener::initializeJSFunction):

2011-03-28  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin Adler.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=57124 When the scroller style is 
        changed via delegate method, the page needs a full relayout and repaint
        -and corresponding-
        <rdar://problem/9059129>

        Call into WebKitSystemInterface to associate the new painter with the existing 
        painter controller. Reset the scrollbar frame rects to the new thickness -- normally 
        this only happens when a scrollbar is created, so we have to reset the thickness 
        here to pick up the new theme thickness. Finally, force a full relayout and style 
        recall with setNeedsRecalcStyleInAllFrames()
        * platform/mac/ScrollAnimatorMac.mm:
        (-[ScrollbarPainterControllerDelegate scrollerImpPair:updateScrollerStyleForNewRecommendedScrollerStyle:]):

        setNeedsRecalcStyleInAllFrames() used to be a static method in Settings.cpp. This 
        patch moves it to be a member function on Page so that it can be called from 
        FrameView when the scrollbar style changes.
        * page/FrameView.cpp:
        (WebCore::FrameView::setNeedsRecalcStyleInAllFrames):
        * page/FrameView.h:
        * page/Page.cpp:
        (WebCore::Page::setNeedsRecalcStyleInAllFrames):
        * page/Page.h:
        * page/Settings.cpp:
        (WebCore::Settings::setStandardFontFamily):
        (WebCore::Settings::setFixedFontFamily):
        (WebCore::Settings::setSerifFontFamily):
        (WebCore::Settings::setSansSerifFontFamily):
        (WebCore::Settings::setCursiveFontFamily):
        (WebCore::Settings::setFantasyFontFamily):
        (WebCore::Settings::setMinimumFontSize):
        (WebCore::Settings::setMinimumLogicalFontSize):
        (WebCore::Settings::setDefaultFontSize):
        (WebCore::Settings::setDefaultFixedFontSize):
        (WebCore::Settings::setTextAreasAreResizable):
        (WebCore::Settings::setAuthorAndUserStylesEnabled):
        (WebCore::Settings::setFontRenderingMode):
        (WebCore::Settings::setAcceleratedCompositingEnabled):
        (WebCore::Settings::setShowDebugBorders):
        (WebCore::Settings::setShowRepaintCounter):
        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::setNeedsRecalcStyleInAllFrames):

2011-03-28  Dirk Pranke  <dpranke@chromium.org>

        RS=Tony Chang.

        r81977 moved FontPlatformData.h from
        WebCore/platform/graphics/cocoa to platform/graphics. This
        change updates the chromium build accordingly.

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

        * platform/graphics/chromium/CrossProcessFontLoading.mm:

2011-03-28  Jer Noble  <jer.noble@apple.com>

        Reviewed by Darin Adler.

        MediaPlayerPrivateAVFoundation should report that it supportsFullScreen()
        https://bugs.webkit.org/show_bug.cgi?id=57249

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::supportsFullscreen):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:

2011-03-28  Jer Noble  <jer.noble@apple.com>

        Reviewed by Darin Adler.

        AVFoundation can indeed support full screen.

        MediaPlayerPrivateAVFoundation should report that it supportsFullScreen()
        https://bugs.webkit.org/show_bug.cgi?id=57249

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::supportsFullscreen): Return true if using
            the new full screen APIs.
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:

2011-03-28  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Darin Adler.

        http streams don't always display video with AVFoundation backend
        https://bugs.webkit.org/show_bug.cgi?id=57203

        No new tests, we don't currently have tests for http live streams. Changes verified manually.

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::MediaPlayer): Initialize m_shouldPrepareToRender.
        (WebCore::MediaPlayer::loadWithNextMediaEngine): Call prepareForRendering on new engine
            if m_shouldPrepareToRender is set.
        (WebCore::MediaPlayer::prepareForRendering): Set m_shouldPrepareToRender.
        * platform/graphics/MediaPlayer.h:

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::isReadyForVideoSetup): Don't return true until
            m_isAllowedToRender has been set.
        (WebCore::MediaPlayerPrivateAVFoundation::prepareForRendering): Always call setUpVideoRendering,
            it has logic to figure out when setup is required.
        (WebCore::MediaPlayerPrivateAVFoundation::updateStates): Call setUpVideoRendering when we aren't
            using the preferred rendering mode because if we get a file's metadata between the
            time supportsAcceleratedRendering() and paint() are called, we will allocate a software
            renderer even when we prefer a layer backed renderer.
        (WebCore::MediaPlayerPrivateAVFoundation::movieLoadType): Return "unknown" until we have metadata.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::cancelLoad): Use itemKVOProperties() instead of
            an explicit list of key path names.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerForURL): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::beginLoadingMetadata): metadataKeyNames renamed
            to assetMetadataKeyNames, return an NSArray instead of a CFArrayRef since that is what the
            callers need.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformDuration): Return the duration of the 
            player item, not the asset, because AVAsset.duration always returns an indefinite time
            for all streaming files.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::assetStatus): metadataKeyNames renamed
            to assetMetadataKeyNames.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::paintCurrentFrameInContext): Do nothing until
            metadata is available.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::paint): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::tracksChanged): Split size calculation logic off
            into sizeChanged().
        (WebCore::MediaPlayerPrivateAVFoundationObjC::sizeChanged): New. Use AVPlayerItem.presentationSize
            until tracks is non-NULL so we have a size as early as possible.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::assetMetadataKeyNames): Renamed from metadataKeyNames.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::itemKVOProperties): New, return an array of
            KVO observable properties.
        (-[WebCoreAVFMovieObserver observeValueForKeyPath:ofObject:change:context:]): Respond to 
            presentationSize change.

2011-03-28  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Search field focus ring is missing
        https://bugs.webkit.org/show_bug.cgi?id=57270
        <rdar://problem/8765555>

        Add an _automaticFocusRingDisabled method which returns YES.

        * platform/mac/ThemeMac.mm:
        (-[WebCoreFlippedView _automaticFocusRingDisabled]):

2011-03-28  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        Move more events to EventDispatcher.
        https://bugs.webkit.org/show_bug.cgi?id=57247

        No functional changes, covered by existing tests.

        * dom/EventDispatcher.cpp:
        (WebCore::eventTargetRespectingSVGTargetRules): Made a static function,
            since it's not used anywhere outside of the EventDispatcher.
        (WebCore::EventDispatcher::dispatchScopedEvent): Moved from Node.cpp.
        (WebCore::EventDispatcher::dispatchKeyEvent): Ditto.
        (WebCore::EventDispatcher::dispatchWheelEvent): Ditto.
        (WebCore::EventDispatcher::dispatchEvent): Changed to use eventTargetRespectingSVGTargetRules
            as a static function.
        * dom/EventDispatcher.h: Updated decls.
        * dom/Node.cpp:
        (WebCore::Node::dispatchScopedEvent): Replaced with calling EventDispatcher.
        (WebCore::Node::dispatchKeyEvent): Ditto.
        (WebCore::Node::dispatchWheelEvent): Ditto.

2011-03-28  Adele Peterson  <adele@apple.com>

        Reviewed by Eric Seidel.

        Fix for <rdar://problem/9112694> REGRESSION (r79411): "Check grammar with spelling" context menu doesn't check as you type
        https://bugs.webkit.org/show_bug.cgi?id=57173

        Test: editing/spelling/grammar.html

        * WebCore.exp.in: Add symbol for new selectionStartHasMarkerFor method.
        * editing/Editor.cpp:
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges): Every use of paragraph is specific to spelling or grammar, 
         so to avoid confusion, we should explicitly use spellingParagraph or grammarParagraph.  In the case of this bug, 
         when we're consider ambiguous boundary characters (characters that could indicate word boundaries, but are used 
         in the middle of words too, like apostrophes), we should use the use the spellingParagraph since the spellingParagraph 
         is the only one operated on when this information is used.
         (WebCore::Editor::selectionStartHasMarkerFor): Changed from selectionStartHasSpellingMarkerFor so it can check for grammar as well as spelling.
        * editing/Editor.h:

2011-03-28  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/8895977> REGRESSION: multicol crashes with positioned elements
        https://bugs.webkit.org/show_bug.cgi?id=48983

        Test: fast/multicol/paginated-layer-crash.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintPaginatedChildLayer): Bring the logic for finding pagintating layers
        into sync with updatePagination() after r68069.
        (WebCore::RenderLayer::hitTestPaginatedChildLayer): Ditto.

2011-03-28  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin Adler' .

        URLSs with non-empty username but empty hostname treat first path segment as hostname, potentially enabling XSS
        https://bugs.webkit.org/show_bug.cgi?id=57220

        Test: http/tests/uri/username-with-no-hostname.html

        * platform/KURL.cpp:
        (WebCore::hostPortIsEmptyButUserPassIsNot):
        (WebCore::KURL::parse):

2011-03-28  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        script-src should block inline event handlers
        https://bugs.webkit.org/show_bug.cgi?id=57212

        I considered wrapping this into the canExecute check, but that approach
        would require passing that function a bunch of context information to
        behave correctly once we add support for the "options" directive that
        re-enables these features.

        Test: http/tests/security/contentSecurityPolicy/script-src-none-inline-event.html

        * bindings/js/JSLazyEventListener.cpp:
        (WebCore::JSLazyEventListener::initializeJSFunction):
            - This function was a mess.  I couldn't resist cleaning it up a
              bunch.  Notice that we ASSERT at the beginning of the function
              that scriptExecutionContext is a document and that both ways of
              getting the global object are the same when document->frame() is
              non-zero because the document must be active and there is a
              one-to-one relation between Frames and active Documents.
        * bindings/v8/V8LazyEventListener.cpp:
        (WebCore::V8LazyEventListener::prepareListenerObject):
        * page/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::allowInlineEventHandlers):
        * page/ContentSecurityPolicy.h:

2011-03-28  Jeff Miller  <jeffm@apple.com>

        Reviewed by Adam Roben.

        ResourceError::certificate() should return a PCCERT_CONTEXT
        https://bugs.webkit.org/show_bug.cgi?id=57262

        * platform/network/cf/ResourceError.h: certificate() now returns a PCCERT_CONTEXT.
        * platform/network/cf/ResourceErrorCF.cpp:
        (WebCore::ResourceError::certificate): Added.

2011-03-28  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser and Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=57221, memory corruption/crashes when positioned objects
        occur at the end of a line.
        
        The old code and new code for dealing with a trailing space object midpoint manipulated a raw
        array instead of the Vector. Otherwise this corruption would have been caught prior to check-in.
        
        I have patched the code to only go through the Vector and to make it handle the case that led to
        the corruption. Trailing positioned objects can occur both prior to and following the trailing space
        object's midpoint, so we have to be prepared to deal with both cases.
        
        This is already tested by fast/block/positioning/052.html, and that test now properly progresses
        like the other positioning tests did.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::findNextLineBreak):

2011-03-28  Andrei Popescu  <andreip@google.com>

        Reviewed by Steve Block.

        V8IDBKeyCustom.cpp does not compile with INDEXED_DATABASE disabled
        https://bugs.webkit.org/show_bug.cgi?id=57100

        Close the ENABLE guard and the namespace in the right order.

        No new tests, just cleanup.

        * bindings/v8/custom/V8IDBAnyCustom.cpp:
        * bindings/v8/custom/V8IDBKeyCustom.cpp:

2011-03-28  Jeff Miller  <jeffm@apple.com>

        Reviewed by Adam Roben.

        Include certificate when sending a WebCore::ResourceError to UI process on Windows
        https://bugs.webkit.org/show_bug.cgi?id=57195

        Add support for tracking the certificate in WebCore::ResourceError.

        * platform/network/ResourceErrorBase.cpp:
        (WebCore::ResourceErrorBase::copy): Call platformCopy() to copy platform-specific fields.
        * platform/network/ResourceErrorBase.h:
        (WebCore::ResourceErrorBase::platformCopy): Added.
        * platform/network/cf/ResourceError.h: Added constructor that takes certificate data, shadowed platformCopy, added m_certificate.
        (WebCore::ResourceError::certificate): Added.
        * platform/network/cf/ResourceErrorCF.cpp:
        (WebCore::ResourceError::ResourceError): Added constructor that takes certificate data.
        (WebCore::ResourceError::platformLazyInit): Read any certificate from the userInfo dictionary.
        (WebCore::ResourceError::platformCopy): Copy m_certificate.
        (WebCore::ResourceError::cfError): Add any certificate data to the userInfo dictionary in the CFErrorRef.

2011-03-28  Jessie Berlin  <jberlin@apple.com>

        Rubber-stamped by Adam Roben.

        Add an extra newline to the end of the generated Inspector.idl file so that it does not
        trigger the Windows "no newline at at end of file" warning.

        * inspector/generate-inspector-idl:

2011-03-28  Csaba Osztrogonác  <ossy@webkit.org>

        Buildfix after r82125.

        [Qt] QtWebKit will not compile with QT_ASCII_CAST_WARNINGS enabled
        https://bugs.webkit.org/show_bug.cgi?id=57087

        * platform/graphics/qt/MediaPlayerPrivateQt.cpp: Convert all char* to QString explicitly.
        (WebCore::MediaPlayerPrivateQt::getSupportedTypes):
        (WebCore::MediaPlayerPrivateQt::commitLoad):

2011-03-28  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r82099.
        http://trac.webkit.org/changeset/82099
        https://bugs.webkit.org/show_bug.cgi?id=57245

        Breaks live edits tests on chromium. (Requested by pfeldman on
        #webkit).

        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.SourceFrameDelegateForScriptsPanel.prototype.editScriptSource):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._handleSave):
        (WebInspector.SourceFrameDelegate.prototype.editScriptSource):

2011-03-28  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: brush up and rename debugger domain functions.
        https://bugs.webkit.org/show_bug.cgi?id=57240

        * inspector/Inspector.json:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::setFrontend):
        (WebCore::InspectorAgent::postWorkerNotificationToFrontend):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::setBreakpointsActive):
        (WebCore::InspectorDebuggerAgent::setBreakpointByUrl):
        (WebCore::InspectorDebuggerAgent::setBreakpoint):
        (WebCore::InspectorDebuggerAgent::removeBreakpoint):
        (WebCore::InspectorDebuggerAgent::editScriptSource):
        (WebCore::InspectorDebuggerAgent::setPauseOnExceptionsState):
        (WebCore::InspectorDebuggerAgent::didParseSource):
        (WebCore::InspectorDebuggerAgent::failedToParseSource):
        (WebCore::InspectorDebuggerAgent::didPause):
        (WebCore::InspectorDebuggerAgent::didContinue):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel.prototype.setBreakpoint):
        (WebInspector.DebuggerModel.prototype.setBreakpointBySourceId):
        (WebInspector.DebuggerModel.prototype.removeBreakpoint):
        (WebInspector.DebuggerModel.prototype._didEditScriptSource):
        (WebInspector.DebuggerDispatcher.prototype.paused):
        (WebInspector.DebuggerDispatcher.prototype.resumed):
        (WebInspector.DebuggerDispatcher.prototype.scriptParsed):
        (WebInspector.DebuggerDispatcher.prototype.scriptFailedToParse):
        (WebInspector.DebuggerDispatcher.prototype.breakpointResolved):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.toggleBreakpointsClicked):
        * inspector/front-end/inspector.js:
        (WebInspector.didCreateWorker):
        (WebInspector.didDestroyWorker):

2011-03-28  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/57239> Use forward class declaration instead of including header

        Reviewed by Dan Bernstein.

        Adding a "using namespace WebCore;" statement in a header may
        cause issues when <WebCore/Length.h> is included before
        <CoreText/CoreText.h>.

        Length.h defines the LengthType enum with a 'Fixed' value.
        CoreText.h includes MacTypes.h, which has a
        "typedef SInt32 Fixed;" statement, and then CoreText.h includes
        other headers that also use 'Fixed', but expect the typedef to
        be defined, not the enum.  If another header includes
        "using namespace WebCore;" before CoreText.h, the
        following compiler errors result (paths abbreviated):

            CoreText.framework/Headers/SFNTLayoutTypes.h:689: error: reference to 'Fixed' is ambiguous
            MacTypes.h:184: error: candidates are: typedef SInt32 Fixed
            Length.h:37: error:                 WebCore::LengthType WebCore::Fixed
            SFNTLayoutTypes.h:689: error: 'Fixed' does not name a type

        * platform/mac/HTMLConverter.h: Use forward declaration of
        DocumentLoader class instead of including header.  Remove the
        unused "using namespace WebCore;" statement.

2011-03-26  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Seidel.

        Introduce EventDispatcher, the new common way to fire events.
        https://bugs.webkit.org/show_bug.cgi?id=57168

        The goal here is two-fold:
        1) reduce the need to randomly sprinkle guards around the dispatch code
        by creating a well-scoped abstraction for dispatching events.
        2) create a place where fiddly event-related things like creating event
        contexts for ancestors can be done lazily.

        Additionally, with all the free-standing static functions, this code was
        just begging to come out of Node.cpp.

        The first step is a near-mechanical extraction of mouse-related events
        from Node.cpp to EventDispatcher. For now, the call sites are just
        replaced with invoking EventDispatcher. Later, we can remove these methods
        from Node.

        Refactoring, no functional changes.

        * Android.mk: Added EventDispatcher to build system.
        * CMakeLists.txt: Ditto.
        * GNUmakefile.am: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * dom/DOMAllInOne.cpp: Ditto.
        * dom/EventDispatcher.cpp: Added.
        * dom/EventDispatcher.h: Added.
        * dom/Node.cpp:
        (WebCore::Node::dispatchScopedEvent): Replaced to use EventDispatcher.
        (WebCore::Node::dispatchEvent): Ditto.
        (WebCore::Node::dispatchMouseEvent): Ditto.
        (WebCore::Node::dispatchSimulatedClick): Ditto.
        * dom/Node.h: Updated decls.

2011-03-28  Dan Bernstein  <mitz@apple.com>

        Reviewed by Maciej Stachowiak.

        <rdar://problem/9003382> Incomplete repaint of overflow in flipped lines writing modes
        https://bugs.webkit.org/show_bug.cgi?id=57197

        Tests: fast/repaint/overflow-flipped-writing-mode-block.html
               fast/repaint/overflow-flipped-writing-mode-table.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paint): Flip the overflow rect before testing for intersection
        with the damage rect.
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::paint): Made the intersection check more like the one in
        RenderBlock::paint().

2011-03-28  Xiaomei Ji  <xji@chromium.org>

        Reviewed by Ryosuke Niwa.

        move directionOfEnclosingBlock() to be global so that it could be reused.
        https://bugs.webkit.org/show_bug.cgi?id=57233.

        Provide global function directionOfEnclosingBlock(Node*) so that it could be
        reused in SelectionController and other functionalities that need enclosing
        block's direcionality, such as moving caret by word in visual order.
      
        No new functionality, so no new tests.

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::directionOfEnclosingBlock):
        * editing/htmlediting.cpp:
        (WebCore::directionOfEnclosingBlock):
        * editing/htmlediting.h:

2011-03-28  Jarkko Sakkinen  <jarkko.j.sakkinen@gmail.com>

        Reviewed by Benjamin Poulain.

        [Qt] fast/canvas/webgl/context-attributes-alpha-depth-stencil-antialias.html fails
        https://bugs.webkit.org/show_bug.cgi?id=56825

        Fixes for context attribute handling:
        - Initialize depth and stencil buffer depending on whether they
        are enabled in context attributes.
        - Always enable depth buffer when stencil buffer is enabled.
        - Disable stencil buffer on OpenGL ES 2.0
        - Cleaned up clutter code from initialization. Made code paths 
        more sane.
        - Clear mask is now set correctly in reshape().

        Tests: fast/canvas/webgl/context-attributes-alpha-depth-stencil-antialias.html

        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3DInternal::isValid):
        (WebCore::GraphicsContext3DInternal::GraphicsContext3DInternal):
        (WebCore::GraphicsContext3DInternal::reshape):
        (WebCore::GraphicsContext3DInternal::paint):
        (WebCore::GraphicsContext3DInternal::getProcAddress):
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        (WebCore::GraphicsContext3D::reshape):
        (WebCore::GraphicsContext3D::bindFramebuffer):

2011-03-28  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: rename network domain events from didHappenSomething to somethingHappened.
        https://bugs.webkit.org/show_bug.cgi?id=57226

        * inspector/Inspector.json:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::willSendRequest):
        (WebCore::InspectorResourceAgent::markResourceAsCached):
        (WebCore::InspectorResourceAgent::didReceiveResponse):
        (WebCore::InspectorResourceAgent::didReceiveContentLength):
        (WebCore::InspectorResourceAgent::didFinishLoading):
        (WebCore::InspectorResourceAgent::didFailLoading):
        (WebCore::InspectorResourceAgent::didLoadResourceFromMemoryCache):
        (WebCore::InspectorResourceAgent::setInitialContent):
        (WebCore::InspectorResourceAgent::didCommitLoad):
        (WebCore::InspectorResourceAgent::frameDetachedFromParent):
        (WebCore::InspectorResourceAgent::didCreateWebSocket):
        (WebCore::InspectorResourceAgent::willSendWebSocketHandshakeRequest):
        (WebCore::InspectorResourceAgent::didReceiveWebSocketHandshakeResponse):
        (WebCore::InspectorResourceAgent::didCloseWebSocket):
        * inspector/front-end/NetworkManager.js:
        (WebInspector.NetworkDispatcher.prototype.requestWillBeSent):
        (WebInspector.NetworkDispatcher.prototype.resourceMarkedAsCached):
        (WebInspector.NetworkDispatcher.prototype.responseReceived):
        (WebInspector.NetworkDispatcher.prototype.dataReceived):
        (WebInspector.NetworkDispatcher.prototype.loadingFinished):
        (WebInspector.NetworkDispatcher.prototype.loadingFailed):
        (WebInspector.NetworkDispatcher.prototype.resourceLoadedFromMemoryCache):
        (WebInspector.NetworkDispatcher.prototype.frameDetached):
        (WebInspector.NetworkDispatcher.prototype.initialContentSet):
        (WebInspector.NetworkDispatcher.prototype.frameNavigated):
        (WebInspector.NetworkDispatcher.prototype.webSocketCreated):
        (WebInspector.NetworkDispatcher.prototype.webSocketWillSendHandshakeRequest):
        (WebInspector.NetworkDispatcher.prototype.webSocketHandshakeResponseReceived):
        (WebInspector.NetworkDispatcher.prototype.webSocketClosed):

2011-03-28  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        WebInspector: [Chromium] Delete native CPU profiles and heap snapshots on binding disposal.
        https://bugs.webkit.org/show_bug.cgi?id=57099

        * bindings/v8/ScriptHeapSnapshot.cpp:
        (WebCore::ScriptHeapSnapshot::~ScriptHeapSnapshot):
        * bindings/v8/ScriptHeapSnapshot.h:
        * bindings/v8/ScriptProfile.cpp:
        (WebCore::ScriptProfile::~ScriptProfile):
        * bindings/v8/ScriptProfile.h:
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::resetState):

2011-03-24  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: fix console messages positions in formatted scripts.
        https://bugs.webkit.org/show_bug.cgi?id=57010

        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel):
        (WebInspector.DebuggerPresentationModel.prototype.toggleFormatSourceFiles):
        (WebInspector.DebuggerPresentationModel.prototype.addConsoleMessage.didRequestMapping):
        (WebInspector.DebuggerPresentationModel.prototype.addConsoleMessage):
        (WebInspector.DebuggerPresentationModel.prototype.clearConsoleMessages):
        (WebInspector.DebuggerPresentationModel.prototype._reset):
        * inspector/front-end/ResourceTreeModel.js:
        (WebInspector.ResourceTreeModel.prototype.addConsoleMessage):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype.addConsoleMessage):
        (WebInspector.ScriptsPanel.prototype.clearConsoleMessages):
        (WebInspector.ScriptsPanel.prototype._consoleMessageAdded):
        (WebInspector.ScriptsPanel.prototype.reset):
        (WebInspector.ScriptsPanel.prototype._sourceFrameLoaded):
        * inspector/front-end/SourceFile.js:
        (WebInspector.SourceFile):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.addMessage):
        (WebInspector.SourceFrame.prototype._addExistingMessagesToSource):
        (WebInspector.SourceFrame.prototype.addMessageToSource):

2011-03-27  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: refactor ResourceTreeModel to remove poor dependencies.
        https://bugs.webkit.org/show_bug.cgi?id=57186

        - ResourceTreeModel is now event target (Object)
        - There is no ResourceTreeModel -> UI dependencies
        - NetworkManager -> ResourceTreeModel dependencies has been removed
        - NetworkManager is no longer dealing with the resources tree, it is only responsible for network events
        - ResourceTreeModel requests tree structure from the backend separately
        - Cached resources tree payload is now limited to url and type (no headers involved)
        - Resources tree is being rendered lazily upon request from the panel.

        * inspector/Inspector.json:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::resourceContent):
        (WebCore::InspectorResourceAgent::resourceContentBase64):
        (WebCore::buildObjectForFrameTree):
        (WebCore::InspectorResourceAgent::enable):
        (WebCore::InspectorResourceAgent::getCachedResources):
        (WebCore::InspectorResourceAgent::getResourceContent):
        * inspector/InspectorResourceAgent.h:
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::resourceStyleSheetText):
        * inspector/front-end/InspectorFrontendHostStub.js:
        (.WebInspector.InspectorFrontendHostStub.prototype.sendMessageToBackend):
        (.WebInspector.InspectorFrontendHostStub.prototype.loadSessionSetting):
        * inspector/front-end/NetworkManager.js:
        (WebInspector.NetworkManager):
        (WebInspector.NetworkManager.prototype.frontendReused):
        (WebInspector.NetworkManager.prototype.requestContent):
        (WebInspector.NetworkDispatcher):
        (WebInspector.NetworkDispatcher.prototype.didReceiveResponse):
        (WebInspector.NetworkDispatcher.prototype.didLoadResourceFromMemoryCache):
        (WebInspector.NetworkDispatcher.prototype.frameDetachedFromParent):
        (WebInspector.NetworkDispatcher.prototype.didCommitLoadForFrame):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkPanel):
        (WebInspector.NetworkPanel.prototype._updateSummaryBar):
        (WebInspector.NetworkPanel.prototype._onFrameCommitLoad):
        * inspector/front-end/ResourceTreeModel.js:
        (WebInspector.ResourceTreeModel):
        (WebInspector.ResourceTreeModel.prototype.frontendReused):
        (WebInspector.ResourceTreeModel.prototype._processCachedResources):
        (WebInspector.ResourceTreeModel.prototype._addOrUpdateFrame):
        (WebInspector.ResourceTreeModel.prototype.frames):
        (WebInspector.ResourceTreeModel.prototype.subframes):
        (WebInspector.ResourceTreeModel.prototype.resources):
        (WebInspector.ResourceTreeModel.prototype._onCommitLoad):
        (WebInspector.ResourceTreeModel.prototype._onFrameDetachedFromParent):
        (WebInspector.ResourceTreeModel.prototype._onResourceUpdated):
        (WebInspector.ResourceTreeModel.prototype._addResourceToFrame):
        (WebInspector.ResourceTreeModel.prototype.resourceForURL):
        (WebInspector.ResourceTreeModel.prototype._bindResourceURL):
        (WebInspector.ResourceTreeModel.prototype._clearChildFramesAndResources):
        (WebInspector.ResourceTreeModel.prototype._clearResources):
        (WebInspector.ResourceTreeModel.prototype._callForFrameResources):
        (WebInspector.ResourceTreeModel.prototype._unbindResourceURL):
        (WebInspector.ResourceTreeModel.prototype._addFramesRecursively):
        (WebInspector.ResourceTreeModel.prototype._createResource):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel):
        (WebInspector.ResourcesPanel.prototype.show):
        (WebInspector.ResourcesPanel.prototype._populateResourceTree.populateFrame):
        (WebInspector.ResourcesPanel.prototype._populateResourceTree):
        (WebInspector.ResourcesPanel.prototype._frameAdded):
        (WebInspector.ResourcesPanel.prototype._frameDetached):
        (WebInspector.ResourcesPanel.prototype._resourceAdded):
        (WebInspector.ResourcesPanel.prototype._frameNavigated):
        (WebInspector.FrameTreeElement.prototype.setTitles):
        * inspector/front-end/inspector.js:
        (WebInspector.frontendReused):

2011-03-27  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        WebKit's behavior for text-align inherit differs from other browsers
        https://bugs.webkit.org/show_bug.cgi?id=56377

        The bug was caused by WebKit's resolving text-align: start and text-align: end too early.
        As discussed on the bug, when text-align: start and text-align: end are inherited by descendent nodes,
        the alignment of the text in those nodes should be determined based on the directionality of the text,
        not by the directionality of the ancestor node from which text-align property is inherited.

        Fixed the bug by introducing new enum values to ETextAlign: TASTART and TAEND. These two values will
        align text to the left in a LTR context and to the right in a RTL context respectively.

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue): Added the support for TASTART and TAEND.
        (WebCore::CSSPrimitiveValue::operator ETextAlign): Ditto.
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty): No longer processes CSSValueStart and CSSValueEnd.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::localCaretRect): Added the support for TASTART and TAEND.
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::computeInlineDirectionPositionsForLine): Added the support for TASTART and TAEND.
        * rendering/RenderText.cpp:
        (WebCore::RenderText::localCaretRect): Ditto.
        * rendering/style/RenderStyle.h: ETextAlign now has 10 values and requires 4 bits.
        * rendering/style/RenderStyleConstants.h: Added TASTART and TAEND to ETextAlign.

2011-03-28  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: fix breakpoints positions in formatted scripts.
        https://bugs.webkit.org/show_bug.cgi?id=56931

        Add async requestMapping method to SourceFile interface as required for populating
        breakpoints sidebar pane when in "format all scripts" mode.

        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype.continueToLine):
        (WebInspector.DebuggerPresentationModel.prototype.setBreakpoint.didRequestSourceMapping):
        (WebInspector.DebuggerPresentationModel.prototype.setBreakpoint):
        (WebInspector.DebuggerPresentationModel.prototype._breakpointAdded.didRequestSourceMapping):
        (WebInspector.DebuggerPresentationModel.prototype._breakpointAdded):
        (WebInspector.DebuggerPresentationModel.prototype.set selectedCallFrame.didRequestSourceMapping):
        (WebInspector.DebuggerPresentationModel.prototype.set selectedCallFrame):
        (WebInspector.PresentationBreakpoint): Breakpoint wrapper for UI.
        (WebInspector.PresentationBreakpoint.prototype.get sourceFileId):
        (WebInspector.PresentationBreakpoint.prototype.get lineNumber):
        (WebInspector.PresentationBreakpoint.prototype.get condition):
        (WebInspector.PresentationBreakpoint.prototype.get enabled):
        (WebInspector.PresentationBreakpoint.prototype.get url):
        (WebInspector.PresentationBreakpoint.prototype.get resolved):
        (WebInspector.PresentationBreakpoint.prototype.loadSnippet):
        * inspector/front-end/ScriptFormatter.js:
        (WebInspector.ScriptFormatter.prototype.formatContent.didFormatChunks):
        (WebInspector.ScriptFormatter.prototype.formatContent):
        * inspector/front-end/SourceFile.js:
        (WebInspector.SourceFile.prototype.requestSourceMapping):
        (WebInspector.FormattedSourceFile.prototype.requestSourceMapping):
        (WebInspector.FormattedSourceFile.prototype._didRequestContent):
        (WebInspector.SourceMapping):
        (WebInspector.SourceMapping.prototype.scriptLocationToSourceLocation):
        (WebInspector.SourceMapping.prototype.sourceLocationToScriptLocation):
        (WebInspector.FormattedSourceMapping):
        (WebInspector.FormattedSourceMapping.prototype.scriptLocationToSourceLocation):
        (WebInspector.FormattedSourceMapping.prototype.sourceLocationToScriptLocation):
        (WebInspector.FormattedSourceMapping.prototype._convertPosition):

2011-03-28  Nancy Piedra  <nancy.piedra@nokia.com>

        Reviewed by Csaba Osztrogonác.

        This patch fixes linking errors on Qt Webkit Windows MinGW builds.
        This patch sets the BUILDING_WEBKIT & QT_MAKEDLL macros so that
        QWEBKIT_EXPORT is defined as follows:
        #define QWEBKIT_EXPORT Q_DECL_EXPORT

        No new tests needed since only changing .pro file.

        * WebCore.pro:

2011-03-28  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: source frame should show the error to user when live edit is failed
        https://bugs.webkit.org/show_bug.cgi?id=57002

        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.SourceFrameDelegateForScriptsPanel.prototype.editScriptSource):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._handleSave.didSaveScriptSource):
        (WebInspector.SourceFrame.prototype._handleSave):
        (WebInspector.SourceFrameDelegate.prototype.editScriptSource):

2011-03-26  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Expose the AtkValue interface for WAI-ARIA sliders
        https://bugs.webkit.org/show_bug.cgi?id=56655

        Implement AtkValue interface for WAI-ARIA sliders.

        Test: platform/gtk/accessibility/aria-slider-required-attributes.html

        * accessibility/gtk/AXObjectCacheAtk.cpp:
        (WebCore::AXObjectCache::postPlatformNotification): Emit the
        'property-change::accessible-value' signal when needed.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (core): New, returns a core object from an AtkValue.
        (webkitAccessibleValueGetCurrentValue): New, implements AtkValue.
        (webkitAccessibleValueGetMaximumValue): Ditto.
        (webkitAccessibleValueGetMinimumValue): Ditto.
        (webkitAccessibleValueSetCurrentValue): Ditto.
        (webkitAccessibleValueGetMinimumIncrement): Ditto.
        (atkValueInterfaceInit): Ditto.
        (GetAtkInterfaceTypeFromWAIType): Add ATK_TYPE_VALUE.
        (getInterfaceMaskFromObject): Set the WAI_VALUE bit for sliders.

2011-03-28  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Dan Bernstein.

        Assigning location.path to something that doesn't start with / mangles the authority
        https://bugs.webkit.org/show_bug.cgi?id=57209
        <rdar://problem/9195132>
        
        Tests: http/tests/uri/assign-path-with-leading-slash.html
               http/tests/uri/assign-path-without-leading-slash.html

        * platform/KURL.cpp:
        (WebCore::KURL::setPath): If the new path does not have a leading slash, add one.

2011-03-28  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        Extract functions to update logical width from computeInlineDirectionPositionsForLine
        https://bugs.webkit.org/show_bug.cgi?id=57213

        Extracted updateLogicalWidthForLeftAlignedBlock, updateLogicalWidthForRightAlignedBlock,
        and updateLogicalWidthForCenterAlignedBlock from computeInlineDirectionPositionsForLine.

        They are used to update logical widths, logical left, and total logical width for left,
        right, and center aligned blocks.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::updateLogicalWidthForLeftAlignedBlock):
        (WebCore::updateLogicalWidthForRightAlignedBlock):
        (WebCore::updateLogicalWidthForCenterAlignedBlock):
        (WebCore::RenderBlock::computeInlineDirectionPositionsForLine):

2011-03-28  Evan Martin  <evan@chromium.org>

        Reviewed by Ryosuke Niwa.

        Refactor duplicate code in HTMLTextElement
        https://bugs.webkit.org/show_bug.cgi?id=57215

        * html/HTMLTitleElement.cpp:
        (WebCore::HTMLTitleElement::childrenChanged):
        This method did an equivalent loop to the text() method on
        the same object.

2011-03-27  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Don't call WebSocket::didClose() more than once.
        https://bugs.webkit.org/show_bug.cgi?id=57081

        If WebSocket close() is called, and connection is established, then
        it will call didClose() that resets m_channel to 0.
        After that, when connection is closed, WebSocketChannel will call
        didClose for the WebSocket instance.

        Call WebSocketChannel::disconnect() before m_channel = 0 to make sure
        WebSocketChannel suppress the second didClose().

        Test: http/tests/websocket/tests/close-unref-websocket.html

        * websockets/WebSocket.cpp:
        (WebCore::WebSocket::didClose):

2011-03-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Fix script-src redirect handling
        https://bugs.webkit.org/show_bug.cgi?id=57196

        Resource-loading requirements in CSP apply to each hop in the redirect
        chain.  To make that work properly, we need to move enforcement into
        the loader.  Fortunately, we already have a choke-point in the loader
        for enforcing this kind of policy.

        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::requestScript):
        * html/parser/HTMLDocumentParser.cpp:
        * html/parser/HTMLDocumentParser.h:
        * html/parser/HTMLScriptRunnerHost.h:
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::canRequest):
        * page/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::allowScriptFromSource):
        * page/ContentSecurityPolicy.h:

2011-03-27  Jer Noble  <jer.noble@apple.com>

        Reviewed by Maciej Stachowiak.

        Full Screen: disable keyboard access by default
        https://bugs.webkit.org/show_bug.cgi?id=56684

        Pass whether keyboard access was requested up to ChromeClient when asking
        if fullscreen mode is supported.

        * dom/Document.cpp:
        (WebCore::Document::webkitRequestFullScreenForElement):
        * page/ChromeClient.h:
        (WebCore::ChromeClient::supportsFullscreenForElement):

2011-03-27  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Andreas Kling.

        [CMake] Generate WebKitVersion.h
        https://bugs.webkit.org/show_bug.cgi?id=57128

        This file will be used for the user agent string by the CMake based ports.

        * CMakeLists.txt:

2011-03-27  Ben Taylor  <bentaylor.solx86@gmail.com>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=57170  Fix last elements
        in an enum to remove a trailing comma. Sun Studio 12 CC errors out.

        Compile fix only, no actual code change.

        * dom/ExceptionCode.h:
        * editing/EditorInsertAction.h:
        * loader/FrameLoaderTypes.h:
        * platform/PlatformKeyboardEvent.h:
        * platform/ScrollTypes.h:
        * platform/graphics/BitmapImage.h:
        * platform/image-decoders/ImageDecoder.h:
        * platform/network/ProtectionSpace.h:
        * platform/network/ResourceHandleClient.h:
        * platform/network/ResourceRequestBase.h:
        * platform/text/TextCodec.h:

2011-03-27  Rob Buis  <rwlbuis@gmail.com>

        Reviewed by Nikolas Zimmermann.

        Text on path positioning at zero startOffset
        https://bugs.webkit.org/show_bug.cgi?id=56245

        Since for length 0 no previous point is set, choose epsilon
        length to get normal at starting point of the path.

        Test: svg/text/text-path-middle-align.svg

        * platform/graphics/Path.cpp:
        (WebCore::Path::normalAngleAtLength):

2011-03-27  Ben Taylor  <bentaylor.solx86@gmail.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=57151, patch derived from set
        created by Thiago Macieria in bug https://bugs.webkit.org/show_bug.cgi?id=24932

        Fix compile issue on Solaris 10/Sun Studio 12 regarding ambiguity on ?: functions

        * bindings/js/JSJavaScriptCallFrameCustom.cpp:
        (WebCore::JSJavaScriptCallFrame::thisObject):

2011-03-26  Jer Noble  <jer.noble@apple.com>

        Unreviewed build fix.

        Fix a bug which was causing the "skip back" button to be missing, causing 
        the media layout tests to fail.

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::shouldRenderMediaControlPart):

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

        Reviewed by Maciej Stachowiak.

        <rdar://problem/9180716> REGRESSION (r80582): Angle bracket rendered upright in vertical mode
        https://bugs.webkit.org/show_bug.cgi?id=57169

        Test: fast/blockflow/fallback-orientation.html

        * platform/graphics/FontFastPath.cpp:
        (WebCore::Font::glyphDataForCharacter): If the font has vertical glyphs, use it, rather
        than continuing down the fallback list.

2011-03-26  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin Adler.

        Follow-up fix for crash with giant inline stylesheets - actually don't crash, and add test
        https://bugs.webkit.org/show_bug.cgi?id=56150

        Test: fast/css/giant-stylesheet-crash.html

        * dom/StyleElement.cpp:
        (WebCore::StyleElement::process):

2011-03-22  Jer Noble  <jer.noble@apple.com>

        Reviewed by Eric Carlson.

        Media controls must use full screen style when in new full screen mode.
        https://bugs.webkit.org/show_bug.cgi?id=56851

        Add new full screen styles for the full screen media elements.

        * DerivedSources.make: Add fullScreenQuickTime.css.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * css/CSSStyleSelector.cpp: Removed loadFullScreenRulesIfNeeded().
        (WebCore::CSSStyleSelector::CSSStyleSelector): Ditto.
        (WebCore::CSSStyleSelector::styleForElement): Load full screen rules 
            if needed.
        * css/fullscreenQuickTime.css: Added.
        * css/mediaControls.css:
        * html/shadow/MediaControls.cpp:
        (WebCore::isFullScreen): Added.
        (WebCore::MediaControls::create): Add new full screen volume controls.
        (WebCore::MediaControls::updateStyle): Ditto.
        (WebCore::MediaControls::update): Ditto.
        (WebCore::MediaControls::updateVolumeSliderContainer): Ditto.
        (WebCore::MediaControls::forwardEvent): Ditto.
        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlFullscreenVolumeSliderElement::MediaControlFullscreenVolumeSliderElement): Added.
        (WebCore::MediaControlFullscreenVolumeSliderElement::create): Added.
        (WebCore::MediaControlFullscreenVolumeSliderElement::shadowPseudoId): Added.
        (WebCore::MediaControlFullscreenVolumeMinButtonElement::MediaControlFullscreenVolumeMinButtonElement): Addet
        (WebCore::MediaControlFullscreenVolumeMinButtonElement::create): Added.
        (WebCore::MediaControlFullscreenVolumeMinButtonElement::defaultEventHandler): Added.
        (WebCore::MediaControlFullscreenVolumeMinButtonElement::shadowPseudoId): Added.
        (WebCore::MediaControlFullscreenVolumeMaxButtonElement::MediaControlFullscreenVolumeMaxButtonElement): Added.
        (WebCore::MediaControlFullscreenVolumeMaxButtonElement::create): Added.
        (WebCore::MediaControlFullscreenVolumeMaxButtonElement::defaultEventHandler): Added.
        (WebCore::MediaControlFullscreenVolumeMaxButtonElement::shadowPseudoId): Added.
        * rendering/MediaControlElements.h:
            Added m_overridePosition.
        (WebCore::MediaControlVolumeSliderContainerElement::setOverridesPosition): Added.
        * rendering/MediaControlElements.h:
        (WebCore::MediaControlVolumeSliderContainerElement::overridesPosition): Added.
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::extraFullScreenStyleSheet): Added.
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::extraFullScreenStyleSheet): Added.
        (WebCore::RenderThemeMac::shouldRenderMediaControlPart): Render seek forward and backward 
            buttons.

2011-03-26  Jer Noble  <jer.noble@apple.com>

        Reviewed by Dan Bernstein.

        RenderMedia should obey the view's flattening bit.
        https://bugs.webkit.org/show_bug.cgi?id=57156

        Paint the current frame in software when the associated FrameView
        has its flattening bit set.

        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::paintReplaced):

2011-03-26  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed build fix for !ENABLE(DOM_STORAGE).

        * storage/StorageTracker.cpp:
            Added #if ENABLE(DOM_STORAGE) like in the other storage files.

2011-03-26  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Benjamin Poulain.

        [Qt] Remove GraphicsLayerTextureMapper::nativeLayer
        https://bugs.webkit.org/show_bug.cgi?id=57141

        GraphicsLayer::nativeLayer was removed in r73380.

        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        * platform/graphics/texmap/GraphicsLayerTextureMapper.h:

2011-03-26  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Teach Content Security Policy how to parse source-list
        https://bugs.webkit.org/show_bug.cgi?id=54799

        This patch is larger than I would like, but I wasn't sure how to make
        it any smaller while still being reasonably testable.  I've left out
        some features (such as host wildcarding and 'self') so I can add them
        in later patches with tests.

        Test: http/tests/security/contentSecurityPolicy/source-list-parsing.html

        * bindings/ScriptControllerBase.cpp:
        * dom/ScriptElement.cpp:
        * html/parser/HTMLDocumentParser.cpp:
        * loader/FrameLoader.cpp:
            - Add include explicitly now that we're not spamming the include
              everywhere.
        * dom/Document.cpp:
        (WebCore::Document::initSecurityContext):
            - We need to pass the SecurityOrigin object to
              ContentSecurityPolicy so that it can resolve implicit parts of
              source patterns, such as the scheme.
        * dom/Document.h:
            - Forward declare ContentSecurityPolicy rather than including the
              header.  Technically this could be a separate change, but I was
              getting annoyed at the world re-builds.
        * page/ContentSecurityPolicy.cpp:
        (WebCore::skipExactly):
        (WebCore::skipUtil):
        (WebCore::skipWhile):
            - Clean up these parser helper functions.  We might consider moving
              them to a more general location.  They're very helpful for
              writing secure HTTP header parsers.
        (WebCore::CSPSource::CSPSource):
            - New class to represent one source in a source-list.
        (WebCore::CSPSource::matches):
        (WebCore::CSPSource::schemeMatches):
        (WebCore::CSPSource::hostMatches):
        (WebCore::CSPSource::portMatches):
        (WebCore::CSPSource::isSchemeOnly):
            - Currently we represent scheme-only sources using with an empty
              m_host.  Another approach I considered was using another bool,
              but that seemed slighly messier.
        (WebCore::CSPSourceList::CSPSourceList):
            - CSPSourceList doesn't need to ref SecurityOrigin because
              CSPSourceList is owned by ContentSecurityPolicy, which holds a
              ref.
        (WebCore::CSPSourceList::parse):
        (WebCore::CSPSourceList::matches):
        (WebCore::CSPSourceList::parseSource):
        (WebCore::CSPSourceList::parseScheme):
        (WebCore::CSPSourceList::parseHost):
        (WebCore::CSPSourceList::parsePort):
            - A basic "segment and recurse" parser.  This parser causes us to
              take more branches than we need, but I don't think we need to
              squeeze every last ouch of performance out of this parser.  This
              approach is more simple than some of the other approaches I
              tried.
        (WebCore::CSPSourceList::addSourceSelf):
        (WebCore::CSPDirective::CSPDirective):
        (WebCore::CSPDirective::allows):
        (WebCore::ContentSecurityPolicy::ContentSecurityPolicy):
        (WebCore::ContentSecurityPolicy::parse):
        (WebCore::ContentSecurityPolicy::parseDirective):
        (WebCore::ContentSecurityPolicy::addDirective):
            - I couldn't resist re-writing this parser to use the helper
              functions and to match the style of the source-list parser.
        * page/ContentSecurityPolicy.h:
        (WebCore::ContentSecurityPolicy::create):
            - Accept a SecurityOrigin context object.

2011-03-26  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed EFL and WinCE build fix for r81977.

        * platform/graphics/FontPlatformData.h:

2011-03-26  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed WinCE build fix for r82000.

        * platform/wince/FileSystemWinCE.cpp:
        (WebCore::openFile): Added missing function.

2011-03-25  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix, don't use the new FPD implementation yet, until we can merge ours with it.

        * platform/graphics/FontPlatformData.h:

2011-03-25  Jer Noble  <jer.noble@apple.com>

        Reviewed by Eric Carlson.

        MediaPlayerPrivateQuickTimeVisualContext should use the Application Cache during load.
        https://bugs.webkit.org/show_bug.cgi?id=57047

        No new tests.
        
        When loading a URL, checkk osee if the Appplication Cache has a version of that URL
        stored; if so, use the local path to that cached media instead of the remote URL.

        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::loadInternal):
        * platform/graphics/win/QTMovie.cpp:
        (QTMovie::loadPath):
        * platform/graphics/win/QTMovie.h:

2011-03-25  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/9134330> Missing expansion before ideograph at the beginning or end of a text run
        https://bugs.webkit.org/show_bug.cgi?id=57106

        Test: fast/text/justify-ideograph-leading-expansion.html

        * platform/graphics/TextRun.h:
        Replaced TrailingExpansionBehavior enum with ExpansionBehavior flags.
        (WebCore::TextRun::TextRun): Constructors now take an expansionBehavior parameter.
        (WebCore::TextRun::allowsLeadingExpansion): Added this accessor.
        (WebCore::TextRun::allowsTrailingExpansion): Changed to use the m_expansionBehavior member.
        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::WidthIterator): Initialize m_isAfterExpansion from the TextRun, allowing
        leading expansion when appropriate.
        (WebCore::WidthIterator::advance): Moved the last-glyph-in-run check to only apply to expansion
        after the glyph, not expansion before the glyph, since that is not trailing expansion. Added code
        to handle expansion before the first glyph.
        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::ComplexTextController::ComplexTextController): Initialize m_afterExpansion from the
        TextRun, allowing leading expansion when appropriate. Set m_runWidthSoFar to the leading expansion.
        (WebCore::ComplexTextController::offsetForPosition): Account for leading expansion.
        (WebCore::ComplexTextController::adjustGlyphsAndAdvances): Similar to WidthIterator::advance()
        * platform/graphics/mac/ComplexTextController.h: Added m_leadingExpansion member variable.
        * rendering/InlineBox.h:
        (WebCore::InlineBox::InlineBox): Renamed m_hasSelectedChildren to m_hasSelectedChildrenOrCanHaveLeadingExpansion
        to reflect the use of this bit by InlineTextBox.
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::selectionRect): Replaced calls to trailingExpansionBehavior() with expansionBehavior().
        (WebCore::InlineTextBox::paint): Ditto.
        (WebCore::InlineTextBox::paintSelection): Ditto.
        (WebCore::InlineTextBox::paintCompositionBackground): Ditto.
        (WebCore::InlineTextBox::paintSpellingOrGrammarMarker): Ditto.
        (WebCore::InlineTextBox::paintTextMatchMarker): Ditto.
        (WebCore::InlineTextBox::computeRectForReplacementMarker): Ditto.
        (WebCore::InlineTextBox::offsetForPosition): Ditto.
        (WebCore::InlineTextBox::positionForOffset): Ditto.
        * rendering/InlineTextBox.h:
        (WebCore::InlineTextBox::canHaveLeadingExpansion): Added this accessor.
        (WebCore::InlineTextBox::setCanHaveLeadingExpansion): Ditto.
        (WebCore::InlineTextBox::expansionBehavior): Replaced trailingExpansionBehavior() with this function,
        which also considers canHaveLeadingExpansion().
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::computeInlineDirectionPositionsForLine): Call setCanHaveLeadingExpansion() on
        text boxes that can have leading expansion. Avoid negative expansion.
        * rendering/RootInlineBox.cpp:
        * rendering/RootInlineBox.h:
        (WebCore::RootInlineBox::hasSelectedChildren): Updated for renaming of the flag.
        (WebCore::RootInlineBox::setHasSelectedChildren): Ditto.

2011-03-23  Jer Noble  <jer.noble@apple.com>

        Reviewed by Maciej Stachowiak.

        MediaPlayerPrivateAVFoundation should use the Application Cache during load.
        https://bugs.webkit.org/show_bug.cgi?id=56997

        No new tests.

        When loading a URL, check to see if the Application Cache has a version of that URL
        stored; if so, use the local path to that cached media instead of the remote URL.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::prepareToPlay): Check to see if the media should be loaded
            from the application cache.
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerForURL):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerForCacheResource): Added.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayer): Split out from createAVPlayerForURL.

2011-03-25  Ben Taylor  <bentaylor.solx86@gmail.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=57122. Solaris 10/SunStudio 12 expect
        both sides of a ?: operation to have the same types.  Extracted from original
        https://bugs.webkit.org/show_bug.cgi?id=24932, patch 13 of 17, and originally
        created by Thiago Macieira.

        fixes a compile issue on Solaris 10/SunStudio 12

        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::serverRedirectSourceForHistory):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::loadWithNavigationAction):

2011-02-03  Jer Noble  <jer.noble@apple.com>

        Reviewed by Maciej Stachowiak.

        MediaPlayerPrivateQTKit should use the Application Cache during load.        
        https://bugs.webkit.org/show_bug.cgi?id=53818

        No new tests.

        When loading a URL, check to see if the Application Cache has a version of that URL
        stored; if so, use that data instead of the remote URL.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::commonMovieAttributes):
        (WebCore::MediaPlayerPrivateQTKit::createQTMovie):
        (WebCore::MediaPlayerPrivateQTKit::loadInternal):

2011-03-25  James Robinson  <jamesr@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] Move draw implementations to CCLayerImpl for everything except content layers
        https://bugs.webkit.org/show_bug.cgi?id=56793

        Moves the implementation of the layer's draw() function from LayerChromium subclasses to CCLayerImpl subclasses for
        all layer types except content layers.  This gets us closer to decoupling the composite step itself from updating the layers.

        The biggest change in this patch is adding a set of CCLayerImpl subclasses to implement the different drawing routines
        and moving the code from each XXXLayerChromium to CCXXXLayerImpl.  In order to render from the CCLayerImpl side all state
        needed at draw time also has to be synchronized, which is performed in pushPropertiesTo().

        On the LayerRendererChromium side there are a few changes.  I've split the updateContents calls on LayerChromiums into two operations
        tentatively named 'paintContentsIfNeeded' and 'updateCompositorResources'.  paintContents() is used for any code that calls into WebKit in order to generate
        new pixel data.  It's expected that this call may take a long period of time and may involve "odd" side effects.  updateCompositorResources() is used for
        code that needs to update the compositor's texture data or other state.  It is not expected that this callback will take long (since it's just inserting
        commands into the GL command stream, ideally) and this call is expected to have access to the compositor's context, unlike paintContents().

        The updateAndDrawLayers cycle now looks like this:
        1.) update the root content layer
        2.) update the root layer scrollbars
        3.) for each LayerChromium in tree order:
          a.) ensure a CCLayerImpl of the correct type exists for this layer
          b.) push all draw time properties from the LayerChromium to the CCLayerImpl
          c.) construct the appropriate draw transforms, render surfaces and render surface z-order sublayer lists
        4.) for each LayerChromium in tree order, paint the layer's contents
        5.) for each LayerChromium in tree order, update the associate compositor resources (textures, etc)
        6.) draw the root layer and its scrollbars
        7.) for each CCLayerImpl in render surface order, draw it

        Step 3 should really happen after step 5, but right now painting a content layer requires knowledge of the render surface properties and draw transforms
        in order to paint.  We also currently push layer properties from LayerChromium->CCLayerImpls twice now - once at 3.b and once after 5 so we can pick
        up any texture updates.  This will also get fixed when the paint dependency on render surfaces is resolved.

        I haven't modified the root layer or content layers in order to minimize conflicts with the other pending work in that area.

        Tests: compositing/

        * WebCore.gypi:
        * platform/graphics/chromium/Canvas2DLayerChromium.cpp:
        (WebCore::Canvas2DLayerChromium::updateCompositorResources):
        * platform/graphics/chromium/Canvas2DLayerChromium.h:
        * platform/graphics/chromium/CanvasLayerChromium.cpp:
        (WebCore::CanvasLayerChromium::createCCLayerImpl):
        (WebCore::CanvasLayerChromium::pushPropertiesTo):
        * platform/graphics/chromium/CanvasLayerChromium.h:
        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::requiresClippedUpdateRect):
        (WebCore::ContentLayerChromium::paintContentsIfDirty):
        (WebCore::ContentLayerChromium::updateCompositorResources):
        (WebCore::ContentLayerChromium::bindContentsTexture):
        * platform/graphics/chromium/ContentLayerChromium.h:
        * platform/graphics/chromium/ImageLayerChromium.cpp:
        (WebCore::ImageLayerChromium::paintContentsIfDirty):
        * platform/graphics/chromium/ImageLayerChromium.h:
        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::LayerChromium):
        (WebCore::LayerChromium::cleanupResources):
        (WebCore::LayerChromium::setLayerRenderer):
        (WebCore::LayerChromium::setName):
        (WebCore::LayerChromium::pushPropertiesTo):
        (WebCore::LayerChromium::dumpLayer):
        (WebCore::LayerChromium::createCCLayerImpl):
        (WebCore::LayerChromium::createCCLayerImplIfNeeded):
        (WebCore::LayerChromium::ccLayerImpl):
        (WebCore::LayerChromium::layerRenderer):
        * platform/graphics/chromium/LayerChromium.h:
        (WebCore::LayerChromium::paintContentsIfDirty):
        (WebCore::LayerChromium::updateCompositorResources):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::updateLayers):
        (WebCore::LayerRendererChromium::updatePropertiesAndRenderSurfaces):
        (WebCore::LayerRendererChromium::paintContentsRecursive):
        (WebCore::LayerRendererChromium::updateCompositorResourcesRecursive):
        (WebCore::LayerRendererChromium::drawLayer):
        (WebCore::LayerRendererChromium::initializeSharedObjects):
        * platform/graphics/chromium/LayerRendererChromium.h:
        (WebCore::LayerRendererChromium::canvasLayerProgram):
        (WebCore::LayerRendererChromium::pluginLayerProgram):
        (WebCore::LayerRendererChromium::videoLayerRGBAProgram):
        (WebCore::LayerRendererChromium::videoLayerYUVProgram):
        * platform/graphics/chromium/PluginLayerChromium.cpp:
        (WebCore::PluginLayerChromium::createCCLayerImpl):
        (WebCore::PluginLayerChromium::setTextureId):
        (WebCore::PluginLayerChromium::pushPropertiesTo):
        * platform/graphics/chromium/PluginLayerChromium.h:
        (WebCore::PluginLayerChromium::textureId):
        * platform/graphics/chromium/VideoLayerChromium.cpp:
        (WebCore::VideoLayerChromium::createCCLayerImpl):
        (WebCore::VideoLayerChromium::updateCompositorResources):
        (WebCore::VideoLayerChromium::pushPropertiesTo):
        * platform/graphics/chromium/VideoLayerChromium.h:
        * platform/graphics/chromium/WebGLLayerChromium.cpp:
        (WebCore::WebGLLayerChromium::updateCompositorResources):
        * platform/graphics/chromium/WebGLLayerChromium.h:
        * platform/graphics/chromium/cc/CCCanvasLayerImpl.cpp: Copied from Source/WebCore/platform/graphics/chromium/PluginLayerChromium.cpp.
        (WebCore::CCCanvasLayerImpl::CCCanvasLayerImpl):
        (WebCore::CCCanvasLayerImpl::~CCCanvasLayerImpl):
        (WebCore::CCCanvasLayerImpl::draw):
        (WebCore::CCCanvasLayerImpl::dumpLayerProperties):
        * platform/graphics/chromium/cc/CCCanvasLayerImpl.h: Copied from Source/WebCore/platform/graphics/chromium/PluginLayerChromium.h.
        (WebCore::CCCanvasLayerImpl::create):
        (WebCore::CCCanvasLayerImpl::setTextureId):
        (WebCore::CCCanvasLayerImpl::setPremultipliedAlpha):
        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        (WebCore::CCLayerImpl::descendantsDrawsContent):
        (WebCore::CCLayerImpl::updateCompositorResources):
        (WebCore::CCLayerImpl::writeIndent):
        * platform/graphics/chromium/cc/CCLayerImpl.h:
        (WebCore::CCLayerImpl::setAnchorPoint):
        (WebCore::CCLayerImpl::setAnchorPointZ):
        (WebCore::CCLayerImpl::setMasksToBounds):
        (WebCore::CCLayerImpl::setOpacity):
        (WebCore::CCLayerImpl::setPosition):
        (WebCore::CCLayerImpl::setPreserves3D):
        (WebCore::CCLayerImpl::setSublayerTransform):
        (WebCore::CCLayerImpl::setTransform):
        * platform/graphics/chromium/cc/CCPluginLayerImpl.cpp: Copied from Source/WebCore/platform/graphics/chromium/PluginLayerChromium.cpp.
        (WebCore::CCPluginLayerImpl::CCPluginLayerImpl):
        (WebCore::CCPluginLayerImpl::~CCPluginLayerImpl):
        (WebCore::CCPluginLayerImpl::draw):
        (WebCore::CCPluginLayerImpl::dumpLayerProperties):
        * platform/graphics/chromium/cc/CCPluginLayerImpl.h: Copied from Source/WebCore/platform/graphics/chromium/PluginLayerChromium.h.
        (WebCore::CCPluginLayerImpl::create):
        (WebCore::CCPluginLayerImpl::setTextureId):
        * platform/graphics/chromium/cc/CCVideoLayerImpl.cpp: Added.
        (WebCore::CCVideoLayerImpl::CCVideoLayerImpl):
        (WebCore::CCVideoLayerImpl::~CCVideoLayerImpl):
        (WebCore::CCVideoLayerImpl::setTexture):
        (WebCore::CCVideoLayerImpl::draw):
        (WebCore::CCVideoLayerImpl::drawYUV):
        (WebCore::CCVideoLayerImpl::drawRGBA):
        (WebCore::CCVideoLayerImpl::dumpLayerProperties):
        * platform/graphics/chromium/cc/CCVideoLayerImpl.h: Copied from Source/WebCore/platform/graphics/chromium/PluginLayerChromium.h.
        (WebCore::CCVideoLayerImpl::create):
        (WebCore::CCVideoLayerImpl::setSkipsDraw):
        (WebCore::CCVideoLayerImpl::setFrameFormat):

2011-03-25  Oliver Hunt  <oliver@apple.com>

        Reviewed by Darin Adler.

        Allow defineOwnProperty to work on DOMObjects
        https://bugs.webkit.org/show_bug.cgi?id=57129

        As other engines are allowing defineOwnProperty to be applied
        to host objects there's no reason for us to retain this
        restriction.

        * bindings/js/JSDOMWrapper.cpp:
        * bindings/js/JSDOMWrapper.h:

2011-03-25  Andy Estes  <aestes@apple.com>

        Reviewed by Adele Peterson.

        REGRESSION (r70748): latest nightly builds kills AC_QuickTime.js
        https://bugs.webkit.org/show_bug.cgi?id=49016

        AC_QuickTime.js uses the common <object>/<embed> paradigm to embed the 
        QuickTime plug-in in web pages. r70748 removed our mapping of classids 
        to MIME types, which causes WebKit to fall back from the object to the 
        embed tag when QuickTime is embedded by this script. The script emits 
        the following embed tag to embed a QuickTime movie with a poster frame: 

        <embed src="poster-frame.png" target="quicktimeplayer" href="movie.mov"> 

        The expectation is that a QuickTime plug-in is instantiated to display the 
        poster frame, since QuickTime registers for many common image MIME 
        types. This is how Gecko behaves for embed. However, WebKit prefers to 
        use its native image rendering for image embeds, in which case no movie 
        is played when the poster frame is clicked. 

        Fix this by changing embed to check for a plug-in that can handle the 
        image type before rendering the image natively. This matches Gecko. 

        Test: plugins/embed-prefers-plugins-for-images.html

        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::HTMLEmbedElement):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::HTMLObjectElement):
        (WebCore::HTMLObjectElement::parametersForPlugin):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::HTMLPlugInImageElement):
        (WebCore::HTMLPlugInImageElement::isImageType):
        (WebCore::HTMLPlugInImageElement::wouldLoadAsNetscapePlugin):
        * html/HTMLPlugInImageElement.h:
        (WebCore::HTMLPlugInImageElement::shouldPreferPlugInsForImages):
        * loader/EmptyClients.h:
        (WebCore::EmptyFrameLoaderClient::objectContentType):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::defaultObjectContentType):
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:
        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::resourceWillUsePlugin):
        (WebCore::SubframeLoader::requestPlugin):
        (WebCore::SubframeLoader::requestObject):
        (WebCore::SubframeLoader::shouldUsePlugin):
        * loader/SubframeLoader.h:

2011-03-23  Jer Noble  <jer.noble@apple.com>

        Reviewed by Eric Carlson.

        Application Cache should save audio/ and video/ mime types as flat files
        https://bugs.webkit.org/show_bug.cgi?id=53784
        <rdar://problem/8932473>

        No new tests, as this behavior is not possible to test without changes to the MediaPlayer engines.

        Store certain mime types as flat files alongside the Application Cache database.
        This requires plumbing the saved file path from ApplicationCacheStorage through
        to ApplicationCacheResource.

        (WebCore::ApplicationCacheStorage::openDatabase): Modify the CacheResourceData schema and
            add a new DeletedCacheResources table, add a new CacheResourceDataDeleted trigger.
        (WebCore::ApplicationCacheStorage::store): Add the new path data when adding new rows in 
            CacheResourceData, and store media resources as flat files.
        (WebCore::ApplicationCacheStorage::loadCache): Pull the "path" column from CacheResourceData
            when loading cache items.
        (WebCore::ApplicationCacheStorage::remove): Call checkForDeletedResources.
        (WebCore::ApplicationCacheStorage::empty): Ditto.
        (WebCore::ApplicationCacheStorage::storeCopyOfCache): Ditto.
        (WebCore::ApplicationCacheStorage::deleteCacheGroup): Ditto.
        (WebCore::ApplicationCacheStorage::checkForDeletedResources): Walk through DeletedCacheResourceData
            looking for entries with non-empty "path" columns; if found, delete.
        (WebCore::ApplicationCacheStorage::flatFileAreaSize): Walk through CacheResourceData rows
            and sum the file size of those rows with flat file storage.
        (WebCore::ApplicationCacheStorage::verifySchemaVersion): Call deleteTables() instead of 
            clearAllTables() directly.
        (WebCore::ApplicationCacheStorage::deleteTables): Call empty() before deleting the tables,
            so that flat files get deleted.
        (WebCore::ApplicationCacheStorage::shouldStoreResourceAsFlatFile): Added.
        (WebCore::ApplicationCacheStorage::writeDataToUniqueFileInDirectory): Added.
        * loader/appcache/ApplicationCacheStorage.h:
        * platform/win/FileSystemWin.cpp:
        (WebCore::openFile): Implement openFile on Windows.

2011-03-24  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=56909
        
        Add a simplified normal flow layout path optimization for overflow recomputation
        and for positioned objects inside relative positioned containers.

        Currently there is an optimized code path for positioned objects, but as soon as
        we encounter a normal flow object in the containing block chain, we lose the
        optimization.

        This patch adds a new type of style difference called SimplifiedLayout that is
        returned when only overflow needs to be recomputed. Whenever a transform changes,
        this is the hint returned now instead of a full layout.
        
        In addition, when positioned objects need layout and start marking up the
        containing block chain, we now propagate the fact that the layout is simplified
        all the way up to the root, even when we encounter normal flow containing
        blocks.
        
        The layoutOnlyPositionedObjects function has been renamed to simplifiedLayout()
        and is now used for all of these cases (in addition to what it handled before).
        
        The simplified layout optimization (even in ToT) did not work correctly when
        static distances needed to be recomputed. In order to make static distance
        computations work with simplified layout, positioned objects now always compute
        their static offsets, even if they explicitly specify left/top.  That way normal
        flow layout never has to re-run when the positioned object moves.  This makes
        movement of a positioned object along a single non-auto axis much faster when the
        other axis is auto. Because this code kicked in more often for absolutely positioned
        objects whose original display was inline, I went ahead and fixed the trailing space
        issue with those objects.  This causes a bunch of layout tests to progress.

        Added fast/block/positioning/static-inline-position-dynamic.html and trailing-space-test.html.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::adjustPositionedBlock):
        (WebCore::RenderBlock::simplifiedNormalFlowLayout):
        (WebCore::RenderBlock::simplifiedLayout):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::setStaticPositions):
        (WebCore::RenderBlock::findNextLineBreak):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::styleDidChange):
        (WebCore::RenderBox::positionLineBox):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::styleWillChange):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock):
        (WebCore::RenderFlexibleBox::layoutHorizontalBox):
        (WebCore::RenderFlexibleBox::layoutVerticalBox):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::RenderObject):
        (WebCore::RenderObject::adjustStyleDifference):
        (WebCore::RenderObject::setStyle):
        (WebCore::RenderObject::styleDidChange):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::needsLayout):
        (WebCore::RenderObject::needsPositionedMovementLayoutOnly):
        (WebCore::RenderObject::needsSimplifiedNormalFlowLayout):
        (WebCore::RenderObject::setNeedsLayout):
        (WebCore::RenderObject::setChildNeedsLayout):
        (WebCore::RenderObject::setNeedsSimplifiedNormalFlowLayout):
        (WebCore::RenderObject::markContainingBlocksForLayout):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::diff):
        * rendering/style/RenderStyleConstants.h:
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::layout):

2011-03-25  Martin Robinson  <mrobinson@igalia.com>

        Fix the GTK+ build until we can implement the new cross-platform
        FontPlatformData.h bits.

        * platform/graphics/FontPlatformData.h: Include the proper old font headers.
        (WebCore::FontPlatformData::FontPlatformData): Eliminate GTK+ specific bits of this file
        which reference our obsolete font implementation.
        (WebCore::FontPlatformData::hash): Ditto.

2011-03-25  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Brian Weinstein.

        Microsoft Windows Presentation Foundation (WPF) plug-in complains about missing xpcom.dll
        https://bugs.webkit.org/show_bug.cgi?id=57119
        <rdar://problem/9054148>
        
        This plug-in from Microsoft links against xpcom.dll, which is a Firefox-specific DLL
        not available in WebKit. The plug-in is fairly widespread, since it was included in
        a Windows Update push at one point.

        * plugins/win/PluginPackageWin.cpp:
        (WebCore::PluginPackage::isPluginBlacklisted): Blacklist npwpf.dll.

2011-03-25  Tony Chang  <tony@chromium.org>

        Try to fix the chromium mac build.
        We used the mac FontPlatformData on chromium mac.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * platform/graphics/FontPlatformData.h:

2011-03-25  Tony Chang  <tony@chromium.org>

        Build fix:
        have chromium and qt use the correct FontPlatformData.h
        https://bugs.webkit.org/show_bug.cgi?id=57115

        * platform/graphics/FontPlatformData.h:

2011-03-25  Beth Dakin  <bdakin@apple.com>

        Reviewed by Dave Hyatt.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=57057 Overlay scrollbars in overflow 
        areas paint behind positive z-index content
        -and corresponding-
        <rdar://problem/9070500>

        Since overlay scrollbars don't clip the scrollable content like other scrollbars do, 
        the only way to get them to paint on top of all possible scrollable content is to 
        make them paint on top of everything. To do this, this patch adds a second trip 
        through the layer tree if it contains overlay scrollbars that need painting.

        After calling paint() on the rootLayer, call paintOverlayScrollers() if 
        containsDirtyOverlayScrollbars() is true. 
        * page/FrameView.cpp:
        (WebCore::FrameView::paintContents):

        RenderLayer has two new member variable. m_containsDirtyOverlayScrollbars is a bool 
        that is set on the root layer when it has child layers that need overlay scrollbars 
        to be painted. m_cachedOverlayScrollbarOffset is an IntPoint to cache the tx and ty 
        of the overlay scrollbars on the first (normal) pass through the layer tree. This 
        prevents us from having to re-enter the render tree during the second (overlay-only) 
        pass. Finally, there is also a new paint flag: PaintLayerPaintingOverlayScrollbars.
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::containsDirtyOverlayScrollbars):
        (WebCore::RenderLayer::setContainsDirtyOverlayScrollbars):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::paintOverflowControls):
        (WebCore::RenderLayer::paintOverlayScrollbars):
        (WebCore::RenderLayer::paintLayer):

2011-03-25  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Sam Weinig.

        WebKit2: Need to be able to set and get the Cookie Storage Policy.
        https://bugs.webkit.org/show_bug.cgi?id=50780

        * platform/network/cf/CookieStorageCFNet.cpp:
        (WebCore::privateCookieStorage):
        Rename privateBrowsingCookieStorage to privateCookieStorage.
        (WebCore::currentCookieStorage):
        Ditto.
        (WebCore::setCurrentCookieStorage):
        Ditto.
        (WebCore::setCookieStoragePrivateBrowsingEnabled):
        Ditto.
        (WebCore::defaultCookieStorage):
        Return the default cookie storage.
        (WebCore::privateBrowsingCookieStorage):
        Return privateCookieStorage().get()
        * platform/network/cf/CookieStorageCFNet.h:

2011-03-25  Emil A Eklund  <eae@chromium.org>

        Reviewed by Dimitri Glazkov.

        Text field "onchange" event is triggered if actual value unchanged
        https://bugs.webkit.org/show_bug.cgi?id=36314

        Change RenderTextControl::subtreeHasChanged to only return true if the
        subtree has changed since the last event was triggered.

        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::insertedIntoDocument):
        (WebCore::HTMLTextFormControlElement::dispatchFormControlChangeEvent):
        * html/HTMLFormControlElement.h:
        (WebCore::HTMLTextFormControlElement::setTextAsOfLastFormControlChangeEvent):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setChecked):
        (WebCore::HTMLInputElement::setValue):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::setValue):
        (WebCore::HTMLTextAreaElement::setNonDirtyValue):

2011-03-25  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by David Hyatt.

        Clean up FontPlatformData structure so that a single implementation
        is used across all ports.  This first patch works for the Windows
        build (both CG and WinCairo), and Cocoa.

        * WebCore.vcproj/WebCore.vcproj:
        * platform/graphics/FontPlatformData.cpp: Added.
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::operator=):
        * platform/graphics/FontPlatformData.h: Added.
        (WebCore::toCTFontRef):
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::hfont):
        (WebCore::FontPlatformData::useGDI):
        (WebCore::FontPlatformData::font):
        (WebCore::FontPlatformData::cgFont):
        (WebCore::FontPlatformData::size):
        (WebCore::FontPlatformData::setSize):
        (WebCore::FontPlatformData::syntheticBold):
        (WebCore::FontPlatformData::syntheticOblique):
        (WebCore::FontPlatformData::isColorBitmapFont):
        (WebCore::FontPlatformData::orientation):
        (WebCore::FontPlatformData::textOrientation):
        (WebCore::FontPlatformData::widthVariant):
        (WebCore::FontPlatformData::setOrientation):
        (WebCore::FontPlatformData::scaledFont):
        (WebCore::FontPlatformData::fontFace):
        (WebCore::FontPlatformData::hash):
        (WebCore::FontPlatformData::operator==):
        (WebCore::FontPlatformData::isHashTableDeletedValue):
        (WebCore::FontPlatformData::hashTableDeletedFontValue):
        * platform/graphics/cg/FontPlatformData.h: Removed.
        * platform/graphics/cocoa/FontPlatformData.h: Removed.
        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore::~FontPlatformData):
        (WebCore::FontPlatformData::platformDataInit):
        (WebCore::FontPlatformData::platformDataAssign):
        * platform/graphics/win/FontPlatformDataCGWin.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::~FontPlatformData):
        (WebCore::FontPlatformData::platformDataInit):
        (WebCore::FontPlatformData::platformDataAssign):
        * platform/graphics/win/FontPlatformDataCairoWin.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::~FontPlatformData):
        (WebCore::FontPlatformData::platformDataInit):
        (WebCore::FontPlatformData::platformDataAssign):
        * platform/graphics/win/FontPlatformDataWin.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        * platform/graphics/win/cairo/FontPlatformData.h: Removed.

2011-03-25  Enrica Casucci  <enrica@apple.com>

        Reviewed by Oliver Hunt.

        Pasteboard data's RTF data doesn't always include URLs via NSLinkAttributeName.
        https://bugs.webkit.org/show_bug.cgi?id=57107
        <rdar://problem/9084267>

        If the selection is at the beginning of content inside an anchor tag
        we move the selection start to include the anchor.
        
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::writeSelection): Modified to change the selection
        start according to the new rule.

2011-03-25  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: refactor Network domain's frame tree API
        https://bugs.webkit.org/show_bug.cgi?id=57103

        * inspector/Inspector.json:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::buildObjectForFrameResource):
        (WebCore::buildObjectForCachedResource):
        (WebCore::InspectorResourceAgent::willSendRequest):
        (WebCore::InspectorResourceAgent::didLoadResourceFromMemoryCache):
        (WebCore::buildObjectForFrame):
        (WebCore::buildObjectForFrameTree):
        (WebCore::InspectorResourceAgent::didCommitLoad):
        (WebCore::InspectorResourceAgent::enable):
        * inspector/front-end/NetworkManager.js:
        (WebInspector.NetworkManager.prototype.requestContent):
        (WebInspector.NetworkDispatcher):
        (WebInspector.NetworkDispatcher.prototype.willSendRequest):
        (WebInspector.NetworkDispatcher.prototype.didReceiveResponse):
        (WebInspector.NetworkDispatcher.prototype.didLoadResourceFromMemoryCache):
        (WebInspector.NetworkDispatcher.prototype.frameDetachedFromParent):
        (WebInspector.NetworkDispatcher.prototype.didCommitLoadForFrame):
        (WebInspector.NetworkDispatcher.prototype.didCreateWebSocket):
        (WebInspector.NetworkDispatcher.prototype._appendRedirect):
        (WebInspector.NetworkDispatcher.prototype._addFramesRecursively):
        (WebInspector.NetworkDispatcher.prototype._createResource):
        * inspector/front-end/ResourceTreeModel.js:
        (WebInspector.ResourceTreeModel.prototype.addOrUpdateFrame):
        (WebInspector.ResourceTreeModel.prototype.didCommitLoadForFrame):
        (WebInspector.ResourceTreeModel.prototype._clearChildFramesAndResources):
        (WebInspector.ResourceTreeModel.prototype._clearResources):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.addOrUpdateFrame):
        (WebInspector.ResourcesPanel.prototype.addResourceToFrame):

2011-03-25  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Adele Peterson.

        REGRESSION(r77257): Only first page of a document is printed
        https://bugs.webkit.org/show_bug.cgi?id=56958

        Test: printing/page-count-layout-overflow.html

        * page/FrameView.cpp:
        (WebCore::FrameView::forceLayoutForPagination): Moved clearing of overflow
            to the right place.

2011-03-25  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] QtWebKit will not compile with QT_ASCII_CAST_WARNINGS enabled
        https://bugs.webkit.org/show_bug.cgi?id=57087

        Use explicit conversion for string to avoid depending on the default codec
        installed by the user code.

        * bridge/qt/qt_pixmapruntime.cpp:
        (JSC::Bindings::QtPixmapToDataUrlMethod::invoke):
        (JSC::Bindings::QtPixmapInstance::valueOf):
        * platform/qt/LanguageQt.cpp:
        (WebCore::platformDefaultLanguage):
        * platform/qt/PasteboardQt.cpp:
        (WebCore::Pasteboard::writeSelection):
        * plugins/qt/PluginPackageQt.cpp:
        (WebCore::initializeGtk):
        * plugins/qt/PluginViewQt.cpp:
        (WebCore::getPluginDisplay):

2011-03-25  Chang Shu  <cshu@webkit.org>

        Reviewed by Ryosuke Niwa.

        rename Node::isContentEditable and all call sites to rendererIsEditable
        https://bugs.webkit.org/show_bug.cgi?id=54290

        This is part of the effort to separate JS API HTMLElement isContentEditable from
        internal Node::rendererIsEditable.

        Code refactoring. No new tests.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isReadOnly):
        (WebCore::AccessibilityRenderObject::accessibilityIsIgnored):
        * dom/Document.cpp:
        (WebCore::acceptsEditingFocus):
        * dom/Node.cpp:
        (WebCore::Node::rendererIsEditable):
        (WebCore::Node::shouldUseInputMethod):
        (WebCore::Node::canStartSelection):
        (WebCore::Node::rootEditableElement):
        * dom/Node.h:
        (WebCore::Node::isContentEditable):
        (WebCore::Node::rendererIsEditable):
        (WebCore::Node::rendererIsRichlyEditable):
        * dom/Position.cpp:
        (WebCore::nextRenderedEditable):
        (WebCore::previousRenderedEditable):
        (WebCore::Position::atEditingBoundary):
        (WebCore::Position::parentEditingBoundary):
        (WebCore::Position::upstream):
        (WebCore::Position::downstream):
        (WebCore::Position::isCandidate):
        * dom/PositionIterator.cpp:
        (WebCore::PositionIterator::isCandidate):
        * editing/AppendNodeCommand.cpp:
        (WebCore::AppendNodeCommand::AppendNodeCommand):
        (WebCore::AppendNodeCommand::doApply):
        (WebCore::AppendNodeCommand::doUnapply):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::containsNonEditableRegion):
        (WebCore::ApplyStyleCommand::applyInlineStyleToNodeRange):
        (WebCore::ApplyStyleCommand::removeInlineStyleFromElement):
        (WebCore::ApplyStyleCommand::surroundNodeRangeWithElement):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::breakOutOfEmptyListItem):
        * editing/DeleteButtonController.cpp:
        (WebCore::isDeletableElement):
        (WebCore::enclosingDeletableElement):
        * editing/DeleteFromTextNodeCommand.cpp:
        (WebCore::DeleteFromTextNodeCommand::doApply):
        (WebCore::DeleteFromTextNodeCommand::doUnapply):
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::removeNode):
        * editing/Editor.cpp:
        (WebCore::Editor::canDeleteRange):
        (WebCore::Editor::markMisspellingsOrBadGrammar):
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges):
        * editing/EditorCommand.cpp:
        (WebCore::verticalScrollDistance):
        * editing/FormatBlockCommand.cpp:
        (WebCore::enclosingBlockToSplitTreeTo):
        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::outdentParagraph):
        * editing/InsertIntoTextNodeCommand.cpp:
        (WebCore::InsertIntoTextNodeCommand::doApply):
        (WebCore::InsertIntoTextNodeCommand::doUnapply):
        * editing/InsertNodeBeforeCommand.cpp:
        (WebCore::InsertNodeBeforeCommand::InsertNodeBeforeCommand):
        (WebCore::InsertNodeBeforeCommand::doApply):
        (WebCore::InsertNodeBeforeCommand::doUnapply):
        * editing/JoinTextNodesCommand.cpp:
        (WebCore::JoinTextNodesCommand::doApply):
        (WebCore::JoinTextNodesCommand::doUnapply):
        * editing/MergeIdenticalElementsCommand.cpp:
        (WebCore::MergeIdenticalElementsCommand::doApply):
        (WebCore::MergeIdenticalElementsCommand::doUnapply):
        * editing/RemoveNodeCommand.cpp:
        (WebCore::RemoveNodeCommand::doApply):
        (WebCore::RemoveNodeCommand::doUnapply):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplacementFragment::ReplacementFragment):
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::selectFrameElementInParentIfFullySelected):
        (WebCore::SelectionController::setSelectionFromNone):
        * editing/SplitElementCommand.cpp:
        (WebCore::SplitElementCommand::executeApply):
        (WebCore::SplitElementCommand::doUnapply):
        * editing/SplitTextNodeCommand.cpp:
        (WebCore::SplitTextNodeCommand::doApply):
        (WebCore::SplitTextNodeCommand::doUnapply):
        (WebCore::SplitTextNodeCommand::doReapply):
        * editing/SplitTextNodeContainingElementCommand.cpp:
        (WebCore::SplitTextNodeContainingElementCommand::doApply):
        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::canonicalPosition):
        * editing/WrapContentsInDummySpanCommand.cpp:
        (WebCore::WrapContentsInDummySpanCommand::doUnapply):
        (WebCore::WrapContentsInDummySpanCommand::doReapply):
        * editing/htmlediting.cpp:
        (WebCore::highestEditableRoot):
        (WebCore::lowestEditableAncestor):
        (WebCore::isEditablePosition):
        (WebCore::isRichlyEditablePosition):
        (WebCore::firstEditablePositionAfterPositionInRoot):
        (WebCore::extendRangeToWrappingNodes):
        (WebCore::enclosingNodeWithTag):
        (WebCore::enclosingNodeOfType):
        (WebCore::highestEnclosingNodeOfType):
        (WebCore::canMergeLists):
        * editing/visible_units.cpp:
        (WebCore::previousLeafWithSameEditability):
        (WebCore::previousLinePosition):
        (WebCore::nextLeafWithSameEditability):
        (WebCore::nextLinePosition):
        (WebCore::startOfParagraph):
        (WebCore::endOfParagraph):
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::supportsFocus):
        (WebCore::HTMLAnchorElement::defaultEventHandler):
        (WebCore::HTMLAnchorElement::setActive):
        (WebCore::HTMLAnchorElement::canStartSelection):
        (WebCore::HTMLAnchorElement::treatLinkAsLiveForEventType):
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::supportsFocus):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::supportsFocus):
        (WebCore::HTMLElement::isContentEditable):
        (WebCore::HTMLElement::contentEditable):
        * html/HTMLElement.h:
        * page/DragController.cpp:
        (WebCore::DragController::operationForLoad):
        (WebCore::DragController::canProcessDrag):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMouseReleaseEvent):
        (WebCore::EventHandler::selectCursor):
        * page/FocusController.cpp:
        (WebCore::relinquishesEditingFocus):
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::isContentEditable):
        * rendering/RenderBlock.cpp:
        (WebCore::positionForPointRespectingEditingBoundaries):
        (WebCore::RenderBlock::hasLineIfEmpty):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::addOverflowFromInlineChildren):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::canBeProgramaticallyScrolled):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::createVisiblePosition):
        * rendering/RootInlineBox.cpp:
        (WebCore::isEditableLeaf):
        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::supportsFocus):

2011-03-25  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Antti Koivisto.

        Crash when a wbr element is inserted inside mroot
        https://bugs.webkit.org/show_bug.cgi?id=56352

        Test: mathml/wbr-in-mroot-crash.html

        * rendering/mathml/RenderMathMLRoot.cpp:
        (WebCore::RenderMathMLRoot::layout): Look for the first box model child of the first
        child, instead of just assuming.

2011-03-25  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Pavel Feldman.

        XML Viewer: extensions can't render original XML
        https://bugs.webkit.org/show_bug.cgi?id=56263

        Added source xml to transformed document, renamed onload function.

        * xml/XMLTreeViewer.cpp:
        (WebCore::XMLTreeViewer::transformDocumentToTreeView):
        * xml/XMLViewer.xsl:

2011-03-25  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Get rid of the invalid string conversion with ::fromAscii()
        https://bugs.webkit.org/show_bug.cgi?id=57102

        Replace ::fromAscii() with ::fromLatin1() to make sure the codec does not depend on the user code.

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

2011-03-25  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r81953.
        http://trac.webkit.org/changeset/81953
        https://bugs.webkit.org/show_bug.cgi?id=57096

        "inspector test breakage: part 2/2" (Requested by apavlov on
        #webkit).

        * inspector/Inspector.json:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::getAllStyles):
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::buildObjectForStyleSheet):
        * inspector/InspectorStyleSheet.h:
        * inspector/front-end/AuditRules.js:
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun.styleSheetCallback):
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun.allStylesCallback):
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun):
        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleModel.prototype._styleSheetChanged.callback):
        (WebInspector.CSSStyleModel.prototype._styleSheetChanged):
        (WebInspector.CSSStyleModel.prototype._onRevert):
        (WebInspector.CSSStyleSheet):
        (WebInspector.CSSStyleSheet.prototype.setText):

2011-03-15  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Fix handling of the CSSAgent.setStyleSheetText() results in CSSStyleModel.js
        https://bugs.webkit.org/show_bug.cgi?id=56310

        Instead of stylesheet ids, CSSAgent.getAllStyleSheets() now returns metainfo objects containing
        "styleSheetId", "sourceURL", "disabled", and "title" fields. The latter three are not returned
        by CSSAgent.getStyleSheet() anymore.

        Test: inspector/styles/get-set-stylesheet-text.html

        * inspector/Inspector.json:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::getAllStyleSheets):
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::buildObjectForStyleSheet):
        (WebCore::InspectorStyleSheet::buildObjectForStyleSheetInfo):
        * inspector/InspectorStyleSheet.h:
        * inspector/front-end/AuditRules.js:
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun.styleSheetCallback):
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun.allStylesCallback):
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun):
        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleModel.prototype._styleSheetChanged.callback):
        (WebInspector.CSSStyleModel.prototype._styleSheetChanged):
        (WebInspector.CSSStyleModel.prototype._onRevert):
        (WebInspector.CSSStyleSheet):
        (WebInspector.CSSStyleSheet.prototype.setText):

2011-03-25  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: extension server should not convert all resources to HAR when there are no extensions.
        https://bugs.webkit.org/show_bug.cgi?id=57044

        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype._notifyResourceFinished):
        (WebInspector.ExtensionServer.prototype._hasSubscribers):

2011-03-25  Leo Yang  <leo.yang@torchmobile.com.cn>

        Reviewed by Nikolas Zimmermann.

        SVG <use> element performance improvement
        https://bugs.webkit.org/show_bug.cgi?id=57077

        SVG <use> element was expanding nesting <use> and <symbol> elements
        in an inefficient way. After it expanded an <use> or a <symbol>
        element it would restart expanding from the shadow tree root.
        This behavior was leading about 160 millions of calls to
        expandUseElementInShadowTree or expandSymbolElementInShadowTree for
        a single shadow tree which is illustrated by
        http://upload.wikimedia.org/wikipedia/commons/4/4e/Sierpinski_carpet_6.svg.
        But the effective calls, which really expand <use> or <symbol>
        elements, were about 5200; others were passing-by calls, which are
        recursively down to the children.

        This patch is altering the expanding path to reduce the passing-by
        calls. It will expand elements in sibling chain where there is an
        effective call, because the effective call replaces element which is
        expanded and the replacement results lose of the sibling chain of
        the replaced on the upper recursion stack. With this patch the
        passing-by calls are reduced from about 160 millions to about 30
        thousands.

        No functionality change, no new tests.

        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::expandUseElementsInShadowTree):
        (WebCore::SVGUseElement::expandSymbolElementsInShadowTree):
        * svg/SVGUseElement.h:

2011-03-25  Dominic Cooney  <dominicc@google.com>

        Reviewed by Kent Tamura.

        Makes keygen support autofocus attribute.
        https://bugs.webkit.org/show_bug.cgi?id=57091

        Test: fast/forms/autofocus-keygen.html

        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::attach):

2011-03-24  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Reviewed by Antonio Gomes.

        [EFL] Add sound / mute button to MediaControl UI
        https://bugs.webkit.org/show_bug.cgi?id=56726

        Add sound / mute button to MediaControl UI.

        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::edjeGroupFromFormType):
        (WebCore::RenderThemeEfl::emitMediaButtonSignal):
        (WebCore::RenderThemeEfl::paintMediaMuteButton):
        * platform/efl/RenderThemeEfl.h:

2011-03-24  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Darin Adler.

        Introduce WTF HexNumber.h
        https://bugs.webkit.org/show_bug.cgi?id=56099

        Introduce a set of functions that ease converting from a bye or a number to a hex string,
        replacing several of these conversions and String::format("%x") usages all over WebCore.

        * ForwardingHeaders/wtf/HexNumber.h: Added.
        * css/CSSOMUtils.cpp:
        (WebCore::serializeCharacterAsCodePoint):
        * css/CSSParser.cpp:
        (WebCore::quoteCSSString):
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::createReadableStringFromBinary):
        * platform/FileSystem.cpp:
        (WebCore::encodeForFileName):
        * platform/KURL.cpp:
        (WebCore::appendEscapedChar):
        * platform/UUID.cpp:
        (WebCore::createCanonicalUUIDString):
        * platform/graphics/Color.cpp:
        (WebCore::Color::serialized):
        * platform/network/FormDataBuilder.cpp:
        (WebCore::FormDataBuilder::encodeStringAsFormData):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::quoteAndEscapeNonPrintables):

2011-03-24  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Geoff Garen.

        <rdar://problem/9146716> REGRESSION: ~10 MB increase in memory under CachedScripts
        Add back a call to destroy decoded data after access.  Keep the SourceProviderCache 
        around as long as their are still clients to use it.

        No new tests because there is no change in behavior.  Current tests pass.

        * loader/cache/CachedScript.cpp:
        (WebCore::CachedScript::script):
        (WebCore::CachedScript::destroyDecodedData):

2011-03-24  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Geoff Garen.

        https://bugs.webkit.org/show_bug.cgi?id=57073
        Rework the AtomicHTMLConstructor to reserve space for attributes based on the size of the attribute list.
        Saves 1.5 MB on Membuster.

        No new tests because there was no change in behavior.  Current tests pass.

        * html/parser/HTMLToken.h:
        (WebCore::AtomicHTMLToken::AtomicHTMLToken):
        (WebCore::AtomicHTMLToken::initializeAttributes):

2011-03-24  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r81916 and r81917.
        http://trac.webkit.org/changeset/81916
        http://trac.webkit.org/changeset/81917
        https://bugs.webkit.org/show_bug.cgi?id=57071

        broke a test on platforms that do not have QuickTime installed
        (Requested by estes on #webkit).

        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::HTMLEmbedElement):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::HTMLObjectElement):
        (WebCore::HTMLObjectElement::parametersForPlugin):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::HTMLPlugInImageElement):
        (WebCore::HTMLPlugInImageElement::isImageType):
        (WebCore::HTMLPlugInImageElement::wouldLoadAsNetscapePlugin):
        * html/HTMLPlugInImageElement.h:
        * loader/EmptyClients.h:
        (WebCore::EmptyFrameLoaderClient::objectContentType):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::defaultObjectContentType):
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:
        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::resourceWillUsePlugin):
        (WebCore::SubframeLoader::requestObject):
        (WebCore::SubframeLoader::shouldUsePlugin):
        * loader/SubframeLoader.h:

2011-03-24  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        Eliminate Node::dispatchGenericEvent.
        https://bugs.webkit.org/show_bug.cgi?id=57045

        No functional change, covered by existing tests.

        * dom/Node.cpp:
        (WebCore::Node::dispatchEvent): Combined with the body of dispatchGenericEvent,
            removed unnecessary extra refs and a stale comment.
        * dom/Node.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::dispatchLoadEvent): Changed to use dispatchEvent.
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::sendSVGLoadEventIfPossible): Ditto.
        * svg/SVGElementInstance.cpp:
        (WebCore::SVGElementInstance::dispatchEvent): Ditto. The code here still
            works thanks to SVG-aware retargeting in Node.

2011-03-24  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        web audio: Properly sample-rate convert audio assets in chromium port
        https://bugs.webkit.org/show_bug.cgi?id=56980

        No new tests since audio API is not yet implemented.

        * WebCore.gypi:
        * platform/audio/AudioBus.cpp:
        (WebCore::AudioBus::createBySampleRateConverting):
        (WebCore::AudioBus::createByMixingToMono):
        * platform/audio/AudioBus.h:
        * platform/audio/HRTFKernel.cpp:
        (WebCore::extractAverageGroupDelay):
        (WebCore::HRTFKernel::HRTFKernel):
        * platform/audio/SincResampler.cpp:
        * platform/audio/chromium/AudioBusChromium.cpp:
        (WebCore::AudioBus::loadPlatformResource):
        (WebCore::createBusFromInMemoryAudioFile):

2011-03-24  Rik Cabanier  <cabanier@adobe.com>

        Reviewed by David Hyatt.

        REGRESSION (r81625): fast/css/percentage-non-integer.html fails on Windows
        https://bugs.webkit.org/show_bug.cgi?id=56829

        Test: fast/css/percentage-non-integer.html

        * platform/Length.h:
        (WebCore::Length::calcValue):
        (WebCore::Length::calcMinValue):
        (WebCore::Length::calcFloatValue):

2011-03-24  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by James Robinson.

        [Chromium] Vertical Japanese text is not displayed on Snow Leopard
        https://bugs.webkit.org/show_bug.cgi?id=56962

        Make Snow Leopard check added by r80740 into a runtime check for
        Chromium, since it uses the same binary on both Leopard and Snow Leopard.

        * platform/graphics/mac/FontMac.mm:
        (WebCore::hasBrokenCTFontGetVerticalTranslationsForGlyphs):
        (WebCore::showGlyphsWithAdvances):

2011-03-24  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=57058
        Hookup the UIProcess WebIconDatabase to a WebCore::IconDatabase as its implementation

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::synchronousLoadDecisionForIconURL): Only add the DocumentLoader to the set if it's non-zero.
        (WebCore::IconDatabase::IconDatabase): Add more logging.
        (WebCore::IconDatabase::performURLImport): Dispatch the "didFinishURLImport" client callback using the following 3 methods.
        (WebCore::FinishedURLImport::FinishedURLImport):
        (WebCore::FinishedURLImport::performWork):
        (WebCore::IconDatabase::dispatchDidFinishURLImportOnMainThread):

        * loader/icon/IconDatabase.h:
        (WebCore::IconDatabase::create): Expose a PassOwnPtr<> creator.

        * WebCore.exp.in:

2011-03-23  Jer Noble  <jer.noble@apple.com>

        Reviewed by Maciej Stachowiak.

        Application Cache should save audio/ and video/ mime types as flat files
        https://bugs.webkit.org/show_bug.cgi?id=53784
        <rdar://problem/8932473>

        No new tests.

        ApplicationCacheResource::create() now takes an additional "path" parameter.  To facilitate 
        extracting this path information, two functions in ApplicationCacheHost have been made public.

        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::didReceiveResponse): Pass along new "path" parameter.
        (WebCore::ApplicationCacheGroup::didFail): Ditto.
        * loader/appcache/ApplicationCacheHost.h:
        (WebCore::ApplicationCacheHost::shouldLoadResourceFromApplicationCache): Made public.
        (WebCore::ApplicationCacheHost::getApplicationCacheFallbackResource): Made public.
        * loader/appcache/ApplicationCacheResource.cpp:
        (WebCore::ApplicationCacheResource::ApplicationCacheResource): Add new "path" parameter.
        * loader/appcache/ApplicationCacheResource.h:
        (WebCore::ApplicationCacheResource::create): Ditto.
        (WebCore::ApplicationCacheResource::path): New accessor.

2011-03-24  Andy Estes  <aestes@apple.com>

        Reviewed by Darin Adler.

        REGRESSION (r70748): latest nightly builds kills AC_QuickTime.js
        https://bugs.webkit.org/show_bug.cgi?id=49016

        AC_QuickTime.js uses the common <object>/<embed> paradigm to embed the
        QuickTime plug-in in web pages. r70748 removed our mapping of classids
        to MIME types, which causes WebKit to fall back from the object to the
        embed tag when QuickTime is embedded by this script. The script emits
        the following embed tag to embed a QuickTime movie with a poster frame:

        <embed src="poster-frame.png" target="quicktimeplayer" href="movie.mov">

        The expectation is that a QuickTime plug-in is instantiated to display the
        poster frame, since QuickTime registers for many common image MIME
        types. This is how Gecko behaves for embed. However, WebKit prefers to
        use its native image rendering for image embeds, in which case no movie
        is played when the poster frame is clicked.

        Fix this by changing embed to check for a plug-in that can handle the
        image type before rendering the image natively. This matches Gecko.

        Test: fast/images/embed-image-plugins-disabled.html

        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::parametersForPlugin):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::HTMLPlugInImageElement):
        (WebCore::HTMLPlugInImageElement::isImageType):
        (WebCore::HTMLPlugInImageElement::wouldLoadAsNetscapePlugin):
        * html/HTMLPlugInImageElement.h:
        (WebCore::HTMLPlugInImageElement::preferPluginsForImages):
        * loader/EmptyClients.h:
        (WebCore::EmptyFrameLoaderClient::objectContentType):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::defaultObjectContentType):
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:
        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::resourceWillUsePlugin):
        (WebCore::SubframeLoader::requestPlugin):
        (WebCore::SubframeLoader::requestObject):
        (WebCore::SubframeLoader::shouldUsePlugin):
        * loader/SubframeLoader.h:

2011-03-24  Mike Reed  <reed@google.com>

        Reviewed by James Robinson.

        Move lifetime management of grContext from a global to being
        per-SharedGraphicsContext3D, which correctly is 1:1 with the
        underlying opengl context.
        https://bugs.webkit.org/show_bug.cgi?id=54330

        No new tests. Existing <canvas> tests exercise this:

        * platform/graphics/chromium/DrawingBufferChromium.cpp:
        (WebCore::DrawingBuffer::DrawingBuffer):
        (WebCore::DrawingBuffer::~DrawingBuffer):
        (WebCore::DrawingBuffer::publishToPlatformLayer):
        (WebCore::DrawingBuffer::setGrContext):
        * platform/graphics/gpu/DrawingBuffer.h:
        * platform/graphics/gpu/SharedGraphicsContext3D.cpp:
        (WebCore::SharedGraphicsContext3D::SharedGraphicsContext3D):
        (WebCore::SharedGraphicsContext3D::~SharedGraphicsContext3D):
        (WebCore::SharedGraphicsContext3D::getGrContext):
        * platform/graphics/gpu/SharedGraphicsContext3D.h:
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::~PlatformContextSkia):
        (WebCore::PlatformContextSkia::setSharedGraphicsContext3D):

2011-03-24  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        Untangle dependency between event ancestor chain computation and InspectorDOMAgent.
        https://bugs.webkit.org/show_bug.cgi?id=57050

        Inspector's list of event listeners does not need to invoke Node::getEventListeners,
        because it simply wants to collect all ancestors and never uses EventContext bits.

        No functional change, covered by existing tests.

        * dom/Node.cpp:
        (WebCore::getEventAncestors): Converted into a static function.
        (WebCore::Node::dispatchGenericEvent): Changed to pass node to getEventAncestors.
        * dom/Node.h: Removed decl, moved EventDispatchBehavior enum inside.
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::getEventListenersForNode): Replaced the call
            to getEventAncestors with a simple ancestor traversal loop.

2011-03-24  Adam Klein  <adamk@chromium.org>

        Reviewed by David Levin.

        [fileapi] Make FileError and FileException accessible from WorkerContext
        https://bugs.webkit.org/show_bug.cgi?id=57041

        * workers/WorkerContext.idl:

2011-03-24  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Remove legacy version of findPlainText.
        https://bugs.webkit.org/show_bug.cgi?id=57056

        * editing/TextIterator.cpp:
        * editing/TextIterator.h:
        Remove legacy overload of findPlainText that doesn't
        take an options parameter.

2011-03-24  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Ensure that all compilation takes place within a dynamic global object scope
        https://bugs.webkit.org/show_bug.cgi?id=57054

        * bindings/js/JSErrorHandler.cpp:
        (WebCore::JSErrorHandler::handleEvent):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent): Updated for signature change.

2011-03-24  John Bauman  <jbauman@chromium.org>

        Reviewed by Kenneth Russell.

        preserveDrawingBuffer=true is ignored
        https://bugs.webkit.org/show_bug.cgi?id=56987

        Add code to the V8 and JSC bindings to support grabbing the value of
        preserveDrawingBuffer from the input context attributes. Also, in
        WebGLRenderingContext use the WebGLContextAttributes that were input
        directly, not those from the GraphicsContext3D which could have been
        changed.

        No new tests, as this can't be tested with DRT. However, this works
        when tested manually.

        * bindings/js/JSHTMLCanvasElementCustom.cpp:
        (WebCore::JSHTMLCanvasElement::getContext):
        * bindings/v8/custom/V8HTMLCanvasElementCustom.cpp:
        (WebCore::V8HTMLCanvasElement::getContextCallback):
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::clearIfComposited):
        (WebCore::WebGLRenderingContext::paintRenderingResultsToCanvas):

2011-03-24  Enrica Casucci  <enrica@apple.com>

        Reviewed by Alexey Proskuryakov.

        WebKit2:Services menu item to convert selected Simplified/Traditional Chinese Text is not working.
        https://bugs.webkit.org/show_bug.cgi?id=56975
        <rdar://problem/8915066>
        
        Adding support in WebCore to implement readSelectionFromPasteboard
        to support Mac OS X services from WebKit2.

        * WebCore.exp.in:
        * editing/Editor.h:
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::readSelectionFromPasteboard): Added entry point
        to call the paste functions with the specified pasteboard.

2011-03-24  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Inspector does not show correct transfer size for synchronous requests
        https://bugs.webkit.org/show_bug.cgi?id=56951

        Fixed transfer size for synchronous load.

        Test: http/tests/inspector/network/network-size-sync.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::willLoadMediaElementURL):
        (WebCore::FrameLoader::commitProvisionalLoad):
        (WebCore::FrameLoader::loadResourceSynchronously):
        (WebCore::FrameLoader::loadedResourceFromMemoryCache):
        * loader/ResourceLoadNotifier.cpp:
        (WebCore::ResourceLoadNotifier::sendRemainingDelegateMessages):
        * loader/ResourceLoadNotifier.h:

2011-03-24  Brady Eidson  <beidson@apple.com>

        Reviewed by Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=57030
        REGRESSION (r81782): http/tests/inspector/extensions-resources-redirect.html sometimes crashes WebKit2's 
        web process while handling a WebIconDatabaseProxy::ReceivedIconLoadDecision message

        The callback objects had some bogus ASSERTs and missed a relevant null check. If a callback was waiting on
        a message back from the UIProcess, but was invalidated from within the WebProcess in the meantime, it's
        perfectly valid to attempt to performCallback() after the callback function pointer has been cleared.

        * loader/icon/IconDatabaseBase.h:
        (WebCore::EnumCallback::performCallback):
        (WebCore::EnumCallback::invalidate):
        (WebCore::EnumCallback::EnumCallback):
        (WebCore::ObjectCallback::performCallback):
        (WebCore::ObjectCallback::invalidate):
        (WebCore::ObjectCallback::ObjectCallback):

2011-03-24  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Dictionary text extraction is not correctly detecting word boundaries on bing.com
        <rdar://problem/9078569>
        https://bugs.webkit.org/show_bug.cgi?id=56995

        * WebCore.exp.in:
        Add some editing related exports needed by WebKit2.

2011-03-24  Andy Estes  <aestes@apple.com>

        Reviewed by Eric Seidel.

        REGRESSION (r80231): Bad cast in HTMLTreeBuilder with closed </form> tags
        https://bugs.webkit.org/show_bug.cgi?id=56836

        During fragment parsing, HTMLConstructionSite holds a reference to the
        fragment context's closest form ancestor. If a misnested form end tag is
        then encountered as the first node of the fragment, we will check to see
        if a corresponding form start tag is in scope even though no such tag
        exists. This led to isScope() walking the HTMLElementStack all the way
        to the root DocumentFragment and attempting to cast it to Element*.

        Fix this by ensuring that the inScope() family of functions operate in
        terms of ContainerNodes to account for the fragment case.

        Test: fast/parser/fragment-closest-form-ancestor.html

        * html/parser/HTMLElementStack.cpp:
        (WebCore::HTMLNames::isRootNode):
        (WebCore::HTMLNames::isScopeMarker):
        (WebCore::HTMLNames::isTableScopeMarker):
        (WebCore::HTMLNames::isTableBodyScopeMarker):
        (WebCore::HTMLNames::isTableRowScopeMarker):
        (WebCore::HTMLElementStack::hasOnlyHTMLElementsInScope):
        (WebCore::HTMLElementStack::inScope):

2011-03-24  Enrica Casucci  <enrica@apple.com>

        Reviewed by Darin Adler.

        Repeated copy and paste-in-place operation results in increasingly verbose HTML.
        <rdar://problem/8690506>
        https://bugs.webkit.org/show_bug.cgi?id=56874
        
        When we calculate the style to apply at the insertion point we compare the initial
        style at the insertion point against the style calculated at the span we wrap the
        copied markup fragment with. We could end up with a series of unnecessary spans
        to remove the initial style that simply grow our markup.
        The consists in moving the insertion point outside any inline element that could
        affect the fragment being inserted when we are not pasting and matching the style.

        Test: editing/pasteboard/paste-text-with-style.html

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::isInlineNodeWithStyle): Added.
        (WebCore::ReplaceSelectionCommand::doApply): Added logic to change the insertion
        point according to the new rules.

2011-03-24  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] When we render WebGL offscreen, color conversion cost a lot of CPU cycles
        https://bugs.webkit.org/show_bug.cgi?id=40884

        The software fallback is now only needed for corner cases like a manual rendering
        of the page to QImage.

        Keeping the image with the last pixel values is no longer needed. Removing it reduce the
        performance for real-time rendering on software surface, but this case should no longer be
        supported.

        The conversion from OpenGL color space and coordinates is done manually for performance. This
        also fix the bug of the inverted X axis due to the transformation.

        The tests and benchmarks are done through Qt API tests.

        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::swapBgrToRgb):
        (WebCore::GraphicsContext3DInternal::paint):
        (WebCore::GraphicsContext3D::reshape):

2011-03-24  Nat Duca  <nduca@chromium.org>

        Reviewed by James Robinson.

        [chromium] Remove bool that forces compositor HUD to always be enabled
        https://bugs.webkit.org/show_bug.cgi?id=57034

        * platform/graphics/chromium/cc/CCHeadsUpDisplay.h:
        (WebCore::CCHeadsUpDisplay::enabled):

2011-03-24  Nat Duca  <nduca@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] Add traceEvents to compositor
        https://bugs.webkit.org/show_bug.cgi?id=56965

        * WebCore.gypi:
        * platform/chromium/TraceEvent.h: Added.
        (WebCore::internal::ScopeTracer::ScopeTracer):
        (WebCore::internal::ScopeTracer::~ScopeTracer):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::updateRootLayerContents):
        (WebCore::LayerRendererChromium::updateRootLayerScrollbars):
        (WebCore::LayerRendererChromium::updateLayers):
        (WebCore::LayerRendererChromium::drawLayers):
        (WebCore::LayerRendererChromium::finish):
        (WebCore::LayerRendererChromium::present):
        * platform/graphics/chromium/LayerTilerChromium.cpp:
        (WebCore::LayerTilerChromium::update):

2011-03-24  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: render XHRs matching JSON regex as JSON.
        https://bugs.webkit.org/show_bug.cgi?id=57035

        * English.lproj/localizedStrings.js:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/NetworkItemView.js:
        (WebInspector.NetworkItemView):
        * inspector/front-end/RemoteObject.js:
        (WebInspector.LocalJSONObject.prototype.get description.switch.case):
        (WebInspector.LocalJSONObject.prototype.get description):
        (WebInspector.LocalJSONObject.prototype._concatenate):
        (WebInspector.LocalJSONObject.prototype.getProperties):
        (WebInspector.LocalJSONObject.prototype._children):
        * inspector/front-end/ResourceJSONView.js: Added.
        (WebInspector.ResourceJSONView):
        (WebInspector.ResourceJSONView.parseJSON.WebInspector.ResourceJSONView.prototype.hasContent):
        (WebInspector.ResourceJSONView.parseJSON.WebInspector.ResourceJSONView.prototype.show):
        (WebInspector.ResourceJSONView.parseJSON.WebInspector.ResourceJSONView.prototype._initialize):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.css:
        (.resource-view.json):
        * inspector/front-end/inspector.html:

2011-03-24  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        Move media controls subtree creation into one method.
        https://bugs.webkit.org/show_bug.cgi?id=56969

        Mechanical move, no changes in functionality.

        The purpose of this patch is to align existing code closer with its
        future version, when MediaControls is an element whose tree is created
        at the instantiation.

        * html/shadow/MediaControls.cpp:
        (WebCore::MediaControls::create): Added, consolidating all subtree generation logic into one place.
        (WebCore::MediaControls::update): Replaced methods with one call.
        * html/shadow/MediaControls.h: Updated decls.
        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlTimelineElement::create): Moved setting of attributes here.
        (WebCore::MediaControlVolumeSliderElement::create): Ditto.

2011-03-24  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Darin Adler.

        Use proper string method to generate webloc string.
        https://bugs.webkit.org/show_bug.cgi?id=57028
        <rdar://problem/9181955>

        * platform/win/ClipboardUtilitiesWin.cpp:
        (WebCore::getWebLocData):

2011-03-24  Ben Taylor  <bentaylor.solx86@gmail.com>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=32821
        Fix conditionals which had an int for one case and a pointer for another.
        Fix is similar to https://bugs.webkit.org/show_bug.cgi?id=56198

        No new tests. Fix compilation on Solaris 10 with SunStudio 12 C++

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::valueForShadow):

2011-03-24  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: provide live edit callback to source frame delegate.
        https://bugs.webkit.org/show_bug.cgi?id=57003

        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel.prototype.editScriptSource):
        (WebInspector.DebuggerModel.prototype._didEditScriptSource):
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel):
        (WebInspector.DebuggerPresentationModel.prototype.canEditScriptSource):
        (WebInspector.DebuggerPresentationModel.prototype.editScriptSource.didEditScriptSource):
        (WebInspector.DebuggerPresentationModel.prototype.editScriptSource):
        (WebInspector.DebuggerPresentationModel.prototype._updateBreakpointsAfterLiveEdit):
        (WebInspector.DebuggerPresentationModel.prototype._scriptForSourceFileId):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._createSourceFrame):
        (WebInspector.SourceFrameDelegateForScriptsPanel):
        (WebInspector.SourceFrameDelegateForScriptsPanel.prototype.canEditScriptSource):
        (WebInspector.SourceFrameDelegateForScriptsPanel.prototype.editScriptSource):

2011-03-24  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Andreas Kling.

        Regression: WebKit does not build with Python 3 following 56807
        https://bugs.webkit.org/show_bug.cgi?id=56923

        The module string does not have the function replace in Python 3. The str.replace function
        can do the same operation in this case and works with the versions 2 and 3.

        * inspector/generate-inspector-idl:

2011-03-24  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: brush up Network agent API.
        https://bugs.webkit.org/show_bug.cgi?id=57001

        * inspector/Inspector.json:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::willSendRequestImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::willSendRequest):
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::buildObjectForResourceRequest):
        (WebCore::buildObjectForResourceResponse):
        (WebCore::buildObjectForCachedResource):
        (WebCore::InspectorResourceAgent::willSendRequest):
        (WebCore::InspectorResourceAgent::willSendWebSocketHandshakeRequest):
        (WebCore::InspectorResourceAgent::didReceiveWebSocketHandshakeResponse):
        (WebCore::InspectorResourceAgent::setExtraHeaders):
        * inspector/InspectorResourceAgent.h:
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createResourceReceiveResponseData):
        * inspector/front-end/NetworkManager.js:
        (WebInspector.NetworkDispatcher.prototype._updateResourceWithRequest):
        (WebInspector.NetworkDispatcher.prototype._updateResourceWithResponse):
        (WebInspector.NetworkDispatcher.prototype._updateResourceWithCachedResource):
        (WebInspector.NetworkDispatcher.prototype.willSendRequest):
        (WebInspector.NetworkDispatcher.prototype.didReceiveWebSocketHandshakeResponse):
        (WebInspector.NetworkDispatcher.prototype.didCloseWebSocket):
        * inspector/front-end/Resource.js:
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.FormattedRecord.prototype._generatePopupContent):
        * loader/ResourceLoadNotifier.cpp:
        (WebCore::ResourceLoadNotifier::assignIdentifierToInitialRequest):
        (WebCore::ResourceLoadNotifier::dispatchWillSendRequest):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::createResourceHandle):

2011-03-11  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        JNIType is not specific to JNI so should be renamed
        https://bugs.webkit.org/show_bug.cgi?id=56197

        This patch renames JNIType to JavaType, renames the values of
        the enum, and moves it out of JNIUtility.h to its own file.
        Also renames the corresponding JavaField and JavaMethod getters.

        No new tests, refactoring only.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * bridge/jni/JNIUtility.cpp:
        (JSC::Bindings::javaTypeFromClassName):
        (JSC::Bindings::signatureFromJavaType):
        (JSC::Bindings::javaTypeFromPrimitiveType):
        (JSC::Bindings::getJNIField):
        (JSC::Bindings::callJNIMethod):
        * bridge/jni/JNIUtility.h:
        * bridge/jni/JavaMethod.cpp:
        (JavaMethod::JavaMethod):
        (JavaMethod::signature):
        * bridge/jni/JavaMethod.h:
        (JSC::Bindings::JavaMethod::returnTypeClassName):
        (JSC::Bindings::JavaMethod::returnType):
        * bridge/jni/JavaType.h: Copied from Source/WebCore/bridge/jni/JavaMethod.h.
        * bridge/jni/jni_jsobject.mm:
        (JavaJSObject::toString):
        * bridge/jni/jni_objc.mm:
        (JSC::Bindings::dispatchJNICall):
        * bridge/jni/jsc/JNIUtilityPrivate.cpp:
        (JSC::Bindings::convertArrayInstanceToJavaArray):
        (JSC::Bindings::convertValueToJValue):
        * bridge/jni/jsc/JNIUtilityPrivate.h:
        * bridge/jni/jsc/JavaArrayJSC.cpp:
        (JavaArray::setValueAt):
        (JavaArray::valueAt):
        * bridge/jni/jsc/JavaClassJSC.cpp:
        * bridge/jni/jsc/JavaFieldJSC.cpp:
        (JavaField::JavaField):
        (JavaField::dispatchValueFromInstance):
        (JavaField::valueFromInstance):
        (JavaField::dispatchSetValueToInstance):
        (JavaField::setValueToInstance):
        * bridge/jni/jsc/JavaFieldJSC.h:
        (JSC::Bindings::JavaField::typeClassName):
        (JSC::Bindings::JavaField::type):
        * bridge/jni/jsc/JavaInstanceJSC.cpp:
        (JavaInstance::invokeMethod):
        * bridge/jni/v8/JNIUtilityPrivate.cpp:
        (JSC::Bindings::convertNPVariantToJValue):
        (JSC::Bindings::convertJValueToNPVariant):
        * bridge/jni/v8/JNIUtilityPrivate.h:
        * bridge/jni/v8/JavaFieldV8.cpp:
        (JavaField::JavaField):
        * bridge/jni/v8/JavaFieldV8.h:
        (JSC::Bindings::JavaField::typeClassName):
        (JSC::Bindings::JavaField::type):
        * bridge/jni/v8/JavaInstanceV8.cpp:
        (JavaInstance::invokeMethod):
        (JavaInstance::getField):
        * bridge/jni/v8/JavaNPObjectV8.cpp:
        (JSC::Bindings::JavaNPObjectInvoke):
        (JSC::Bindings::JavaNPObjectGetProperty):

2011-03-24  Ojan Vafai  <ojan@chromium.org>

        Was being a little braindead when I committed this.
        Only simple selectors are allowed, but sibling selectors
        are sibling selectors.

        * css/CSSStyleSelector.cpp:
        (WebCore::collectFeaturesFromList):

2011-03-23  MORITA Hajime  <morrita@google.com>

        Reviewed by Kent Tamura.

        Spellcheck feature specific symbols should be defined.
        https://bugs.webkit.org/show_bug.cgi?id=56818
        
        * Introduced USE(UNIFIED_TEXT_CHECKING), USE(GRAMMAR_CHECKING) and USE(AUTOMATIC_TEXT_REPLACEMENT)
        * Replaced a part of of BUILDING_ON_* conditionals with them.

        Note that small amount of code path on Editor.cpp is now compiled under USE(GRAMMAR_CHECKING)
        because these code path is already built under non-Mac ports and
        Keeping them buildable for such platforms reduces the build breakage risk.
        These path is guarded by Settings thus should never get reached.

        No new tests. No behavioral change.

        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * editing/Editor.cpp:
        (WebCore::Editor::advanceToNextMisspelling):
        (WebCore::Editor::isSelectionUngrammatical):
        (WebCore::Editor::guessesForUngrammaticalSelection):
        (WebCore::Editor::guessesForMisspelledOrUngrammaticalSelection):
        (WebCore::Editor::markMisspellingsAfterTypingToWord):
        (WebCore::Editor::markMisspellingsOrBadGrammar):
        (WebCore::Editor::markBadGrammar):
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges):
        (WebCore::Editor::changeBackToReplacedString):
        (WebCore::Editor::markMisspellingsAndBadGrammar):
        * editing/Editor.h:
        * editing/TextCheckingHelper.cpp:
        (WebCore::TextCheckingHelper::findFirstMisspellingOrBadGrammar):
        (WebCore::TextCheckingHelper::findFirstGrammarDetail):
        (WebCore::TextCheckingHelper::findFirstBadGrammar):
        (WebCore::TextCheckingHelper::isUngrammatical):
        (WebCore::TextCheckingHelper::guessesForMisspelledOrUngrammaticalRange):
        (WebCore::TextCheckingHelper::markAllBadGrammar):
        * loader/EmptyClients.h:
        * platform/text/TextCheckerClient.h:
        * platform/text/TextChecking.h: Added.

2011-03-23  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        [Chromium] Force to make validation bubble DIV position:absolute
        https://bugs.webkit.org/show_bug.cgi?id=56901

        Test: fast/forms/interactive-validation-crash-by-style-override.html

        * html/ValidationMessage.cpp:
        (WebCore::ValidationMessage::buildBubbleTree): Add position:absolute
          because we need to move the validation message to a good position.
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::addChild):

2011-03-23  Mike Lawther  <mikelawther@chromium.org>

        Reviewed by Ojan Vafai.

        flex/bison tokens and grammar for CSS calc
        https://bugs.webkit.org/show_bug.cgi?id=54412

        Tests: css3/calc/calc-errors.html
               css3/calc/minmax-errors.html
               css3/calc/simple-calcs.html
               css3/calc/simple-minmax.html

        * css/CSSGrammar.y:
        * css/CSSParserValues.cpp:
        (WebCore::CSSParserValueList::insertValueAt):
        (WebCore::CSSParserValueList::extend):
        * css/CSSParserValues.h:
        * css/tokenizer.flex:

2011-03-23  Adam Klein  <adamk@chromium.org>

        Reviewed by David Levin.

        Fix resolveLocalFileSystemURL (and sync version) error codes to match the spec
        https://bugs.webkit.org/show_bug.cgi?id=56961

        See error code listing in the Files & Directories spec:
        http://dev.w3.org/2009/dap/file-system/file-dir-sys.html#widl-LocalFileSystemSync-resolveLocalFileSystemSyncURL

        Note that the spec currently only specifies errors for the sync
        version; I've used the same codes for the async version.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::resolveLocalFileSystemURL):
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::resolveLocalFileSystemURL):
        (WebCore::WorkerContext::resolveLocalFileSystemSyncURL):

2011-03-23  Jia Pu  <jpu@apple.com>

        Reviewed by Darin Adler.

        Hook up new AppKit autocorrection UI with WK2.
        https://bugs.webkit.org/show_bug.cgi?id=56055
        <rdar://problem/8947463>

        This patch is to enable WK2 to utilize autocorrection UI on Mac OS X. It contains following
        major changes:

        1. All but one autocorrection related message is synchronous. Since dismissing autocorrection
        panel can potentially cause editing to occur, a synchronous dismissCorrectionPanelSoon() function
        is introduced to ensure all editing commands occur in correct order.

        2. Additional condition variable is needed to implement dismissCorrectionPanelSoon().
        To improve maintainability, CorrectionPanel class is introduced to manage the
        internal state related to correction panel. This change is applied to both WK1 and WK2.

        3. EditorClient::isShowingCorrectionPanel() has been removed. The original purpose is to allow
        editor to know when to handle ESC key event. Now this is handled internally in AppKit, so
        EditorClient::isShowingCorrectionPanel() isn't necessary anymore.

        4. The Editor* argument in EditorClient::showCorrectionPanel() has been removed, since we can
        access object via WebView or WKView.

        * editing/Editor.cpp:
        (WebCore::Editor::markMisspellingsAfterTypingToWord):
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges):
        (WebCore::Editor::correctionPanelTimerFired):
        (WebCore::Editor::dismissCorrectionPanel):
        (WebCore::Editor::dismissCorrectionPanelSoon):
        (WebCore::Editor::applyAutocorrectionBeforeTypingIfAppropriate):
        * editing/Editor.h:
        * editing/EditorCommand.cpp:
        (WebCore::createCommandMap):
        * loader/EmptyClients.h:
        (WebCore::EmptyEditorClient::showCorrectionPanel):
        (WebCore::EmptyEditorClient::dismissCorrectionPanelSoon):
        * manual-tests/autocorrection/close-window-when-correction-is-shown.html: Added.
        * page/EditorClient.h:

2011-03-22  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Antti Koivisto.

        move :not over to using selectorList instead of simpleSelector
        https://bugs.webkit.org/show_bug.cgi?id=56894

        Saves memory and simplifies code.

        No new tests since existing tests cover this code.

        * css/CSSGrammar.y:
        Also removed extranenous calls to updateLastSelectorLineAndPosition in
        simple_selector_list. These happened to work, but are only actually
        needed in selector_list.
        * css/CSSParserValues.h:
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::specificityForOneSelector):
        Removed null-check. The parser null-checks, I don't see why we need to here.
        (WebCore::CSSSelector::selectorText):
        Ditto.
        (WebCore::CSSSelector::setArgument):
        (WebCore::CSSSelector::isSimple):
        * css/CSSSelector.h:
        * css/CSSSelectorList.cpp:
        (WebCore::forEachTagSelector):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector):
        (WebCore::collectFeaturesFromSelector):
        (WebCore::collectFeaturesFromList):

2011-03-23  Carol Szabo  <carol.szabo@nokia.com>

        Reviewed by David Hyatt.

        Made sure that renderers displaying counters are invalidated upon
        counter destruction.

        Assertion and incorrect rendering of counters.
        https://bugs.webkit.org/show_bug.cgi?id=56896

        Test: fast/css/counters/2displays.html

        * rendering/CounterNode.cpp:
        (WebCore::CounterNode::~CounterNode):
        Added to make sure that its display renderers are always reset when
        the node is deleted.
        (WebCore::CounterNode::resetRenderers):
        Fixed bug that would prevent reset of second and subsequent
        display renderers.
        * rendering/CounterNode.h:
        * rendering/RenderCounter.cpp:
        (WebCore::destroyCounterNodeWithoutMapRemoval):
        removed unnecessary calls to resetRenderers() as the CounterNode
        destructor takes care of that now.

2011-03-23  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Maciej Stachowiak.

        WebKit2: Need API to manage the Media Cache
        https://bugs.webkit.org/show_bug.cgi?id=56878
        <rdar://problem/9082503>

        Add functions that need to be exported.

        * WebCore.exp.in:

2011-03-23  Robert Kroeger  <rjkroege@chromium.org>

        Reviewed by James Robinson.

        Correct use of ENABLE() Macro

        In http://trac.webkit.org/changeset/81618, I mis-used the ENABLE()
        macro. This patch corrects.

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

        * page/EventHandler.cpp:
        (WebCore::EventHandler::EventHandler):
        (WebCore::EventHandler::handleTouchEvent):
        * page/EventHandler.h:

2011-03-23  Jer Noble  <jer.noble@apple.com>

        Reviewed by Simon Fraser.

        Scrubbing <video> with HTTP Live Stream resizes element to 0x0
        https://bugs.webkit.org/show_bug.cgi?id=55702

        QTKit will occasionally set the natural size of a QTMovie to 0x0 while scrubbing
        an HTTP Live Stream.  So we will cache the last valid value returned by QTKit
        and use that as our naturalSize until a new valid value is returned.

        Unfortunately, QTKit will also fail to generate a notification when the natural size
        changes, so we are forced to cache the natural size from within naturalSize(), which
        is a const function, necessitating a const_cast to set m_cachedNaturalSize.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.h: Added m_cachedNaturalSize.
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::MediaPlayerPrivateQTKit): Initialize m_cachedNaturalSize.
        (WebCore::MediaPlayerPrivateQTKit::naturalSize): 

2011-03-23  Alexey Proskuryakov  <ap@apple.com>

        Build fix.

        * loader/FrameLoader.cpp: (WebCore::FrameLoader::checkLoadCompleteForThisFrame):
        Removed a stray parenthesis.

2011-03-23  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Maciej Stachowiak.

        REGRESSION: Infinite recursion in recursiveCheckLoadComplete()/checkLoadCompleteForThisFrame()/stopLoading()
        https://bugs.webkit.org/show_bug.cgi?id=56978
        <rdar://problem/9041670>

        No new tests, because there is no known way to reproduce.

        Removed strange code that was trying to stop a non-loading provisional document loader and
        even its subframes (?!). Added assertions to catch it if we can actually be loading here in
        some sense.
        Rewrote a condition for clarity - starting with r43148, it was acting as an opposite of a
        recursion guard (but that didn't cause immediate problems then).

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

2011-03-23  Brady Eidson  <beidson@apple.com>

        Attempt to fix the build for platforms that have the icon database 
        disabled but still provide settings API for it...?

        * loader/icon/IconDatabase.h:
        (WebCore::IconDatabase::defaultDatabaseFilename):

2011-03-23  Mark Rowe  <mrowe@apple.com>

        Fix the build.

        * WebCore.exp.in: Export the new version of IconDatabase::open.

2011-03-23  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        Change IconDatabase opening to allow for arbitrary filenames
        https://bugs.webkit.org/show_bug.cgi?id=56977

        * WebCore.exp.in:
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::open):
        * loader/icon/IconDatabase.h:
        * loader/icon/IconDatabaseBase.cpp:
        (WebCore::IconDatabaseBase::open):
        * loader/icon/IconDatabaseBase.h:
        * loader/icon/IconDatabaseClient.h:

2011-03-23  Kenneth Russell  <kbr@google.com>

        Reviewed by James Robinson.

        [chromium] WebGLRenderingContext and other DOMWindow properties should remain if WebGL is disabled
        https://bugs.webkit.org/show_bug.cgi?id=56947

        Removed the RuntimeEnabledFeatures setting for WebGL and the
        EnabledAtRuntime extended attribute from the WebGL-related
        properties on the DOMWindow. WebGL support is now controlled
        exclusively through the page's Settings.

        No new tests; tested manually in Chromium with --disable-webgl
        command line argument and blacklist.

        * bindings/generic/RuntimeEnabledFeatures.cpp:
        * bindings/generic/RuntimeEnabledFeatures.h:
        * page/DOMWindow.idl:

2011-03-23  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r81802.
        http://trac.webkit.org/changeset/81802
        https://bugs.webkit.org/show_bug.cgi?id=56963

        Broke a layout test, and this fix is not trivial. (Requested
        by dhyatt on #webkit).

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::layoutOnlyPositionedObjects):
        * rendering/RenderBlock.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::styleDidChange):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::styleWillChange):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::RenderObject):
        (WebCore::RenderObject::adjustStyleDifference):
        (WebCore::RenderObject::setStyle):
        (WebCore::RenderObject::styleDidChange):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::needsLayout):
        (WebCore::RenderObject::needsPositionedMovementLayoutOnly):
        (WebCore::RenderObject::setNeedsLayout):
        (WebCore::RenderObject::setChildNeedsLayout):
        (WebCore::RenderObject::markContainingBlocksForLayout):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::diff):
        * rendering/style/RenderStyleConstants.h:
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::layout):

2011-03-23  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by David Hyatt.

        REGRESSION(81035): crash in RenderDetails::removeChild
        https://bugs.webkit.org/show_bug.cgi?id=56773

        Test: fast/html/details-children-merge-crash.html

        Preventing merging of RenderDetails's anonymous children.

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

        Fixing RenderDetails::removeChild and cleaning m_marker in RenderDetails::destroy.

        * rendering/RenderDetails.cpp:
        (WebCore::RenderDetails::destroy):
        (WebCore::RenderDetails::removeChild):

2011-03-23  Xiaomei Ji  <xji@chromium.org>

        Reviewed by David Hyatt.

        Preserve unicode-bidi:bidi-override in anonymous block.
        https://bugs.webkit.org/show_bug.cgi?id=21440

        unicode-bidi:bidi-override should be preserved in anonymous block
        according to http://www.w3.org/TR/CSS21/visuren.html#propdef-unicode-bidi.

        Introduce a helper function RenderStyle()::createAnonymousStyle() which
        creates a default RenderStyle, inherits the inherited style from parent,
        and inherit unicode-bidi:bidi-override from parent.
        And replace the style creation when anonymous block is created.

        Note: the TABLE releated anonymous blocks are untouched, including:
        TABLE, TABLE_CELL, TABLE_ROW, TABLE_ROW_GROUP anonymous blocks created in
        RenderObject, RenderTable, RenderTableRow, and RenderTableSection,
        due to the expected behavior is not clear.
        Please refer to https://bugs.webkit.org/show_bug.cgi?id=56594.
        
        Test: fast/css/bidi-override-in-anonymous-block.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::styleDidChange):
        (WebCore::RenderBlock::removeChild):
        (WebCore::RenderBlock::createAnonymousBlock):
        (WebCore::RenderBlock::createAnonymousColumnsBlock):
        (WebCore::RenderBlock::createAnonymousColumnSpanBlock):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::addChildIgnoringContinuation):
        * rendering/RenderRubyRun.cpp:
        (WebCore::RenderRubyRun::createRubyBase):
        (WebCore::RenderRubyRun::staticCreateRubyRun):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::createAnonymousStyle):
        * rendering/style/RenderStyle.h:

2011-03-23  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=56909
        
        Add a simplified normal flow layout path optimization for overflow recomputation
        and for positioned objects inside relative positioned containers.

        Currently there is an optimized code path for positioned objects, but as soon as
        we encounter a normal flow object in the containing block chain, we lose the
        optimization.

        This patch adds a new type of style difference called SimplifiedLayout that is
        returned when only overflow needs to be recomputed. Whenever opacity changes or
        a transform changes, this is the hint returned now instead of a full layout.
        
        In addition, when positioned objects need layout and start marking up the
        containing block chain, we now propagate the fact that the layout is simplified
        all the way up to the root, even when we encounter normal flow containing
        blocks.
        
        The layoutOnlyPositionedObjects function has been renamed to simplifiedLayout()
        and is now used for all of these cases (in addition to what it handled before).
        
        No new tests, since existing tests covered this very well (especially the opacity
        and transforms repaint tests in fast/repaint).

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::simplifiedNormalFlowLayout):
        (WebCore::RenderBlock::simplifiedLayout):
        * rendering/RenderBlock.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::styleDidChange):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::styleWillChange):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::RenderObject):
        (WebCore::RenderObject::adjustStyleDifference):
        (WebCore::RenderObject::setStyle):
        (WebCore::RenderObject::styleDidChange):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::needsLayout):
        (WebCore::RenderObject::needsPositionedMovementLayoutOnly):
        (WebCore::RenderObject::needsSimplifiedNormalFlowLayout):
        (WebCore::RenderObject::setNeedsLayout):
        (WebCore::RenderObject::setChildNeedsLayout):
        (WebCore::RenderObject::setNeedsSimplifiedNormalFlowLayout):
        (WebCore::RenderObject::markContainingBlocksForLayout):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::diff):
        * rendering/style/RenderStyleConstants.h:
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::layout):

2011-03-23  Tyler Close  <tjclose@chromium.org>

        Reviewed by Jeremy Orlow.

        Fix ambiguous method call in V8 IDL generated code for DOMStringList callback parameter
        https://bugs.webkit.org/show_bug.cgi?id=56950

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/scripts/test/CPP/WebDOMTestCallback.cpp:
        (WebDOMTestCallback::callbackWithStringList):
        * bindings/scripts/test/CPP/WebDOMTestCallback.h:
        * bindings/scripts/test/GObject/WebKitDOMTestCallback.cpp:
        (webkit_dom_test_callback_callback_with_string_list):
        * bindings/scripts/test/GObject/WebKitDOMTestCallback.h:
        * bindings/scripts/test/JS/JSTestCallback.cpp:
        (WebCore::JSTestCallback::callbackWithStringList):
        * bindings/scripts/test/JS/JSTestCallback.h:
        * bindings/scripts/test/ObjC/DOMTestCallback.h:
        * bindings/scripts/test/ObjC/DOMTestCallback.mm:
        (-[DOMTestCallback callbackWithStringList:]):
        * bindings/scripts/test/TestCallback.idl:
        * bindings/scripts/test/V8/V8TestCallback.cpp:
        (WebCore::V8TestCallback::callbackWithStringList):
        * bindings/scripts/test/V8/V8TestCallback.h:

2011-03-23  Cris Neckar  <cdn@chromium.org>

        Reviewed by Eric Seidel.

        Add refptr for widget. Mutations can happen within the event handler.
        https://bugs.webkit.org/show_bug.cgi?id=56774

        Test: plugins/change-widget-and-click-crash.html

        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::defaultEventHandler):

2011-03-23  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Dave Hyatt.

        Add combine text cast checks since style property is insufficient
        in telling object types.
        https://bugs.webkit.org/show_bug.cgi?id=56358

        Test: fast/text/input-box-text-fragment-combine-text-crash.html

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::computeInlinePreferredLogicalWidths):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::findNextLineBreak):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::widthFromCache):

2011-03-23  Andreas Kling  <kling@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] "Unwavering" HTML5 game freezes the web page.
        https://bugs.webkit.org/show_bug.cgi?id=56944

        For canvas's getImageData() API, we don't want to make a deep-copy of
        the pixels, which is the case on Qt's "raster" graphics system.

        To work around this, we trick QPixmap::toImage() into giving us the
        QPixmap's backing QImage by temporarily pointing the paint engine to
        a null paint device.

        * platform/graphics/qt/ImageBufferData.h:
        * platform/graphics/qt/ImageBufferQt.cpp:
        (WebCore::ImageBufferData::toQImage): Added, returns the
        ImageBufferData as a QImage, avoiding a backend deep-copy if possible.
        (WebCore::ImageBuffer::platformTransformColorSpace):
        (WebCore::getImageData):

2011-03-23  Viet-Trung Luu  <viettrungluu@chromium.org>

        Reviewed by Tony Chang.

        [chromium] Add FormatPlainText to WebClipboard::Format enumeration.
        https://bugs.webkit.org/show_bug.cgi?id=56868

        Chromium's WebClipboard::isFormatAvailable() will be correspondingly
        extended.

        * platform/chromium/PasteboardPrivate.h: Add corresponding enum entry.
            This part of the change is inert and should have no effect.

2011-03-23  Tyler Close  <tjclose@chromium.org>

        Reviewed by Jeremy Orlow.

        run-bindings-tests reference files are out of sync with CodeGenerator*.pm
        https://bugs.webkit.org/show_bug.cgi?id=56934

        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h:
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterfaceConstructor::createStructure):
        (WebCore::JSTestInterfaceConstructor::JSTestInterfaceConstructor):
        (WebCore::JSTestInterface::createPrototype):
        * bindings/scripts/test/JS/JSTestInterface.h:
        (WebCore::JSTestInterface::createStructure):
        (WebCore::JSTestInterfacePrototype::createStructure):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        (WebCore::JSTestMediaQueryListListenerConstructor::createStructure):
        (WebCore::JSTestMediaQueryListListenerConstructor::JSTestMediaQueryListListenerConstructor):
        (WebCore::JSTestMediaQueryListListener::createPrototype):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.h:
        (WebCore::JSTestMediaQueryListListener::createStructure):
        (WebCore::JSTestMediaQueryListListenerPrototype::createStructure):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSTestObjConstructor::createStructure):
        (WebCore::JSTestObjConstructor::JSTestObjConstructor):
        (WebCore::JSTestObj::createPrototype):
        * bindings/scripts/test/JS/JSTestObj.h:
        (WebCore::JSTestObj::createStructure):
        (WebCore::JSTestObjPrototype::createStructure):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::JSTestSerializedScriptValueInterfaceConstructor::createStructure):
        (WebCore::JSTestSerializedScriptValueInterfaceConstructor::JSTestSerializedScriptValueInterfaceConstructor):
        (WebCore::JSTestSerializedScriptValueInterface::createPrototype):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h:
        (WebCore::JSTestSerializedScriptValueInterface::createStructure):
        (WebCore::JSTestSerializedScriptValueInterfacePrototype::createStructure):
        * bindings/scripts/test/V8/V8TestCallback.cpp:
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::V8TestInterface::wrapSlow):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.cpp:
        (WebCore::V8TestMediaQueryListListener::wrapSlow):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::V8TestObj::wrapSlow):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore::V8TestSerializedScriptValueInterface::wrapSlow):

2011-03-23  Daniel Bates  <dbates@rim.com>

        Reviewed by Antonio Gomes.

        Clean up: Rename HTMLFrameSetElement::{noresize, frameborder, and frameBorderSet}
        to conform to the WebKit Code style guidelines
        https://bugs.webkit.org/show_bug.cgi?id=56871

        No functionality changed. So, no new tests.

        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::HTMLFrameSetElement):
        (WebCore::HTMLFrameSetElement::parseMappedAttribute):
        (WebCore::HTMLFrameSetElement::attach):
        (WebCore::HTMLFrameSetElement::defaultEventHandler):
        * html/HTMLFrameSetElement.h:
        (WebCore::HTMLFrameSetElement::hasFrameBorder):
        (WebCore::HTMLFrameSetElement::noResize):

2011-03-23  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Dan Bernstein.

        Replace height with logicalHeight when removing items from
        gPercentHeightDescendantMap so that it is writing mode aware.
        https://bugs.webkit.org/show_bug.cgi?id=56902

        Test: fast/block/percent-height-descendant-not-removed-crash.html

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

2011-03-23  Anders Carlsson  <andersca@apple.com>

        Fix clang build.

        * inspector/DOMNodeHighlighter.cpp:
        Remove an unused function.

2011-03-22  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        Add asynchronous load decision call to WebKit2 IconDatabase
        https://bugs.webkit.org/show_bug.cgi?id=56887

        Clear the callback when it's made:
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::continueIconLoadWithDecision):

        Don't load icons when using new-style icon database if in private browsing:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::continueIconLoadWithDecision):
        
        Enhance the IconDatabase callbacks to have an ID and inherit from a common base:
        * loader/icon/IconDatabaseBase.h:
        (WebCore::CallbackBase::~CallbackBase):
        (WebCore::CallbackBase::callbackID):
        (WebCore::CallbackBase::CallbackBase):
        (WebCore::CallbackBase::context):
        (WebCore::CallbackBase::generateCallbackID):
        (WebCore::EnumCallback::performCallback):
        (WebCore::EnumCallback::EnumCallback):
        (WebCore::ObjectCallback::performCallback):
        (WebCore::ObjectCallback::ObjectCallback):

2011-03-21  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: move scripts concatenation logic to SourceFile.
        https://bugs.webkit.org/show_bug.cgi?id=56756

        * inspector/front-end/ScriptsPanel.js:
        * inspector/front-end/SourceFile.js:
        (WebInspector.SourceFile.prototype._requestContent):
        (WebInspector.SourceFile.prototype._loadResourceContent):
        (WebInspector.SourceFile.prototype._loadAndConcatenateScriptsContent):
        (WebInspector.SourceFile.prototype._concatenateScriptsContent):

2011-03-23  Leandro Gracia Gil  <leandrogracia@chromium.org>

        Reviewed by Steve Block.

        Media Stream API: add a flag to RuntimeEnabledFeatures.
        https://bugs.webkit.org/show_bug.cgi?id=56921

        Add a flag to RuntimeEnabledFeatures to check if the Media Stream API is enabled at runtime.

        Tests for the Media Stream API will be provided by the bug 56587.

        * bindings/generic/RuntimeEnabledFeatures.cpp:
        * bindings/generic/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::mediaStreamEnabled):
        (WebCore::RuntimeEnabledFeatures::setMediaStreamEnabled):
        (WebCore::RuntimeEnabledFeatures::webkitGetUserMediaEnabled):

2011-03-23  Carol Szabo  <carol.szabo@nokia.com>

        Reviewed by David Hyatt.

        Modified RenderCounter::originalText() to correctly attach
        the created counter to the before/after container even when
        that is not the RenderCounter's direct parent.

        CSS 2.1 failure: various before-after-* tests fail
        https://bugs.webkit.org/show_bug.cgi?id=47207

        Test: fast/css/counters/complex-before.html

        * rendering/RenderCounter.cpp:
        (WebCore::RenderCounter::originalText):

2011-03-23  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Reviewed by Antonio Gomes.

        [EFL] Add play / pause button to media control
        https://bugs.webkit.org/show_bug.cgi?id=55463

        Add play|pause button to media control.

        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::edjeGroupFromFormType):
        (WebCore::RenderThemeEfl::emitMediaButtonSignal): Added.
        (WebCore::RenderThemeEfl::paintMediaPlayButton):
        * platform/efl/RenderThemeEfl.h:

2011-03-23  Aparna Nandyal  <aparna.nand@wipro.com>

        Reviewed by Andreas Kling.

        [Qt] QtWebKit rendering problem when maximizing and doing a back
        https://bugs.webkit.org/show_bug.cgi?id=56669

        Contents of the page are not re-sized on going back after
        maximizing. ContentsResized() is not getting called. Hence old
        document width and height are used. Corrected this behaviour by 
        calling setBoundsSize() which calls contentsSize(). 

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

2011-03-21  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: add support for formating source files in debugger presentation model.
        https://bugs.webkit.org/show_bug.cgi?id=56558

        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel.prototype.reset):
        (WebInspector.DebuggerModel.prototype.get scripts):
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel):
        (WebInspector.DebuggerPresentationModel.prototype._addScript):
        (WebInspector.DebuggerPresentationModel.prototype._refreshBreakpoints):
        (WebInspector.DebuggerPresentationModel.prototype.toggleFormatSourceFiles):
        (WebInspector.DebuggerPresentationModel.prototype.continueToLine):
        (WebInspector.DebuggerPresentationModel.prototype.setBreakpoint):
        (WebInspector.DebuggerPresentationModel.prototype._breakpointAdded):
        (WebInspector.DebuggerPresentationModel.prototype.set selectedCallFrame):
        (WebInspector.DebuggerPresentationModel.prototype._sourceFileForScript):
        (WebInspector.DebuggerPresentationModel.prototype._reset):
        * inspector/front-end/ScriptFormatter.js:
        (WebInspector.ScriptFormatter.prototype.formatContent.didFormatChunks):
        (WebInspector.ScriptFormatter.prototype.formatContent):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype.reset):
        (WebInspector.ScriptsPanel.prototype._toggleFormatSourceFiles):
        * inspector/front-end/Settings.js:
        * inspector/front-end/SourceFile.js:
        (WebInspector.SourceFile.prototype.scriptLocationToSourceLocation):
        (WebInspector.SourceFile.prototype.sourceLocationToScriptLocation):
        (WebInspector.FormattedSourceFile):
        (WebInspector.FormattedSourceFile.prototype.scriptLocationToSourceLocation):
        (WebInspector.FormattedSourceFile.prototype.sourceLocationToScriptLocation):
        (WebInspector.FormattedSourceFile.prototype._didRequestContent):

2011-03-23  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: use unsigned char instead of char when storing script source
        https://bugs.webkit.org/show_bug.cgi?id=56920

        * bindings/v8/DebuggerScript.js:
        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::ensureDebuggerScriptCompiled):
        * inspector/InjectedScriptManager.cpp:
        (WebCore::InjectedScriptManager::injectedScriptSource):
        * inspector/InjectedScriptSource.js: whitespace change to trigger compilation
        * inspector/xxd.pl:
        * xml/XMLViewer.xsl:

2011-03-23  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: move node searching and node highlight related methods from InspectorAgent to InspectorDOMAgent.
        https://bugs.webkit.org/show_bug.cgi?id=56912

        The next functions were moved:
            setSearchingForNode
            highlightDOMNode
            hideDOMNodeHighlight
            highlightFrame
            hideFrameHighlight
            mouseDidMoveOverElement
            handleMousePress

        The code which does real highlight in Graphic context was moved to new files DOMNodeHighlighter.*

        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/DOMNodeHighlighter.cpp: Added.
        (WebCore::DOMNodeHighlighter::DrawNodeHighlight):
        * inspector/DOMNodeHighlighter.h: Added.
        * inspector/Inspector.json:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        (WebCore::InspectorAgent::~InspectorAgent):
        (WebCore::InspectorAgent::inspectedPageDestroyed):
        (WebCore::InspectorAgent::disconnectFrontend):
        * inspector/InspectorAgent.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::drawNodeHighlight):
        (WebCore::InspectorController::hideHighlight):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::InspectorDOMAgent):
        (WebCore::InspectorDOMAgent::~InspectorDOMAgent):
        (WebCore::InspectorDOMAgent::clearFrontend):
        (WebCore::InspectorDOMAgent::handleMousePress):
        (WebCore::InspectorDOMAgent::mouseDidMoveOverElement):
        (WebCore::InspectorDOMAgent::searchingForNodeInPage):
        (WebCore::InspectorDOMAgent::setSearchingForNode):
        (WebCore::InspectorDOMAgent::highlight):
        (WebCore::InspectorDOMAgent::highlightDOMNode):
        (WebCore::InspectorDOMAgent::highlightFrame):
        (WebCore::InspectorDOMAgent::hideHighlight):
        (WebCore::InspectorDOMAgent::drawNodeHighlight):
        * inspector/InspectorDOMAgent.h:
        (WebCore::InspectorDOMAgent::hideDOMNodeHighlight):
        (WebCore::InspectorDOMAgent::hideFrameHighlight):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::mouseDidMoveOverElementImpl):
        (WebCore::InspectorInstrumentation::handleMousePressImpl):
        * inspector/InstrumentingAgents.h:
        (WebCore::InstrumentingAgents::InstrumentingAgents):
        (WebCore::InstrumentingAgents::inspectorAgent):
        (WebCore::InstrumentingAgents::setInspectorAgent):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.setSearchingForNode):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.FrameTreeElement.prototype.onselect):
        (WebInspector.FrameTreeElement.prototype.set hovered):
        * inspector/front-end/inspector.js:
        (WebInspector.highlightDOMNode):

2011-03-23  Yury Semikhatsky  <yurys@chromium.org>

        Unreviewed. Rollout r81768 which broke compilation on Win.

        * xml/XMLTreeViewer.cpp:
        (WebCore::XMLTreeViewer::transformDocumentToTreeView):
        * xml/XMLViewer.xsl:

2011-03-23  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: remove unnecessary reinterpret_cast in XMLTreeViewer
        https://bugs.webkit.org/show_bug.cgi?id=56919

        * xml/XMLTreeViewer.cpp:
        (WebCore::XMLTreeViewer::transformDocumentToTreeView):
        * xml/XMLViewer.xsl: whitespace change to trigger compilation.

2011-03-21  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: move content loading logic to a new SourceFile class.
        https://bugs.webkit.org/show_bug.cgi?id=56748

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype.requestSourceFileContent):
        (WebInspector.DebuggerPresentationModel.prototype._addScript.contentChanged):
        (WebInspector.DebuggerPresentationModel.prototype._addScript):
        (WebInspector.DebuggerPresentationModel.prototype._scriptSourceChanged):
        (WebInspector.DebuggerPresentationModel.prototype.set selectedCallFrame):
        * inspector/front-end/SourceFile.js: Added.
        (WebInspector.SourceFile):
        (WebInspector.SourceFile.prototype.addScript):
        (WebInspector.SourceFile.prototype.requestContent):
        (WebInspector.SourceFile.prototype.forceLoadContent):
        (WebInspector.SourceFile.prototype.reload):
        (WebInspector.SourceFile.prototype._requestContent):
        (WebInspector.SourceFile.prototype._loadResourceContent):
        (WebInspector.SourceFile.prototype._loadScriptContent):
        (WebInspector.SourceFile.prototype._loadAndConcatenateScriptsContent):
        (WebInspector.SourceFile.prototype._didRequestContent):
        (WebInspector.SourceFile.prototype._hasPendingResource):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:

2011-03-23  Pavel Podivilov  <podivilov@chromium.org>

        Unreviewed, fix compilation broken by r81758.

        * xml/XMLTreeViewer.cpp:
        (WebCore::XMLTreeViewer::transformDocumentToTreeView):

2011-03-23  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: define array types properly in the Inspector.json
        https://bugs.webkit.org/show_bug.cgi?id=56915

        * inspector/Inspector.json:
        * inspector/generate-inspector-idl:

2011-03-23  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        [V8] Web Inspector: compile DebuggerScript.js into DebuggerScriptSource.h
        https://bugs.webkit.org/show_bug.cgi?id=56843

        * inspector/front-end/WebKit.qrc:

2011-03-23  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Add a star while editing a source code
        https://bugs.webkit.org/show_bug.cgi?id=56743

        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.setScriptSourceIsBeingEdited):
        (WebInspector.SourceFrameDelegateForScriptsPanel.prototype.setScriptSourceIsBeingEdited):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._startEditing):
        (WebInspector.SourceFrame.prototype._registerShortcuts):
        (WebInspector.SourceFrame.prototype._handleSave):
        (WebInspector.SourceFrame.prototype._handleRevertEditing):
        (WebInspector.SourceFrameDelegate.prototype.setScriptSourceIsBeingEdited):

2011-03-23  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Scrolling and navigation is not smooth on a script with many long lines
        https://bugs.webkit.org/show_bug.cgi?id=56559

        * inspector/front-end/TextViewer.js:
        (WebInspector.TextEditorChunkedPanel.prototype._expandChunks):
        (WebInspector.TextEditorMainPanel.prototype._expandChunks):
        (WebInspector.TextEditorMainPanel.prototype._highlightDataReady):
        (WebInspector.TextEditorMainPanel.prototype._schedulePaintLines):
        (WebInspector.TextEditorMainPanel.prototype._paintScheduledLines):
        (WebInspector.TextEditorMainPanel.prototype._restorePaintLinesOperationsCredit):
        (WebInspector.TextEditorMainPanel.prototype._paintLines):
        (WebInspector.TextEditorMainPanel.prototype._paintLine):
        (WebInspector.TextEditorMainPanel.prototype._applyDomUpdates):

2011-03-22  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        [V8] Web Inspector: compile DebuggerScript.js into DebuggerScriptSource.h
        https://bugs.webkit.org/show_bug.cgi?id=56843

        DebuggerScript.js is now translated into a char[] array before inspector compilation.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::ensureDebuggerScriptCompiled):
        * bindings/v8/ScriptDebugServer.h:
        * inspector/InjectedScriptManager.cpp:
        (WebCore::InjectedScriptManager::injectedScriptSource):
        * inspector/InjectedScriptSource.js: whitespace change to trigger InjectedScriptSource.h generation.
        * inspector/xxd.pl:

2011-03-23  Mark Rowe  <mrowe@apple.com>

        Fix the 32-bit build.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::initializeNewContext):

2011-03-22  Noel Gordon  <noel.gordon@gmail.com>

        Reviewed by Ojan Vafai.

        [chromium] skia image encoders should use <wtf/Vector.h>
        https://bugs.webkit.org/show_bug.cgi?id=56893

        No new tests. Covered by existing canvas.toDataURL tests.

        * platform/image-encoders/skia/JPEGImageEncoder.h:
        * platform/image-encoders/skia/PNGImageEncoder.h:

2011-03-22  David Hyatt  <hyatt@apple.com>

        Reviewed by Beth Dakin.

        Move the cellWidthChanged bit out of RenderObject and back down into RenderTableCell in order to
        free up a bit for another performance optimization I have planned.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::RenderObject):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::setHasColumns):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::RenderTableCell):
        * rendering/RenderTableCell.h:
        (WebCore::RenderTableCell::cellWidthChanged):
        (WebCore::RenderTableCell::setCellWidthChanged):

2011-03-22  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=56892
        
        Adding floats to an empty block is O(n^2). 

        If you just add floats back to back to an empty block, the addition is essentially O(n^2)
        once the floats move below your current line position.  This is because we repeatedly ask for the
        available width for the line from scratch every time we add a float, regardless of whether the
        float even vertically intersected our current line position.
        
        Change positionNewFloatOnLine to update left and right line offsets intelligently and to only
        do it based off the single new float that just got added.
        
        This fix cuts the IE MazeSolver time in half.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::positionNewFloatOnLine):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::skipLeadingWhitespace):
        (WebCore::RenderBlock::findNextLineBreak):

2011-03-22  Beth Dakin  <bdakin@apple.com>

        Reviewed by Sam Weinig.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=56890 It is possible to calculate a 
        NaN value for "value" in ScrollbarThemeMac::paint()
        -and corresponding-
        <rdar://problem/9160621>

        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::paint):

2011-03-17  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Antti Koivisto.

        webkit should implement -moz-any selector (as -webkit-any obviously)
        https://bugs.webkit.org/show_bug.cgi?id=38095

        For now, match the Mozilla implementation with respect to specificity
        and only allowing simple selectors. Both of these are likely to change
        pending discussion on www-style@. 

        Tests: fast/css/pseudo-any.html
               fast/dom/SelectorAPI/unknown-pseudo.html

        * css/CSSGrammar.y:
        Create simple_selector_list. This is exactly like selector_list
        except it only allows simple selectors and creates a new vector
        instead of a reusable one since there can be multiple in one rule.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::~CSSParser):
        (WebCore::CSSParser::lex):
        (WebCore::CSSParser::createFloatingSelectorVector):
        (WebCore::CSSParser::sinkFloatingSelectorVector):
        * css/CSSParser.h:
        * css/CSSParserValues.cpp:
        (WebCore::CSSParserSelector::adoptSelectorVector):
        * css/CSSParserValues.h:
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::specificityForOneSelector):
        (WebCore::CSSSelector::pseudoId):
        (WebCore::nameToPseudoTypeMap):
        (WebCore::CSSSelector::extractPseudoType):
        (WebCore::CSSSelector::selectorText):
        (WebCore::CSSSelector::setSelectorList):
        (WebCore::CSSSelector::RareData::RareData):
        (WebCore::CSSSelector::RareData::~RareData):
        These need to be moved into the cpp file so that we can
        have an OwnPtr<CSSSelectorList> in CSSSelector::RareData.
        * css/CSSSelector.h:
        (WebCore::CSSSelector::selectorList):
        * css/CSSSelectorList.cpp:
        (WebCore::forEachTagSelector):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector):
        (WebCore::collectFeaturesFromSelector):
        * css/tokenizer.flex:

2011-03-22  John Bauman  <jbauman@chromium.org>

        Reviewed by Kenneth Russell.

        Add support for preserveDrawingBuffer context creation attribute
        https://bugs.webkit.org/show_bug.cgi?id=56431

        For the accelerated compositing case, only prepare the texture if it
        has been updated since the last composite. For the non-accelerated case, make sure to
        grab a copy of the image buffer and paint from that if the backbuffer
        would be cleared.

        In both cases, make sure to clear the context's backbuffer before the
        first operation that uses it.

        No new tests. It seems to be difficult/impossible to trigger an early
        compositing operation in DumpRenderTree, making this hard to
        test automatically. However, Chromium and Safari (Mac) have been
        tested manually on the webgl conformance test for this.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::paint):
        (WebCore::HTMLCanvasElement::makePresentationCopy):
        (WebCore::HTMLCanvasElement::clearPresentationCopy):
        * html/HTMLCanvasElement.h:
        * html/canvas/WebGLContextAttributes.cpp:
        (WebCore::WebGLContextAttributes::preserveDrawingBuffer):
        (WebCore::WebGLContextAttributes::setPreserveDrawingBuffer):
        * html/canvas/WebGLContextAttributes.h:
        * html/canvas/WebGLContextAttributes.idl:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::initializeNewContext):
        (WebCore::WebGLRenderingContext::markContextChanged):
        (WebCore::WebGLRenderingContext::clearIfComposited):
        (WebCore::WebGLRenderingContext::markLayerComposited):
        (WebCore::WebGLRenderingContext::paintRenderingResultsToCanvas):
        (WebCore::WebGLRenderingContext::paintRenderingResultsToImageData):
        (WebCore::WebGLRenderingContext::clear):
        (WebCore::WebGLRenderingContext::clearColor):
        (WebCore::WebGLRenderingContext::clearDepth):
        (WebCore::WebGLRenderingContext::clearStencil):
        (WebCore::WebGLRenderingContext::colorMask):
        (WebCore::WebGLRenderingContext::disable):
        (WebCore::WebGLRenderingContext::drawArrays):
        (WebCore::WebGLRenderingContext::drawElements):
        (WebCore::WebGLRenderingContext::enable):
        (WebCore::WebGLRenderingContext::readPixels):
        * html/canvas/WebGLRenderingContext.h:
        * platform/graphics/GraphicsContext3D.h:
        (WebCore::GraphicsContext3D::Attributes::Attributes):
        * platform/graphics/chromium/WebGLLayerChromium.cpp:
        (WebCore::WebGLLayerChromium::updateContentsIfDirty):
        (WebCore::WebGLLayerChromium::textureUpdated):
        (WebCore::WebGLLayerChromium::setContext):
        * platform/graphics/chromium/WebGLLayerChromium.h:
        * platform/graphics/mac/GraphicsContext3DMac.mm
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        (WebCore::GraphicsContext3D::~GraphicsContext3D):
        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::GraphicsContext3D::reshape):
        (WebCore::GraphicsContext3D::prepareTexture):
        (WebCore::GraphicsContext3D::activeTexture):
        (WebCore::GraphicsContext3D::bindTexture):
        (WebCore::GraphicsContext3D::markContextChanged):
        (WebCore::GraphicsContext3D::markLayerComposited):
        (WebCore::GraphicsContext3D::layerComposited):
        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3DInternal::GraphicsContext3DInternal):
        (WebCore::GraphicsContext3D::markLayerComposited):
        (WebCore::GraphicsContext3D::markContextChanged):
        (WebCore::GraphicsContext3D::layerComposited):

2011-03-22  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        Remove USE_WK_SCROLLBAR_PAINTER_AND_CONTROLLER.
        <rdar://problem/8944718> 

        * DerivedSources.make:
        Remove generation of HeaderDetection.h.

        * WebCore.xcodeproj/project.pbxproj:
        Remove HeaderDetection.h.

        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollAnimatorMac.mm:
        * platform/mac/ScrollbarThemeMac.h:
        * platform/mac/ScrollbarThemeMac.mm:
        Replace use of USE_WK_SCROLLBAR_PAINTER_AND_CONTROLLER with USE(WK_SCROLLBAR_PAINTER).

2011-03-22  Victoria Kirst  <vrk@google.com>

        Reviewed by Kenneth Russell.

        [chromium] Properly reset VideoLayerChromium textures after lost renderer context
        https://bugs.webkit.org/show_bug.cgi?id=56514

        The VideoLayerChromium textures were still mapped to the old
        renderer's context when LayerRendererChromium was being recreated
        i.e. when GPU process is killed. This patch allows VideoLayerChromium
        it recreate textures in the new context when the old renderer is lost.
        Patch also does a bit of refactoring and code clean-up.

        * platform/graphics/chromium/VideoLayerChromium.cpp:
        (WebCore::VideoLayerChromium::~VideoLayerChromium):
        (WebCore::VideoLayerChromium::cleanupResources):
        (WebCore::VideoLayerChromium::updateContentsIfDirty):
        (WebCore::VideoLayerChromium::allocateTexturesIfNeeded):
        (WebCore::VideoLayerChromium::computeVisibleSize):
        (WebCore::VideoLayerChromium::drawYUV):
        (WebCore::VideoLayerChromium::drawRGBA):
        (WebCore::VideoLayerChromium::resetFrameParameters):
        (WebCore::VideoLayerChromium::saveCurrentFrame):
        * platform/graphics/chromium/VideoLayerChromium.h:

2011-03-22  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        WebCore GYP build should export the headers needed by WebKit
        https://bugs.webkit.org/show_bug.cgi?id=56883

        * WebCore.gypi:
        * gyp/WebCore.gyp:
            - Export a couple more headers.
            - Remove FIXME comments for things we've already fixed.

2011-03-22  Anton D'Auria  <adauria@apple.com>

        Reviewed by Alexey Proskuryakov.

        Add +[WebApplicationCache getOriginsWithCache]
        https://bugs.webkit.org/show_bug.cgi?id=56722

        Added test that exercises WebCore API to get origins with application cache.

        Test: http/tests/appcache/origins-with-appcache.html

        * loader/appcache/ApplicationCacheStorage.cpp: 
        (WebCore::ApplicationCacheStorage::getOriginsWithCache):
        * loader/appcache/ApplicationCacheStorage.h:

2011-03-22  Carol Szabo  <carol.szabo@nokia.com>

        Reviewed by David Hyatt.

        Introduced double linkage between a CounterNode and its display renderer.

        use of freed pointer in WebCore::RenderCounter::originalText()
        https://bugs.webkit.org/show_bug.cgi?id=56065

        No new tests. This bug could only be reproduced manually by
        refreshing the page during load at a critical point.
        See bug attachment for testing.

        * rendering/CounterNode.cpp:
        Introduced new member "m_owner" to store the renderer that has the
        style directives that produce the CounterNode.
        Repurposed m_renderer to reffer to the RenderCounter that shows the
        CounterNode.
        (WebCore::CounterNode::CounterNode):
        Updated member initialization.
        (WebCore::CounterNode::create):
        (WebCore::CounterNode::addRenderer):
        (WebCore::CounterNode::removeRenderer):
        Introduced to manage the renderer list associated wit this CounterNode.
        (WebCore::CounterNode::resetRenderers):
        This is the old resetRenderer. Renamed to take into account that there may be
        more than one renderer to a CounterNode.
        (WebCore::CounterNode::resetThisAndDescendantsRenderers):
        This is the old resetRenderers renamed for clarity.
        (WebCore::CounterNode::recount):
        (WebCore::CounterNode::insertAfter):
        (WebCore::CounterNode::removeChild):
        No functional changes.
        (WebCore::showTreeAndMark):
        Added flushing to ensure that the output is complete.
        * rendering/CounterNode.h:
        (WebCore::CounterNode::owner):
        Renamed from renderer()
        * rendering/RenderCounter.cpp:
        (WebCore::findPlaceForCounter):
        Fixed comments. No functional changes.
        (WebCore::RenderCounter::~RenderCounter):
        Made sure that the CounterNode that this renderers displays is
        detached from this.
        (WebCore::RenderCounter::originalText):
        (WebCore::RenderCounter::invalidate):
        Changed to maintain the bidirectional relationship with the displayed CounterNode.
        Also made "invalidate" private as it should be used only by CounterNode.
        (WebCore::destroyCounterNodeWithoutMapRemoval):
        (WebCore::RenderCounter::destroyCounterNodes):
        (WebCore::RenderCounter::destroyCounterNode):
        (WebCore::updateCounters):
        No change, just kept code in line with the changes above.
        (showCounterRendererTree):
        Added fflush to ensure complete display.
        * rendering/RenderCounter.h:
        * rendering/RenderObjectChildList.cpp:
        * rendering/RenderObjectChildList.h:
        Removed unneeded invalidateCounters related functions.

2011-03-22  Dean Jackson  <dino@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=56242
        Interrupted accelerated animations/transitions were causing
        subsequent animations to not start (because they were stuck
        waiting for a response from the compositing layer). I renamed
        the instance variable that indicates whether or not to
        notify animations of start time, from m_waitingForStartTimeResponse
        to m_waitingForAsyncStartNotification, so that it makes more sense.
        The actual bug fix was changing the logic so that the flag is reset
        when the list of waiting animations becomes empty. I mistakenly committed
        the bad logic in r81613.

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::updateStateMachine):
        - Always set paused time as we enter the paused state
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::AnimationControllerPrivate):
        (WebCore::AnimationControllerPrivate::endAnimationUpdate):
        (WebCore::AnimationControllerPrivate::receivedStartTimeResponse):
        (WebCore::AnimationControllerPrivate::addToAnimationsWaitingForStartTimeResponse):
        (WebCore::AnimationControllerPrivate::removeFromAnimationsWaitingForStartTimeResponse):
        - reset the waiting flag when the list is empty (rather than not empty)
        (WebCore::AnimationControllerPrivate::startTimeResponse):
        * page/animation/AnimationControllerPrivate.h:
        - rename m_waitingForStartTimeResponse to m_waitingForAsyncStartNotification

2011-03-22  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/8648311> and https://bugs.webkit.org/show_bug.cgi?id=56876
        WK2 Icon DB: Expand IconDatabaseClient interface and move it to the main thread

        * loader/icon/IconDatabase.cpp:
        Add a dummy client implementation for non-Mac, non-Win ports:
        (WebCore::DefaultIconDatabaseClient::performImport):
        (WebCore::DefaultIconDatabaseClient::didImportIconURLForPageURL):
        (WebCore::DefaultIconDatabaseClient::didImportIconDataForPageURL):
        (WebCore::DefaultIconDatabaseClient::didChangeIconForPageURL):
        (WebCore::DefaultIconDatabaseClient::didRemoveAllIcons):
        (WebCore::DefaultIconDatabaseClient::didFinishURLImport):
        (WebCore::defaultClient):

        Either call the client directly when on the main thread, or use the dispatch functions below
        if on the background thread:
        (WebCore::IconDatabase::setIconDataForIconURL):
        (WebCore::IconDatabase::setIconURLForPageURL):
        (WebCore::IconDatabase::performURLImport):
        (WebCore::IconDatabase::readFromDatabase):
        (WebCore::IconDatabase::removeAllIconsOnThread):

        Add a very targeted WorkItem interface for dispatching client calls on the main thread:
        (WebCore::ClientWorkItem::ClientWorkItem):
        (WebCore::ClientWorkItem::~ClientWorkItem):
        (WebCore::ImportedIconURLForPageURLWorkItem::ImportedIconURLForPageURLWorkItem):
        (WebCore::ImportedIconURLForPageURLWorkItem::~ImportedIconURLForPageURLWorkItem):
        (WebCore::ImportedIconURLForPageURLWorkItem::performWork):
        (WebCore::ImportedIconDataForPageURLWorkItem::ImportedIconDataForPageURLWorkItem):
        (WebCore::ImportedIconDataForPageURLWorkItem::~ImportedIconDataForPageURLWorkItem):
        (WebCore::ImportedIconDataForPageURLWorkItem::performWork):
        (WebCore::RemovedAllIconsWorkItem::RemovedAllIconsWorkItem):
        (WebCore::RemovedAllIconsWorkItem::performWork):
        (WebCore::performWorkItem):

        Use the client WorkItem interface to perform these callbacks on the main thread:
        (WebCore::IconDatabase::dispatchDidImportIconURLForPageURLOnMainThread):
        (WebCore::IconDatabase::dispatchDidImportIconDataForPageURLOnMainThread):
        (WebCore::IconDatabase::dispatchDidRemoveAllIconsOnMainThread):
        * loader/icon/IconDatabase.h:
        * loader/icon/IconDatabaseClient.h:

2011-03-22  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=56869
        
        Make horizontal writing mode a bit on RenderObject with a fast inlined method for access. This should be
        a little faster than having to access the information from the RenderStyle's sub-structure.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::addOverflowFromChildren):
        (WebCore::RenderBlock::computeOverflow):
        (WebCore::RenderBlock::adjustPositionedBlock):
        (WebCore::RenderBlock::setLogicalLeftForChild):
        (WebCore::RenderBlock::setLogicalTopForChild):
        (WebCore::RenderBlock::layoutPositionedObjects):
        (WebCore::RenderBlock::paintColumnRules):
        (WebCore::RenderBlock::paintColumnContents):
        (WebCore::RenderBlock::flipFloatForWritingMode):
        (WebCore::blockDirectionOffset):
        (WebCore::inlineDirectionOffset):
        (WebCore::RenderBlock::logicalRectToPhysicalRect):
        (WebCore::RenderBlock::inlineSelectionGaps):
        (WebCore::RenderBlock::addOverhangingFloats):
        (WebCore::RenderBlock::addIntrudingFloats):
        (WebCore::RenderBlock::hitTestColumns):
        (WebCore::positionForPointRespectingEditingBoundaries):
        (WebCore::RenderBlock::positionForPointWithInlineChildren):
        (WebCore::RenderBlock::positionForPoint):
        (WebCore::RenderBlock::columnRectAt):
        (WebCore::RenderBlock::adjustPointToColumnContents):
        (WebCore::RenderBlock::adjustRectForColumns):
        (WebCore::RenderBlock::flipForWritingModeIncludingColumns):
        (WebCore::RenderBlock::adjustForColumns):
        (WebCore::RenderBlock::lastLineBoxBaseline):
        (WebCore::RenderBlock::nextPageLogicalTop):
        (WebCore::RenderBlock::adjustForUnsplittableChild):
        (WebCore::RenderBlock::adjustLinePositionForPagination):
        (WebCore::RenderBlock::collapsedMarginBeforeForChild):
        (WebCore::RenderBlock::collapsedMarginAfterForChild):
        (WebCore::RenderBlock::marginStartForChild):
        (WebCore::RenderBlock::marginEndForChild):
        (WebCore::RenderBlock::setMarginStartForChild):
        (WebCore::RenderBlock::setMarginEndForChild):
        (WebCore::RenderBlock::marginValuesForChild):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::logicalWidthForChild):
        (WebCore::RenderBlock::logicalHeightForChild):
        (WebCore::RenderBlock::logicalTopForChild):
        (WebCore::RenderBlock::logicalRightOffsetForContent):
        (WebCore::RenderBlock::logicalLeftOffsetForContent):
        (WebCore::RenderBlock::logicalTopForFloat):
        (WebCore::RenderBlock::logicalBottomForFloat):
        (WebCore::RenderBlock::logicalLeftForFloat):
        (WebCore::RenderBlock::logicalRightForFloat):
        (WebCore::RenderBlock::logicalWidthForFloat):
        (WebCore::RenderBlock::setLogicalTopForFloat):
        (WebCore::RenderBlock::setLogicalLeftForFloat):
        (WebCore::RenderBlock::setLogicalHeightForFloat):
        (WebCore::RenderBlock::setLogicalWidthForFloat):
        (WebCore::RenderBlock::xPositionForFloatIncludingMargin):
        (WebCore::RenderBlock::yPositionForFloatIncludingMargin):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::createLineBoxes):
        (WebCore::RenderBlock::layoutInlineChildren):
        (WebCore::RenderBlock::checkFloatsInCleanLine):
        (WebCore::setStaticPositions):
        (WebCore::RenderBlock::findNextLineBreak):
        (WebCore::RenderBlock::beforeSideVisualOverflowForLine):
        (WebCore::RenderBlock::afterSideVisualOverflowForLine):
        (WebCore::RenderBlock::beforeSideLayoutOverflowForLine):
        (WebCore::RenderBlock::afterSideLayoutOverflowForLine):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::marginStart):
        (WebCore::RenderBox::marginEnd):
        (WebCore::RenderBox::setMarginStart):
        (WebCore::RenderBox::setMarginEnd):
        (WebCore::RenderBox::styleDidChange):
        (WebCore::RenderBox::logicalScroll):
        (WebCore::RenderBox::computeLogicalWidth):
        (WebCore::RenderBox::computeLogicalHeight):
        (WebCore::RenderBox::availableLogicalHeightUsing):
        (WebCore::RenderBox::containingBlockLogicalWidthForPositioned):
        (WebCore::RenderBox::containingBlockLogicalHeightForPositioned):
        (WebCore::RenderBox::computePositionedLogicalWidth):
        (WebCore::computeLogicalLeftPositionedOffset):
        (WebCore::RenderBox::computePositionedLogicalHeight):
        (WebCore::computeLogicalTopPositionedOffset):
        (WebCore::RenderBox::computePositionedLogicalWidthReplaced):
        (WebCore::RenderBox::computePositionedLogicalHeightReplaced):
        (WebCore::RenderBox::addLayoutOverflow):
        (WebCore::RenderBox::flipForWritingMode):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::updateBoxModelInfoFromStyle):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::RenderObject):
        (WebCore::RenderObject::styleWillChange):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isHorizontalWritingMode):
        (WebCore::RenderObject::setHorizontalWritingMode):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::paddingTop):
        (WebCore::RenderTableCell::paddingBottom):
        (WebCore::RenderTableCell::paddingLeft):
        (WebCore::RenderTableCell::paddingRight):
        (WebCore::RenderTableCell::scrollbarsChanged):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::RootInlineBox):
        (WebCore::RootInlineBox::lineSelectionGap):
        (WebCore::RootInlineBox::verticalPositionForBox):

2011-03-22  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Beth Dakin.

        Incorrect rendering of composited element with negative z-index child
        https://bugs.webkit.org/show_bug.cgi?id=56846
        
        When a composited element has a child with negative z-index, we make
        a separate layer for that element's foreground content. This layer
        was positioned incorrectly (but the content happened to paint at
        the right location), resulting in right/bottom clipping.
        
        Fix this, remove the little-used graphicsLayerToContentsCoordinates()
        contentsToGraphicsLayerCoordinates() methods, and optimize incremental
        repaints in the foreground and mask layers.

        Tests: compositing/geometry/foreground-layer.html
               compositing/geometry/repaint-foreground-layer.html

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::setNeedsDisplayInRect): Cull repaints
        which fall outside the layer bounds, so callers don't have to,
        and to avoid unnecessary layer commits.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry): If
        we have a foreground layer inside a clipping layer, the foreground
        layer's offset is zero, since the clipping layer is its parent.
        
        (WebCore::RenderLayerBacking::setContentsNeedDisplayInRect): Use
        offsetFromRenderer() directly instead of contentsToGraphicsLayerCoordinates().
        Also do incremental repaints of the foreground and mask layers.
        
        (WebCore::RenderLayerBacking::paintContents): It was incorrect to always
        use compositedBounds() to compute the painting offset, since that's
        per-RenderLayerBacking, but a single RenderLayerBacking can have different
        GraphicsLayers with different offsets (e.g. the foreground layer).
        Instead, use offsetFromRenderer(), which gives has the correct offset.

        * rendering/RenderLayerBacking.h: Remove unused methods.

2011-03-22  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Use default-output instead of default-input to get hardware sample-rate
        https://bugs.webkit.org/show_bug.cgi?id=56858

        No new tests since audio API is not yet implemented.

        * platform/audio/mac/AudioDestinationMac.cpp:
        (WebCore::AudioDestination::hardwareSampleRate):

2011-03-22  Pratik Solanki  <psolanki@apple.com>

        Reviewed by David Kilzer.

        Implement -connection:didReceiveDataArray: NSURLConnection delegate method
        https://bugs.webkit.org/show_bug.cgi?id=56838

        Add experimental support for the didReceiveDataArray callback on
        NSURLConnection. A RessourceHandleClient indicates its ability to
        handle this callback by returning true from supportsDataArray() method.
        Currently only SubresourceLoader uses this so we get the benefit for
        CSS, JS and image loads. For other clients we call didReceiveData with
        the CFData contents as before.

        * WebCore.xcodeproj/project.pbxproj:
        * loader/ResourceLoader.h:
        * loader/SubresourceLoader.h:
        (WebCore::SubresourceLoader::supportsDataArray):
        * loader/cf/SubresourceLoaderCF.cpp: Added.
        (WebCore::SubresourceLoader::didReceiveDataArray):
        * loader/mac/ResourceLoaderMac.mm:
        (WebCore::ResourceLoader::didReceiveDataArray):
        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::clear):
        (WebCore::SharedBuffer::buffer):
        * platform/SharedBuffer.h:
        * platform/cf/SharedBufferCF.cpp:
        (WebCore::SharedBuffer::append):
        (WebCore::SharedBuffer::copyDataArrayAndClear):
        * platform/network/ResourceHandleClient.h:
        (WebCore::ResourceHandleClient::supportsDataArray):
        (WebCore::ResourceHandleClient::didReceiveDataArray):
        * platform/network/mac/ResourceHandleMac.mm:
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveDataArray:]):

2011-03-22  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Make it possible to build JavaScriptCore and WebCore gyp builds outside of Source
        https://bugs.webkit.org/show_bug.cgi?id=56867

        This should make it possible to build the gyp-generated WebCore.xcodeproj
        from a WebCore directory outside of Source.

        * gyp/WebCore.gyp:
        * gyp/run-if-exists.sh: Added.
        * gyp/update-info-plist.sh: Added.

2011-03-22  Anders Carlsson  <andersca@apple.com>

        Fix WebKit2 build.

        * WebCore.exp.in:
        Export a symbol needed by WebKit2.

2011-03-22  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add the remaining steps to WebCore GYP build
        https://bugs.webkit.org/show_bug.cgi?id=56864

        These steps match the normal build.  After this patch, I believe the
        WebCore GYP build is complete.

        * WebCore.gypi:
        * gyp/WebCore.gyp:
        * gyp/copy-inspector-resources.sh: Added.

2011-03-22  Beth Dakin  <bdakin@apple.com>

        Reviewed by Simon Fraser.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=56856 RenderListBox needs to be 
        added to Page::scrollableAreaSet()

        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::RenderListBox):
        (WebCore::RenderListBox::~RenderListBox):
        * rendering/RenderListBox.h:
        (WebCore::RenderListBox::disconnectFromPage):

2011-03-22  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Add high-quality band-limited audio resampling algorithm
        https://bugs.webkit.org/show_bug.cgi?id=56692

        No new tests since audio API is not yet implemented.

        * platform/audio/SincResampler.cpp: Added.
        (WebCore::SincResampler::SincResampler):
        (WebCore::SincResampler::initializeKernel):
        (WebCore::SincResampler::consumeSource):
        (WebCore::SincResampler::process):
        * platform/audio/SincResampler.h: Added.

2011-03-22  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        WebCore GYP build should build without help from normal WebCore build
        https://bugs.webkit.org/show_bug.cgi?id=56860

        Before this patch, the WebCore GYP build wasn't generating the derived
        sources quite right because the ENABLE macros were not being
        communicated to the "Derived Sources" target.

        This patch also adds the "Copy Forwarding and ICU Headers" as well as
        the "Streamline Inspector Source" steps, which are present in the
        normal build.  Unlike the normal build, these steps occur in a new
        target, called "WebCore Support", which is less than aesthetically
        beautiful.  Hopefully we'll be able to move them into the WebCore
        target proper in the future, but that will likely require some GYP
        changes.

        This patch probably could have been broken down into a couple smaller
        patches, but that doesn't seem necessary.

        * WebCore.gypi:
            - This file appears to no longer exist.
        * gyp/WebCore.gyp:
        * gyp/copy-forwarding-and-icu-headers.sh: Added.
        * gyp/streamline-inspector-source.sh: Added.

2011-03-22  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=56859
        
        Floats in the floating object list occur in the order that they are positioned. This means
        that for a given vertical offset, the last left object in the list that intersects that offset
        will be the rightmost float. There is no need to check any previous floats, since they have to be
        further left than that rightmost float. The same rules hold true for right-aligned floats.
        
        Change logicalLeft/RightOffsetForLine to iterate backwards instead of forwards and to stop the moment
        they encounter a float that intersects the vertical range.
        
        This cuts the maze solving time for a 20x20 maze in the IE MazeSolver test in half.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::logicalLeftOffsetForLine):
        (WebCore::RenderBlock::logicalRightOffsetForLine):

2011-03-22  Justin Schuh  <jschuh@chromium.org>

        Reviewed by Dirk Schulze.

        SVG displacement map should validate channel selections
        https://bugs.webkit.org/show_bug.cgi?id=56794

        Test: svg/filters/feDisplacementMap-crash-test.xhtml

        * svg/SVGFEDisplacementMapElement.cpp:
        (WebCore::SVGFEDisplacementMapElement::svgAttributeChanged):

2011-03-22  Huahui Wu  <mediadependent@gmail.com>

        Reviewed by Steve Block.

        [Android] Update PlatformTouchEvent for android so it can pass IDs and states around.
        https://bugs.webkit.org/show_bug.cgi?id=56763

        No new tests as no new functionality is exposed.

        * platform/PlatformTouchEvent.h:
        * platform/android/PlatformTouchEventAndroid.cpp:
        (WebCore::PlatformTouchEvent::PlatformTouchEvent):

2011-03-22  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser.

        Implement the CSS3 line-box-contain property. This property provides authors with more control over spacing between lines. For example,
        you can fix the height of lines and cause all line contents to be ignored. You can make lines fit to glyphs. You can ignore leading and
        fit to the font size. You can ignore replaced elements, etc.

        Refactor the code in computeLogicalBoxHeights into helper methods on RootInlineBox. verticalPositionForBox moved over to RootInlineBox
        so that it could be called from RenderBlockLineLayout. ascentAndDescentForBox is the new method that computes the appropriate box
        height based off the block's line-box-contain value.
        
        GlyphOverflow can now have a computeBounds parameter set, in which case glyph bounds will be computed and stored in the overflow struct.
        
        RenderInline no longer returns 0 margins in the block direction, since line-box-contain can size around the margin box.
        
        Added new tests in fast/block/lineboxcontain

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::createLineBoxContainValue):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSLineBoxContainValue.cpp: Added.
        (WebCore::CSSLineBoxContainValue::CSSLineBoxContainValue):
        (WebCore::CSSLineBoxContainValue::cssText):
        * css/CSSLineBoxContainValue.h: Added.
        (WebCore::CSSLineBoxContainValue::create):
        (WebCore::CSSLineBoxContainValue::value):
        (WebCore::CSSLineBoxContainValue::isCSSLineBoxContainValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseLineBoxContain):
        * css/CSSParser.h:
        * css/CSSPropertyNames.in:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * css/CSSValue.h:
        (WebCore::CSSValue::isCSSLineBoxContainValue):
        * css/CSSValueKeywords.in:
        * platform/graphics/Font.cpp:
        (WebCore::Font::width):
        * platform/graphics/Font.h:
        (WebCore::GlyphOverflow::GlyphOverflow):
        * platform/graphics/FontFastPath.cpp:
        (WebCore::Font::floatWidthForSimpleText):
        * platform/graphics/mac/FontComplexTextMac.cpp:
        (WebCore::Font::floatWidthForComplexText):
        * platform/graphics/win/FontWin.cpp:
        (WebCore::Font::floatWidthForComplexText):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::computeLogicalBoxHeights):
        * rendering/InlineFlowBox.h:
        * rendering/RenderBlock.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::computeInlineDirectionPositionsForLine):
        (WebCore::RenderBlock::layoutInlineChildren):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::marginLeft):
        (WebCore::RenderInline::marginRight):
        (WebCore::RenderInline::marginTop):
        (WebCore::RenderInline::marginBottom):
        (WebCore::RenderInline::marginBefore):
        (WebCore::RenderInline::marginAfter):
        * rendering/RenderInline.h:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::widthFromCache):
        (WebCore::RenderText::width):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::alignBoxesInBlockDirection):
        (WebCore::setAscentAndDescent):
        (WebCore::RootInlineBox::ascentAndDescentForBox):
        (WebCore::RootInlineBox::verticalPositionForBox):
        (WebCore::RootInlineBox::includeLeadingForBox):
        (WebCore::RootInlineBox::includeFontForBox):
        (WebCore::RootInlineBox::includeGlyphsForBox):
        (WebCore::RootInlineBox::includeMarginForBox):
        (WebCore::RootInlineBox::fitsToGlyphs):
        (WebCore::RootInlineBox::includesRootLineBoxFontOrLeading):
        * rendering/RootInlineBox.h:
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::diff):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::lineBoxContain):
        (WebCore::InheritedFlags::setLineBoxContain):
        (WebCore::InheritedFlags::initialLineBoxContain):
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::operator==):
        * rendering/style/StyleRareInheritedData.h:

2011-03-22  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r81653.
        http://trac.webkit.org/changeset/81653
        https://bugs.webkit.org/show_bug.cgi?id=56839

        Breaks fast/text/drawBidiText.html on Chromium. (Requested by
        pfeldman on #webkit).

        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::paintItemForeground):

2011-03-22  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed. Rolling out 81657, 81654, 81651 for breaking tests on chromium.

        * inspector/Inspector.json:
        * inspector/InspectorDatabaseResource.cpp:
        (WebCore::InspectorDatabaseResource::bind):
        * inspector/front-end/Database.js:
        (WebInspector.DatabaseDispatcher.prototype.addDatabase):

2011-03-21  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: [REGRESSION] scripts panel is broken when frontend is reopened.
        https://bugs.webkit.org/show_bug.cgi?id=56747

        Debugger should be enabled on front-end side to guarantee initialization sequence (resources come before scripts).

        * inspector/Inspector.json:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::showProfilesPanel):
        * inspector/InspectorAgent.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::showAndEnableDebugger):
        * inspector/InspectorController.h:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::setFrontend):
        (WebCore::InspectorDebuggerAgent::clearFrontend):
        * inspector/InspectorDebuggerAgent.h:

2011-03-22  Jarkko Sakkinen  <jarkko.j.sakkinen@gmail.com>

        Reviewed by Benjamin Poulain.

        [Qt] WebGL: renderbufferStorage() fails with internal format GL_RGBA4
        https://bugs.webkit.org/show_bug.cgi?id=56824

        On desktop OpenGL substitute in renderbufferStorage:
        - GL_DEPTH24_STENCIL8 for GL_DEPTH_STENCIL
        - GL_DEPTH_COMPONENT for GL_DEPTH_COMPONENT16
        - GL_RGBA for GL_RGBA4 and GL_RGBA565
        - GL_RGB for RGB5_A1.

        Tests: fast/canvas/webgl/uninitialized-test.html

        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3D::renderbufferStorage):

2011-03-16  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Seidel.

        Move volume slider positioning logic to a custom renderer.
        https://bugs.webkit.org/show_bug.cgi?id=56498

        No functional change, covered by existing tests.

        * html/shadow/MediaControls.cpp:
        (WebCore::MediaControls::updateVolumeSliderContainer): Removed positioning logic.
        * rendering/MediaControlElements.cpp:
        (WebCore::RenderMediaVolumeSliderContainer::RenderMediaVolumeSliderContainer): Added.
        (WebCore::RenderMediaVolumeSliderContainer::layout): Added.
        (WebCore::MediaControlVolumeSliderContainerElement::MediaControlVolumeSliderContainerElement): Removed storing of coordinates.
        (WebCore::MediaControlVolumeSliderContainerElement::createRenderer): Added.
        (WebCore::MediaControlVolumeSliderContainerElement::styleForElement): Removed setting of coordinates.
        * rendering/MediaControlElements.h: Changed corresponding decls.

2011-03-22  Andrew Wason  <rectalogic@rectalogic.com>

        Reviewed by Benjamin Poulain.

        [Qt] QWebPage with WebGL content crashes when rendering if no QWebView parent
        https://bugs.webkit.org/show_bug.cgi?id=54138

        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3DInternal::getViewportGLWidget):
         Check if we actually have a QWebPageClient before dereferencing it.

2011-03-22  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: document DOM domain types and protocol methods.
        https://bugs.webkit.org/show_bug.cgi?id=56807

        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::wrapNode):
        * inspector/InjectedScript.h:
        * inspector/Inspector.json:
        * inspector/InspectorBrowserDebuggerAgent.cpp:
        (WebCore::InspectorBrowserDebuggerAgent::descriptionForDOMEvent):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::removeNode):
        (WebCore::InspectorDOMAgent::setNodeValue):
        * inspector/InspectorDOMAgent.h:
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype._createTooltipForNode.resolvedNode):
        (WebInspector.ElementsTreeElement.prototype._createTooltipForNode):
        * inspector/front-end/EventListenersSidebarPane.js:
        * inspector/front-end/PropertiesSidebarPane.js:
        (WebInspector.PropertiesSidebarPane.prototype.update.nodeResolved):
        * inspector/front-end/RemoteObject.js:
        (WebInspector.RemoteObject.resolveNode):

2011-03-22  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Production configuration in GYP isn&apos;t set up correctly
        https://bugs.webkit.org/show_bug.cgi?id=56786

        Update WebCore.gyp with information mined from WebCore.xcodeproj.

        * WebCore.gypi:
        * gyp/WebCore.gyp:

2011-03-22  Ofri Wolfus  <ofri@google.com>

        Reviewed by Eric Seidel.

        RTL: Select elements with a size attribute are always left aligned.
        https://bugs.webkit.org/show_bug.cgi?id=50928

        Added support for alignment in RenderListBox.

        Test: fast/forms/listbox-bidi-align.html

        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::paintItemForeground): Add support for alignment and directionality.

2011-03-22  Ilya Sherman  <isherman@chromium.org>

        Reviewed by Kent Tamura.

        Clear autofilled flag when reseting a form
        In service of https://code.google.com/p/chromium/issues/detail?id=70037
        https://bugs.webkit.org/show_bug.cgi?id=56802

        Test: fast/forms/reset-autofilled.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::reset): Clear the autofilled flag.

2011-03-22  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: protocol cleanup. DatabaseAgent.
        https://bugs.webkit.org/show_bug.cgi?id=56815

        see protocol metabug:
        - All events should use notification wording, not command wording:

        addDatabase was renamed to DatabaseOpened.

        Test: inspector/protocol/database-agent.html

        * inspector/Inspector.json:
        * inspector/InspectorDatabaseResource.cpp:
        (WebCore::InspectorDatabaseResource::bind):
        * inspector/front-end/Database.js:
        (WebInspector.DatabaseDispatcher.prototype.DatabaseOpened):

2011-03-22  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: protocol cleanup. ConsoleAgent.
        https://bugs.webkit.org/show_bug.cgi?id=56806

        renamed method: void setConsoleMessagesEnabled(in boolean enabled, out boolean newState); => void enable(out long expiredMessagesCount);
        new method: disable()
        deleted method: [event] void consoleMessageExpiredCountUpdate(out unsigned long count); delete it. The counter will be transfered as out argument of enable command.

        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::updateRepeatCountInConsole):
        * inspector/Inspector.json:
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::enable):
        (WebCore::InspectorConsoleAgent::disable):
        * inspector/InspectorConsoleAgent.h:
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype._registerConsoleDomainDispatcher.dispatcher.consoleMessageRepeatCountUpdated):
        (WebInspector.ConsoleView.prototype.setConsoleMessageExpiredCount):
        * inspector/front-end/inspector.js:

2011-03-22  Kent Tamura  <tkent@chromium.org>

        Reviewed by Eric Seidel.

        REGRESSION(r80096): Number type input unexpectedly rounds fractional values
        https://bugs.webkit.org/show_bug.cgi?id=56367

        Because the default value of the maximum fractional digits of NSNumberFormatter
        and ICU NumberFormat is 3, the value 0.55555 is rounded to 0.556 in a
        localized representation. This bug affects only in Mac and Chromium.

        To fix this bug,
         - Add "maximum fractional digits" parameter to formatLocalizedNumber(), and
         - NumberInputType::visibleValue uses parseToDoubleForNumberTypeWithDecimalPlaces()
          instead of parseToDoubleForNumberType().

        No automated tests because the behavior is locale-dependent. This change
        updates a manual test.

        * html/NumberInputType.cpp:
        (WebCore::NumberInputType::visibleValue):
          Use parseToDoubleForNumberTypeWithDecimalPlaces() and passing fractional
          part length to formatLocalizedNumber().
        * manual-tests/input-number-localization.html:
          Update the test to cover this change.
        * platform/text/LocalizedNumber.h: Add a parameter to formatLocalizedNumber().
        * platform/text/LocalizedNumberICU.cpp:
        (WebCore::formatLocalizedNumber): Call setMaximumFractionalDigits().
        * platform/text/LocalizedNumberNone.cpp:
        (WebCore::formatLocalizedNumber):
        * platform/text/mac/LocalizedNumberMac.mm:
        (WebCore::formatLocalizedNumber): Call setMaximumFractionalDigits().

2011-03-21  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Eric Seidel.

        Anonymous blocks need isRenderBlock cast check. Also, need
        to allow display BOX for flexible boxes.
        https://bugs.webkit.org/show_bug.cgi?id=56709

        Test: accessibility/anchor-linked-anonymous-block-crash.html

        * rendering/RenderBlock.cpp:
        (WebCore::canMergeContiguousAnonymousBlocks): remove specific
        fix in r81088 which is no longer needed.
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isAnonymousBlock): Add isRenderBlock cast
        check.

2011-03-21  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Eric Seidel.

        Revert small change made in r78846 of replacing move with positionLineBox
        in the adjusting position function for inline box.
        https://bugs.webkit.org/show_bug.cgi?id=56300

        The change in r78846 caused positioning line boxes during the step of adjusting
        position for inline box, thereby causing line boxes to be nuked. This happens as
        part of aligning boxes in block direction in RenderBlock::computeBlockDirectionPositionsForLine.
        Later on, we do the positioning of line boxes again later in that function. This
        causes use of removed inline box leading to crash. Also, it is unnecessary to do
        this twice.

        Tests: fast/inline/inline-box-adjust-position-crash.html
               fast/inline/inline-box-adjust-position-crash2.html

        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::adjustPosition):

2011-03-21  Adam Klein  <adamk@chromium.org>

        Reviewed by David Levin.

        [fileapi] Add URI resolution support to WorkerContext
        https://bugs.webkit.org/show_bug.cgi?id=55644

        Tests: http/tests/filesystem/workers/resolve-url-sync.html
               http/tests/filesystem/workers/resolve-url.html

        * fileapi/LocalFileSystem.cpp:
        (WebCore::LocalFileSystem::readFileSystem):
        Add support for workers.
        * fileapi/LocalFileSystem.h:
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::resolveLocalFileSystemURL):
        (WebCore::WorkerContext::resolveLocalFileSystemSyncURL):
        * workers/WorkerContext.h:
        * workers/WorkerContext.idl:

2011-03-21  David Levin  <levin@chromium.org>

        Reviewed by Adam Barth.

        XHR in Workers doesn't set the referrer correctly.
        https://bugs.webkit.org/show_bug.cgi?id=24683

        Tests: http/tests/xmlhttprequest/workers/referer.html
               http/tests/xmlhttprequest/workers/shared-worker-referer.html

        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::loadResourceSynchronously): Fill in empty string for the outgoing referrer.
        (WebCore::DocumentThreadableLoader::create): Added the ability to set the outgoing referrer.
        (WebCore::DocumentThreadableLoader::DocumentThreadableLoader): Ditto.
        (WebCore::DocumentThreadableLoader::loadRequest): Ditto.
        * loader/DocumentThreadableLoader.h: Ditto.
        * loader/ResourceLoadScheduler.cpp:
        (WebCore::ResourceLoadScheduler::scheduleSubresourceLoad): Ditto.
        * loader/ResourceLoadScheduler.h: Ditto.
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::create): Fixed bug (caught by the test) in last minute change done in previous check-in.
        * loader/WorkerThreadableLoader.cpp:
        (WebCore::WorkerThreadableLoader::WorkerThreadableLoader): Fill in the outgoing referrer.
        (WebCore::WorkerThreadableLoader::MainThreadBridge::MainThreadBridge): Plumbing for the outgoing referrer.
        (WebCore::WorkerThreadableLoader::MainThreadBridge::mainThreadCreateLoader): Plumbing for the outgoing referrer.
        * loader/WorkerThreadableLoader.h:

2011-03-21  Nate Chapin  <japhet@chromium.org>

        Reviewed by Brady Eidson.

        Do not check the DocumentLoader's request cache policy
        in determining whether we should force revalidation of a cached
        subresource. If the main resource received headers telling it not
        to cache, that policy will be propagated to subresources.

        The previous behavior is left in behind a flag in Settings, since
        QuickLook depends on it.

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

        Tests: http/tests/cache/post-redirect-get.php
               http/tests/cache/post-with-cached-subresources.php

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::subresourceCachePolicy):
        (WebCore::FrameLoader::loadPostRequest):
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        * page/Settings.h:
        (WebCore::Settings::setUseQuickLookResourceCachingQuirks):
        (WebCore::Settings::useQuickLookResourceCachingQuirks):

2011-03-21  Rik Cabanier  <cabanier@adobe.com>

        Reviewed by James Robinson.

        bug 56052: percentages are incorrectly rounded in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=56052

        test: fast/css/percentage-non-integer.html

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * page/PrintContext.cpp:
        (WebCore::PrintContext::pageProperty):
        * platform/Length.h:
        (WebCore::Length::Length):
        (WebCore::Length::operator*=):
        (WebCore::Length::value):
        (WebCore::Length::percent):
        (WebCore::Length::setValue):
        (WebCore::Length::calcValue):
        (WebCore::Length::calcMinValue):
        (WebCore::Length::isUndefined):
        (WebCore::Length::isZero):
        (WebCore::Length::isPositive):
        (WebCore::Length::isNegative):
        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::recalcColumn):
        (WebCore::AutoTableLayout::computePreferredLogicalWidths):
        (WebCore::AutoTableLayout::calcEffectiveLogicalWidth):
        (WebCore::AutoTableLayout::layout):
        * rendering/FixedTableLayout.cpp:
        (WebCore::FixedTableLayout::calcWidthArray):
        (WebCore::FixedTableLayout::layout):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::addCell):
        (WebCore::RenderTableSection::layoutRows):
        * rendering/style/BorderData.h:
        (WebCore::BorderData::hasBorderRadius):

2011-03-21  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add WebCoreExportFileGenerator to WebCore GYP build
        https://bugs.webkit.org/show_bug.cgi?id=56778

        This target mirrors the eponymous target from WebCore.xcodeproj.

        * WebCore.gypi:
        * gyp/WebCore.gyp:
        * generate-webcore-export-file-generator.sh: Added.

2011-03-21  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        WebCore GYP build shouldn&apos;t crash on startup
        https://bugs.webkit.org/show_bug.cgi?id=56776

        Debug builds shouldn't define NDEBUG.  This same logic exists in the
        project.pbxproj file.

        * gyp/WebCore.gyp:

2011-03-21  Daniel Cheng  <dcheng@chromium.org>

        Reviewed by Tony Chang.

        [chromium] Implement glue between DataTransferItems and the pasteboard.
        https://bugs.webkit.org/show_bug.cgi?id=56330

        Support retrieving clipboard data in a paste through DataTransferItems.

        Test: editing/pasteboard/data-transfer-items.html

        * platform/chromium/ClipboardChromium.cpp:
        (WebCore::ClipboardChromium::items):
        * platform/chromium/DataTransferItemChromium.cpp:
        (WebCore::DataTransferItemChromium::createFromPasteboard):
        (WebCore::DataTransferItemChromium::create):
        (WebCore::DataTransferItemChromium::DataTransferItemChromium):
        (WebCore::DataTransferItemChromium::getAsString):
        * platform/chromium/DataTransferItemChromium.h:
        * platform/chromium/DataTransferItemsChromium.cpp:
        (WebCore::DataTransferItemsChromium::addPasteboardItem):
        * platform/chromium/DataTransferItemsChromium.h:

2011-03-21  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        AX: showContextMenu not working in WK2
        https://bugs.webkit.org/show_bug.cgi?id=56734

        WebKit2 is not able to directly open a context menu because the UI is in the other process.
        Instead the chrome client should be used. This also means implementing showContextMenu() in WebKit1
        code.
        
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityShowContextMenu]):

2011-03-21  Robert Kroeger  <rjkroege@chromium.org>

        Reviewed by Antonio Gomes.

        Add Support to WebCore to optionally call a platform-specific gesture recognizer
        https://bugs.webkit.org/show_bug.cgi?id=49345

        Added an ability for the EventHandler to invoke an optional platform
        specific gesture recognizer.

        No tests added because the change should be functionally invisible.

        * WebCore.gypi:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::EventHandler):
        (WebCore::EventHandler::handleTouchEvent):
        * page/EventHandler.h:
        * platform/PlatformGestureRecognizer.cpp: Added.
        (WebCore::PlatformGestureRecognizer::PlatformGestureRecognizer):
        (WebCore::PlatformGestureRecognizer::~PlatformGestureRecognizer):
        (WebCore::PlatformGestureRecognizer::create):
        * platform/PlatformGestureRecognizer.h: Added.

2011-03-21  Dean Jackson  <dino@apple.com>

        Reviewed by Chris Marrin and Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=56325
        ASSERTION FAILED: paused() in AnimationBase::updateStateMachine()

        AnimationBase had a custom linked-list/self-pointer for keeping
        track of animations that needed to be notified of style updates
        and start progress. This caused problems when AnimationBase was
        destroyed, since the pointer wasn't managed in any way. I replaced
        these pointers with HashSets and moved the code that removes animations
        from the sets into AnimationControllerPrivate, where it belongs.
        CompositeAnimation is also more careful to tell AnimationControllerPrivate
        when it no longer needs to keep track of waiting animations.

        This should stop the style updates being called on non-active animations
        (which was the cause of the state machine error here) and should also
        stop a few of the related flakey test failures and occasional crashes.

        Test: animations/body-removal-crash.html

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::AnimationBase):
        (WebCore::AnimationBase::updateStateMachine):
        * page/animation/AnimationBase.h:
        (WebCore::AnimationBase::~AnimationBase):
        - Remove the linked-list
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::AnimationControllerPrivate):
        (WebCore::AnimationControllerPrivate::addToAnimationsWaitingForStyle):
        (WebCore::AnimationControllerPrivate::removeFromAnimationsWaitingForStyle):
        (WebCore::AnimationControllerPrivate::styleAvailable):
        (WebCore::AnimationControllerPrivate::addToAnimationsWaitingForStartTimeResponse):
        (WebCore::AnimationControllerPrivate::removeFromAnimationsWaitingForStartTimeResponse):
        (WebCore::AnimationControllerPrivate::startTimeResponse):
        (WebCore::AnimationControllerPrivate::animationWillBeRemoved):
        - New method to remove animations from the waiting lists
        * page/animation/AnimationControllerPrivate.h:
        - use a HashSet rather than an AnimationBase* pointer.
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::~CompositeAnimation):
        (WebCore::CompositeAnimation::clearRenderer):
        (WebCore::CompositeAnimation::updateTransitions):
        (WebCore::CompositeAnimation::updateKeyframeAnimations):
        - remove the animations and transitions from the lists when we know
          they are no longer active (rather than waiting for the AnimationBase
          to do it when destructing)

2011-03-21  Justin Schuh  <jschuh@chromium.org>

        Reviewed by James Robinson.

        Stop inserting when the parent is removed
        https://bugs.webkit.org/show_bug.cgi?id=56690

        Tests: fast/dom/insertedIntoDocument-child.html
               fast/dom/insertedIntoDocument-iframe.html
               fast/dom/insertedIntoDocument-sibling.html

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::insertedIntoDocument):
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::insertedIntoDocument):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::insertedIntoDocument):

2011-03-07  David Levin  <levin@chromium.org>

        Reviewed by Adam Barth.

        SubresourceLoader should expose a way to set the outgoing referer/origin
        https://bugs.webkit.org/show_bug.cgi?id=55903

        No new tests as no new functionality is exposed.

        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::create):
        * loader/SubresourceLoader.h:

2011-03-21  Daniel Sievers  <sievers@google.com>

        Reviewed by Simon Fraser.

        [Chromium] Make RenderAsTextBehavior and LayerTreeAsTextBehavior tweakable from the DumpRenderTree commandline
        https://bugs.webkit.org/show_bug.cgi?id=56139

        * WebCore.exp.in:
        * WebCore.order:
        * page/Frame.cpp:
        (WebCore::Frame::layerTreeAsText):
        * page/Frame.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::layerTreeAsText):
        * rendering/RenderLayerCompositor.h:

2011-03-21  Chang Shu  <cshu@webkit.org>

        Reviewed by Alexey Proskuryakov.

        REGRESSION (r79953): Can't type in MS Outlook 2011
        https://bugs.webkit.org/show_bug.cgi?id=56665

        r79953 removed the WebView level editablity which is persistent no matter whether
        underlying document itself is changed and editability gets lost. The resolution is to
        set this WebView editable value to WebCore. This avoids the callback from WebCore to
        WebKit which was the main goal in r79953 to improve performance.

        * WebCore.exp.in:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isReadOnly):
        * dom/Node.cpp:
        (WebCore::Node::isContentEditable):
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::setSelectionFromNone):
        * page/DragController.cpp:
        (WebCore::DragController::operationForLoad):
        * page/Page.cpp:
        (WebCore::Page::Page):
        * page/Page.h:
        (WebCore::Page::setEditable):
        (WebCore::Page::isEditable):

2011-03-21  Eric Uhrhane <ericu@chromium.org>

        Reviewed by David Levin.

        [fileapi/chromium] Fetch platform path using GetMetadata before creating File from FileEntry*
        https://bugs.webkit.org/show_bug.cgi?id=56704

        * fileapi/DOMFileSystemSync.cpp
        (DOMFileSystemSync::createFile)
        (class GetPathHelper): Added, to look up path before creating File.
        * fileapi/DOMFileSystem.cpp
        (DOMFileSystem::createFile)
        (GetPathCallback): Added, to look up path before creating File.
        * platform/FileMetadata.h
        (struct FileMetadata): Added new field platformPath.

2011-03-21  Dominic Cooney  <dominicc@google.com>

        Reviewed by Jeremy Orlow.

        Establishes a V8 context before executing MediaQueryList callbacks.
        https://bugs.webkit.org/show_bug.cgi?id=56166

        MediaQueryList listener callbacks didn't establish a V8 context
        before running script, causing crashes on C++-only
        callstacks (such as user resizing, printing, etc.) I believe this
        could also be contrived to execute media query list listener
        callbacks across domain.

        Test: fast/media/media-query-list-callback.html

        * css/MediaQueryListListener.cpp:
        (WebCore::MediaQueryListListener::queryChanged):

2011-03-21  Andreas Kling  <kling@webkit.org>

        Reviewed by Tor Arne Vestbø.

        [Qt] Add QNetworkReplyHandler::wasAborted()

        Instead of checking if the ResourceHandle is null everywhere,
        use a wasAborted() method to make the code readable.

        * platform/network/qt/QNetworkReplyHandler.h:
        (WebCore::QNetworkReplyHandler::wasAborted):
        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::finish):
        (WebCore::QNetworkReplyHandler::sendResponseIfNeeded):
        (WebCore::QNetworkReplyHandler::redirect):
        (WebCore::QNetworkReplyHandler::forwardData):
        (WebCore::QNetworkReplyHandler::uploadProgress):

2011-03-21  Christian Dywan  <christian@lanedo.com>

        Reviewed by Martin Robinson.

        WebKitIconDatabase may trigger crash in cairoImageSurfaceToGdkPixbuf
        https://bugs.webkit.org/show_bug.cgi?id=56201

        * platform/graphics/gtk/ImageGtk.cpp: Don't attempt to make a pixbuf
            if there is no image.

2011-03-21  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] [Stable] AtkHypertext exposes wrong offsets for links placed inside <span> nodes
        https://bugs.webkit.org/show_bug.cgi?id=56737

        Only consider parent objects not ignoring accessibility.

        * accessibility/gtk/WebKitAccessibleHyperlink.cpp:
        (webkitAccessibleHyperlinkGetStartIndex): Look for the parent
        object not ignoring accessibility for the current hyperlink.
        (webkitAccessibleHyperlinkGetEndIndex): Ditto.

2011-03-21  Andreas Kling  <kling@webkit.org>

        Reviewed by Benjamin Poulain.

        [Qt] Remove handling of QNetworkAccessManager::UnknownOperation

        Now that Qt 4.7 is required we never have to fall back to UnknownOperation.
        Custom verb requests are using CustomOperation already, so this was dead code.

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

2011-03-21  Adam Roben  <aroben@apple.com>

        Fix multiple-definition linker warnings on Windows

        * WebCore.vcproj/WebCore.vcproj: Exclude RenderSVGPath.cpp from the build, since it is
        already being compiled via RenderingAllInOne.cpp. Let VS have its way with the rest of the
        file.

2011-03-21  Andreas Kling  <kling@webkit.org>

        Reviewed by Benjamin Poulain.

        [Qt] Clean up QNetworkReplyHandler::release()

        Since QNetworkReplyHandler no longer uses queued connections to
        the QNetworkReply, it's not necessary to mess with the event
        queue when releasing a reply.

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

2011-03-21  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Inspector does not always show correct transfer size (for compressed/chunked data)
        https://bugs.webkit.org/show_bug.cgi?id=56691

        Added transfer size support in inspector for compressed data.

        Test: http/tests/inspector/network/network-size-chunked.html

        * inspector/Inspector.idl:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didReceiveContentLengthImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didReceiveContentLength):
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::didReceiveResponse):
        (WebCore::InspectorResourceAgent::didReceiveContentLength):
        * inspector/InspectorResourceAgent.h:
        * inspector/front-end/NetworkManager.js:
        (WebInspector.NetworkDispatcher.prototype.didReceiveContentLength):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource.prototype.get transferSize):
        (WebInspector.Resource.prototype.increaseTransferSize):
        * loader/ResourceLoadNotifier.cpp:
        (WebCore::ResourceLoadNotifier::didReceiveData):
        (WebCore::ResourceLoadNotifier::dispatchDidReceiveContentLength):
        (WebCore::ResourceLoadNotifier::sendRemainingDelegateMessages):
        * loader/ResourceLoadNotifier.h:
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::didReceiveData):
        * platform/network/mac/ResourceHandleMac.mm:
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveData:lengthReceived:]):
        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::forwardData):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::gotChunkCallback):
        * platform/network/win/ResourceHandleWin.cpp:
        (WebCore::ResourceHandle::onRequestComplete):
        (WebCore::ResourceHandle::fileLoadTimer):

2011-03-21  Leo Yang  <leo.yang@torchmobile.com.cn>

        Reviewed by Dirk Schulze.

        symbol display <use> at wrong scale
        https://bugs.webkit.org/show_bug.cgi?id=54538

        SVG spec: http://www.w3.org/TR/SVG/struct.html#UseElement
        Quotation for referenced <symbol>: "If attributes 'width'
        and/or 'height' are provided on the 'use' element, then
        these attributes will be transferred to the generated 'svg'."
        Quotation for referenced <svg>: "If attributes 'width'
        and/or 'height' are provided on the 'use' element, then
        these values will override the corresponding attributes
        on the 'svg' in the generated tree."
        For above quotations, we should treat 'use' element as referencing
        'use' element, just like Firefox 3.6 and Opera 11, instead of
        corrensponding 'use' element.

        Tests: svg/custom/use-transfer-width-height-properties-to-svg.svg
               svg/custom/use-transfer-width-height-properties-to-svg1.svg
               svg/custom/use-transfer-width-height-properties-to-svg2.svg
               svg/custom/use-transfer-width-height-properties-to-symbol.svg
               svg/custom/use-transfer-width-height-properties-to-symbol1.svg
               svg/custom/use-transfer-width-height-properties-to-symbol2.svg

        * svg/SVGElementInstance.cpp:
        (WebCore::SVGElementInstance::SVGElementInstance):
        * svg/SVGElementInstance.h:
        (WebCore::SVGElementInstance::create):
        (WebCore::SVGElementInstance::correspondingUseElement):
        (WebCore::SVGElementInstance::directUseElement):
        (WebCore::SVGElementInstance::clearUseElements):
        * svg/SVGUseElement.cpp:
        (WebCore::updateContainerSize):
        (WebCore::SVGUseElement::updateContainerSizes):
        (WebCore::dumpInstanceTree):
        (WebCore::SVGUseElement::detachInstance):
        (WebCore::SVGUseElement::buildInstanceTree):

2011-03-21  Jaehun Lim  <ljaehun.lim@samsung.com>

        Reviewed by Pavel Feldman.

        Fix build break when inspector is enabled.
        https://bugs.webkit.org/show_bug.cgi?id=56735

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy): Add ENABLE(INSPECTOR).

2011-03-21  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, GTK distcheck build fix.

        * GNUmakefile.am:

2011-03-21  Julien Chaffraix  <jchaffraix@webkit.org>

        Reviewed by Eric Seidel.

        Bug 51465 - chrome.dll!WebCore::RenderLayer::currentTransform
        ReadAV@NULL (8968fc97874fa23b6799ff8f09c142e4)

        Test: fast/css/webkit-empty-transform-preserve3d-crash.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::layoutOverflowRectForPropagation): Mimicked the
        rest of the code and check that the RenderBox has a layer to avoid
        crashing on the layer() call.

2011-03-21  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: move cookie processing and appcache from DOMAgent.js
        https://bugs.webkit.org/show_bug.cgi?id=56713

        * inspector/front-end/ApplicationCacheItemsView.js:
        (WebInspector.ApplicationCacheDispatcher):
        (WebInspector.ApplicationCacheDispatcher.getApplicationCachesAsync):
        (WebInspector.ApplicationCacheDispatcher.prototype.updateApplicationCacheStatus):
        (WebInspector.ApplicationCacheDispatcher.prototype.updateNetworkState):
        * inspector/front-end/CookieItemsView.js:
        (WebInspector.Cookies.getCookiesAsync):
        (WebInspector.Cookies.buildCookiesFromString):
        (WebInspector.Cookies.cookieMatchesResourceURL):
        (WebInspector.Cookies.cookieDomainMatchesResourceDomain):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMNode.prototype.eventListeners):
        * inspector/front-end/EventListenersSidebarPane.js:
        (WebInspector.EventListenersSidebarPane.prototype.update):

2011-03-21  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: migrate Inspector.json to valid JSON types.
        https://bugs.webkit.org/show_bug.cgi?id=56651

        This change migrates inspector from long to int as
        dom, storage, database and other id types.

        * inspector/InjectedScriptHost.cpp:
        (WebCore::InjectedScriptHost::inspectedNode):
        (WebCore::InjectedScriptHost::databaseIdImpl):
        (WebCore::InjectedScriptHost::storageIdImpl):
        (WebCore::InjectedScriptHost::didCreateWorker):
        (WebCore::InjectedScriptHost::didDestroyWorker):
        * inspector/InjectedScriptHost.h:
        * inspector/InjectedScriptHost.idl:
        * inspector/Inspector.json:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::highlightDOMNode):
        * inspector/InspectorAgent.h:
        * inspector/InspectorBrowserDebuggerAgent.cpp:
        (WebCore::InspectorBrowserDebuggerAgent::setDOMBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::removeDOMBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::descriptionForDOMEvent):
        (WebCore::InspectorBrowserDebuggerAgent::hasBreakpoint):
        * inspector/InspectorBrowserDebuggerAgent.h:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::getStylesForNode):
        (WebCore::InspectorCSSAgent::getInlineStyleForNode):
        (WebCore::InspectorCSSAgent::getComputedStyleForNode):
        (WebCore::InspectorCSSAgent::setPropertyText):
        (WebCore::InspectorCSSAgent::toggleProperty):
        (WebCore::InspectorCSSAgent::addRule):
        (WebCore::InspectorCSSAgent::elementForId):
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::count):
        (WebCore::InspectorConsoleAgent::addInspectedNode):
        (WebCore::InspectorConsoleAgent::setConsoleMessagesEnabled):
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::bind):
        (WebCore::InspectorDOMAgent::unbind):
        (WebCore::InspectorDOMAgent::assertNode):
        (WebCore::InspectorDOMAgent::assertElement):
        (WebCore::InspectorDOMAgent::assertHTMLElement):
        (WebCore::InspectorDOMAgent::nodeToSelectOn):
        (WebCore::InspectorDOMAgent::pushChildNodesToFrontend):
        (WebCore::InspectorDOMAgent::nodeForId):
        (WebCore::InspectorDOMAgent::getChildNodes):
        (WebCore::InspectorDOMAgent::querySelector):
        (WebCore::InspectorDOMAgent::querySelectorAll):
        (WebCore::InspectorDOMAgent::pushNodePathToFrontend):
        (WebCore::InspectorDOMAgent::boundNodeId):
        (WebCore::InspectorDOMAgent::setAttribute):
        (WebCore::InspectorDOMAgent::removeAttribute):
        (WebCore::InspectorDOMAgent::removeNode):
        (WebCore::InspectorDOMAgent::setNodeName):
        (WebCore::InspectorDOMAgent::getOuterHTML):
        (WebCore::InspectorDOMAgent::setOuterHTML):
        (WebCore::InspectorDOMAgent::setNodeValue):
        (WebCore::InspectorDOMAgent::getEventListenersForNode):
        (WebCore::InspectorDOMAgent::resolveNode):
        (WebCore::InspectorDOMAgent::pushNodeToFrontend):
        (WebCore::InspectorDOMAgent::buildObjectForNode):
        (WebCore::InspectorDOMAgent::loadEventFired):
        (WebCore::InspectorDOMAgent::didInsertDOMNode):
        (WebCore::InspectorDOMAgent::didRemoveDOMNode):
        (WebCore::InspectorDOMAgent::didModifyDOMAttr):
        (WebCore::InspectorDOMAgent::characterDataModified):
        (WebCore::InspectorDOMAgent::didInvalidateStyleAttr):
        (WebCore::InspectorDOMAgent::reportNodesAsSearchResults):
        (WebCore::InspectorDOMAgent::copyNode):
        (WebCore::InspectorDOMAgent::pushNodeByPathToFrontend):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::getDOMStorageEntries):
        (WebCore::InspectorDOMStorageAgent::setDOMStorageItem):
        (WebCore::InspectorDOMStorageAgent::removeDOMStorageItem):
        (WebCore::InspectorDOMStorageAgent::storageId):
        (WebCore::InspectorDOMStorageAgent::getDOMStorageResourceForId):
        * inspector/InspectorDOMStorageAgent.h:
        * inspector/InspectorDOMStorageResource.cpp:
        * inspector/InspectorDOMStorageResource.h:
        (WebCore::InspectorDOMStorageResource::id):
        * inspector/InspectorDatabaseAgent.cpp:
        (WebCore::InspectorDatabaseAgent::getDatabaseTableNames):
        (WebCore::InspectorDatabaseAgent::executeSQL):
        (WebCore::InspectorDatabaseAgent::databaseId):
        (WebCore::InspectorDatabaseAgent::databaseForId):
        * inspector/InspectorDatabaseAgent.h:
        * inspector/InspectorDatabaseResource.cpp:
        * inspector/InspectorDatabaseResource.h:
        (WebCore::InspectorDatabaseResource::id):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::setPauseOnExceptionsState):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::getExactHeapSnapshotNodeRetainedSize):
        * inspector/InspectorProfilerAgent.h:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::identifierForInitialRequest):
        (WebCore::InspectorResourceAgent::willSendRequest):
        (WebCore::InspectorResourceAgent::markResourceAsCached):
        (WebCore::InspectorResourceAgent::didReceiveResponse):
        (WebCore::InspectorResourceAgent::didReceiveContentLength):
        (WebCore::InspectorResourceAgent::didFinishLoading):
        (WebCore::InspectorResourceAgent::didFailLoading):
        (WebCore::InspectorResourceAgent::setInitialContent):
        (WebCore::InspectorResourceAgent::didCreateWebSocket):
        (WebCore::InspectorResourceAgent::willSendWebSocketHandshakeRequest):
        (WebCore::InspectorResourceAgent::didReceiveWebSocketHandshakeResponse):
        (WebCore::InspectorResourceAgent::didCloseWebSocket):
        * inspector/generate-inspector-idl:

2011-03-21  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: make frameId in network agent of type string, not unsigned long.
        https://bugs.webkit.org/show_bug.cgi?id=56708

        * inspector/Inspector.json:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::highlightFrame):
        * inspector/InspectorAgent.h:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::pointerAsId):
        (WebCore::buildObjectForDocumentLoader):
        (WebCore::buildObjectForFrame):
        (WebCore::InspectorResourceAgent::frameDetachedFromParent):
        (WebCore::InspectorResourceAgent::frameForId):
        (WebCore::InspectorResourceAgent::resourceContent):
        * inspector/InspectorResourceAgent.h:
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.addOrUpdateFrame):

2011-03-21  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: expose object id as string, not JSON struct in the protocol.
        https://bugs.webkit.org/show_bug.cgi?id=56681

        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::JSInjectedScriptHost::inspect):
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::V8InjectedScriptHost::inspectCallback):
        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::evaluateOn):
        (WebCore::InjectedScript::evaluateOnCallFrame):
        (WebCore::InjectedScript::getProperties):
        (WebCore::InjectedScript::nodeForObjectId):
        (WebCore::InjectedScript::setPropertyValue):
        (WebCore::InjectedScript::releaseObject):
        * inspector/InjectedScript.h:
        * inspector/InjectedScriptHost.cpp:
        (WebCore::InjectedScriptHost::inspectImpl):
        * inspector/InjectedScriptHost.h:
        * inspector/InjectedScriptManager.cpp:
        (WebCore::InjectedScriptManager::injectedScriptForObjectId):
        (WebCore::InjectedScriptManager::releaseObjectGroup):
        * inspector/InjectedScriptManager.h:
        * inspector/InjectedScriptSource.js:
        * inspector/Inspector.json:
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::clearConsoleMessages):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::pushNodeToFrontend):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::evaluateOnCallFrame):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorRuntimeAgent.cpp:
        (WebCore::InspectorRuntimeAgent::evaluateOn):
        (WebCore::InspectorRuntimeAgent::getProperties):
        (WebCore::InspectorRuntimeAgent::setPropertyValue):
        (WebCore::InspectorRuntimeAgent::releaseObject):
        (WebCore::InspectorRuntimeAgent::releaseObjectGroup):
        * inspector/InspectorRuntimeAgent.h:
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.completions.evaluatedProperties):
        (WebInspector.ConsoleView.prototype.completions):
        * inspector/front-end/PropertiesSidebarPane.js:
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.SourceFrameDelegateForScriptsPanel.prototype.releaseEvaluationResult):
        * inspector/front-end/WatchExpressionsSidebarPane.js:
        (WebInspector.WatchExpressionsSection.prototype.update):
        * inspector/front-end/inspector.js:
        (WebInspector.inspect):

2011-03-20  Bill Budge  <bbudge@chromium.org>

        Reviewed by Adam Barth.

        Rename ThreadSafeShared to ThreadSafeRefCounted
        https://bugs.webkit.org/show_bug.cgi?id=56714

        No new tests. Exposes no new functionality.

        * ForwardingHeaders/wtf/ThreadSafeRefCounted.h: Copied from ForwardingHeaders/wtf/ThreadSafeShared.h.
        * ForwardingHeaders/wtf/ThreadSafeShared.h: Removed.
        * bindings/v8/SerializedScriptValue.h:
        * dom/Document.cpp:
        * dom/default/PlatformMessagePortChannel.h:
        * fileapi/FileThread.h:
        * loader/ThreadableLoaderClientWrapper.h:
        (WebCore::ThreadableLoaderClientWrapper::create):
        (WebCore::ThreadableLoaderClientWrapper::clearClient):
        (WebCore::ThreadableLoaderClientWrapper::done):
        (WebCore::ThreadableLoaderClientWrapper::didSendData):
        (WebCore::ThreadableLoaderClientWrapper::didReceiveResponse):
        (WebCore::ThreadableLoaderClientWrapper::didReceiveData):
        (WebCore::ThreadableLoaderClientWrapper::didReceiveCachedMetadata):
        (WebCore::ThreadableLoaderClientWrapper::didFinishLoading):
        (WebCore::ThreadableLoaderClientWrapper::didFail):
        (WebCore::ThreadableLoaderClientWrapper::didFailRedirectCheck):
        (WebCore::ThreadableLoaderClientWrapper::didReceiveAuthenticationCancellation):
        (WebCore::ThreadableLoaderClientWrapper::ThreadableLoaderClientWrapper):
        * page/SecurityOrigin.h:
        * platform/CrossThreadCopier.h:
        * platform/network/BlobData.h:
        * platform/network/cf/SocketStreamHandle.h:
        * storage/AbstractDatabase.h:
        * storage/DatabaseAuthorizer.h:
        * storage/DatabaseCallback.h:
        * storage/DatabaseThread.h:
        * storage/IDBCallbacks.h:
        * storage/IDBCursorBackendInterface.h:
        * storage/IDBDatabaseBackendInterface.h:
        * storage/IDBFactoryBackendInterface.h:
        * storage/IDBIndexBackendInterface.h:
        * storage/IDBKey.h:
        * storage/IDBKeyRange.h:
        * storage/IDBObjectStoreBackendInterface.h:
        * storage/IDBRequest.h:
        * storage/IDBTransactionBackendInterface.h:
        * storage/SQLError.h:
        * storage/SQLResultSet.h:
        * storage/SQLStatement.h:
        * storage/SQLStatementCallback.h:
        * storage/SQLStatementErrorCallback.h:
        * storage/SQLTransaction.h:
        * storage/SQLTransactionCallback.h:
        * storage/SQLTransactionErrorCallback.h:
        * websockets/ThreadableWebSocketChannelClientWrapper.h:
        * workers/DefaultSharedWorkerRepository.cpp:

2011-03-20  Andreas Kling  <kling@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Clean up redirection logic in QNetworkReplyHandler
        https://bugs.webkit.org/show_bug.cgi?id=56717

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::QNetworkReplyHandler):
        Use resetState() when constructing QNRH as well.

        (WebCore::QNetworkReplyHandler::resetState):
        Delete (deferred) the m_reply if one exists (only when redirecting.)

        (WebCore::QNetworkReplyHandler::finish):
        Return early when redirecting.

        (WebCore::QNetworkReplyHandler::sendResponseIfNeeded):
        (WebCore::QNetworkReplyHandler::redirect):
        Move the redirection logic from sendResponseIfNeeded() into a
        separate redirect() method.

2011-03-19  Andreas Kling  <kling@webkit.org>

        Reviewed by Benjamin Poulain.

        [Qt] Rename ignoreHttpError() to shouldIgnoreHttpError()

        The function doesn't ignore anything, thus it shouldn't have an imperative name.

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

2011-03-19  Andreas Kling  <kling@webkit.org>

        Reviewed by Benjamin Poulain.

        [Qt] Kill layer violation FIXME in ResourceHandleQt.

        We were including qwebframe_p.h from WebKit/qt for no reason.

        * platform/network/qt/ResourceHandleQt.cpp:

2011-03-19  Andreas Kling  <kling@webkit.org>

        Reviewed by Benjamin Poulain.

        [Qt] Refactor handling of deferred loads
        https://bugs.webkit.org/show_bug.cgi?id=56715

        Split QNetworkReplyHandler's "load mode" into two parameters
        instead of trying to fit the deferral mechanism into it.

        Loads are now AsynchronousLoad (default) or SynchronousLoad (for sync XHR.)

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::QNetworkReplyHandler):
        (WebCore::QNetworkReplyHandler::setLoadingDeferred):
        (WebCore::QNetworkReplyHandler::resumeDeferredLoad):
        (WebCore::QNetworkReplyHandler::finish):
        (WebCore::QNetworkReplyHandler::sendResponseIfNeeded):
        (WebCore::QNetworkReplyHandler::forwardData):
        (WebCore::QNetworkReplyHandler::start):
        (WebCore::QNetworkReplyHandler::resetState):
        * platform/network/qt/QNetworkReplyHandler.h:
        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::loadResourceSynchronously):
        (WebCore::ResourceHandle::platformSetDefersLoading):

2011-03-19  Anton D'Auria  <adauria@apple.com>

        Reviewed by Alexey Proskuryakov.

        ApplicationCacheGroup is not obsolete after being deleted via ApplicationCacheStorage::deleteEntriesForOrigin
        https://bugs.webkit.org/show_bug.cgi?id=56415

        To delete all Application Cache for an origin, we must obsolete all
        in-memory cache groups for that origin. If a cache group isn't in memory,
        then it must be deleted from disk. The previous implementation correctly
        removed on-disk cache groups, but did not mark in-memory cache groups as obsolete.
        This caused an assertion failure in ApplicationCacheStorage::cacheGroupDestroyed()
        when the DocumentLoader was destroyed.

        Test: http/tests/appcache/origin-delete.html

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/appcache/ApplicationCache.cpp:
        (WebCore::ApplicationCache::clearStorageID):
        (WebCore::ApplicationCache::deleteCacheForOrigin):
        * loader/appcache/ApplicationCache.h:
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::findInMemoryCacheGroup):
        * loader/appcache/ApplicationCacheStorage.h:

2011-03-19  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Reviewed by Antonio Gomes.

        [EFL] Add dummy GeolocationServiceEfl. cpp | h
        https://bugs.webkit.org/show_bug.cgi?id=56710

        Add dummy GeolocationServiceEfl.cpp | h to platform/efl.

        * CMakeListsEfl.txt:
        * platform/efl/GeolocationServiceEfl.cpp: Added.
        (WebCore::GeolocationServiceEfl::create):
        (WebCore::GeolocationServiceEfl::GeolocationServiceEfl):
        (WebCore::GeolocationServiceEfl::~GeolocationServiceEfl):
        (WebCore::GeolocationServiceEfl::startUpdating):
        (WebCore::GeolocationServiceEfl::stopUpdating):
        (WebCore::GeolocationServiceEfl::suspend):
        (WebCore::GeolocationServiceEfl::resume):
        (WebCore::GeolocationServiceEfl::lastPosition):
        (WebCore::GeolocationServiceEfl::lastError):
        * platform/efl/GeolocationServiceEfl.h: Added.

2011-03-19  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed, rolling out r81551.
        http://trac.webkit.org/changeset/81551
        https://bugs.webkit.org/show_bug.cgi?id=55336

        Broke some storage tests on Win32.

        * platform/win/FileSystemWin.cpp:
        (WebCore::statFile):
        (WebCore::getFileSize):
        (WebCore::getFileModificationTime):
        (WebCore::fileExists):

2011-03-19  Andreas Kling  <kling@webkit.org>

        Reviewed by Benjamin Poulain.

        [Qt] Remove support for Qt 4.6
        https://bugs.webkit.org/show_bug.cgi?id=56712

        * platform/graphics/qt/FontPlatformDataQt.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        * platform/graphics/qt/FontQt.cpp:
        (WebCore::drawTextCommon):
        (WebCore::Font::drawSimpleText):
        (WebCore::Font::floatWidthForSimpleText):
        (WebCore::Font::offsetForPositionForSimpleText):
        (WebCore::Font::selectionRectForSimpleText):
        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3DInternal::paint):
        * platform/graphics/qt/ImageBufferQt.cpp:
        (WebCore::getImageData):
        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::internalHandleCurrentImage):
        * platform/graphics/qt/PathQt.cpp:
        (WebCore::Path::transform):
        * platform/network/qt/DnsPrefetchHelper.h:
        (WebCore::DnsPrefetchHelper::DnsPrefetchHelper):
        (WebCore::DnsPrefetchHelper::lookup):
        * platform/network/qt/NetworkStateNotifierPrivate.h:
        * platform/network/qt/NetworkStateNotifierQt.cpp:
        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::httpMethod):
        (WebCore::QNetworkReplyHandler::QNetworkReplyHandler):
        (WebCore::QNetworkReplyHandler::sendResponseIfNeeded):
        (WebCore::QNetworkReplyHandler::start):
        * platform/network/qt/ResourceRequestQt.cpp:
        (WebCore::ResourceRequest::toNetworkRequest):
        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::paintMediaSliderTrack):

2011-03-19  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Roben.

        Use Win32 API to get file information
        https://bugs.webkit.org/show_bug.cgi?id=55336

        Use GetFileInformationByHandle() in favour over _wstat64(), GetFileSizeEx()
        and GetFileAttributesEx() so we can share the code with WinCE.

        * platform/win/FileSystemWin.cpp:
        (WebCore::createFileHandle):
        (WebCore::getFileInformation):
        (WebCore::getFileSize):
        (WebCore::getFileModificationTime):
        (WebCore::fileExists):

2011-03-19  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Simplify GObjectEventListener
        https://bugs.webkit.org/show_bug.cgi?id=56698

        Get rid of special case for DOMWindow, since it's also an
        EventTarget.

        * bindings/gobject/GObjectEventListener.cpp:
        (WebCore::GObjectEventListener::GObjectEventListener): remove
        DOMWindow special casing.
        (WebCore::GObjectEventListener::~GObjectEventListener): ditto.
        (WebCore::GObjectEventListener::gobjectDestroyed):
        * bindings/gobject/GObjectEventListener.h:
        (WebCore::GObjectEventListener::addEventListener): ditto.
        (WebCore::GObjectEventListener::removeEventListener): ditto.

2011-03-19  Ben Taylor  <bentaylor.solx86@gmail.com>

        Reviewed by Nikolas Zimmermann.

        https://bugs.webkit.org/show_bug.cgi?id=56195
        Fix conditional which had an int for one case and a pointer for another.
        Similar fix as https://bugs.webkit.org/show_bug.cgi?id=56198

        No new tests. Fix compilation on Solaris 10 with Sun Studio C++

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

2011-03-19  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Darin Adler.

        Rename WTF::StringHasher methods
        https://bugs.webkit.org/show_bug.cgi?id=53532

        Rename createHash to computeHash and createBlobHash to hashMemory.
        Also add a using WTF::StringHasher in the header file.

        * dom/Document.cpp:
        (WebCore::FormElementKeyHash::hash):
        * dom/QualifiedName.h:
        (WebCore::hashComponents):
        * dom/StyledElement.cpp:
        (WebCore::MappedAttributeHash::hash):
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::urlHostHash):
        * page/SecurityOriginHash.h:
        (WebCore::SecurityOriginHash::hash):
        * platform/LinkHash.cpp:
        (WebCore::visitedLinkHashInline):
        * platform/cf/BinaryPropertyList.cpp:
        (WebCore::IntegerArrayHash::hash):
        * platform/cf/SchedulePair.h:
        (WebCore::SchedulePairHash::hash):
        * platform/graphics/FontCache.cpp:
        (WebCore::computeHash):
        * platform/graphics/chromium/FontPlatformDataChromiumWin.h:
        (WebCore::FontPlatformData::RefCountedHFONT::hash):
        * platform/graphics/cocoa/FontPlatformData.h:
        (WebCore::FontPlatformData::hash):
        * platform/graphics/pango/FontPlatformData.h:
        (WebCore::FontPlatformData::hash):
        * platform/graphics/wince/FontPlatformData.cpp:
        (WebCore::FixedSizeFontDataKeyHash::hash):
        * platform/graphics/wx/FontPlatformDataWx.cpp:
        (WebCore::FontPlatformData::computeHash):
        * platform/network/ProtectionSpaceHash.h:
        (WebCore::ProtectionSpaceHash::hash):
        * plugins/PluginPackage.cpp:
        (WebCore::PluginPackage::hash):
        * plugins/win/PluginPackageWin.cpp:
        (WebCore::PluginPackage::hash):
        * svg/properties/SVGAnimatedPropertyDescription.h:
        (WebCore::SVGAnimatedPropertyDescriptionHash::hash):

2011-03-18  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/56688> Fix clang static analyzer warning in WebCoreViewFactory.m

        Reviewed by Anders Carlsson.

        Fixes the following static analyzer warning:

            Source/WebCore/page/mac/WebCoreViewFactory.m:45:5: warning: Returning 'self' while it is not set to the result of '[(super or self) init...]'
                 return self;
                 ^

        * page/mac/WebCoreViewFactory.m:
        (-[WebCoreViewFactory init]): Assign the result of [super init]
        to self.

2011-03-18  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        WebCore GYP build should build
        https://bugs.webkit.org/show_bug.cgi?id=56696

        After this patch, the WebCore GYP build successfully compiles and
        links.  I haven't trying executing it yet.

        * WebCore.gypi:
            - DOMMouseEvent should be included as part of the Objective-C bindings.
        * WebCore.xcodeproj/project.pbxproj:
            - RenderSVGPath.cpp was mistakenly included directly in the project
              instead of being built by RenderSVGAllInOne.
        * gyp/WebCore.gyp:
            - Exclude some more files from the build.  These files are absent
              in the normal build.  I didn't see them earlier because the dead
              code stripping was hiding them.  (They're probably unreferenced.)
            - Switch to using RenderSVGAllInOne.  I'm not entirely sure if this
              part of the patch is necessary, but it matches the normal build
              more closely.
        * platform/mac/WebCoreObjCExtras.mm:
            - The normal build passes the -Wdeprecated-declarations flag when
              compiling this file.  The GYP folks explicitly do not want to add
              that feature to GYP, and there does not appear to be a way to
              remove the deprecated call from this file.
        * rendering/svg/RenderSVGAllInOne.cpp:
            - Add RenderSVGPath.cpp, which was missing previously.

2011-03-18  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        WebCore GYP build should (almost!) link
        https://bugs.webkit.org/show_bug.cgi?id=56689

        This patch is a grab-bag of small changes to bring the WebCore GYP
        build down to two link errors or one compile error (take your pick).
        We might need a GYP change to get this last file to compile, however.

        * WebCore.gypi:
        * gyp/WebCore.gyp:

2011-03-16  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Ojan Vafai.

        Add a test for r81266 and fix HTML Editing for fallback contents in object element
        https://bugs.webkit.org/show_bug.cgi?id=56505

        The bug was caused by canHaveChildrenForEditing's always returning false even when
        object element used fallback content. Fixed the bug by adding a check.

        Test: editing/editability/ignored-content.html

        * editing/htmlediting.cpp:
        (WebCore::canHaveChildrenForEditing):

2011-03-18  Andy Estes  <aestes@apple.com>

        Reviewed by Eric Seidel.

        REGRESSION (r80231): Bad cast in HTMLTreeBuilder::processStartTag
        https://bugs.webkit.org/show_bug.cgi?id=56380
        
        Fix two issues with parsing a fragment that has a foreign content
        element as its context element. The first issue is that the parser will
        initially be in the InForeignContentMode insertion mode when processing
        the first tag in the fragment in this case so one call site needs to
        change from currentElement() to currentNode(). The second issue is that
        when we changed fragments from using a fake HTML root element to a
        DocumentFragment we broke checks that assumed the root element was in
        the HTML namespace. Fix this by claiming that the DocumentFragment is
        also in the HTML namespace.

        Test: fast/parser/fragment-foreign-content-context.html

        * html/parser/HTMLElementStack.cpp:
        (WebCore::HTMLNames::isForeignContentScopeMarker):
        (WebCore::HTMLElementStack::hasOnlyHTMLElementsInScope):
        * html/parser/HTMLElementStack.h:
        (WebCore::isInHTMLNamespace):
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::constructTreeFromAtomicToken):
        (WebCore::HTMLTreeBuilder::processStartTag):
        (WebCore::HTMLTreeBuilder::processEndTag):

2011-03-18  James Robinson  <jamesr@chromium.org>

        Reviewed by Dimitri Glazkov.

        REGRESSION(78846) [chromium] Justified text renders at incorrect offsets on windows
        https://bugs.webkit.org/show_bug.cgi?id=56629

        Preserves offsets as absolute floating point offsets and rounds to
        advances at the last possible second.  I can't prove to myself that
        this is sound but it seems to work on the test cases I've constructed.

        Will probably change the pixel tests on chromium windows given that we
        were horribly broken before this patch.

        * platform/graphics/chromium/FontChromiumWin.cpp:
        (WebCore::Font::drawGlyphs):
        (WebCore::Font::drawComplexText):

2011-03-18  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        REGRESSION(81374, 81384): editing/deleting/5206311-1.html hits assertion on non-Mac platforms
        https://bugs.webkit.org/show_bug.cgi?id=56599

        Debug build fix.

        * dom/Position.cpp:
        (WebCore::Position::parentAnchoredEquivalent): If the original position was a position before a node,
        then we can't necessarily instantiate a position inside the node.
        * editing/VisibleSelection.cpp:
        (WebCore::VisibleSelection::toNormalizedRange): Even if s and e were not null, container nodes of s and e
        could be null. Exit early in those cases as well.

2011-03-18  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add ObjC bindings to the WebCore GYP build
        https://bugs.webkit.org/show_bug.cgi?id=56671

        It turns out we generate a bunch of ObjC bindings files that we don't
        actually build.  I've manually synced the list of ObjC derived source
        files to match the existing list.  This brings us down to 19 link
        errors.

        * WebCore.gypi:
        * gyp/WebCore.gyp:

2011-03-18  Ryuan Choi  <ryuan.choi@samsung.com>

        Reviewed by Eric Seidel.

        [CMAKE] Split JSC related configurations from WebCore/CMakeLists.txt
        https://bugs.webkit.org/show_bug.cgi?id=56624

        No new tests, just splitting jsc related configuration.

        * CMakeLists.txt:
        * UseJSC.cmake: Added.

2011-03-16  Stephen White  <senorblanco@chromium.org>

        Reviewed by Kenneth Russell.

        Implement GPU-accelerated shadows.
        https://bugs.webkit.org/show_bug.cgi?id=56476

        For hard shadows, we simply offset the CTM and draw in the shadow
        color.  For soft shadows, we use a separable Gaussian convolution,
        with a bilinear downsample and Mitchell-Netravali upsample in order to
        preserve quality.

        * WebCore.gypi:
        Add BicubicShader and ConvolutionShader to the build.
        * platform/graphics/chromium/GLES2Canvas.cpp:
        (WebCore::GLES2Canvas::State::State):
        Add shadow-related members to the GLES2Canvas::State
        (WebCore::GLES2Canvas::State::shadowActive):
        Add a helper function to know if shadows are active.
        (WebCore::GLES2Canvas::clearRect):
        (WebCore::GLES2Canvas::scissorClear):
        Refactor the scissor clearing function out of clearRect().
        (WebCore::GLES2Canvas::fillPath):
        Add hook for shadow rendering in paths.  Bind framebuffer at this level.
        (WebCore::GLES2Canvas::fillRect):
        Add hook for shadow rendering in rects.  Bind framebuffer at this level.
        (WebCore::GLES2Canvas::fillRectInternal):
        Rename fillRect() -> fillRectInternal(), which does bind its vertex 
        buffer, but does not bind the framebuffer.
        (WebCore::GLES2Canvas::setShadowColor):
        (WebCore::GLES2Canvas::setShadowOffset):
        (WebCore::GLES2Canvas::setShadowBlur):
        (WebCore::GLES2Canvas::setShadowsIgnoreTransforms):
        Implement graphicsContext-style setters for shadow parameters.
        (WebCore::GLES2Canvas::clipPath):
        Call fillPathInternal(), not fillPath().
        (WebCore::GLES2Canvas::restore):
        (WebCore::GLES2Canvas::drawTexturedRect):
        Bind the framebuffer at this level.  Do not bind vertices here (will
        be done in drawTexturedQuad).
        (WebCore::GLES2Canvas::drawTexturedRectTile):
        drawQuad() -> drawTexturedQuad().
        (WebCore::GLES2Canvas::convolveRect):
        Implement one pass of a convolution filter (X or Y).
        (WebCore::gauss):
        (WebCore::buildKernel):
        Some helper functions to build a Gaussian convolution kernel.
        (WebCore::GLES2Canvas::drawTexturedQuad):
        Rename drawQuad() -> drawTexturedQuad(), to be more clear.  Do not
        bind the framebuffer at this level (it will be done higher).
        (WebCore::GLES2Canvas::drawTexturedQuadMitchell):
        Implement Mitchell-Netravali bicubic sampling, using BicubicShader.
        (WebCore::GLES2Canvas::fillPathInternal):
        Rename fillPath() -> fillPathInternal(), which does use quad vertices,
        but does not bind the framebuffer or set the compositing mode.
        (WebCore::GLES2Canvas::flipRect):
        Implement a helper function to flip a rectangle in Y within the canvas.
        (WebCore::GLES2Canvas::clearBorders):
        Implement a helper function to clear an n-pixel border around a rect.
        (WebCore::GLES2Canvas::beginShadowDraw):
        Setup before drawing a primitive's shadow:  for hard shadows, just
        offset the CTM by the shadow offset.  For soft shadows, bind to an
        offscreen DrawingBuffer.
        (WebCore::GLES2Canvas::endShadowDraw):
        Tear-down after drawing a primitive's shadow:  for hard shadows, just
        restore the CTM.  For soft shadows, downsample (if necessary), then
        blur in X, blur in Y, upsample if necessary).
        * platform/graphics/chromium/GLES2Canvas.h:
        * platform/graphics/gpu/BicubicShader.cpp: Added.
        (WebCore::BicubicShader::BicubicShader):
        (WebCore::BicubicShader::create):
        (WebCore::BicubicShader::use):
        * platform/graphics/gpu/BicubicShader.h: Added.
        Implement a bicubic image filtering shader.
        * platform/graphics/gpu/ConvolutionShader.cpp: Added.
        (WebCore::ConvolutionShader::ConvolutionShader):
        (WebCore::ConvolutionShader::create):
        (WebCore::ConvolutionShader::use):
        * platform/graphics/gpu/ConvolutionShader.h: Added.
        Implement a 1-dimensional convolution shader.  In order to minimize
        texture samples, this shader is parameterized at compile time by the
        width of the convolution kernel.
        * platform/graphics/gpu/DrawingBuffer.h:
        (WebCore::DrawingBuffer::colorBuffer):
        Add an accessor to retrieve a DrawingBuffer's texture ID.
        * platform/graphics/gpu/SharedGraphicsContext3D.cpp:
        (WebCore::SharedGraphicsContext3D::create):
        (WebCore::SharedGraphicsContext3D::SharedGraphicsContext3D):
        (WebCore::SharedGraphicsContext3D::useBicubicProgram):
        (WebCore::SharedGraphicsContext3D::useConvolutionProgram):
        Create BicubicShader and cMaxKernelWidth ConvolutionShader's (one for
        each possible kernel width).
        (WebCore::SharedGraphicsContext3D::getOffscreenBuffer):
        Implement a simple cache of offscreen DrawingBuffers, integer-indexed.
        This is done to minimize the VRAM usage:  only 2 buffers are used for
        all canvases.
        * platform/graphics/gpu/SharedGraphicsContext3D.h:
        Add bicubic and convolution shader members, and useXXX() functions.
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::setPlatformShadow):
        Hook into GraphicsContextSkia's platform shadow setters to set
        parameters on GLES2Canvas.
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::canAccelerate):
        Remove shadows (loopers) from the list of things we can't accelerate.

2011-03-18  Andreas Kling  <kling@webkit.org>

        Reviewed by Darin Adler.

        Remove unused method FontFallbackList::fontDataForCharacters()
        https://bugs.webkit.org/show_bug.cgi?id=56657

        * platform/graphics/Font.h:
        * platform/graphics/FontFallbackList.cpp:
        * platform/graphics/FontFallbackList.h:

2011-03-18  Andreas Kling  <kling@webkit.org>

        Reverting accidental changes in r81498.

2011-03-18  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: rename console agent events.
        https://bugs.webkit.org/show_bug.cgi?id=56646

        addConsoleMessage -> consoleMessage
        updateConsoleMessageExpiredCount -> consoleMessageExpiredCountUpdate
        updateConsoleMessageRepeatCount -> consoleMessageRepeatCountUpdate

        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::addToFrontend):
        (WebCore::ConsoleMessage::updateRepeatCountInConsole):
        * inspector/Inspector.json:
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::setConsoleMessagesEnabled):
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype._registerConsoleDomainDispatcher.dispatcher.consoleMessage):
        (WebInspector.ConsoleView.prototype._registerConsoleDomainDispatcher.dispatcher.consoleMessageExpiredCountUpdate):
        (WebInspector.ConsoleView.prototype._registerConsoleDomainDispatcher.dispatcher.consoleMessageRepeatCountUpdate):

2011-03-18  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r81487.
        http://trac.webkit.org/changeset/81487
        https://bugs.webkit.org/show_bug.cgi?id=56662

        "Breaks inspector/styles/styles-add-blank-property.html"
        (Requested by apavlov on #webkit).

        * inspector/Inspector.json:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::getAllStyles):
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::buildObjectForStyleSheet):
        * inspector/InspectorStyleSheet.h:
        * inspector/front-end/AuditRules.js:
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun.styleSheetCallback):
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun.allStylesCallback):
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun):
        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleModel.prototype._styleSheetChanged.callback):
        (WebInspector.CSSStyleModel.prototype._styleSheetChanged):
        (WebInspector.CSSStyleModel.prototype._onRevert):
        (WebInspector.CSSStyleSheet):
        (WebInspector.CSSStyleSheet.prototype.setText):

2011-03-18  Justin Novosad  <junov@chromium.org>

        Reviewed by Kenneth Russell.

        [Chromium] Canvas shadow is not working with drawImage
        https://bugs.webkit.org/show_bug.cgi?id=55506

        Patch also fixes shadow blur quality and color. 
        Affects Chromium win/linux. Also fixes the following bugs:
        https://bugs.webkit.org/show_bug.cgi?id=50112
        https://bugs.webkit.org/show_bug.cgi?id=51989
        https://bugs.webkit.org/show_bug.cgi?id=55410
        No tests were added, impact is already covered by multiple layout tests.

        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::setPlatformShadow):
        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::paintSkBitmap):

2011-03-15  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Fix handling of the CSSAgent.setStyleSheetText() results in CSSStyleModel.js
        https://bugs.webkit.org/show_bug.cgi?id=56310

        Instead of stylesheet ids, CSSAgent.getAllStyleSheets() now returns metainfo objects containing
        "styleSheetId", "sourceURL", "disabled", and "title" fields. The latter three are not returned
        by CSSAgent.getStyleSheet() anymore.

        Test: inspector/styles/get-set-stylesheet-text.html

        * inspector/Inspector.json:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::getAllStyleSheets):
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::buildObjectForStyleSheet):
        (WebCore::InspectorStyleSheet::buildObjectForStyleSheetInfo):
        * inspector/InspectorStyleSheet.h:
        * inspector/front-end/AuditRules.js:
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun.styleSheetCallback):
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun.allStylesCallback):
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun):
        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleModel.prototype._styleSheetChanged.callback):
        (WebInspector.CSSStyleModel.prototype._styleSheetChanged):
        (WebInspector.CSSStyleModel.prototype._onRevert):
        (WebInspector.CSSStyleSheet):
        (WebInspector.CSSStyleSheet.prototype.setText):

2011-03-18  David Keijser  <keijser@gmail.com> and Xan Lopez <xlopez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] On-demand event-listeners for DOM event signals
        https://bugs.webkit.org/show_bug.cgi?id=49649

        Add explicit EventTarget API to add/remove event listeners instead
        of using GSignal, which due to internal limitations in glib makes
        us preemptively add listeners for all event types.

        * bindings/gobject/GObjectEventListener.cpp: add new
        addEventListener/removeEventListener methods, and small
        refactoring to store an EventTarget internally instead of a DOM
        node, which is more generic and can be reused in more cases.
        * bindings/gobject/GObjectEventListener.h: ditto.
        * bindings/gobject/WebKitDOMEventTarget.cpp:
        (webkit_dom_event_target_add_event_listener): new iface method to
        add an event listener.
        (webkit_dom_event_target_remove_event_listener): new iface method
        to remove an event listener.
        * bindings/gobject/WebKitDOMEventTarget.h: add new iface methods.
        * bindings/scripts/CodeGeneratorGObject.pm: change code generation
        accordingly.

2011-03-18  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=56425
        More groundwork for WebKit2 IconDatabase

        -Update the synchronous method names to be prefixed with "synchronous."
        -Call asynchronous versions of the appropriate methods if the IconDatabase supports them.

        Update icon database calls to be prefixed with "synchronous":
        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::create):
        * loader/icon/IconDatabaseBase.h:
        (WebCore::IconDatabaseBase::synchronousIconDataKnownForIconURL):
        (WebCore::IconDatabaseBase::synchronousLoadDecisionForIconURL):
        (WebCore::IconDatabaseBase::synchronousIconForPageURL):
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::synchronousIconForPageURL):
        (WebCore::IconDatabase::readIconForPageURLFromDisk):
        (WebCore::IconDatabase::synchronousIconURLForPageURL):
        (WebCore::IconDatabase::synchronousLoadDecisionForIconURL):
        (WebCore::IconDatabase::synchronousIconDataKnownForIconURL):
        * loader/icon/IconDatabase.h:
        * loader/icon/IconDatabaseBase.cpp:
        (WebCore::IconDatabaseBase::synchronousIconURLForPageURL):

        Add nascent support for an asynchronous icon database mode:
        * loader/icon/IconDatabaseBase.h:
        (WebCore::EnumCallback::create):
        (WebCore::EnumCallback::~EnumCallback):
        (WebCore::EnumCallback::performCallback):
        (WebCore::EnumCallback::invalidate):
        (WebCore::EnumCallback::EnumCallback):
        (WebCore::ObjectCallback::create):
        (WebCore::ObjectCallback::~ObjectCallback):
        (WebCore::ObjectCallback::performCallback):
        (WebCore::ObjectCallback::invalidate):
        (WebCore::ObjectCallback::ObjectCallback):
        (WebCore::IconDatabaseBase::supportsAsynchronousMode):
        (WebCore::IconDatabaseBase::loadDecisionForIconURL):
        (WebCore::IconDatabaseBase::iconDataForIconURL):

        Add interfaces to use the asynchronous versions of certain IconDatabase calls:
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::~DocumentLoader):
        (WebCore::DocumentLoader::iconLoadDecisionAvailable):
        (WebCore::iconLoadDecisionCallback):
        (WebCore::DocumentLoader::getIconLoadDecisionForIconURL):
        (WebCore::DocumentLoader::continueIconLoadWithDecision):
        (WebCore::iconDataCallback):
        (WebCore::DocumentLoader::getIconDataForIconURL):
        * loader/DocumentLoader.h:

        Break "startIconLoader" into two pieces so it can be used from both the synchronous and asynchronous 
        icon database modes:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::iconLoadDecisionReceived):
        (WebCore::FrameLoader::startIconLoader):
        (WebCore::FrameLoader::continueIconLoadWithDecision):
        * loader/FrameLoader.h:

        * WebCore.exp.in:

2011-03-18  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: add missing brace to the generated Inspector.idl.

        * inspector/generate-inspector-idl:

2011-03-18  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: migrate from Inspector.idl to InspectorAPI.json for protocol schema definition meta bug.
        https://bugs.webkit.org/show_bug.cgi?id=56294

        * CMakeLists.txt:
        * CodeGenerators.pri:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gyp/WebCore.gyp:
        * inspector/Inspector.idl: Removed.
        * inspector/Inspector.json: Added.
        * inspector/generate-inspector-idl: Added.

2011-03-18  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: implement inspector session storage.
        https://bugs.webkit.org/show_bug.cgi?id=56643

        We would like to enable debugger/profiler from frontend side only.
        However, when user clicks "Start Debugging JavaScript" in Safari, we
        need to enable debugger when frontend is opened or re-opened for the
        same page. The idea is to store debugger-enabled setting in session
        storage and check it on frontend load.

        * inspector/InspectorFrontendClient.h:
        (WebCore::InspectorFrontendClient::saveSessionSetting):
        (WebCore::InspectorFrontendClient::loadSessionSetting):
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::saveSessionSetting):
        (WebCore::InspectorFrontendHost::loadSessionSetting):
        * inspector/InspectorFrontendHost.h:
        * inspector/InspectorFrontendHost.idl:

2011-03-18  Jarkko Sakkinen  <jarkko.j.sakkinen@gmail.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Enable GraphicsContext3D only when the window surface support OpenGL
        https://bugs.webkit.org/show_bug.cgi?id=56555

        Allow creation of WebGLRenderingContext in the HTMLCanvasElement
        only if accelerated compositing is enabled. In GraphicsContext3D,
        while blitting the surface check that viewport hasn't changed from
        creation and painter is associated to the viewport.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext):
        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3DInternal::GraphicsContext3DInternal):
        (WebCore::GraphicsContext3DInternal::getViewportGLWidget):
        (WebCore::GraphicsContext3DInternal::paint):

2011-03-17  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: extract content loading logic from scripts panel.
        https://bugs.webkit.org/show_bug.cgi?id=55237

        Encapsulate source files creation logic in debugger presentation model
        to support source mappings in a pluggable way.

        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype.sourceFile):
        (WebInspector.DebuggerPresentationModel.prototype.requestSourceFileContent.else.didRequestSource):
        (WebInspector.DebuggerPresentationModel.prototype.requestSourceFileContent):
        (WebInspector.DebuggerPresentationModel.prototype._parsedScriptSource):
        (WebInspector.DebuggerPresentationModel.prototype._failedToParseScriptSource):
        (WebInspector.DebuggerPresentationModel.prototype._addScript.else.resourceFinished):
        (WebInspector.DebuggerPresentationModel.prototype._addScript):
        (WebInspector.DebuggerPresentationModel.prototype._ensureSourceFileAdded):
        (WebInspector.DebuggerPresentationModel.prototype._resourceForURL):
        (WebInspector.DebuggerPresentationModel.prototype._scriptSourceChanged):
        (WebInspector.DebuggerPresentationModel.prototype._sourceFileAdded):
        (WebInspector.DebuggerPresentationModel.prototype.breakpointsForSourceFileId):
        (WebInspector.DebuggerPresentationModel.prototype.findBreakpoint):
        (WebInspector.DebuggerPresentationModel.prototype._breakpointAdded):
        (WebInspector.DebuggerPresentationModel.prototype._breakpointRemoved):
        (WebInspector.DebuggerPresentationModel.prototype._breakpointResolved):
        (WebInspector.DebuggerPresentationModel.prototype._restoreBreakpoints):
        (WebInspector.DebuggerPresentationModel.prototype.set selectedCallFrame):
        (WebInspector.DebuggerPresentationModel.prototype._actualLocationToSourceLocation):
        (WebInspector.DebuggerPresentationModel.prototype.reset):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype._sourceFileAdded):
        (WebInspector.ScriptsPanel.prototype._showSourceFrame):
        (WebInspector.ScriptsPanel.prototype._sourceFileChanged):
        (WebInspector.ScriptsPanel.prototype._callFrameSelected):
        (WebInspector.SourceFrameDelegateForScriptsPanel.prototype.requestContent):

2011-03-18  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: console doesn&apos;t scroll when multiline expression is being evaluated
        https://bugs.webkit.org/show_bug.cgi?id=56639

        Always scoll in the console when command result is received.

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.addMessage):

2011-03-18  Adam Roben  <aroben@apple.com>

        Fix a CFNumber leak seen on the leaks bot

        Reviewed by Gavin Barraclough.

        * platform/network/mac/FormDataStreamMac.mm:
        (WebCore::advanceCurrentStream): Use a RetainPtr to cause the CFNumber we allocate to be
        released.

2011-03-17  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add some of the remaining platform/mac files to WebCore GYP build
        https://bugs.webkit.org/show_bug.cgi?id=56616

        These files used to be hard, but are now magically easy.  76 link errors.

        * gyp/WebCore.gyp:

2011-03-17  Adam Klein  <adamk@chromium.org>

        Reviewed by Adam Barth.

        [filesystem] Rename toURI->toURL, resolveLocalFileSystemURI->resolveLocalFileSystemURL
        https://bugs.webkit.org/show_bug.cgi?id=56502

        * fileapi/Entry.idl:
        * fileapi/EntryBase.cpp:
        (WebCore::EntryBase::toURL):
        * fileapi/EntryBase.h:
        * fileapi/EntrySync.idl:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::resolveLocalFileSystemURL):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:

2011-03-17  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Update CSP directive parser to match spec
        https://bugs.webkit.org/show_bug.cgi?id=56582

        Brandon updated the CSP spec.  I've updated our implementation to
        match.  In the process, I found a couple bugs in the spec, which I've
        sent to the working group.  This patch assumes that the bugs will be
        fixed in the way I suggested.  If they get fixed a different way, we
        might need to update the parser again.

        Test: http/tests/security/contentSecurityPolicy/directive-parsing.html

        * page/ContentSecurityPolicy.cpp:
        (WebCore::isDirectiveNameCharacter):
        (WebCore::isDirectiveValueCharacter):
        (WebCore::advanceUntil):
        (WebCore::ContentSecurityPolicy::parse):
        (WebCore::ContentSecurityPolicy::parseDirective):
        * page/ContentSecurityPolicy.h:

2011-03-17  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        WebCore GYP build should have PrivateHeaders
        https://bugs.webkit.org/show_bug.cgi?id=56604

        I've manually verified that this produces the correct set of
        PrivateHeaders (modulo the ForwardingHeaders and icu issue).
        Unforunately, this patch breakes compile slightly, but I'll fix that
        in a followup patch.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * gyp/WebCore.gyp:

2011-03-17  Victoria Kirst  <vrk@google.com>

        Reviewed by Kenneth Russell.

        [chromium] Video colors have wrong brightness/contrast
        https://bugs.webkit.org/show_bug.cgi?id=56598

        This patch changes the YUV to RGB color conversion matrix
        to have brighter whites and darker blacks in accordance to
        the BT.601 standard.

        * platform/graphics/chromium/ShaderChromium.cpp:
        (WebCore::FragmentShaderYUVVideo::FragmentShaderYUVVideo):
        (WebCore::FragmentShaderYUVVideo::init):
        (WebCore::FragmentShaderYUVVideo::getShaderString):
        * platform/graphics/chromium/ShaderChromium.h:
        (WebCore::FragmentShaderYUVVideo::yuvAdjLocation):
        * platform/graphics/chromium/VideoLayerChromium.cpp:
        (WebCore::VideoLayerChromium::drawYUV):
        * platform/graphics/chromium/VideoLayerChromium.h:

2011-03-17  Zhenyao Mo  <zmo@google.com>

        Reviewed by Adam Barth.

        RequestAnimationFrame callbacks prevent Document from being released on detach
        https://bugs.webkit.org/show_bug.cgi?id=56607

        * dom/Document.cpp:
        (WebCore::Document::removedLastRef): Remove RequestAnimationFrame callbacks.
        (WebCore::Document::detach): Ditto.

2011-03-17  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin Adler.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=56596 Overlay scrollbars sometimes 
        fail to appear
        -and corresponding-
        <rdar://problem/8953779>

        * platform/mac/ScrollAnimatorMac.mm:
        (-[ScrollbarPainterDelegate setUpAnimation:scrollerPainter:part:WebCore::animateAlphaTo:duration:]):

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

        Reviewed by Beth Dakin.

        <rdar://problem/9052166> Emphasis marks appear over combined text rather than beside it
        https://bugs.webkit.org/show_bug.cgi?id=56480

        Test: fast/text/emphasis-combined-text.html

        * rendering/InlineTextBox.cpp:
        (WebCore::rotation): Added this helper.
        (WebCore::InlineTextBox::paint): Paint a single emphasis mark beside the combined text,
        centered vertically.

2011-03-17  Jian Li  <jianli@chromium.org>

        Reviewed by Adam Barth.

        Blob URL should not be allow to get created from the code running from data URI
        https://bugs.webkit.org/show_bug.cgi?id=56600

        Test: http/tests/fileapi/create-blob-url-from-data-url.html

        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::createPublicBlobURL):
        * fileapi/BlobURL.cpp:
        (WebCore::BlobURL::createBlobURL):
        * fileapi/EntryBase.cpp:
        (WebCore::EntryBase::toURI):
        * fileapi/FileReaderLoader.cpp:
        (WebCore::FileReaderLoader::start):

2011-03-17  Jeff Miller  <jeffm@apple.com>

        Use a consistent set of file patterns in the svn:ignore property for all .xcodeproj directories, specifically:
        
        *.mode*
        *.pbxuser
        *.perspective*
        project.xcworkspace
        xcuserdata

        * WebCore.xcodeproj: Modified property svn:ignore.
        * manual-tests/NPN_Invoke/NPN_Invoke.xcodeproj: Modified property svn:ignore.

2011-03-17  Sam Weinig  <sam@webkit.org>

        Fix Mac build.

        * WebCore.exp.in:
        Add missing symbol.

2011-03-17  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Adele Peterson and Enrica Casucci.

        Assert that editing does not ignore position's anchorNode if position is an offset in anchor
        https://bugs.webkit.org/show_bug.cgi?id=56027

        Debug build fix.

        * dom/Element.cpp:
        (WebCore::Element::updateFocusAppearance): "this" can be an input element so can't always instantiate
        a position inside the node. Call firstPositionInOrBeforeNode instead.
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::positionAvoidingPrecedingNodes): Exit early when a node's content is ignored by editing instead
        of just when the node is br.
        * editing/htmlediting.cpp:
        (WebCore::lastEditablePositionBeforePositionInRoot): The shadow ancestor node is usually an input element
        so don't instantiate a position inside it. Call firstPositionInOrBeforeNode instead.

2011-03-17  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r81369.
        http://trac.webkit.org/changeset/81369
        https://bugs.webkit.org/show_bug.cgi?id=56579

        breaks debugger test (Requested by podivilov on #webkit).

        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype._parsedScriptSource):
        (WebInspector.DebuggerPresentationModel.prototype._failedToParseScriptSource):
        (WebInspector.DebuggerPresentationModel.prototype._scriptSourceChanged):
        (WebInspector.DebuggerPresentationModel.prototype.breakpointsForSourceFileId):
        (WebInspector.DebuggerPresentationModel.prototype.findBreakpoint):
        (WebInspector.DebuggerPresentationModel.prototype._breakpointAdded):
        (WebInspector.DebuggerPresentationModel.prototype._breakpointRemoved):
        (WebInspector.DebuggerPresentationModel.prototype._breakpointResolved):
        (WebInspector.DebuggerPresentationModel.prototype._encodeSourceLocation):
        (WebInspector.DebuggerPresentationModel.prototype._restoreBreakpoints):
        (WebInspector.DebuggerPresentationModel.prototype.set selectedCallFrame):
        (WebInspector.DebuggerPresentationModel.prototype._actualLocationToSourceLocation):
        (WebInspector.DebuggerPresentationModel.prototype.reset):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype._parsedScriptSource):
        (WebInspector.ScriptsPanel.prototype._failedToParseScriptSource):
        (WebInspector.ScriptsPanel.prototype._scriptSourceChanged):
        (WebInspector.ScriptsPanel.prototype._addScript):
        (WebInspector.ScriptsPanel.prototype._resourceForURL):
        (WebInspector.ScriptsPanel.prototype._resourceLoadingFinished):
        (WebInspector.ScriptsPanel.prototype._addOptionToFilesSelectAndShowSourceFrameIfNeeded):
        (WebInspector.ScriptsPanel.prototype._showSourceFrame):
        (WebInspector.ScriptsPanel.prototype._recreateSourceFrame):
        (WebInspector.ScriptsPanel.prototype._sourceFileIdForScript):
        (WebInspector.ScriptsPanel.prototype._callFrameSelected):
        (WebInspector.SourceFrameDelegateForScriptsPanel.prototype.requestContent):

2011-03-17  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Justin Garcia.

        Assert that editing does not ignore position's anchorNode if position is an offset in anchor
        https://bugs.webkit.org/show_bug.cgi?id=56027

        Added the assertion in Position::Position and Position::moveToPosition. This assertion catches
        places where we instantiate positions inside a node on which editingIgnoresContent returns true.

        Test: editing/execCommand/button.html

        * dom/Position.cpp:
        (WebCore::Position::Position): Added an assertion.
        (WebCore::Position::moveToPosition): Ditto.
        * dom/PositionIterator.cpp:
        (WebCore::PositionIterator::operator Position): Avoid creating a position immediately below
        a node whose content is ignored by editing. While this does not avoid creation of positions
        inside ignored contents completely, it works in most cases. Filed the bug 56027 to resolve
        the underlying problem. Without this change, the assertion hits in existing layout tests.
        cannot be tested directly.
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::addInlineStyleIfNeeded): Call firstPositionInOrBeforeNode
        instead of firstPositionInNode because startNode may as well be a br element. Without this change,
        the assertion hits in existing layout tests.
        * editing/htmlediting.cpp:
        (WebCore::canHaveChildrenForEditing): button is editable so content is not ignored. Added a test
        for this.
        * editing/visible_units.cpp:
        (WebCore::previousBoundary): Added a FIXME.
        (WebCore::startPositionForLine): Because br can also have an inline text box, checking that
        startBox is an inline text box isn't an adequate to instantiate a position inside startNode.
        Call startNode->isTextNode() instead. Without this change, the assertion hits in existing layout
        tests.

2011-03-17  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: extract content loading logic from scripts panel.
        https://bugs.webkit.org/show_bug.cgi?id=55237

        Encapsulate source files creation logic in debugger presentation model
        to support source mappings in a pluggable way.

        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype.sourceFile):
        (WebInspector.DebuggerPresentationModel.prototype.requestSourceFileContent.else.didRequestSource):
        (WebInspector.DebuggerPresentationModel.prototype.requestSourceFileContent):
        (WebInspector.DebuggerPresentationModel.prototype._parsedScriptSource):
        (WebInspector.DebuggerPresentationModel.prototype._failedToParseScriptSource):
        (WebInspector.DebuggerPresentationModel.prototype._addScript.else.resourceFinished):
        (WebInspector.DebuggerPresentationModel.prototype._addScript):
        (WebInspector.DebuggerPresentationModel.prototype._ensureSourceFileAdded):
        (WebInspector.DebuggerPresentationModel.prototype._resourceForURL):
        (WebInspector.DebuggerPresentationModel.prototype._scriptSourceChanged):
        (WebInspector.DebuggerPresentationModel.prototype._sourceFileAdded):
        (WebInspector.DebuggerPresentationModel.prototype.breakpointsForSourceFileId):
        (WebInspector.DebuggerPresentationModel.prototype.findBreakpoint):
        (WebInspector.DebuggerPresentationModel.prototype._breakpointAdded):
        (WebInspector.DebuggerPresentationModel.prototype._breakpointRemoved):
        (WebInspector.DebuggerPresentationModel.prototype._breakpointResolved):
        (WebInspector.DebuggerPresentationModel.prototype._restoreBreakpoints):
        (WebInspector.DebuggerPresentationModel.prototype.set selectedCallFrame):
        (WebInspector.DebuggerPresentationModel.prototype._actualLocationToSourceLocation):
        (WebInspector.DebuggerPresentationModel.prototype.reset):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype._sourceFileAdded):
        (WebInspector.ScriptsPanel.prototype._showSourceFrame):
        (WebInspector.ScriptsPanel.prototype._sourceFileChanged):
        (WebInspector.ScriptsPanel.prototype._callFrameSelected):
        (WebInspector.SourceFrameDelegateForScriptsPanel.prototype.requestContent):

2011-03-17  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: add types markup to the IDL, remove Value types from the protocol.
        https://bugs.webkit.org/show_bug.cgi?id=56562

        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::addToFrontend):
        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::evaluate):
        (WebCore::InjectedScript::evaluateOn):
        (WebCore::InjectedScript::evaluateOnCallFrame):
        (WebCore::InjectedScript::getProperties):
        (WebCore::InjectedScript::setPropertyValue):
        (WebCore::InjectedScript::callFrames):
        (WebCore::InjectedScript::makeCall):
        (WebCore::InjectedScript::makeObjectCall):
        * inspector/InjectedScript.h:
        * inspector/InjectedScriptSource.js:
        (.):
        * inspector/Inspector.idl:
        * inspector/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::getApplicationCaches):
        * inspector/InspectorApplicationCacheAgent.h:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::getStylesForNode):
        (WebCore::InspectorCSSAgent::getInlineStyleForNode):
        (WebCore::InspectorCSSAgent::getComputedStyleForNode):
        (WebCore::InspectorCSSAgent::getStyleSheet):
        (WebCore::InspectorCSSAgent::setPropertyText):
        (WebCore::InspectorCSSAgent::toggleProperty):
        (WebCore::InspectorCSSAgent::setRuleSelector):
        (WebCore::InspectorCSSAgent::addRule):
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::resolveNode):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::editScriptSource):
        (WebCore::InspectorDebuggerAgent::evaluateOnCallFrame):
        (WebCore::InspectorDebuggerAgent::currentCallFrames):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::identifierForInitialRequest):
        * inspector/InspectorRuntimeAgent.cpp:
        (WebCore::InspectorRuntimeAgent::evaluate):
        (WebCore::InspectorRuntimeAgent::evaluateOn):
        (WebCore::InspectorRuntimeAgent::getProperties):
        (WebCore::InspectorRuntimeAgent::setPropertyValue):
        * inspector/InspectorRuntimeAgent.h:
        * inspector/ScriptCallStack.cpp:
        (WebCore::ScriptCallStack::buildInspectorArray):
        * inspector/ScriptCallStack.h:
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createGenericRecord):
        * inspector/front-end/NetworkManager.js:
        (WebInspector.NetworkDispatcher.prototype._createResource):

2011-03-17  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r81350.
        http://trac.webkit.org/changeset/81350
        https://bugs.webkit.org/show_bug.cgi?id=56560

        "Breaks twenty Chromium Webkit Win builder webkit_gpu_tests"
        (Requested by apavlov on #webkit).

        * WebCore.gypi:
        * platform/graphics/chromium/GLES2Canvas.cpp:
        (WebCore::GLES2Canvas::State::State):
        (WebCore::GLES2Canvas::clearRect):
        (WebCore::GLES2Canvas::fillPath):
        (WebCore::GLES2Canvas::fillRect):
        (WebCore::GLES2Canvas::clipPath):
        (WebCore::GLES2Canvas::restore):
        (WebCore::GLES2Canvas::drawTexturedRect):
        (WebCore::GLES2Canvas::drawTexturedRectTile):
        (WebCore::GLES2Canvas::drawQuad):
        * platform/graphics/chromium/GLES2Canvas.h:
        * platform/graphics/gpu/BicubicShader.cpp: Removed.
        * platform/graphics/gpu/BicubicShader.h: Removed.
        * platform/graphics/gpu/ConvolutionShader.cpp: Removed.
        * platform/graphics/gpu/ConvolutionShader.h: Removed.
        * platform/graphics/gpu/DrawingBuffer.h:
        * platform/graphics/gpu/SharedGraphicsContext3D.cpp:
        (WebCore::SharedGraphicsContext3D::create):
        (WebCore::SharedGraphicsContext3D::SharedGraphicsContext3D):
        * platform/graphics/gpu/SharedGraphicsContext3D.h:
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::setPlatformShadow):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::canAccelerate):

2011-03-17  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Clean up Inspector strings.
        https://bugs.webkit.org/show_bug.cgi?id=56557

        * English.lproj/localizedStrings.js:

2011-03-14  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: refactor event listener breakpoints.
        https://bugs.webkit.org/show_bug.cgi?id=56305

        - restore event listener breakpoints one by one instead of using setAllBrowserBreakpoints
        - store event listener breakpoints in a separate separate setting
        - move presentation-related code from BreakpointManager to EventListenerBreakpointsSidebarPane

        Test: inspector/debugger/event-listener-breakpoints.html

        * inspector/Inspector.idl:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::setFrontend):
        * inspector/InspectorBrowserDebuggerAgent.cpp:
        (WebCore::InspectorBrowserDebuggerAgent::setEventListenerBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::removeEventListenerBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::pauseOnNativeEventIfNeeded):
        (WebCore::InspectorBrowserDebuggerAgent::clear):
        * inspector/InspectorBrowserDebuggerAgent.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didCommitLoadImpl):
        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager.prototype.setEventListenerBreakpoint):
        (WebInspector.BreakpointManager.prototype.removeEventListenerBreakpoint):
        (WebInspector.BreakpointManager.prototype.breakpointViewForEventData):
        (WebInspector.BreakpointManager.prototype._projectChanged):
        (WebInspector.BreakpointManager.prototype._saveBreakpoints):
        (WebInspector.BreakpointManager.prototype._validateBreakpoints):
        (WebInspector.BreakpointManager.prototype._createDOMBreakpointId):
        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.EventListenerBreakpointsSidebarPane):
        (WebInspector.EventListenerBreakpointsSidebarPane.eventNameForUI):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._createCategory):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._categoryCheckboxClicked):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._breakpointCheckboxClicked):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._setBreakpoint):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._removeBreakpoint):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._updateCategoryCheckbox):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype.highlightBreakpoint):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype.clearBreakpointHighlight):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._saveBreakpoints):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._restoreBreakpoints):
        * inspector/front-end/CallStackSidebarPane.js:
        (WebInspector.CallStackSidebarPane.prototype.update):
        (WebInspector.CallStackSidebarPane.prototype.setStatus):
        (WebInspector.CallStackSidebarPane.prototype._domBreakpointHit):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._debuggerPaused):
        (WebInspector.ScriptsPanel.prototype._clearInterface):
        * inspector/front-end/Settings.js:
        (WebInspector.Settings):

2011-03-16  Stephen White  <senorblanco@chromium.org>

        Reviewed by Kenneth Russell.

        Implement GPU-accelerated shadows.
        https://bugs.webkit.org/show_bug.cgi?id=56476

        For hard shadows, we simply offset the CTM and draw in the shadow
        color.  For soft shadows, we use a separable Gaussian convolution,
        with a bilinear downsample and Mitchell-Netravali upsample in order to
        preserve quality.

        * WebCore.gypi:
        Add BicubicShader and ConvolutionShader to the build.
        * platform/graphics/chromium/GLES2Canvas.cpp:
        (WebCore::GLES2Canvas::State::State):
        Add shadow-related members to the GLES2Canvas::State
        (WebCore::GLES2Canvas::State::shadowActive):
        Add a helper function to know if shadows are active.
        (WebCore::GLES2Canvas::clearRect):
        (WebCore::GLES2Canvas::scissorClear):
        Refactor the scissor clearing function out of clearRect().
        (WebCore::GLES2Canvas::fillPath):
        Add hook for shadow rendering in paths.  Bind framebuffer at this level.
        (WebCore::GLES2Canvas::fillRect):
        Add hook for shadow rendering in rects.  Bind framebuffer at this level.
        (WebCore::GLES2Canvas::fillRectInternal):
        Rename fillRect() -> fillRectInternal(), which does bind its vertex 
        buffer, but does not bind the framebuffer.
        (WebCore::GLES2Canvas::setShadowColor):
        (WebCore::GLES2Canvas::setShadowOffset):
        (WebCore::GLES2Canvas::setShadowBlur):
        (WebCore::GLES2Canvas::setShadowsIgnoreTransforms):
        Implement graphicsContext-style setters for shadow parameters.
        (WebCore::GLES2Canvas::clipPath):
        Call fillPathInternal(), not fillPath().
        (WebCore::GLES2Canvas::restore):
        (WebCore::GLES2Canvas::drawTexturedRect):
        Bind the framebuffer at this level.  Do not bind vertices here (will
        be done in drawTexturedQuad).
        (WebCore::GLES2Canvas::drawTexturedRectTile):
        drawQuad() -> drawTexturedQuad().
        (WebCore::GLES2Canvas::convolveRect):
        Implement one pass of a convolution filter (X or Y).
        (WebCore::gauss):
        (WebCore::buildKernel):
        Some helper functions to build a Gaussian convolution kernel.
        (WebCore::GLES2Canvas::drawTexturedQuad):
        Rename drawQuad() -> drawTexturedQuad(), to be more clear.  Do not
        bind the framebuffer at this level (it will be done higher).
        (WebCore::GLES2Canvas::drawTexturedQuadMitchell):
        Implement Mitchell-Netravali bicubic sampling, using BicubicShader.
        (WebCore::GLES2Canvas::fillPathInternal):
        Rename fillPath() -> fillPathInternal(), which does use quad vertices,
        but does not bind the framebuffer or set the compositing mode.
        (WebCore::GLES2Canvas::flipRect):
        Implement a helper function to flip a rectangle in Y within the canvas.
        (WebCore::GLES2Canvas::clearBorders):
        Implement a helper function to clear an n-pixel border around a rect.
        (WebCore::GLES2Canvas::beginShadowDraw):
        Setup before drawing a primitive's shadow:  for hard shadows, just
        offset the CTM by the shadow offset.  For soft shadows, bind to an
        offscreen DrawingBuffer.
        (WebCore::GLES2Canvas::endShadowDraw):
        Tear-down after drawing a primitive's shadow:  for hard shadows, just
        restore the CTM.  For soft shadows, downsample (if necessary), then
        blur in X, blur in Y, upsample if necessary).
        * platform/graphics/chromium/GLES2Canvas.h:
        * platform/graphics/gpu/BicubicShader.cpp: Added.
        (WebCore::BicubicShader::BicubicShader):
        (WebCore::BicubicShader::create):
        (WebCore::BicubicShader::use):
        * platform/graphics/gpu/BicubicShader.h: Added.
        Implement a bicubic image filtering shader.
        * platform/graphics/gpu/ConvolutionShader.cpp: Added.
        (WebCore::ConvolutionShader::ConvolutionShader):
        (WebCore::ConvolutionShader::create):
        (WebCore::ConvolutionShader::use):
        * platform/graphics/gpu/ConvolutionShader.h: Added.
        Implement a 1-dimensional convolution shader.  In order to minimize
        texture samples, this shader is parameterized at compile time by the
        width of the convolution kernel.
        * platform/graphics/gpu/DrawingBuffer.h:
        (WebCore::DrawingBuffer::colorBuffer):
        Add an accessor to retrieve a DrawingBuffer's texture ID.
        * platform/graphics/gpu/SharedGraphicsContext3D.cpp:
        (WebCore::SharedGraphicsContext3D::create):
        (WebCore::SharedGraphicsContext3D::SharedGraphicsContext3D):
        (WebCore::SharedGraphicsContext3D::useBicubicProgram):
        (WebCore::SharedGraphicsContext3D::useConvolutionProgram):
        Create BicubicShader and cMaxKernelWidth ConvolutionShader's (one for
        each possible kernel width).
        (WebCore::SharedGraphicsContext3D::getOffscreenBuffer):
        Implement a simple cache of offscreen DrawingBuffers, integer-indexed.
        This is done to minimize the VRAM usage:  only 2 buffers are used for
        all canvases.
        * platform/graphics/gpu/SharedGraphicsContext3D.h:
        Add bicubic and convolution shader members, and useXXX() functions.
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::setPlatformShadow):
        Hook into GraphicsContextSkia's platform shadow setters to set
        parameters on GLES2Canvas.
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::canAccelerate):
        Remove shadows (loopers) from the list of things we can't accelerate.

2011-03-17  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Andreas Kling.

        Tiled backing store should only request repaint for updated areas
        https://bugs.webkit.org/show_bug.cgi?id=56464

        Reuse updateBackBuffer's dirty rectangle calculations to only
        invalidate the necessary parts of the window.

        * platform/graphics/Tile.h:
        * platform/graphics/TiledBackingStore.cpp:
        (WebCore::TiledBackingStore::updateTileBuffers):
        * platform/graphics/qt/TileQt.cpp:
        (WebCore::Tile::updateBackBuffer):

2011-03-17  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [Chromium] Reduce memory consumption by detailed heap snapshots indexes.
        https://bugs.webkit.org/show_bug.cgi?id=56395

        * inspector/front-end/DetailedHeapshotGridNodes.js:
        (WebInspector.HeapSnapshotDiffNode.prototype._createNodesProvider.createProvider):
        (WebInspector.HeapSnapshotDiffNode.prototype._createNodesProvider):
        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshotRetainerEdge): Added
        (WebInspector.HeapSnapshotRetainerEdgeIterator): Added
        (WebInspector.HeapSnapshotNode.prototype.get retainers):
        (WebInspector.HeapSnapshot.prototype.dispose):
        (WebInspector.HeapSnapshot.prototype.hasId):
        (WebInspector.HeapSnapshot.prototype.retainers):
        (WebInspector.HeapSnapshot.prototype._buildRetainers):
        (WebInspector.HeapSnapshot.prototype._buildIdsList):
        (WebInspector.HeapSnapshot.prototype._buildNodeIndex):
        (WebInspector.HeapSnapshot.prototype._findNodePositionInIndex):
        (WebInspector.HeapSnapshot.prototype._findNearestNodeIndex):
        (WebInspector.HeapSnapshot.prototype._getRetainerIndex):
        (WebInspector.HeapSnapshot.prototype._markInvisibleEdges):
        (WebInspector.HeapSnapshot.prototype._numbersComparator):
        (WebInspector.HeapSnapshotPathFinder.prototype.get _lastEdge):
        (WebInspector.HeapSnapshotPathFinder.prototype._nextEdgeIter):
        (WebInspector.HeapSnapshotPathFinder.prototype._buildNextPath):
        (WebInspector.HeapSnapshotPathFinder.prototype._pathToString):

2011-03-17  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r81243.
        http://trac.webkit.org/changeset/81243
        https://bugs.webkit.org/show_bug.cgi?id=56471

        Breaks GTK 64-bit Debug tests (Requested by podivilov on
        #webkit).

        * inspector/Inspector.idl:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::setFrontend):
        * inspector/InspectorBrowserDebuggerAgent.cpp:
        (WebCore::InspectorBrowserDebuggerAgent::setFrontend):
        (WebCore::InspectorBrowserDebuggerAgent::setAllBrowserBreakpoints):
        (WebCore::InspectorBrowserDebuggerAgent::inspectedURLChanged):
        (WebCore::InspectorBrowserDebuggerAgent::restoreStickyBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::discardBindings):
        (WebCore::InspectorBrowserDebuggerAgent::setEventListenerBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::removeEventListenerBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::pauseOnNativeEventIfNeeded):
        (WebCore::InspectorBrowserDebuggerAgent::clear):
        * inspector/InspectorBrowserDebuggerAgent.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didCommitLoadImpl):
        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager.prototype.createEventListenerBreakpoint):
        (WebInspector.BreakpointManager.prototype._createEventListenerBreakpoint):
        (WebInspector.BreakpointManager.prototype.setXHRBreakpoint):
        (WebInspector.BreakpointManager.prototype.removeXHRBreakpoint):
        (WebInspector.BreakpointManager.prototype.breakpointViewForEventData):
        (WebInspector.BreakpointManager.prototype._projectChanged):
        (WebInspector.BreakpointManager.prototype._saveBreakpoints):
        (WebInspector.BreakpointManager.prototype._validateBreakpoints):
        (WebInspector.BreakpointManager.prototype._createDOMBreakpointId):
        (WebInspector.BreakpointManager.prototype._createEventListenerBreakpointId):
        (WebInspector.EventListenerBreakpoint):
        (WebInspector.EventListenerBreakpoint.prototype._enable):
        (WebInspector.EventListenerBreakpoint.prototype._disable):
        (WebInspector.EventListenerBreakpoint.prototype._serializeToJSON):
        (WebInspector.EventListenerBreakpointView):
        (WebInspector.EventListenerBreakpointView.eventNameForUI):
        (WebInspector.EventListenerBreakpointView.prototype.get eventName):
        (WebInspector.EventListenerBreakpointView.prototype.compareTo):
        (WebInspector.EventListenerBreakpointView.prototype.populateLabelElement):
        (WebInspector.EventListenerBreakpointView.prototype.populateStatusMessageElement):
        (WebInspector.EventListenerBreakpointView.prototype._uiEventName):
        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.XHRBreakpointsSidebarPane.prototype._setBreakpoint):
        (WebInspector.XHRBreakpointsSidebarPane.prototype._removeBreakpoint):
        (WebInspector.EventListenerBreakpointsSidebarPane):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._createCategory):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._categoryCheckboxClicked):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._breakpointCheckboxClicked):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._breakpointAdded):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._breakpointHitStateChanged):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._breakpointRemoved):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._updateCategoryCheckbox):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._projectChanged):
        * inspector/front-end/CallStackSidebarPane.js:
        (WebInspector.CallStackSidebarPane.prototype.update):
        (WebInspector.CallStackSidebarPane.prototype._scriptBreakpointHit):
        (WebInspector.CallStackSidebarPane.prototype._xhrBreakpointHit):
        (WebInspector.CallStackSidebarPane.prototype._nativeBreakpointHit):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._debuggerPaused):
        (WebInspector.ScriptsPanel.prototype._clearInterface):
        * inspector/front-end/Settings.js:
        (WebInspector.Settings):

2011-03-17  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add more ObjC++ files to the build
        https://bugs.webkit.org/show_bug.cgi?id=56548

        96 link errors.

        * WebCore.gypi:
        * gyp/WebCore.gyp:

2011-03-17  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add a few Objective-C++ files to the WebCore GYP build
        https://bugs.webkit.org/show_bug.cgi?id=56547

        464 link errors.

        * gyp/WebCore.gyp:

2011-03-17  Yuta Kitamura  <yutak@chromium.org>

        Unreviewed build fix.

        Non-ASCII characters in XMLTreeViewer.{cpp,h}
        https://bugs.webkit.org/show_bug.cgi?id=56549

        * xml/XMLTreeViewer.cpp: Replace non-ASCII characters with ASCII equivalents.
        * xml/XMLTreeViewer.h: Ditto.

2011-03-17  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add plugins and bridge to the WebCore GYP build
        https://bugs.webkit.org/show_bug.cgi?id=56546

        506 link errors.

        * gyp/WebCore.gyp:

2011-03-16  Jeff Johnson  <github@lapcatsoftware.com>

        Reviewed by Alexey Proskuryakov.

        Logic error in -[WebHTMLView close]
        https://bugs.webkit.org/show_bug.cgi?id=56445

        The function setDraggingImageURL() is no longer called and can be deleted.

        No new tests. Deleting dead code.

        * page/DragController.h:

2011-03-16  Naoki Takano  <takano.naoki@gmail.com>

        Reviewed by Ryosuke Niwa.

        Textarea maxlength doesn't account for newlines
        https://bugs.webkit.org/show_bug.cgi?id=54443

        When a user presses a return key, TypingCommand::insertLineBreak() is called.
        So before append a new line, check if we can add the new line.

        * editing/TypingCommand.cpp:
        (WebCore::canAppendNewLineFeed): Implement new helper function to check if we can add new line.
        (WebCore::TypingCommand::insertLineBreak): Added check logic before adding the new line.
        (WebCore::TypingCommand::insertParagraphSeparator): Added check logic before adding the new line.

2011-03-16  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        WebCore GYP build should build more derived sources
        https://bugs.webkit.org/show_bug.cgi?id=56529

        This patch brings us down to 597 link errors.

        * gyp/WebCore.gyp:

2011-03-16  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        WebCore GYP should build (most) remaining source files
        https://bugs.webkit.org/show_bug.cgi?id=56515

        We're still not building all the files and we have 1305 link errors,
        but this patch is progress.

        * WebCore.gypi:
        * gyp/WebCore.gyp:
        * plugins/PluginStream.cpp:

2011-03-16  Dan Bernstein  <mitz@apple.com>

        Reviewed by Alexey Proskuryakov.

        Update the default navigator.vendor value
        https://bugs.webkit.org/show_bug.cgi?id=56449

        * page/NavigatorBase.cpp: Updated the default value of
        WEBCORE_NAVIGATOR_VENDOR.

2011-03-16  John Bauman  <jbauman@chromium.org>

        Reviewed by James Robinson.

        texImage2D gets old contents of canvas
        https://bugs.webkit.org/show_bug.cgi?id=56414

        Always update the canvas contents in copiedImage, as there's no reason
        to ask for an out-of-date image.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::copiedImage):

2011-03-16  Adam Barth  <abarth@webkit.org>

        Reviewed by James Robinson.

        Remove USE(BUILTIN_UTF8_CODEC)
        https://bugs.webkit.org/show_bug.cgi?id=56508

        * platform/text/TextCodecICU.cpp:
        (WebCore::TextCodecICU::registerEncodingNames):
        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::buildBaseTextCodecMaps):

2011-03-16  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        Viewport no longer allows an auto value for "user-scalable"
        https://bugs.webkit.org/show_bug.cgi?id=55416

        This restores our behavior before r67376 the default "user-scalable"
        behavior can be defined by a WebKit client if a value was not
        explicitly provided in web content (via the viewport <meta> tag).
        Here, all WebKit ports default to "yes" after computing
        viewport arguments. However, in the future they may consider
        changing the default user-scalable value based on the type
        of the document being viewed, a user preference, or other reasons.

        Covered by existing tests. Should be no changes.

        * dom/ViewportArguments.cpp:
        (WebCore::computeViewportAttributes): be explicit about 0.
        (WebCore::findUserScalableValue): convert to return a float, the instance variable type.
        * dom/ViewportArguments.h:
        (WebCore::ViewportArguments::ViewportArguments): convert the boolean back to a float to
        allow for 3 states. Explicit no, explicit yes, and ValueAuto to be defined by the
        WebKit client.

2011-03-16  David Levin  <levin@chromium.org>

        Reviewed by Dmitry Titov.

        REGRESSION(r81289): Fix valgrind error (and crashes) when running the chromium unit test "test_shell_test".

        Conditional jump or move depends on uninitialised value(s)
            WebCore::RenderLayerCompositor::RenderLayerCompositor(WebCore::RenderView*) (third_party/WebKit/Source/WebCore/rendering/RenderLayerCompositor.cpp:117)

        * page/Settings.cpp:
        (WebCore::Settings::Settings):

2011-03-16  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin Adler.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=56493 Drag-scrolling overlay 
        scrollbars thumb in overflow regions does not work
        -and corresponding-
        <rdar://problem/9112688> Drag-scrolling overlay scrollbars thumb in overflow 
        regions does not work

        Up until now, overlay scrollbars have always been treated in the Render Tree as if 
        they have a thickness of 0 because they should not affect layout. However, it is 
        important to consider their size when hit-testing because otherwise, we have this 
        bug! This patch adds a boolean parameter to overflowClipRect(), 
        RenderLayer::verticalScrollbarWidth(), and 
        RenderLayer::horizontalScrollbarHeight(). This bool indicates whether to include 
        the actual overlay scrollbar thickness. It defaults to false and is only sent is 
        as true from RenderBloc::nodeAtPoint().

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::nodeAtPoint):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::overflowClipRect):
        * rendering/RenderBox.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::verticalScrollbarWidth):
        (WebCore::RenderLayer::horizontalScrollbarHeight):
        * rendering/RenderLayer.h:
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::overflowClipRect):
        * rendering/RenderTable.h:

2011-03-16  Keith Kyzivat  <keith.kyzivat@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Fix std::swap not found issue on mobile Qt devices.
        https://bugs.webkit.org/show_bug.cgi?id=56463

        Include <algorithm> in TextBreakIteratorQt.cpp so std::swap is found
        on some Qt mobile devices.

        No new tests: No tests needed - compilation verified manually.

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

2011-03-16  Jarkko Sakkinen  <jarkko.j.sakkinen@gmail.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] WebGL content not shown when accelerated compositing is enabled
        https://bugs.webkit.org/show_bug.cgi?id=56339

        Removed all previously implemented WebGL code from GraphicsLayerQt
        because API has changed. GraphicsContext3D provides PlatformLayer
        that is added as a child of GraphicsLayer and is therefore painted
        through QGraphicsView pipeline.

        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3DInternal::GraphicsContext3DInternal):
        (WebCore::GraphicsContext3DInternal::paint):
        (WebCore::GraphicsContext3DInternal::boundingRect):
        (WebCore::GraphicsContext3D::platformLayer):
        (WebCore::GraphicsContext3D::paintRenderingResultsToCanvas):
        (WebCore::GraphicsContext3D::reshape):
        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::GraphicsLayerQtImpl::GraphicsLayerQtImpl):
        (WebCore::GraphicsLayerQtImpl::paint):
        (WebCore::GraphicsLayerQtImpl::flushChanges):
        (WebCore::GraphicsLayerQt::setContentsToCanvas):
        * platform/graphics/qt/GraphicsLayerQt.h:

2011-03-16  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Tony Chang.

        Get rid of nearestMailBlockquote
        https://bugs.webkit.org/show_bug.cgi?id=56439

        Removed nearestMailBlockquote and replaced the calls to the function by calls
        to enclosingNodeOfType and highestEnclosingNodeOfType.
        
        Also fixed a bug in BreakBlockquoteCommand and DeleteSelectionCommand not to
        respect editing boundaries.  Added a test for the former command.

        Test: editing/execCommand/break-non-editable-blockquote.html

        * editing/BreakBlockquoteCommand.cpp:
        (WebCore::BreakBlockquoteCommand::doApply): No longer crosses editing boundary
        when looking for a Mail blockquote.
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::saveTypingStyleState): Ditto.
        (WebCore::DeleteSelectionCommand::calculateTypingStyleAfterDelete):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::hasMatchingQuoteLevel):
        (WebCore::handleStyleSpansBeforeInsertion):
        (WebCore::ReplaceSelectionCommand::handleStyleSpans):
        (WebCore::ReplaceSelectionCommand::doApply):
        * editing/htmlediting.cpp:
        (WebCore::enclosingNodeOfType): Check rule upfront to improve the performance.
        (WebCore::highestEnclosingNodeOfType): Ditto; also add the missing check.
        * editing/htmlediting.h:
        (WebCore::firstPositionInOrBeforeNode): Added a null pointer check.
        (WebCore::lastPositionInOrAfterNode): Ditto.
        * editing/markup.cpp:
        (WebCore::highestAncestorToWrapMarkup):
        (WebCore::createMarkup):

2011-03-16  Jer Noble  <jer.noble@apple.com>

        Reviewed by Beth Dakin.

        RenderFullScreen::createFullScreenStyle() leaks
        https://bugs.webkit.org/show_bug.cgi?id=53384

        Two problems: a) not calling release() on the style returned in setFullScreenRenderer
        causes an unnecessary ref/deref, and b) the fullscreen renderer needs to be destroyed,
        not just detached, when it is no longer needed.

        * dom/Document.cpp:
        (WebCore::Document::setFullScreenRenderer): Destroy the current renderer when a new one is set.
        * rendering/RenderFullScreen.cpp:
        (RenderFullScreen::createFullScreenStyle): release() the return value.

2011-03-16  Mike Reed  <reed@google.com>

        Reviewed by James Robinson.

        Reestablish typeface/size/encoding when drawing stroked text
        https://bugs.webkit.org/show_bug.cgi?id=56481

        No new tests. LayoutTests/svg/css/composite-shadow-text.svg

        * platform/graphics/skia/SkiaFontWin.cpp:
        (WebCore::paintSkiaText):

2011-03-16  Daniel Sievers  <sievers@google.com>

        Reviewed by James Robinson.

        Add setting to always force compositing mode
        https://bugs.webkit.org/show_bug.cgi?id=56156

        No new tests needed as this defaults to disabled (and is unfeasible
        to be tested through property overriding at runtime).

        * page/Settings.h:
        (WebCore::Settings::setForceCompositingMode):
        (WebCore::Settings::forceCompositingMode):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::RenderLayerCompositor):
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        * rendering/RenderLayerCompositor.h:

2011-03-16  Vangelis Kokkevis  <vangelis@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] Fixing backface visibility for transformed layers.
        https://bugs.webkit.org/show_bug.cgi?id=56237

        Test: platform/chromium/compositing/backface-visibility-transformed.html

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::drawLayer):

2011-03-16  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        REGRESSION(r76147): Dragging slider thumb is impossible or results in drawing artifacts.
        https://bugs.webkit.org/show_bug.cgi?id=56469

        Technically, this is not a regression, but rather uncovering of an old
        problem. When the RenderSlider::layout was written, the layout state was
        pushed with a wrong offset. However, since the whole slider track was
        always repainted, the problem didn't manifest itself until we actually
        started being more precise in our repaints.

        Test: fast/repaint/slider-thumb-float.html

        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::layout): Changed to pass actual thumb offset
        to the LayoutStateMaintainer, rather than thumb size.

2011-03-16  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Carlson.

        Add play state callbacks to MediaControls, kill timeUpdate timer.
        https://bugs.webkit.org/show_bug.cgi?id=56473

        No change in behavior, covered by existing tests.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::playbackProgressTimerFired): Added a call to
            media controls.
        (WebCore::HTMLMediaElement::updatePlayState): Ditto.
        * html/shadow/MediaControls.cpp:
        (WebCore::MediaControls::MediaControls): Removed initialization of the timer.
        (WebCore::MediaControls::playbackProgressed): Added.
        (WebCore::MediaControls::playbackStarted): Added, for now routing to just
            call playbackProgressed.
        (WebCore::MediaControls::playbackStopped): Ditto.
        (WebCore::MediaControls::update): Removed the code to start/stop the
            timer that's now gone.
        * html/shadow/MediaControls.h: Removed timer decls.

2011-03-16  Bill Budge  <bbudge@chromium.org>

        Reviewed by David Levin.

        DocumentThreadableLoaderClient needs a protected default Constructor
        https://bugs.webkit.org/show_bug.cgi?id=56479

        No new tests. Exposes no new functionality.

        * loader/DocumentThreadableLoaderClient.h:
        (WebCore::DocumentThreadableLoaderClient::DocumentThreadableLoaderClient):

2011-03-16  David Levin  <levin@chromium.org>

        Chromium Leopard build fix attempt #2.

        Same error as before.
        * bindings/v8/V8GCController.cpp:

2011-03-16  David Levin  <levin@chromium.org>

        Chromium Leopard build fix attempt.

        The error was 'WebCore::GrouperVisitor' has a field 'WebCore::GrouperVisitor::m_grouper' whose type uses the anonymous namespace.

        * bindings/v8/V8GCController.cpp:

2011-03-16  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Dimitri Glazkov and Darin Adler.

        Node::isContentEditable should always call parentNode() instead of parentOrHostNode()
        https://bugs.webkit.org/show_bug.cgi?id=56472

        Replaced the call to parentOrHostNode() in Node::isContentEditable by a call to parentNode().
        Node::isContentEditable now calls parentNode() on all nodes.

        No tests are added since this behavior change is not visible to scripts at the moment.

        * dom/Node.cpp:
        (WebCore::Node::isContentEditable):

2011-03-16  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        WK2: Need to propagate enhanced accessibility flag from UI -> web process
        https://bugs.webkit.org/show_bug.cgi?id=56379

        Allow the enhanced accessibility flag to be toggleable. 

        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::setEnhancedUserInterfaceAccessibility):

2011-03-16  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Buildfix after r81230.

        * WebCore.pri: Missing include path added.

2011-03-15  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        Make Structure creation require a JSGlobalData
        https://bugs.webkit.org/show_bug.cgi?id=56438

        Mechanical change to make all structure creation use GlobalData

        * bindings/js/JSAudioConstructor.cpp:
        (WebCore::JSAudioConstructor::JSAudioConstructor):
        * bindings/js/JSAudioConstructor.h:
        (WebCore::JSAudioConstructor::createStructure):
        * bindings/js/JSDOMBinding.h:
        (WebCore::DOMObjectWithGlobalPointer::createStructure):
        (WebCore::DOMConstructorObject::createStructure):
        (WebCore::getDOMStructure):
        * bindings/js/JSDOMGlobalObject.h:
        (WebCore::JSDOMGlobalObject::createStructure):
        * bindings/js/JSDOMWindowBase.h:
        (WebCore::JSDOMWindowBase::createStructure):
        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::JSDOMWindowShell):
        (WebCore::JSDOMWindowShell::setWindow):
        * bindings/js/JSDOMWindowShell.h:
        (WebCore::JSDOMWindowShell::createStructure):
        * bindings/js/JSImageConstructor.cpp:
        (WebCore::JSImageConstructor::JSImageConstructor):
        * bindings/js/JSImageConstructor.h:
        (WebCore::JSImageConstructor::createStructure):
        * bindings/js/JSImageDataCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSOptionConstructor.cpp:
        (WebCore::JSOptionConstructor::JSOptionConstructor):
        * bindings/js/JSOptionConstructor.h:
        (WebCore::JSOptionConstructor::createStructure):
        * bindings/js/JSWorkerContextBase.h:
        (WebCore::JSWorkerContextBase::createStructure):
        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::initScript):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/c/CRuntimeObject.h:
        (JSC::Bindings::CRuntimeObject::createStructure):
        * bridge/c/c_instance.cpp:
        (JSC::Bindings::CRuntimeMethod::createStructure):
        * bridge/jni/jsc/JavaInstanceJSC.cpp:
        (JavaRuntimeMethod::createStructure):
        * bridge/jni/jsc/JavaRuntimeObject.h:
        (JSC::Bindings::JavaRuntimeObject::createStructure):
        * bridge/objc/ObjCRuntimeObject.h:
        (JSC::Bindings::ObjCRuntimeObject::createStructure):
        * bridge/objc/objc_instance.mm:
        (ObjCRuntimeMethod::createStructure):
        * bridge/objc/objc_runtime.h:
        (JSC::Bindings::ObjcFallbackObjectImp::createStructure):
        * bridge/runtime_array.h:
        (JSC::RuntimeArray::createStructure):
        * bridge/runtime_method.h:
        (JSC::RuntimeMethod::createStructure):
        * bridge/runtime_object.h:
        (JSC::Bindings::RuntimeObject::createStructure):

2011-03-16  Pratik Solanki  <psolanki@apple.com>

        Reviewed by Alexey Proskuryakov.

        REGRESSION: Crash in adjustMIMETypeIfNecessary since r81001
        https://bugs.webkit.org/show_bug.cgi?id=56345

        Add NULL check for Content-Type header field.

        Test: http/tests/xmlhttprequest/xmlhttprequest-no-content-type.html

        * platform/network/mac/WebCoreURLResponse.mm:
        (WebCore::adjustMIMETypeIfNecessary):

2011-03-15  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Ryosuke Niwa.

        REGRESSION (r81165): Assert running editing/style/iframe-onload-crash.html with non-Mac editing behavior
        https://bugs.webkit.org/show_bug.cgi?id=56407

        Fixing the creation of incorrect ranges from TextIterator due to passing node/offset pairs that
        weren't parent-anchored. Also changing canHaveChildrenForEditing to properly handle nodes that
        have had children appended to them that editing wouldn't normally allow.

        Tests: editing/style/iframe-onload-crash-mac.html
               editing/style/iframe-onload-crash-unix.html
               editing/style/iframe-onload-crash-win.html

        * editing/TextIterator.cpp:
        (WebCore::TextIterator::rangeFromLocationAndLength): Passing parent-anchored values to range.
        * editing/htmlediting.cpp:
        (WebCore::canHaveChildrenForEditing): Adding a condition that the nodes don't already have children
        for hr and datagrid, as you can append any node to another using javascript.

2011-03-16  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        [Chromium] Report object groups and single DOM-related objects
        to the new heap profiler.
        https://bugs.webkit.org/show_bug.cgi?id=53659

        * Android.v8bindings.mk:
        * WebCore.gypi:
        * WebCore.pro:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/RetainedDOMInfo.cpp: Added.
        (WebCore::RetainedDOMInfo::RetainedDOMInfo):
        * bindings/v8/RetainedDOMInfo.h: Added.
        * bindings/v8/RetainedObjectInfo.h: Added.
        * bindings/v8/ScriptProfiler.cpp:
        (WebCore::retainedDOMInfo):
        (WebCore::ScriptProfiler::initialize):
        * bindings/v8/ScriptProfiler.h:
        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::initContextIfNeeded):
        * bindings/v8/V8GCController.cpp:
        (WebCore::GroupId::GrouperItem::GrouperItem):
        (WebCore::GroupId::GrouperItem::groupId):
        (WebCore::GroupId::GrouperItem::createRetainedObjectInfo):
        (WebCore::calculateGroupId):
        (WebCore::GrouperVisitor::visitDOMWrapper):
        (WebCore::GrouperVisitor::applyGrouping):
        * bindings/v8/WrapperTypeInfo.h:
        * inspector/front-end/DetailedHeapshotGridNodes.js:
        (WebInspector.HeapSnapshotConstructorNode):
        (WebInspector.HeapSnapshotConstructorNode.prototype._createNodesProvider):
        (WebInspector.HeapSnapshotDiffNode):
        (WebInspector.HeapSnapshotDiffNode.prototype._createNodesProvider.createProvider):
        (WebInspector.HeapSnapshotDiffNode.prototype._createNodesProvider):
        * inspector/front-end/DetailedHeapshotView.js:
        (WebInspector.HeapSnapshotRetainingPathsList.prototype.setDataSource):
        (WebInspector.HeapSnapshotRetainingPathsList.prototype.refresh):
        (WebInspector.HeapSnapshotRetainingPathsList.prototype.showNext.startSearching):
        (WebInspector.HeapSnapshotRetainingPathsList.prototype.showNext):
        (WebInspector.HeapSnapshotRetainingPathsList.prototype._setRootChildrenForFinder):
        (WebInspector.DetailedHeapshotView.prototype._changeRetainingPathsRoot):
        (WebInspector.DetailedHeapshotView.prototype.get isTracingToWindowObjects):
        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshotNode.prototype.get className):
        (WebInspector.HeapSnapshot.prototype._buildAggregates):
        (WebInspector.HeapSnapshotPathFinder.prototype.updateRoots):
        (WebInspector.HeapSnapshotPathFinder.prototype._fillRootChildren):
        * inspector/front-end/heapProfiler.css:
        (.detailed-heapshot-view .retaining-paths-view .title > span):
        (.detailed-heapshot-view .retaining-paths-to-windows):

2011-03-16  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Add WebKit2 API to figure out if an input or textarea was edited
        https://bugs.webkit.org/show_bug.cgi?id=56474

        Add HTMLInputElement::lastChangeWasUserEdit and HTMLTextAreaElement::lastChangeWasUserEdit
        and use them to implement -[DOMHTMLInputElement _isEdited] and -[DOMHTMLTextAreaElement _isEdited]
        as well as API in WebKit2.

        * WebCore.exp.in:
        * bindings/objc/DOMHTML.mm:
        (-[DOMHTMLInputElement _isEdited]):
        (-[DOMHTMLTextAreaElement _isEdited]):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::lastChangeWasUserEdit):
        * html/HTMLInputElement.h:
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::lastChangeWasUserEdit):
        * html/HTMLTextAreaElement.h:

2011-03-15  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: ASSERTION FAILED: !HashTranslator::equal(KeyTraits::emptyValue(), key)
        https://bugs.webkit.org/show_bug.cgi?id=56376

        * inspector/InspectorBrowserDebuggerAgent.cpp:
        (WebCore::InspectorBrowserDebuggerAgent::willRemoveDOMNode):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMAgent.prototype._setDocument):

2011-03-16  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        text-combine text retains compressed font after adding characters to it
        https://bugs.webkit.org/show_bug.cgi?id=56448

        Test: fast/dynamic/text-combine.html

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty): Allow styles with text-combine to be shared, since
        only the clones on the RenderCombineText will be mutated.
        * rendering/RenderCombineText.cpp:
        (WebCore::RenderCombineText::styleDidChange): Clone the style, to avoid mutating the parent’s
        style.
        (WebCore::RenderCombineText::combineText): Start off with the original font; restore it if
        the text cannot be combined.
        * rendering/RenderCombineText.h:
        (WebCore::RenderCombineText::originalFont): Added. Returns the parent’s font.

2011-03-14  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: refactor event listener breakpoints.
        https://bugs.webkit.org/show_bug.cgi?id=56305

        - restore event listener breakpoints one by one instead of using setAllBrowserBreakpoints
        - store event listener breakpoints in a separate separate setting
        - move presentation-related code from BreakpointManager to EventListenerBreakpointsSidebarPane

        Test: inspector/debugger/event-listener-breakpoints.html

        * inspector/Inspector.idl:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::setFrontend):
        * inspector/InspectorBrowserDebuggerAgent.cpp:
        (WebCore::InspectorBrowserDebuggerAgent::setEventListenerBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::removeEventListenerBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::pauseOnNativeEventIfNeeded):
        (WebCore::InspectorBrowserDebuggerAgent::clear):
        * inspector/InspectorBrowserDebuggerAgent.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didCommitLoadImpl):
        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager.prototype.setEventListenerBreakpoint):
        (WebInspector.BreakpointManager.prototype.removeEventListenerBreakpoint):
        (WebInspector.BreakpointManager.prototype.breakpointViewForEventData):
        (WebInspector.BreakpointManager.prototype._projectChanged):
        (WebInspector.BreakpointManager.prototype._saveBreakpoints):
        (WebInspector.BreakpointManager.prototype._validateBreakpoints):
        (WebInspector.BreakpointManager.prototype._createDOMBreakpointId):
        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.EventListenerBreakpointsSidebarPane):
        (WebInspector.EventListenerBreakpointsSidebarPane.eventNameForUI):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._createCategory):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._categoryCheckboxClicked):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._breakpointCheckboxClicked):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._setBreakpoint):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._removeBreakpoint):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._updateCategoryCheckbox):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype.highlightBreakpoint):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype.clearBreakpointHighlight):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._saveBreakpoints):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._restoreBreakpoints):
        * inspector/front-end/CallStackSidebarPane.js:
        (WebInspector.CallStackSidebarPane.prototype.update):
        (WebInspector.CallStackSidebarPane.prototype.setStatus):
        (WebInspector.CallStackSidebarPane.prototype._domBreakpointHit):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._debuggerPaused):
        (WebInspector.ScriptsPanel.prototype._clearInterface):
        * inspector/front-end/Settings.js:
        (WebInspector.Settings):

2011-03-16  David Kilzer  <ddkilzer@apple.com>

        Minor clean-up after r81156, r81172

        Follow-up for:
        <http://webkit.org/b/56381> Objective-C classes should be typedef-ed as structs (not void*) in C++

        * platform/graphics/GraphicsLayer.h: Removed unused @class
        WebLayer declaration.
        * platform/graphics/ca/PlatformCAAnimation.h: Changed typedef
        struct CAPropertyAnimation to class declaration.

2011-03-16  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Remove live-edit code
        https://bugs.webkit.org/show_bug.cgi?id=56177

        * inspector/front-end/Settings.js:
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame):
        (WebInspector.SourceFrame.prototype._doubleClick):
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextEditorMainPanel):
        (WebInspector.TextEditorMainPanel.prototype.set readOnly):

2011-03-16  Alexis Menard  <alexis.menard@openbossa.org>

        Reviewed by Martin Robinson.

        [GStreamer] There is no need to set the state of the pipeline to playing, HTMLMediaElement will do it.
        https://bugs.webkit.org/show_bug.cgi?id=56403

        In case of a seek on a live pipeline there is no need to call gst_element_set_state(m_playBin, GST_STATE_PLAYING);
        As soon as HTMLMediaElement::updatePlayState() is called (like when the data comes in) the playback will be relaunched
        i.e the pause() made when beginScrubbing is done is just internal.

        No new tests: Verified manually.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::updateStates):

2011-03-16  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        WebCore GYP build should build platform/
        https://bugs.webkit.org/show_bug.cgi?id=56430

        Adding platform/ to the GYP build required disabling
        ALWAYS_SEARCH_USER_PATHS, which in turn required fixing some latent
        style issues.  I suspect we'll end up excluding some of these files
        from the build in the final analysis, but we might as well fix the
        style errors while we're here.

        * bindings/js/JSMainThreadExecState.h:
        * bindings/js/ScheduledAction.h:
        * css/CSSPrimitiveValueCache.cpp:
        * gyp/WebCore.gyp:
        * platform/KillRingNone.cpp:
        (WebCore::KillRing::append):
        (WebCore::KillRing::prepend):
        * platform/graphics/ContextShadow.h:
        * platform/graphics/gpu/LoopBlinnPathProcessor.cpp:
        (WebCore::LoopBlinnPathProcessor::buildContours):
        (WebCore::TessellationState::combineCallback):
        * platform/graphics/gpu/PODRedBlackTree.h:
        (WebCore::PODRedBlackTree::updateNode):
        (WebCore::PODRedBlackTree::logIfVerbose):
        * platform/graphics/opengl/TextureMapperGL.cpp:
        * platform/graphics/opengl/TextureMapperGL.h:
        * platform/graphics/texmap/TextureMapper.h:
        (WebCore::BitmapTexture::save):
        (WebCore::TextureMapper::paintToTarget):
        * platform/graphics/texmap/TextureMapperNode.h:

2011-03-15  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Eric Carlson.

        [GStreamer] http/tests/media/video-play-stall-before-meta-data.html fails
        https://bugs.webkit.org/show_bug.cgi?id=56370

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::mediaPlayerPrivateMessageCallback): Let the
        mediaPlayerClient handle the stream error, in this case the
        HTMLMediaElement will emit a stalled event.

2011-03-10  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Martin Robinson.

        [GStreamer] Frame accurate seeking isn't always accurate
        https://bugs.webkit.org/show_bug.cgi?id=55217

        Attempt to build the seek GstClockTime position by converting the
        float time value to a GTimeVal value rounded at microsecond
        precision. Additionally perform the seek with the ACCURATE seek
        flag. These modifications at least fix this manual-test:
        http://www.massive-interactive.nl/html5_video/smpte_test_universal.html

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::currentTime):
        (WebCore::MediaPlayerPrivateGStreamer::seek):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:

2011-03-15  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: split InspectorAgent.populateScriptObjects into more granular agent-specific requests
        https://bugs.webkit.org/show_bug.cgi?id=56389

        Instead of sending one big request populateScriptObjects each agent requests
        for initial data in its constructor.
        
        * inspector/Inspector.idl:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        (WebCore::InspectorAgent::restoreInspectorStateFromCookie):
        (WebCore::InspectorAgent::setFrontend):
        (WebCore::InspectorAgent::pushDataCollectedOffline):
        (WebCore::InspectorAgent::getPreferredPanel):
        * inspector/InspectorAgent.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::InspectorDOMAgent):
        (WebCore::InspectorDOMAgent::setFrontend):
        (WebCore::InspectorDOMAgent::restore):
        * inspector/InspectorDOMAgent.h:
        (WebCore::InspectorDOMAgent::create):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::setFrontend):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorProfilerAgent.h:
        (WebCore::InspectorProfilerAgent::isEnabled):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        * inspector/front-end/inspector.js:

2011-03-15  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        Devirtualize isContentEditable and isRichlyContentEditable
        https://bugs.webkit.org/show_bug.cgi?id=56421

        Rewrote Node::isContentEditable as a non-recursive non-virtual function.

        * dom/Document.cpp: Removed isContentEditable and isContentRichlyEditable.
        * dom/Document.h: Ditto.
        * dom/Node.cpp:
        (WebCore::Node::isContentEditable): Rewritten.
        * dom/Node.h:
        (WebCore::Node::isContentEditable): Calls isContentEditable(Editable).
        (WebCore::Node::isContentRichlyEditable): Calls isContentEditable(RichlyEditable).
        * html/HTMLElement.cpp: Removed isContentEditable and isContentRichlyEditable.
        * html/HTMLElement.h: Ditto.

2011-03-15  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        WebCore GYP build should build inspector/ loader/ mathml/ notifications/ and page/
        https://bugs.webkit.org/show_bug.cgi?id=56412

        Yay for smooth sailing.

        * gyp/WebCore.gyp:

2011-03-15  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Kent Tamura.

        REGRESSION(r76147): A slider thumb that is styled cannot be programmatically moved
        https://bugs.webkit.org/show_bug.cgi?id=56059

        Test: fast/dom/HTMLInputElement/input-slider-update-styled.html

        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::valueChanged): Changed to use setPositionFromValue.
        * html/shadow/SliderThumbElement.cpp:
        (WebCore::SliderThumbElement::setPositionFromValue): Added.
        (WebCore::SliderThumbElement::dragFrom): Changed to use setPositionFromPoint.
        (WebCore::SliderThumbElement::setPositionFromPoint): Ditto.
        (WebCore::SliderThumbElement::defaultEventHandler): Ditto.
        * html/shadow/SliderThumbElement.h: Added decls.

2011-03-15  David Levin  <levin@chromium.org>

        Attempted build fix following r81213. Same song second verse.

        * platform/image-encoders/skia/PNGImageEncoder.cpp:
        (WebCore::encodePixels):

2011-03-15  David Levin  <levin@chromium.org>

        Attempted build fix for Chromium OSX release build following r81213.

        * platform/image-encoders/skia/JPEGImageEncoder.cpp:
        (WebCore::encodePixels): Change scoping of |pixels| to be after setjmp call.

2011-03-15  John Bauman  <jbauman@chromium.org>

        Reviewed by Kenneth Russell.

        Non-premultiplied-alpha canvas attribute is ignore for toDataURL, drawImage, texImage2D
        https://bugs.webkit.org/show_bug.cgi?id=56238

       Attempt to get an ImageData (non-premultiplied) from a WebGL canvas
       instead of getting an ImageBuffer, so there's a chance the data can be
       passed straight through to the consumer with no premultiplication
       necessary. Fixes Chromium and Safari.

        Test: fast/canvas/webgl/premultiplyalpha-test.html

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::toDataURL):
        (WebCore::HTMLCanvasElement::getImageData):
        * html/HTMLCanvasElement.h:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::paintRenderingResultsToImageData):
        (WebCore::WebGLRenderingContext::texImage2D):
        (WebCore::WebGLRenderingContext::texSubImage2D):
        * html/canvas/WebGLRenderingContext.h:
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/ImageBuffer.h:
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::CGImageToDataURL):
        (WebCore::ImageBuffer::toDataURL):
        (WebCore::ImageDataToDataURL):
        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::GraphicsContext3D::validateAttributes):
        (WebCore::GraphicsContext3D::readRenderingResults):
        (WebCore::GraphicsContext3D::paintRenderingResultsToCanvas):
        (WebCore::GraphicsContext3D::paintRenderingResultsToImageData):
        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3D::paintRenderingResultsToImageData):
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::ImageToDataURL):
        (WebCore::ImageBuffer::toDataURL):
        (WebCore::ImageDataToDataURL):
        * platform/image-encoders/skia/JPEGImageEncoder.cpp:
        (WebCore::preMultipliedBGRAtoRGB):
        (WebCore::RGBAtoRGB):
        (WebCore::encodePixels):
        (WebCore::JPEGImageEncoder::encode):
        * platform/image-encoders/skia/JPEGImageEncoder.h:
        * platform/image-encoders/skia/PNGImageEncoder.cpp:
        (WebCore::preMultipliedBGRAtoRGBA):
        (WebCore::encodePixels):
        (WebCore::PNGImageEncoder::encode):
        * platform/image-encoders/skia/PNGImageEncoder.h:

2011-03-15  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix, only compile the methods when the INDEXED_DATABASE feature is enabled.
        
        * storage/IDBDatabaseCallbacksImpl.cpp:

2011-03-15  Brady Eidson  <beidson@apple.com>

        Build fix after r81208 for https://bugs.webkit.org/show_bug.cgi?id=56425

        * loader/icon/IconDatabaseBase.h: #include instead of forward declare.

2011-03-15  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin Adler.

        Fix for <rdar://problem/8944558> Overlay scrollers in overflow areas need to 
        send notifications appropriate times (showing up, resizing)
        -and corresponding-
        https://bugs.webkit.org/show_bug.cgi?id=56067

        The general strategy here is to add a HashSet of ScrollableAreas to the page that 
        can be accessed when necessary to send notifications to all ScrollableAreas. In 
        turn, all of the ScrollableArea classes that add themselves to the HashSet must 
        keep a weak pointer to Page so that they can remove themselves without relying on 
        Frames or Renderers to still have references.

        Find layers for relevant node and if the layers are in the Page's ScrollableArea 
        set, then send the relevant notification.
        * page/EventHandler.cpp:
        (WebCore::layerForNode):
        (WebCore::EventHandler::mouseMoved):
        (WebCore::EventHandler::updateMouseEventTargetNode):

        When the page is set active or not active, iterate through the Page's 
        ScrollableAreas to send hide/show notifications. 
        * page/FocusController.cpp:
        (WebCore::FocusController::setActive):

        When a FrameView is created, add it to the ScrollableArea set. When it's 
        destroyed, remove it.
        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::~FrameView):

        Iterate through the Page's ScrollableAreas to send the paint notification.
        (WebCore::FrameView::notifyPageThatContentAreaWillPaint):
        * page/FrameView.h:
        (WebCore::FrameView::disconnectFromPage):

        Add the new ScrollableArea set.
        * page/Page.cpp:
        (WebCore::Page::~Page):
        (WebCore::Page::addScrollableArea):
(WebCore::Page::removeScrollableArea):
        (WebCore::Page::containsScrollableArea):
        * page/Page.h:
        (WebCore::Page::scrollableAreaSet):

        notifyPageThatContentAreaWillPaint() is a dummy function implemented in FrameView.
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::notifyPageThatContentAreaWillPaint):
        
        Call notifyPageThatContentAreaWillPaint() instead of calling 
        contentAreaWillPaint() just for the ScrollView.
        (WebCore::ScrollView::paint):
        * platform/ScrollView.h:

        Add/remove ScrollableAreas to the set. Add new disconnectFromPage().
        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::disconnectFromPage):
        * rendering/RenderDataGrid.cpp:
        (WebCore::RenderDataGrid::RenderDataGrid):
        (WebCore::RenderDataGrid::~RenderDataGrid):
        * rendering/RenderDataGrid.h:
        (WebCore::RenderDataGrid::disconnectFromPage):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::~RenderLayer):
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::disconnectFromPage):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::RenderListBox):
        (WebCore::RenderListBox::~RenderListBox):
        * rendering/RenderListBox.h:
        (WebCore::RenderListBox::disconnectFromPage):

        Should have implemented this ScrollableArea-interface function a while ago.
        (WebCore::RenderLayer::currentMousePosition):

2011-03-15  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=56425
        WebKit2 icon database.

        * WebCore.exp.in:

2011-03-15  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        WebCore GYP build should build editing, fileapi, history, and html
        https://bugs.webkit.org/show_bug.cgi?id=56411

        These all went smoothly.

        * gyp/WebCore.gyp:

2011-03-15  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        WebCore GYP build should build dom/
        https://bugs.webkit.org/show_bug.cgi?id=56409

        * gyp/WebCore.gyp:

2011-03-15  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        WebCore GYP build should build css/
        https://bugs.webkit.org/show_bug.cgi?id=56408

        CSSParser.cpp #includes tokenizer.cpp, which we haven't included in the
        build yet.  I've punted on that problem for now, but we'll come back to
        it.

        * gyp/WebCore.gyp:

2011-03-15  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        WebCore GYP build should build bindings/
        https://bugs.webkit.org/show_bug.cgi?id=56406

        I wanted to include bindings/objc in this patch, but they were somewhat
        complicated.  It looks like they include headers from the output
        directory (via PrivateHeaders), but we haven't wired up the
        PrivateHeaders yet.

        * gyp/WebCore.gyp:

2011-03-15  James Simonsen  <simonjam@chromium.org>

        Reviewed by Tony Gentilcore.

        Need different behavior for ensuring execution order of dynamically loaded scripts
        https://bugs.webkit.org/show_bug.cgi?id=50115

        Dynamically added scripts with async=false will load in parallel, but execute in order.
        See: http://www.whatwg.org/specs/web-apps/current-work/multipage/scripting-1.html#force-async

        Tests: fast/dom/HTMLScriptElement/script-async-attr.html
               http/tests/misc/script-async-load-execute-in-order.html

        * Android.mk: Rename AsyncScriptRunner -> ScriptRunner.
        * CMakeLists.txt: Ditto.
        * GNUmakefile.am: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * dom/DOMAllInOne.cpp: Ditto.
        * dom/Document.cpp:
        (WebCore::Document::Document): Ditto.
        (WebCore::Document::~Document): Ditto.
        * dom/Document.h:
        (WebCore::Document::scriptRunner): Ditto.
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::ScriptElement): Added forceAsync and willExecuteInOrder.
        (WebCore::ScriptElement::handleAsyncAttribute): Called by HTMLScriptElement when async attribute changes.
        (WebCore::ScriptElement::prepareScript): Added support for forceAsync.
        (WebCore::ScriptElement::notifyFinished): Tell ScriptRunner to execute in order if needed.
        * dom/ScriptElement.h:
        (WebCore::ScriptElement::forceAsync): Added.
        * dom/ScriptRunner.cpp: Renamed from Source/WebCore/dom/AsyncScriptRunner.cpp.
        (WebCore::ScriptRunner::ScriptRunner): Added in-order script queue.
        (WebCore::ScriptRunner::~ScriptRunner): Ditto.
        (WebCore::ScriptRunner::executeScriptSoon):
        (WebCore::ScriptRunner::queueScriptForInOrderExecution): Added.
        (WebCore::ScriptRunner::suspend):
        (WebCore::ScriptRunner::resume):
        (WebCore::ScriptRunner::timerFired): Execute in-order scripts if ready.
        * dom/ScriptRunner.h: Renamed from Source/WebCore/dom/AsyncScriptRunner.h.
        (WebCore::ScriptRunner::create):
        (WebCore::ScriptRunner::hasPendingScripts): Check for in-order scripts too.
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::attributeChanged): Notify ScriptElement when async changes.
        (WebCore::HTMLScriptElement::setAsync): Ditto.
        (WebCore::HTMLScriptElement::async): Include forceAsync in calculation.
        * html/HTMLScriptElement.h:
        * html/HTMLScriptElement.idl: Removed Reflect from async for custom behavior.
        * page/PageGroupLoadDeferrer.cpp:
        (WebCore::PageGroupLoadDeferrer::PageGroupLoadDeferrer): Rename AsyncScriptRunner -> ScriptRunner.
        (WebCore::PageGroupLoadDeferrer::~PageGroupLoadDeferrer): Ditto.

2011-03-15  Tony Chang  <tony@chromium.org>

        Reviewed by Adam Barth.

        pngcrush images used by inspector
        https://bugs.webkit.org/show_bug.cgi?id=56426

        This saves 120k in WebCore and 8k in WebKit/chromium.  I ran
        pngcrush -brute, so none of the meta data (ancillary chunks)
        are modified.

        No new tests, just compressing png files.

        * inspector/front-end/Images/applicationCache.png:
        * inspector/front-end/Images/auditsIcon.png:
        * inspector/front-end/Images/back.png:
        * inspector/front-end/Images/breakpointBorder.png:
        * inspector/front-end/Images/breakpointConditionalBorder.png:
        * inspector/front-end/Images/breakpointConditionalCounterBorder.png:
        * inspector/front-end/Images/breakpointCounterBorder.png:
        * inspector/front-end/Images/breakpointsActivateButtonGlyph.png:
        * inspector/front-end/Images/breakpointsDeactivateButtonGlyph.png:
        * inspector/front-end/Images/checker.png:
        * inspector/front-end/Images/clearConsoleButtonGlyph.png:
        * inspector/front-end/Images/closeButtons.png:
        * inspector/front-end/Images/consoleButtonGlyph.png:
        * inspector/front-end/Images/consoleIcon.png:
        * inspector/front-end/Images/cookie.png:
        * inspector/front-end/Images/database.png:
        * inspector/front-end/Images/databaseTable.png:
        * inspector/front-end/Images/debuggerContinue.png:
        * inspector/front-end/Images/debuggerPause.png:
        * inspector/front-end/Images/debuggerStepInto.png:
        * inspector/front-end/Images/debuggerStepOut.png:
        * inspector/front-end/Images/debuggerStepOver.png:
        * inspector/front-end/Images/disclosureTriangleSmallDown.png:
        * inspector/front-end/Images/disclosureTriangleSmallDownBlack.png:
        * inspector/front-end/Images/disclosureTriangleSmallDownWhite.png:
        * inspector/front-end/Images/disclosureTriangleSmallRight.png:
        * inspector/front-end/Images/disclosureTriangleSmallRightBlack.png:
        * inspector/front-end/Images/disclosureTriangleSmallRightDown.png:
        * inspector/front-end/Images/disclosureTriangleSmallRightDownBlack.png:
        * inspector/front-end/Images/disclosureTriangleSmallRightDownWhite.png:
        * inspector/front-end/Images/disclosureTriangleSmallRightWhite.png:
        * inspector/front-end/Images/dockButtonGlyph.png:
        * inspector/front-end/Images/elementsIcon.png:
        * inspector/front-end/Images/enableOutlineButtonGlyph.png:
        * inspector/front-end/Images/enableSolidButtonGlyph.png:
        * inspector/front-end/Images/errorIcon.png:
        * inspector/front-end/Images/errorMediumIcon.png:
        * inspector/front-end/Images/errorRedDot.png:
        * inspector/front-end/Images/excludeButtonGlyph.png:
        * inspector/front-end/Images/focusButtonGlyph.png:
        * inspector/front-end/Images/forward.png:
        * inspector/front-end/Images/frame.png:
        * inspector/front-end/Images/garbageCollectButtonGlyph.png:
        * inspector/front-end/Images/gearButtonGlyph.png:
        * inspector/front-end/Images/glossyHeader.png:
        * inspector/front-end/Images/glossyHeaderPressed.png:
        * inspector/front-end/Images/glossyHeaderSelected.png:
        * inspector/front-end/Images/glossyHeaderSelectedPressed.png:
        * inspector/front-end/Images/goArrow.png:
        * inspector/front-end/Images/graphLabelCalloutLeft.png:
        * inspector/front-end/Images/graphLabelCalloutRight.png:
        * inspector/front-end/Images/helpButtonGlyph.png:
        * inspector/front-end/Images/largerResourcesButtonGlyph.png:
        * inspector/front-end/Images/localStorage.png:
        * inspector/front-end/Images/networkIcon.png:
        * inspector/front-end/Images/nodeSearchButtonGlyph.png:
        * inspector/front-end/Images/paneAddButtons.png:
        * inspector/front-end/Images/paneBottomGrow.png:
        * inspector/front-end/Images/paneBottomGrowActive.png:
        * inspector/front-end/Images/paneGrowHandleLine.png:
        * inspector/front-end/Images/paneSettingsButtons.png:
        * inspector/front-end/Images/pauseOnExceptionButtonGlyph.png:
        * inspector/front-end/Images/percentButtonGlyph.png:
        * inspector/front-end/Images/popoverArrows.png:
        * inspector/front-end/Images/popoverBackground.png:
        * inspector/front-end/Images/profileGroupIcon.png:
        * inspector/front-end/Images/profileIcon.png:
        * inspector/front-end/Images/profileSmallIcon.png:
        * inspector/front-end/Images/profilesIcon.png:
        * inspector/front-end/Images/profilesSilhouette.png:
        * inspector/front-end/Images/programCounterBorder.png:
        * inspector/front-end/Images/radioDot.png:
        * inspector/front-end/Images/recordButtonGlyph.png:
        * inspector/front-end/Images/recordToggledButtonGlyph.png:
        * inspector/front-end/Images/reloadButtonGlyph.png:
        * inspector/front-end/Images/resourceCSSIcon.png:
        * inspector/front-end/Images/resourceDocumentIcon.png:
        * inspector/front-end/Images/resourceDocumentIconSmall.png:
        * inspector/front-end/Images/resourceJSIcon.png:
        * inspector/front-end/Images/resourcePlainIcon.png:
        * inspector/front-end/Images/resourcePlainIconSmall.png:
        * inspector/front-end/Images/resourcesIcon.png:
        * inspector/front-end/Images/resourcesSizeGraphIcon.png:
        * inspector/front-end/Images/resourcesTimeGraphIcon.png:
        * inspector/front-end/Images/scriptsIcon.png:
        * inspector/front-end/Images/scriptsSilhouette.png:
        * inspector/front-end/Images/searchSmallBlue.png:
        * inspector/front-end/Images/searchSmallBrightBlue.png:
        * inspector/front-end/Images/searchSmallGray.png:
        * inspector/front-end/Images/searchSmallWhite.png:
        * inspector/front-end/Images/segment.png:
        * inspector/front-end/Images/segmentEnd.png:
        * inspector/front-end/Images/segmentHover.png:
        * inspector/front-end/Images/segmentHoverEnd.png:
        * inspector/front-end/Images/segmentSelected.png:
        * inspector/front-end/Images/segmentSelectedEnd.png:
        * inspector/front-end/Images/sessionStorage.png:
        * inspector/front-end/Images/splitviewDimple.png:
        * inspector/front-end/Images/splitviewDividerBackground.png:
        * inspector/front-end/Images/statusbarButtons.png:
        * inspector/front-end/Images/statusbarMenuButton.png:
        * inspector/front-end/Images/statusbarMenuButtonSelected.png:
        * inspector/front-end/Images/statusbarResizerHorizontal.png:
        * inspector/front-end/Images/statusbarResizerVertical.png:
        * inspector/front-end/Images/successGreenDot.png:
        * inspector/front-end/Images/thumbActiveHoriz.png:
        * inspector/front-end/Images/thumbActiveVert.png:
        * inspector/front-end/Images/thumbHoriz.png:
        * inspector/front-end/Images/thumbHoverHoriz.png:
        * inspector/front-end/Images/thumbHoverVert.png:
        * inspector/front-end/Images/thumbVert.png:
        * inspector/front-end/Images/timelineBarBlue.png:
        * inspector/front-end/Images/timelineBarGray.png:
        * inspector/front-end/Images/timelineBarGreen.png:
        * inspector/front-end/Images/timelineBarOrange.png:
        * inspector/front-end/Images/timelineBarPurple.png:
        * inspector/front-end/Images/timelineBarRed.png:
        * inspector/front-end/Images/timelineBarYellow.png:
        * inspector/front-end/Images/timelineCheckmarks.png:
        * inspector/front-end/Images/timelineDots.png:
        * inspector/front-end/Images/timelineHollowPillBlue.png:
        * inspector/front-end/Images/timelineHollowPillGray.png:
        * inspector/front-end/Images/timelineHollowPillGreen.png:
        * inspector/front-end/Images/timelineHollowPillOrange.png:
        * inspector/front-end/Images/timelineHollowPillPurple.png:
        * inspector/front-end/Images/timelineHollowPillRed.png:
        * inspector/front-end/Images/timelineHollowPillYellow.png:
        * inspector/front-end/Images/timelineIcon.png:
        * inspector/front-end/Images/timelinePillBlue.png:
        * inspector/front-end/Images/timelinePillGray.png:
        * inspector/front-end/Images/timelinePillGreen.png:
        * inspector/front-end/Images/timelinePillOrange.png:
        * inspector/front-end/Images/timelinePillPurple.png:
        * inspector/front-end/Images/timelinePillRed.png:
        * inspector/front-end/Images/timelinePillYellow.png:
        * inspector/front-end/Images/toolbarItemSelected.png:
        * inspector/front-end/Images/trackHoriz.png:
        * inspector/front-end/Images/trackVert.png:
        * inspector/front-end/Images/treeDownTriangleBlack.png:
        * inspector/front-end/Images/treeDownTriangleWhite.png:
        * inspector/front-end/Images/treeRightTriangleBlack.png:
        * inspector/front-end/Images/treeRightTriangleWhite.png:
        * inspector/front-end/Images/treeUpTriangleBlack.png:
        * inspector/front-end/Images/treeUpTriangleWhite.png:
        * inspector/front-end/Images/undockButtonGlyph.png:
        * inspector/front-end/Images/userInputIcon.png:
        * inspector/front-end/Images/userInputPreviousIcon.png:
        * inspector/front-end/Images/userInputResultIcon.png:
        * inspector/front-end/Images/warningIcon.png:
        * inspector/front-end/Images/warningMediumIcon.png:
        * inspector/front-end/Images/warningOrangeDot.png:
        * inspector/front-end/Images/warningsErrors.png:

2011-03-15  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Tony Chang.

        Crash in ReplaceSelectionCommand::doApply when inserting a node under a document node
        https://bugs.webkit.org/show_bug.cgi?id=56372

        The bug was caused by insertNodeAfter's calling parentElement on document's child.
        Fixed this by changing the node that AppendNodeCommand takes.

        There was also a bug that document node always returned false for isContentEditable
        and isContentRichlyEditable because they never overrode Node's default implementation.
        Fixed this by overriding them in Document.

        Test: editing/execCommand/append-node-under-document.html

        * dom/Document.cpp:
        (WebCore::Document::isContentEditable): Added.
        (WebCore::Document::isContentRichlyEditable): Added.
        * dom/Document.h:
        * editing/AppendNodeCommand.cpp:
        (WebCore::AppendNodeCommand::AppendNodeCommand): Takes ContainerNode instead of Element.
        * editing/AppendNodeCommand.h:
        (WebCore::AppendNodeCommand::create): Ditto.
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::appendNode): Ditto.
        (WebCore::CompositeEditCommand::insertNodeAfter): Calls parentNode instead of parentElement.
        * editing/CompositeEditCommand.h:

2011-03-15  David Grogan  <dgrogan@chromium.org>

        Reviewed by Jeremy Orlow.

        Fix crash caused by Invalid call to destroyActiveDOMObject during stopActiveDOMObjects
        https://bugs.webkit.org/show_bug.cgi?id=56350

        When a frame is unloaded, ScriptExecutionContext::stopActiveDOMObjects
        calls stop() on each ActiveDOMObject.

        Calling IDBDatabase::stop() can cause IDBDatabase to be destroyed:
        * IDBDatabase::stop() causes the chrome message dispatcher to remove
        its reference to IDBDatabase, which it has as type
        IDBDatabaseCallbacks.
        * If that reference is the last one, the IDBDatabase is destroyed.
        * Destroying an ActiveDOMObject while they are being iterated over causes
        a defensive crash.
        
        This change creates a separate IDBDatabaseCallbacks object that is not
        an ActiveDOMObject, so it can be destroyed by
        ScriptExecutionContext::stopActiveDOMObjects.
        
        Because the chrome message dispatcher is only used in multi-process
        chromium, that's the only platform affected.  Chromium browser tests
        forthcoming.

        * WebCore.gypi:
        * storage/IDBDatabase.cpp:
        (WebCore::IDBDatabase::IDBDatabase):
        (WebCore::IDBDatabase::~IDBDatabase):
        (WebCore::IDBDatabase::setVersion):
        (WebCore::IDBDatabase::close):
        (WebCore::IDBDatabase::open):
        * storage/IDBDatabase.h:
        * storage/IDBDatabaseCallbacks.h:
        (WebCore::IDBDatabaseCallbacks::unRegisterDatabase):
        * storage/IDBDatabaseCallbacksImpl.cpp: Copied from Source/WebCore/storage/IDBDatabaseCallbacks.h.
        (WebCore::IDBDatabaseCallbacksImpl::create):
        (WebCore::IDBDatabaseCallbacksImpl::IDBDatabaseCallbacksImpl):
        (WebCore::IDBDatabaseCallbacksImpl::onVersionChange):
        (WebCore::IDBDatabaseCallbacksImpl::unRegisterDatabase):
        * storage/IDBDatabaseCallbacksImpl.h: Copied from Source/WebCore/storage/IDBDatabaseCallbacks.h.
        (WebCore::IDBDatabaseCallbacksImpl::~IDBDatabaseCallbacksImpl):

2011-03-15  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        accessibility should build in WebCore GYP build
        https://bugs.webkit.org/show_bug.cgi?id=56405

        This patch changes our include/exclude strategy to more closely match
        the strategy used by the Chromium GYP build system.  Ideally, we'd find
        a way to share more of these patterns.  In the meantime, I'm going to
        slowly increase the number of translation units in the project and
        adjust the include/exclude filters appropriately.

        * gyp/WebCore.gyp:

2011-03-15  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        REGRESSION (WebKit2): keygen element doesn't work
        https://bugs.webkit.org/show_bug.cgi?id=56402
        <rdar://problem/9006545>

        Covered by existing regresison tests.

        * English.lproj/Localizable.strings:

        * WebCore.exp.in: Removed WebCoreKeyGenerator, which no longer exists. Added
        _wkSignedPublicKeyAndChallengeString, so that this WKSI function could be used in WebCore.

        * platform/mac/SSLKeyGeneratorMac.mm: Removed.
        * platform/mac/WebCoreKeyGenerator.h: Removed.
        * platform/mac/WebCoreKeyGenerator.m: Removed.
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:
        * WebCore.xcodeproj/project.pbxproj:
        Renamed SSLKeyGeneratorMac.mm to .cpp, as it doesn't use any Objective C any more.
        Removed WebCoreKeyGenerator, as we no longer need an interface to WebKit.

        * platform/LocalizationStrategy.h:
        * platform/LocalizedStrings.cpp:
        (WebCore::keygenMenuItem512):
        (WebCore::keygenMenuItem1024):
        (WebCore::keygenMenuItem2048):
        (WebCore::keygenKeychainItemName):
        * platform/LocalizedStrings.h:
        Added strings used by keygen element, now that the code using them is in WebCore.

        * platform/mac/SSLKeyGeneratorMac.cpp: Copied from Source/WebCore/platform/mac/SSLKeyGeneratorMac.mm.
        (WebCore::getSupportedKeySizes):
        (WebCore::signedPublicKeyAndChallengeString):
        Moved the code from WebKit. There is never any need to provide implementation at runtime,
        like old code was doing.

        * platform/win/SSLKeyGeneratorWin.cpp: (WebCore::WebCore::getSupportedKeySizes):
        Added a FIXME about localization. Note that Safari for Windows doesn't support keygen.

2011-03-15  Anders Carlsson  <andersca@apple.com>

        Fix clang build.

        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/GraphicsLayer.h:

2011-03-15  Simon Fraser  <simon.fraser@apple.com>

        Fix Lion build after r81161.
        
        Pass the PlatformCALayer down into drawLayerContents()
        so we can use its acceleratesDrawing() method.

        * platform/graphics/mac/WebLayer.h:
        * platform/graphics/mac/WebLayer.mm:
        (drawLayerContents):
        (-[WebLayer drawInContext:]):
        * platform/graphics/mac/WebTiledLayer.mm:
        (-[WebTiledLayer drawInContext:]):

2011-03-15  Alok priyadarshi  <alokp@chromium.org>

        Reviewed by James Robinson.

        Valgrind error due to uninitialized PluginLayerChromium::m_textureId
        https://bugs.webkit.org/show_bug.cgi?id=56390

        * platform/graphics/chromium/PluginLayerChromium.cpp:
        (WebCore::PluginLayerChromium::PluginLayerChromium):
        * platform/graphics/chromium/PluginLayerChromium.h:
        (WebCore::PluginLayerChromium::textureId):

2011-03-14  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        REGRESSION (r68976): Incorrect bidi rendering in SVG text
        https://bugs.webkit.org/show_bug.cgi?id=53980

        rework the test engine or SVG "text-intro" tests so we can turn them back on
        https://bugs.webkit.org/show_bug.cgi?id=6524

        svg/W3C-SVG-1.1/text-intro-0*.svg fail when MS Office fonts are present
        https://bugs.webkit.org/show_bug.cgi?id=11662

        svg/batik/text/textBiDi.svg failing
        https://bugs.webkit.org/show_bug.cgi?id=17392

        SVG bidi examples at w3C I18N WG tutorials are not rendered correctly.
        https://bugs.webkit.org/show_bug.cgi?id=24374

        Implement proper bidirectionality support for SVG text.

        BiDi didn't work properly until now, because the x/y/dx/dy/rotate value lists are stored in logical order (aka. in
        the order the characters appear in the markup), and when laying out bidi text, we associated the current character
        in visual order with the current x/y/dx/dy/rotate value in logical order, messing up RTL text layout.
        The BiDi algorithm itself, inherited by RenderBlockLineLayout, works just fine, the inline box tree is correct.

        Long story:
        Before the inline box tree is created, SVGTextLayoutAttributesBuilder builds a list of x/y/dx/dy/rotate/<text metrics>
        for each RenderSVGInlineText* object, called SVGTextLayoutAttributes. This happens in logical order, as specified in
        the markup. <text x="10 20" y="10">abcdef</text> creates a SVGTextLayoutAttributes object in the renderer associated with
        "abcdef" that contains (10, 20) for x, (10) for y, the dx/dy/rotate lists are empty, and the SVGTextMetrics list holds 6
        width/height values for each of the glyphs (and some other infromation, see SVGTextMetrics class).
        The SVGTextLayoutAttributes object is _used by_ RenderBlockLineLayout when applying the BiDi algorithm as SVG demands
        that BiDi reordering does not happen across text chunks (a text chunk is defined by an absolute position, eg. x="10").

        To summarize: SVGTextLayoutAttributes are stored in all RenderSVGInlineText renderers, caching the metrics of all
        characters, their position based on the DOM attributes x/y/dx/dy/rotate. Using that information it's possible to
        determine whether a position starts a new text chunk, and that's used by RenderBlockLineLayout to create the 
        inline box tree, in _visual order_, as it will appear on screen.

        After the inline box tree is created, the SVGRootInlineBox traverses its children in visual order and feeds the
        found text boxes to SVGTextLayoutEngine, which lays out the text on a line or a path, according to SVG text layout
        rules. For each character of the passed in InlineTextBox, it determines the x/y/dx/dy/rotate value, and the position
        in the <text metrics> list of the renderer. The problem here is that the passed in text boxes are in visual order,
        the x/y/.. lists are all in logical order.

        Example: <text direction="rtl" unicde-bidi="bidi-override" x="10 20">abcdef</text>, reverse the text direction:
                 the visual order now is: "fedcba", where 'f' should be associated with x="10" and 'e' with x="20".

        Fix that problem, by computing a list of text boxes in _logical_ order in advance and pass it to SVGTextLayoutEngine,
        before it starts processing the boxes in visual order, fed by SVGRootInlineBox. When laying oout text, we can now
        process text in visual order, but grab the x/y/.. coordinates from the renderer in logical order.

        Some more work was needed to truly fix Arabic. The SVGTextLayoutAttributesBuilder measured all characters isolated,
        which is not a problem with latin text, but results in wrong advances for Arabic text, as isolated forms, instead of
        shaped forms are measured. This broke text-anchor support, text queries on Arabic text etc. Fixed now, covered by
        dozens of new tests.

        Tests: svg/W3C-I18N/g-dirLTR-ubNone.svg
               svg/W3C-I18N/g-dirLTR-ubOverride.svg
               svg/W3C-I18N/g-dirRTL-ubNone.svg
               svg/W3C-I18N/g-dirRTL-ubOverride.svg
               svg/W3C-I18N/text-anchor-dirLTR-anchorEnd.svg
               svg/W3C-I18N/text-anchor-dirLTR-anchorMiddle.svg
               svg/W3C-I18N/text-anchor-dirLTR-anchorStart.svg
               svg/W3C-I18N/text-anchor-dirNone-anchorEnd.svg
               svg/W3C-I18N/text-anchor-dirNone-anchorMiddle.svg
               svg/W3C-I18N/text-anchor-dirNone-anchorStart.svg
               svg/W3C-I18N/text-anchor-dirRTL-anchorEnd.svg
               svg/W3C-I18N/text-anchor-dirRTL-anchorMiddle.svg
               svg/W3C-I18N/text-anchor-dirRTL-anchorStart.svg
               svg/W3C-I18N/text-anchor-inherited-dirLTR-anchorEnd.svg
               svg/W3C-I18N/text-anchor-inherited-dirLTR-anchorMiddle.svg
               svg/W3C-I18N/text-anchor-inherited-dirLTR-anchorStart.svg
               svg/W3C-I18N/text-anchor-inherited-dirRTL-anchorEnd.svg
               svg/W3C-I18N/text-anchor-inherited-dirRTL-anchorMiddle.svg
               svg/W3C-I18N/text-anchor-inherited-dirRTL-anchorStart.svg
               svg/W3C-I18N/text-anchor-no-markup.svg
               svg/W3C-I18N/text-dirLTR-ubNone.svg
               svg/W3C-I18N/text-dirLTR-ubOverride.svg
               svg/W3C-I18N/text-dirRTL-ubNone.svg
               svg/W3C-I18N/text-dirRTL-ubOverride.svg
               svg/W3C-I18N/tspan-dirLTR-ubEmbed-in-rtl-context.svg
               svg/W3C-I18N/tspan-dirLTR-ubNone-in-rtl-context.svg
               svg/W3C-I18N/tspan-dirLTR-ubOverride-in-default-context.svg
               svg/W3C-I18N/tspan-dirLTR-ubOverride-in-ltr-context.svg
               svg/W3C-I18N/tspan-dirLTR-ubOverride-in-rtl-context.svg
               svg/W3C-I18N/tspan-dirNone-ubOverride-in-default-context.svg
               svg/W3C-I18N/tspan-dirNone-ubOverride-in-ltr-context.svg
               svg/W3C-I18N/tspan-dirNone-ubOverride-in-rtl-context.svg
               svg/W3C-I18N/tspan-dirRTL-ubEmbed-in-default-context.svg
               svg/W3C-I18N/tspan-dirRTL-ubEmbed-in-ltr-context.svg
               svg/W3C-I18N/tspan-dirRTL-ubNone-in-default-context.svg
               svg/W3C-I18N/tspan-dirRTL-ubNone-in-ltr-context.svg
               svg/W3C-I18N/tspan-dirRTL-ubOverride-in-default-context.svg
               svg/W3C-I18N/tspan-dirRTL-ubOverride-in-ltr-context.svg
               svg/W3C-I18N/tspan-dirRTL-ubOverride-in-rtl-context.svg
               svg/W3C-I18N/tspan-direction-ltr.svg
               svg/W3C-I18N/tspan-direction-rtl.svg
               svg/W3C-SVG-1.1-SE/text-intro-02-b.svg
               svg/W3C-SVG-1.1-SE/text-intro-05-t.svg
               svg/W3C-SVG-1.1-SE/text-intro-09-b.svg
               svg/W3C-SVG-1.1/text-align-08-b.svg
               svg/W3C-SVG-1.1/text-fonts-03-t.svg
               svg/W3C-SVG-1.1/text-intro-01-t.svg
               svg/W3C-SVG-1.1/text-intro-02-b.svg
               svg/W3C-SVG-1.1/text-intro-03-b.svg
               svg/W3C-SVG-1.1/text-intro-04-t.svg
               svg/text/bidi-reorder-value-lists.svg
               svg/text/bidi-text-anchor-direction.svg
               svg/text/bidi-text-query.svg
               svg/text/bidi-tspans.svg

        * rendering/RenderBlockLineLayout.cpp: Remove hack that forced LTR support when unicode-bidi="normal" and handling SVG text.
        (WebCore::RenderBlock::determineStartPosition):
        * rendering/svg/SVGInlineTextBox.cpp: s/fragment.positionListOffset/fragment.characterOffset/
        (WebCore::SVGInlineTextBox::offsetForPositionInFragment):
        (WebCore::SVGInlineTextBox::constructTextRun):
        (WebCore::SVGInlineTextBox::mapStartEndPositionsIntoFragmentCoordinates):
        * rendering/svg/SVGRenderTreeAsText.cpp: Ditto.
        (WebCore::writeSVGInlineTextBox):
        * rendering/svg/SVGRootInlineBox.cpp: Add new buildTextBoxListInLogicalOrder(), collecting all text boxes recursively in logical order (aka. as specified in markup).
                                              This is needed as we have to process x/y/dx/dy/rotate value lists of text/tspan/.. elements in logical order, not in visual
                                              order as the characters are presented on screen.
        (WebCore::SVGRootInlineBox::computePerCharacterLayoutInformation):
        (WebCore::SVGRootInlineBox::buildTextBoxListInLogicalOrder):
        (WebCore::SVGRootInlineBox::layoutCharactersInTextBoxes):
        * rendering/svg/SVGRootInlineBox.h:
        * rendering/svg/SVGTextChunk.cpp: Cleanup code, minimize SVGTextChunks memory consumption.
        (WebCore::SVGTextChunk::SVGTextChunk): A text chunk now know whether its base progress direction is left-to-right or right-to-left.
        (WebCore::SVGTextChunk::calculateLength):
        (WebCore::SVGTextChunk::calculateTextAnchorShift): Make text-anchor direction aware. text-anchor="start/end" meaning depends on the context (ltr vs. rtl).
        * rendering/svg/SVGTextChunk.h: Adapt code, merging three members into a bitfield.
        (WebCore::SVGTextChunk::isVerticalText):
        (WebCore::SVGTextChunk::hasDesiredTextLength):
        (WebCore::SVGTextChunk::hasTextAnchor):
        (WebCore::SVGTextChunk::hasLengthAdjustSpacing):
        (WebCore::SVGTextChunk::hasLengthAdjustSpacingAndGlyphs):
        * rendering/svg/SVGTextChunkBuilder.cpp: Adapt to SVGTextChunk code changes.
        (WebCore::SVGTextChunkBuilder::addTextChunk):
        (WebCore::SVGTextChunkBuilder::processTextChunk):
        * rendering/svg/SVGTextFragment.h: Add metricsListOffset, needed only while laying out text.
        (WebCore::SVGTextFragment::SVGTextFragment): Rename positionListOffset to characterOffset, as it describes an offset in the textRenderer->characters() array.
        * rendering/svg/SVGTextLayoutAttributesBuilder.cpp
        (WebCore::SVGTextLayoutAttributesBuilder::propagateLayoutAttributes): Fix measuring Arabic text in LTR/RTL modes. Assure that each SVGTextMetrics object
                                                                              that we cache, refers to the _rendered_ character. For Arabic text that means, that we're
                                                                              measuring the shaped width of the glyph, not the glyph in its isolated form. Without that
                                                                              fix reordering boxes containing Arabic is wrong.
        * rendering/svg/SVGTextLayoutEngine.cpp: SVGTextLayoutEngine is fed with text boxes to be laid out in _visual_ order, left-to-right, after the BiDi algorithm
                                                 has been applied by RenderBlockLineLayout to create the inline box tree. The coordinates lists x/y/dx/dy/rotate have
                                                 to be processed in _logical_ order. SVGRootInlineBox now passes a list of text boxes in logical order to SVGTextLayoutEngine,
                                                 to assure it grabs the coordinates from the correct InlineTextBox. See examples at the top of the ChangeLog.
        (WebCore::SVGTextLayoutEngine::SVGTextLayoutEngine):
        (WebCore::SVGTextLayoutEngine::recordTextFragment): No need to measure text here anymore, SVGTextLayoutAttributesBuilder now provides exact advances for each glyph.
                                                            The width of a SVGTextFragment is always equal to the sum of each glyph advance. (This was not the case for
                                                            Arabic until now.)
        (WebCore::SVGTextLayoutEngine::finalizeTransformMatrices):
        (WebCore::SVGTextLayoutEngine::nextLogicalBoxAndOffset): Computes the next logical box and the offset to the next coordinate value in its position list.
        (WebCore::SVGTextLayoutEngine::layoutTextOnLineOrPath):
        * rendering/svg/SVGTextLayoutEngine.h: Add CharacterRange helper struct.
        (WebCore::SVGTextLayoutEngine::CharacterRange::CharacterRange):
        * rendering/svg/SVGTextMetrics.cpp: Remove unused measureAllCharactersIndividually() method.
        (WebCore::constructTextRun): Pass direction and unicode-bidi="override" values to the TextRun, otherwhise LTR is always asumed.
        * rendering/svg/SVGTextMetrics.h:
        (WebCore::SVGTextMetrics::setWidth): Add private setter, only SVGTextLayoutAttributesBuilder is allowed to modify the metrics (to fix up glyph widths for Arabic).
        * rendering/svg/SVGTextQuery.cpp: s/fragment.positionListOffset/fragment.characterOffset/
        (WebCore::SVGTextQuery::subStringLengthCallback):
        (WebCore::SVGTextQuery::startPositionOfCharacterCallback):
        (WebCore::SVGTextQuery::endPositionOfCharacterCallback):
        (WebCore::calculateGlyphBoundaries):

2011-03-15  Sergio Villar Senin  <svillar@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Fix make distcheck for 1.3.13 release
        https://bugs.webkit.org/show_bug.cgi?id=56371

        No new tests as this is a build fix.

        * GNUmakefile.am: added a couple of missing files.

2011-03-08  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Ryosuke Niwa.

        Get rid of firstDeepEditingPositionForNode and lastDeepEditingPositionForNode
        https://bugs.webkit.org/show_bug.cgi?id=52642

        Replacing calls to first/lastDeepEditingPositionForNode with calls to their analogous
        functions that create new positions. Also fixing various parts of editing code that
        incorrectly handled the new positions now being created.

        No new tests as this is refactoring/cleanup.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::visiblePositionRange):
        * dom/Position.cpp:
        (WebCore::Position::parentAnchoredEquivalent):
        (WebCore::Position::previous):
        (WebCore::Position::next):
        (WebCore::Position::atFirstEditingPositionForNode):
        (WebCore::Position::atLastEditingPositionForNode):
        (WebCore::Position::upstream):
        (WebCore::Position::isCandidate):
        (WebCore::Position::getInlineBoxAndOffset):
        * dom/Position.h:
        (WebCore::operator==):
        * dom/PositionIterator.cpp:
        (WebCore::PositionIterator::operator Position):
        * editing/ApplyBlockElementCommand.cpp:
        (WebCore::ApplyBlockElementCommand::rangeForParagraphSplittingTextNodesIfNeeded):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::positionAvoidingSpecialElementBoundary):
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::isTableCellEmpty):
        (WebCore::DeleteSelectionCommand::removeNode):
        * editing/InsertLineBreakCommand.cpp:
        (WebCore::InsertLineBreakCommand::doApply):
        * editing/InsertListCommand.cpp:
        (WebCore::InsertListCommand::unlistifyParagraph):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::positionAtEndOfInsertedContent):
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::forwardDeleteKeyPressed):
        * editing/VisibleSelection.cpp:
        (WebCore::VisibleSelection::selectionFromContentsOfNode):
        (WebCore::VisibleSelection::adjustSelectionToAvoidCrossingEditingBoundaries):
        * editing/htmlediting.cpp:
        (WebCore::firstEditablePositionAfterPositionInRoot):
        (WebCore::lastEditablePositionBeforePositionInRoot):
        (WebCore::enclosingEmptyListItem):
        * editing/htmlediting.h:
        * editing/visible_units.cpp:
        (WebCore::startOfParagraph):
        (WebCore::endOfParagraph):
        (WebCore::startOfEditableContent):
        (WebCore::endOfEditableContent):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::positionForPoint):

2011-03-15  Beth Dakin  <bdakin@apple.com>

        Attempted build fix.

        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::cancelAnimations):

2011-03-15  David Hyatt  <hyatt@apple.com>

        Reviewed by Dave Levin.

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

        Fix FontCache problems on Linux.  Make sure not to mutate the platform data passed in to SimpleFontData's
        constructor.  Change this code to match Mac and to set the new m_hasVerticalGlyphs boolean instead of
        mutating orientation.

        * platform/graphics/chromium/SimpleFontDataLinux.cpp:
        (WebCore::SimpleFontData::platformInit):

2011-03-15  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Disable ShadowBlur shadow drawing in accelerated contexts
        https://bugs.webkit.org/show_bug.cgi?id=56392

        When drawing into a graphics context that is accelerated, don't use
        ShadowBlur, because it may be slower.
        
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::fillRoundedRect):
        (WebCore::GraphicsContext::fillRectWithRoundedHole):
        (WebCore::GraphicsContext::setIsCALayerContext):
        (WebCore::GraphicsContext::isCALayerContext):
        (WebCore::GraphicsContext::setIsAcceleratedContext):
        (WebCore::GraphicsContext::isAcceleratedContext):
        * platform/graphics/cg/GraphicsContextPlatformPrivateCG.h:
        (WebCore::GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate):
        * platform/graphics/mac/WebLayer.mm:
        (drawLayerContents):

2011-03-15  Beth Dakin  <bdakin@apple.com>

        Reviewed by Simon Fraser.

        Fix for <rdar://problem/9075624> Overlay scrollbars slow down PLT by 6%

        Tell the ScrollAnimator to cancelAnimations() since we are navigating to a new 
        page.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::transitionToCommitted):
        
        Scroll animations should be suspended if the FrameLoadState is anything but 
        complete.
        * page/FrameView.cpp:
        (WebCore::FrameView::shouldSuspendScrollAnimations):
        * page/FrameView.h:
        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::shouldSuspendScrollAnimations):
        * rendering/RenderDataGrid.cpp:
        (WebCore::RenderDataGrid::shouldSuspendScrollAnimations):
        * rendering/RenderDataGrid.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::shouldSuspendScrollAnimations):
        * rendering/RenderLayer.h:
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::shouldSuspendScrollAnimations):
        * rendering/RenderListBox.h:

        New virtual function cancelAnimations() is only needed on the Mac, so the base 
        class is empty.
        * platform/ScrollAnimator.h:
        (WebCore::ScrollAnimator::cancelAnimations):

        ScrollAnimatorMac needs to keep track of whether the page has been scrolled since 
        it started loading. If so, we will override optimizations that wait for the 
        FrameLoadState to be complete before animating scrollbars.
        * platform/mac/ScrollAnimatorMac.h:
        (WebCore::ScrollAnimatorMac::haveScrolledSincePageLoad):

        If the scrollbar animations should be suspended, we start a timer to make sure 
        that we do flash the scrollbars. Animating the scrollbars is expensive, so this is 
        both a performance optimization and a UI enhancement since the scrollbar won't 
        jump around nearly as much on a page load.
        * platform/mac/ScrollAnimatorMac.mm:
        (-[ScrollbarPainterDelegate cancelAnimations]):
        (-[ScrollbarPainterDelegate scrollerImp:animateKnobAlphaTo:duration:]):
        (-[ScrollbarPainterDelegate scrollerImp:animateTrackAlphaTo:duration:]):
        (-[ScrollbarPainterDelegate scrollerImp:overlayScrollerStateChangedTo:]):
        (WebCore::ScrollAnimatorMac::ScrollAnimatorMac):
        (WebCore::ScrollAnimatorMac::scroll):
        (WebCore::ScrollAnimatorMac::handleWheelEvent):
        (WebCore::ScrollAnimatorMac::cancelAnimations):
        (WebCore::ScrollAnimatorMac::smoothScrollWithEvent):
        (WebCore::ScrollAnimatorMac::beginScrollGesture):
        (WebCore::ScrollAnimatorMac::startScrollbarPaintTimer):
        (WebCore::ScrollAnimatorMac::scrollbarPaintTimerIsActive):
        (WebCore::ScrollAnimatorMac::stopScrollbarPaintTimer):
        (WebCore::ScrollAnimatorMac::initialScrollbarPaintTimerFired):

        New WebCoreSystemInterface function to force the scrollbars to flash
        * WebCore.exp.in:
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

2011-03-15  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Adam Barth.

        Remove stale comment at RenderStyle::diff.
        https://bugs.webkit.org/show_bug.cgi?id=56387

        * rendering/style/RenderStyle.cpp: Removed comment.

2011-03-15  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/56381> Objective-C classes should be typedef-ed as structs (not void*) in C++

        Reviewed by Simon Fraser.

        Typedef-ing Objective-C classes as void* for pure C++ makes it
        easier for bugs to creep in because compilers can't do any type
        checking for void pointers.

        * platform/graphics/GraphicsContext3D.h: Changed typedef
        declarations for CALayer and WebGLLayer from void* to structs.
        (WebCore::GraphicsContext3D::platformLayer): Changed
        static_cast<CALayer*> to reinterpret_cast<CALayer*> now that
        CALayer and WebGLLayer are not void pointers.
        * platform/graphics/GraphicsLayer.h: Changed typedef declaration
        for PlatformLayer from void* to struct CALayer.
        * platform/graphics/ca/PlatformCAAnimation.h: Changed typedef
        declaration for CAPropertyAnimation from void* to a struct.
        Extracted typdef for PlatformAnimationRef.

2011-03-15  Ilya Sherman  <isherman@chromium.org>

        Reviewed by Tony Chang.

        Autofilled form elements are assigned fixed background color but not text color
        https://bugs.webkit.org/show_bug.cgi?id=48382

        Test: fast/forms/input-autofilled.html

        * css/html.css:
        (input:-webkit-autofill): Added foreground color: #000000
        * css/wml.css:
        (input:-webkit-autofill): Added foreground color: #000000

2011-03-15  Alexis Menard  <alexis.menard@openbossa.org>

        Reviewed by Eric Carlson.

        HTMLMediaElement::mediaPlayerPlaybackStateChanged should not change the "public" state of the element
        if it's an internal pause for example.
        https://bugs.webkit.org/show_bug.cgi?id=56374

        In case of an internal pause, the callback from the mediaplayer should be ignored to avoid reflecting the
        change into the DOM.

        No new tests: Verified manually.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerPlaybackStateChanged):

2011-03-12  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: re-implement xhr breakpoints.
        https://bugs.webkit.org/show_bug.cgi?id=56252

        - restore xhr breakpoints one by one instead of using setAllBrowserBreakpoints
        - store xhr breakpoints in a separate setting
        - move presentation-related code from BreakpointManager to XHRBreakpointsSidebarPane

        Test: inspector/debugger/xhr-breakpoints.html

        * inspector/InspectorBrowserDebuggerAgent.cpp:
        (WebCore::InspectorBrowserDebuggerAgent::InspectorBrowserDebuggerAgent):
        (WebCore::InspectorBrowserDebuggerAgent::inspectedURLChanged):
        (WebCore::InspectorBrowserDebuggerAgent::restoreStickyBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::setXHRBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::removeXHRBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::willSendXMLHttpRequest):
        (WebCore::InspectorBrowserDebuggerAgent::clear):
        * inspector/InspectorBrowserDebuggerAgent.h:
        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager.prototype.setXHRBreakpoint):
        (WebInspector.BreakpointManager.prototype.removeXHRBreakpoint):
        (WebInspector.BreakpointManager.prototype.breakpointViewForEventData):
        (WebInspector.BreakpointManager.prototype._projectChanged):
        (WebInspector.BreakpointManager.prototype._validateBreakpoints):
        (WebInspector.BreakpointManager.prototype._createEventListenerBreakpointId):
        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.XHRBreakpointsSidebarPane):
        (WebInspector.XHRBreakpointsSidebarPane.prototype._addButtonClicked.finishEditing):
        (WebInspector.XHRBreakpointsSidebarPane.prototype._addButtonClicked):
        (WebInspector.XHRBreakpointsSidebarPane.prototype._setBreakpoint):
        (WebInspector.XHRBreakpointsSidebarPane.prototype._removeBreakpoint):
        (WebInspector.XHRBreakpointsSidebarPane.prototype._contextMenu.removeBreakpoint):
        (WebInspector.XHRBreakpointsSidebarPane.prototype._contextMenu):
        (WebInspector.XHRBreakpointsSidebarPane.prototype._checkboxClicked):
        (WebInspector.XHRBreakpointsSidebarPane.prototype._labelClicked.finishEditing):
        (WebInspector.XHRBreakpointsSidebarPane.prototype._labelClicked):
        (WebInspector.XHRBreakpointsSidebarPane.prototype.highlightBreakpoint):
        (WebInspector.XHRBreakpointsSidebarPane.prototype.clearBreakpointHighlight):
        (WebInspector.XHRBreakpointsSidebarPane.prototype._saveBreakpoints):
        (WebInspector.XHRBreakpointsSidebarPane.prototype._restoreBreakpoints):
        (WebInspector.XHRBreakpointsSidebarPane.prototype._projectChanged):
        * inspector/front-end/CallStackSidebarPane.js:
        (WebInspector.CallStackSidebarPane.prototype.update):
        (WebInspector.CallStackSidebarPane.prototype._xhrBreakpointHit):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype._debuggerPaused):
        (WebInspector.ScriptsPanel.prototype._clearInterface):
        * inspector/front-end/Settings.js:
        (WebInspector.Settings):
        * inspector/front-end/inspector.js:
        (WebInspector.resetFocusElement):
        (WebInspector.set attached):

2011-03-15  Kevin Ollivier  <kevino@theolliviers.com>

        Reviewed by Darin Adler.

        Introduce WTF_USE_EXPORT_MACROS, which will allow us to put shared library import/export
        info into the headers rather than in export symbol definition files, but disable it on 
        all platforms initially so we can deal with port build issues one port at a time.
        
        https://bugs.webkit.org/show_bug.cgi?id=27551

        * config.h:
        * platform/mac/LoggingMac.mm:

2011-03-15  Ilya Tikhonovsky  <loislo@chromium.org>

        Unreviewed build fix.

        Chromium: shared lib linux build are failing.

        Two exclude rules for LocalizedNumberNone and TextEncodingDetectorNone were added to the wrong library.
        It was webcore_remaining instead of webcore_platform.

        * WebCore.gyp/WebCore.gyp:

2011-03-15  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: expanding/collapsing object shouldn&apos;t affect outer console.group expansion state
        https://bugs.webkit.org/show_bug.cgi?id=56373

        * inspector/front-end/Section.js:
        (WebInspector.Section):
        (WebInspector.Section.prototype.toggleExpanded):
        (WebInspector.Section.prototype.handleClick): stop click even propagation if it was handled by this section.

2011-03-15  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: crash upon "//html//@id" search in elements panel.
        https://bugs.webkit.org/show_bug.cgi?id=56334

        * inspector/InspectorDOMAgent.cpp:
        * inspector/front-end/ElementsTreeOutline.js:

2011-03-15  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: further extension API cleanup (removed inspectedPage, add experimental prefix)
        https://bugs.webkit.org/show_bug.cgi?id=56327

        * inspector/front-end/ExtensionAPI.js:
        (WebInspector.injectedExtensionAPI):
        * inspector/front-end/ExtensionAPISchema.json:

2011-03-15  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: when console.groupEnd calls twice
        https://bugs.webkit.org/show_bug.cgi?id=56114

        Test: inspector/console/console-nested-group.html

        * inspector/ConsoleMessage.h:
        (WebCore::ConsoleMessage::type):
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::addConsoleMessage): do not coalesce adjacent EndGroup messages.

2011-03-15  Chris Mumford  <chris.mumford@palm.com>

        Reviewed by Adam Barth.

        Initializing several member variables that were not initialized in
        their constructors. These values were all read prior to initialization
        as reported by Valgrind.

        No new tests: No feature additions/removals.

        * accessibility/AccessibilityImageMapLink.cpp:
        (WebCore::AccessibilityImageMapLink::AccessibilityImageMapLink):
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::DeleteSelectionCommand):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::HTMLCanvasElement):
        * xml/XPathResult.cpp:
        (WebCore::XPathResult::XPathResult):

2011-03-15  Ben Taylor  <bentaylor.solx86@gmail.com>

        Reviewed by Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=56255
        Fix build on Solaris 10/Sun Studio 12 C++

        No new tests. This is to fix compilation on Solaris 10 with Sun Studio 12 C++

        * bridge/runtime_array.h:
        (JSC::RuntimeArray::getConcreteArray):

2011-03-14  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben

        about:blank fake responses don't get serialized when sent the UIProcess
        <rdar://problem/9108119>
        https://bugs.webkit.org/show_bug.cgi?id=56357

        Test: AboutBlankLoad

        * platform/network/cf/ResourceResponse.h:
        * platform/network/cf/ResourceResponseCFNet.cpp:
        (WebCore::ResourceResponse::cfURLResponse):
        Create a CFURLResponseRef if one does not exist yet as we do for
        NSURLResponses on the mac.

2011-03-14  Alexis Menard  <alexis.menard@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Seeking videos using the timeline bar does not work properly and stop the video playback.
        https://bugs.webkit.org/show_bug.cgi?id=56145

        We do not need seekTimeout and queuedSeekTimeout anymore. setPosition on QMediaPlayer is good enough.
        positionChanged() will be emitted when the data is buffered. On Linux the signal was not emitted because
        of a bug in QtMultimedia.

        * platform/graphics/qt/MediaPlayerPrivateQt.cpp:
        (WebCore::MediaPlayerPrivateQt::MediaPlayerPrivateQt):
        (WebCore::MediaPlayerPrivateQt::seek):
        (WebCore::MediaPlayerPrivateQt::stateChanged):
        (WebCore::MediaPlayerPrivateQt::positionChanged):
        * platform/graphics/qt/MediaPlayerPrivateQt.h:

2011-03-14  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=44138
        Crash beneath SocketStreamHandle::readStreamCallback when running websocket/tests/workers/worker-handshake-challenge-randomness.html

        https://bugs.webkit.org/show_bug.cgi?id=55375
        http/tests/websocket/tests/reload-crash.html sometimes crashes beneath SocketStreamHandle::readStreamCallback on Windows

        https://bugs.webkit.org/show_bug.cgi?id=56185
        http/tests/websocket/tests/url-with-credential.html sometimes crashes beneath SocketStreamHandle::readStreamCallback on Windows

        * platform/network/cf/SocketStreamHandle.h: Made SocketStreamHandle ThreadSafeShared, so that
        a pointer can be passed across threads when wrapped in a RefPtr.

        * platform/network/cf/SocketStreamHandleCFNet.cpp: Make sure that an object still exists
        when executing a method on main thread by using RefPtr.

2011-03-14  Sam Weinig  <sam@webkit.org>

        Mac build fix. Part 1 of N.

        * WebCore.exp.in:

2011-03-14  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Eric Carlson.

        Stalled media elements don't stop delaying the load event
        https://bugs.webkit.org/show_bug.cgi?id=56316

        We should stop delaying the load event when the load has
        stalled naturally, or if we require a user gesture to
        continue the load.

        Test: http/tests/media/video-play-stall-before-meta-data.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setNetworkState): when suspending, stop delaying.
        (WebCore::HTMLMediaElement::progressEventTimerFired): when stalling, stop delaying.

2011-03-13  MORITA Hajime  <morrita@google.com>

        Reviewed by Tony Chang.

        Crash when dragging and dropping in a document with an invalid XHTML header
        https://bugs.webkit.org/show_bug.cgi?id=48799

        DragController tried to dispatch textInput event even when the
        drag destination is not the editable area.
        This change skips the event dispatching on that case.
        
        Test: editing/pasteboard/drop-file-svg.html

        * page/DragController.cpp:
        (WebCore::DragController::dispatchTextInputEventFor):
        (WebCore::DragController::concludeEditDrag):

2011-03-14  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r81094.
        http://trac.webkit.org/changeset/81094
        https://bugs.webkit.org/show_bug.cgi?id=56355

        Broke the chromium DRT related build. (Requested by dave_levin
        on #webkit).

        * WebCore.exp.in:
        * WebCore.order:
        * page/Frame.cpp:
        (WebCore::Frame::layerTreeAsText):
        * page/Frame.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::layerTreeAsText):
        * rendering/RenderLayerCompositor.h:

2011-03-14  Adam Barth  <abarth@webkit.org>

        Apparently we need to exclude DefaultSharedWorkerRepository.cpp from
        the Chromium build, otherwise the objects visible in the global scope
        change.

        * WebCore.gyp/WebCore.gyp:

2011-03-14  Adam Barth  <abarth@webkit.org>

        Attempted Chromium build fix.  Exclude AllInOne harder.

        * WebCore.gyp/WebCore.gyp:

2011-03-14  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        EventHandler calls shouldChangeSelection needlessly
        https://bugs.webkit.org/show_bug.cgi?id=56324

        Extracted setSelectionIfNeeded and setNonDirectionalSelectionIfNeeded and
        avoided calling shouldChangeSelection and setSelection when the existing
        selection is identical to that of new selection.

        * page/EventHandler.cpp:
        (WebCore::setSelectionIfNeeded): Extracted.
        (WebCore::setNonDirectionalSelectionIfNeeded): Extracted.
        (WebCore::EventHandler::selectClosestWordFromMouseEvent): Calls a helper function above.
        (WebCore::EventHandler::selectClosestWordOrLinkFromMouseEvent): Ditto.
        (WebCore::EventHandler::handleMousePressEventTripleClick): Ditto.
        (WebCore::EventHandler::handleMousePressEventSingleClick): Ditto.
        (WebCore::EventHandler::updateSelectionForMouseDrag): Ditto.
        (WebCore::EventHandler::handleMouseReleaseEvent): Ditto.

2011-03-14  Daniel Sievers  <sievers@google.com>

        Reviewed by Simon Fraser.

        [Chromium] Make RenderAsTextBehavior and LayerTreeAsTextBehavior tweakable from the DumpRenderTree commandline
        https://bugs.webkit.org/show_bug.cgi?id=56139

        * WebCore.exp.in:
        * WebCore.order:
        * page/Frame.cpp:
        (WebCore::Frame::layerTreeAsText):
        * page/Frame.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::layerTreeAsText):
        * rendering/RenderLayerCompositor.h:

2011-03-14  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        Add remaining files to WebCore.gypi
        https://bugs.webkit.org/show_bug.cgi?id=56351

        Adding the remaining files to WebCore.gypi required updating the
        include/exclude lists in WebCore.gyp.  These lists aren't overly
        elegant, but we can try to improve them in the future.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * bindings/v8/ScriptCachedFrameData.cpp:
            - Added ifdefs to this file to match the header.
        * platform/graphics/WOFFFileFormat.cpp:
            - Fixed build error when compiling without ENABLE(OPENTYPE_SANITIZER).

2011-03-14  Anton Muhin  <antonm@chromium.org>

        Reviewed by Adam Barth.

        [v8] Rework object group building.
        https://bugs.webkit.org/show_bug.cgi?id=55399

        Instead of going top-down (from owner to owned elements), go up---from objects
        to their group ids.  That fits better to v8's object grouping model and guarantees
        that each wrapper belongs to the single group.

        Alas, this cannot be implemented for one kind of objects---CSSProperties.

        Part of core GC algorithm and tested extensively by exisiting layout tests.

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.cpp:
        * bindings/scripts/test/V8/V8TestObj.cpp:
        * bindings/v8/V8GCController.cpp:
        (WebCore::calculateGroupId):
        (WebCore::calculateRootStyleSheet):
        (WebCore::GrouperVisitor::visitDOMWrapper):
        (WebCore::GrouperVisitor::applyGrouping):
        (WebCore::V8GCController::gcPrologue):
        * bindings/v8/WrapperTypeInfo.h:
        (WebCore::WrapperTypeInfo::isSubclass):
        * css/CSSRuleList.h:
        (WebCore::CSSRuleList::styleList):
        * css/StyleSheetList.h:
        (WebCore::StyleSheetList::document):

2011-03-14  Kent Tamura  <tkent@chromium.org>

        Reviewed by James Robinson.

        Assertion failure by form validation message for <select required> with float:left
        https://bugs.webkit.org/show_bug.cgi?id=55995

        Test: fast/forms/interactive-validation-select-crash.html

        * rendering/RenderBlock.cpp:
        (WebCore::canMergeContiguousAnonymousBlocks):
          isAnonymousBlock() doesn't mean it is a RenderBlock. We need to check isRenderBlock().

2011-03-14  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Adam Roben.

        [Qt][WK2]Unbreak InjectedBundle on Qt
        https://bugs.webkit.org/show_bug.cgi?id=54109

        No code changes so no new tests.

        Revert the changes that were needed to use KURL
        in WebKitTestRunner.

        * Configurations/WebCore.xcconfig:
        * WebCore.exp.in:

2011-03-14  Jarkko Sakkinen  <jarkko.j.sakkinen@gmail.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Compilation fails with --3d-canvas 
        https://bugs.webkit.org/show_bug.cgi?id=55964

        * WebCore.pro:
        * platform/graphics/qt/Extensions3DQt.cpp:

2011-03-14  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben and Gavin Barraclough.

        FileSystemWin.cpp needs listDirectory() implementation
        https://bugs.webkit.org/show_bug.cgi?id=56331
        <rdar://problem/9126635>
        
        Move PathWalker from an inline class in WebKit2 to its own class in WebCore,
        so it can be used from both WebCore and WebKit2.
        
        Implement FileSystemWin::listDirectory using PathWalker to populate the Vector
        of paths matching the passed in pattern.

        * WebCore.vcproj/WebCore.vcproj:
        * platform/win/FileSystemWin.cpp:
        (WebCore::listDirectory): Call through to PathWalker.
        * platform/win/PathWalker.cpp: Added.
        (WebCore::PathWalker::PathWalker): Moved from WebKit2. Added a second argument
            for the pattern to pass to the Windows File APIs.
        (WebCore::PathWalker::~PathWalker): Moved from WebKit2.
        (WebCore::PathWalker::isValid): Ditto.
        (WebCore::PathWalker::data): Ditto.
        (WebCore::PathWalker::step): Ditto.
        * platform/win/PathWalker.h: Added.

2011-03-14  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=56320
        Remove HistoryItem::icon() and the WebCore dependency on "IconDatabaseBase::defaultIcon()"

        Remove HistoryItem::icon():
        * history/HistoryItem.cpp:
        * history/HistoryItem.h:
        * WebCore.exp.in:

        * loader/icon/IconDatabaseBase.h:
        (WebCore::IconDatabaseBase::defaultIcon):

2011-03-14  Andy Estes  <aestes@apple.com>

        Reviewed by Darin Adler.

        Timer-based events should inherit the user gesture state of their
        originating event in certain cases.
        https://bugs.webkit.org/show_bug.cgi?id=55104

        If a timer is installed by a gesture-originated event and will fire
        within one second, the timer-initiated event should behave as if it
        were also initiated by a user gesture. Multi-shot timers should only
        get this behavior on their first execution. Nested timers should not
        get this behavior. This makes us compatible with Gecko when handling
        popups and file chooser dialogs created from timer events.

        Test: fast/events/popup-blocking-timers.html

        * page/DOMTimer.cpp:
        (WebCore::timeoutId): Create a helper function so that m_timeoutId can
        be initialized in the data member initialization list.
        (WebCore::shouldForwardUserGesture): Ditto, but for
        m_shouldForwardUserGesture.
        (WebCore::DOMTimer::DOMTimer): Move initialization of data members from
        the ctor body to the data member initialization list. Also rename the
        argument 'timeout' to 'interval'.
        (WebCore::DOMTimer::fired): Create a UserGestureIndicator and set its
        state based on the value of m_shouldForwardUserGesture.
        (WebCore::DOMTimer::adjustMinimumTimerInterval): m_originalTimeout was
        renamed to m_originalInterval.
        * page/DOMTimer.h: Add m_shouldForwardUserGesture and rename
        m_originalTimeout to m_originalInterval.

2011-03-09  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Ryosuke Niwa.

        Deleting content directly following a button inserts an unnecessary placeholder
        https://bugs.webkit.org/show_bug.cgi?id=56053

        Fixing a use of Node's enclosingBlockFlowElement with enclosingBlock htmlediting's
        enclosingBlock, as enclosingBlockFlowElement would return inline-block elements despite
        DeleteSelectionCommand treating them as blockflow.

        Test: editing/deleting/delete-inserts-br-after-button.html

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::mergeParagraphs):

2011-03-14  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

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

        REGRESSION: <a><img align=top></a> Clickable area too large
        
        Make sure to clamp hit testing of quirky inline flow boxes the same way we already clamped
        painting.

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::nodeAtPoint):

2011-03-14  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Adam Roben.

        REGRESSION (r75138-r75503): Animations on Apple HTML5 Gallery demo are wrong
        https://bugs.webkit.org/show_bug.cgi?id=52845

        The lastCommitTime() value in CACFLayerTreeHost was returning as the time
        the render previous to this one happened. That often made it seem like
        animations started more in the past than they did, breaking many animations.
        The startAnimations() call actually fires from a CACF callback after all the
        WebKit content has been rendered. So sending currentTime as the start time
        to the animations is close enough for proper synchronization.

        * platform/graphics/ca/win/CACFLayerTreeHost.cpp:
        (WebCore::CACFLayerTreeHost::notifyAnimationsStarted):

2011-03-11  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Tony Chang.

        Selection uses first mousemove's localRect instead of that of mousedown
        https://bugs.webkit.org/show_bug.cgi?id=56213

        Fixed the bug by adding an extra call to updateSelectionForMouseDrag in handleMouseDraggedEvent
        using the mouse coordinates of the mousedown event that started the drag.

        Test: editing/selection/drag-select-rapidly.html

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

2011-03-14  Mark Rowe  <mrowe@apple.com>

        Reviewed by Timothy Hatcher.

        Apply a large, blunt object directly to the skull of the Leopard build.

        * Configurations/Base.xcconfig: Disable the generation of debugging symbols when
        building the Debug configuration on Leopard. This should cut the size of the object
        files that the linker needs to process by over 85%. This will hopefully allow them
        to fit in to the 32-bit address space of the Leopard linker.

2011-03-14  David Hyatt  <hyatt@apple.com>

        Reviewed by Beth Dakin.

        https://bugs.webkit.org/show_bug.cgi?id=56246
        
        Add support for relative positioning to table cells.   Back out the code that hacked around the lack of support
        for offsetLeft, and add new tests to demonstrate that relative positioning works.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::adjustRenderStyle):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::offsetParent):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isRelPositioned):
        * rendering/RenderTableCell.h:
        * rendering/style/RenderStyle.h:
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):
        * rendering/style/StyleRareNonInheritedData.h:

2011-03-14  David Hyatt  <hyatt@apple.com>

        Reviewed by Beth Dakin.

        Partial backout of https://bugs.webkit.org/show_bug.cgi?id=56230.  Go back to repainting the root
        layer, since first layouts and printing mess up otherwise.

        * page/FrameView.cpp:
        (WebCore::FrameView::layout):

2011-03-11  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser.

        Clean up full repainting of layers during layout and at other times.  Platforms that did not do an invalidation on
        size changes were incorrectly relying on the DoFullRepaint case of RenderLayer::updateLayerPositions to invalidate
        for them. However this code is now wrong, since it assumed that the outermost layer was a RenderView that encompassed
        all of the child layers.  This is no longer the case since the overflow changes that tightened up visual overflow
        and limited that overflow only to content that the layer painted.
        
        Eliminate the DoFullRepaint flag and actually make no repainting of any kind happen from the layer code if FrameView's
        m_doFullRepaint boolean is set.  This will flush out any ports that aren't just invalidating the world on their
        own in response to view resizes or fixed layout size changes and force them to fix things to be consistent with
        the other ports.
        
        Make the two dynamic calls to updateLayerPositions still do a full repaint by setting the repaint flag on the layer.
        I'm suspicious as to the correctness of the repainting in both of these cases (both before and after this patch),
        but the behavior should be the same.
        
        No new tests, since this is untestable on ports that invalidate on a resize.

        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::styleDidChange):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::RenderLayer::removeOnlyThisLayer):
        * rendering/RenderLayer.h:

2011-03-11  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Ensure all values are correctly tagged in the registerfile
        https://bugs.webkit.org/show_bug.cgi?id=56214

        Make sure everything builds still.

        * bridge/c/c_class.cpp:
        * bridge/c/c_runtime.cpp:
        * bridge/jni/JavaMethod.cpp:
        * plugins/PluginViewNone.cpp:

2011-03-14  Luiz Agostini  <luiz.agostini@openbossa.org>

        Unreviewed build fix for r81035.

        * html/HTMLDetailsElement.cpp:
        (WebCore::HTMLDetailsElement::defaultEventHandler):
        * rendering/RenderDetailsMarker.cpp:
        (WebCore::createDownArrowPath):
        (WebCore::createUpArrowPath):
        (WebCore::createLeftArrowPath):
        (WebCore::createRightArrowPath):

2011-03-13  Jer Noble  <jer.noble@apple.com>

        FullScreen: Handle entering full screen security restrictions
        https://bugs.webkit.org/show_bug.cgi?id=56264

        Tests: fullscreen/full-screen-iframe-allowed.html
               fullscreen/full-screen-iframe-not-allowed.html

        Disable full screen documents in the following conditions:
        1) requesting element is in an iframe which does not have a
        webkitallowfullscreen attribute.
        2) page is not processing a user gesture.

        * dom/Document.cpp:
        (WebCore::Document::fullScreenIsAllowedForElement): Added.  Checks
            to see if elements contained in IFRAMES are allowed to
            enter full screen.
        (WebCore::Document::webkitRequestFullScreenForElement): Checks
            if page is currently processing a user gesture.
        * dom/Document.h:
        * html/HTMLAttributeNames.in: Added webkitallowfullscreenAttr.
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::allowFullScreen): Added.
        * html/HTMLFrameElementBase.h:

2011-03-14  Anton D'Auria  <adauria@apple.com>

        Reviewed by David Levin.

        REGRESSION(r80892): Use of uninitialized variable "m_syncCloseDatabase" in StorageAreaSync::sync
        https://bugs.webkit.org/show_bug.cgi?id=56303

        Initialized m_syncCloseDatabase to false in the StorageAreaSync constructor.

        * storage/StorageAreaSync.cpp:
        (WebCore::StorageAreaSync::StorageAreaSync):

2011-03-14  Steve Block  <steveblock@google.com>

        Reviewed by Oliver Hunt.

        JavaMethod.cpp does not compile with V8
        https://bugs.webkit.org/show_bug.cgi?id=56306

        Moved the ScopeChain.h include to JavaStringJSC.

        No new tests, build fix only.

        * bridge/jni/JavaMethod.cpp:
        * bridge/jni/jsc/JavaStringJSC.h

2011-02-28  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Dave Hyatt.

        HTML5 <details> and <summary>: rendering
        https://bugs.webkit.org/show_bug.cgi?id=51071

        Tests: fast/html/details-add-summary-1-and-click.html
               fast/html/details-add-summary-1.html
               fast/html/details-add-summary-10-and-click.html
               fast/html/details-add-summary-10.html
               fast/html/details-add-summary-2-and-click.html
               fast/html/details-add-summary-2.html
               fast/html/details-add-summary-3-and-click.html
               fast/html/details-add-summary-3.html
               fast/html/details-add-summary-4-and-click.html
               fast/html/details-add-summary-4.html
               fast/html/details-add-summary-5-and-click.html
               fast/html/details-add-summary-5.html
               fast/html/details-add-summary-6-and-click.html
               fast/html/details-add-summary-6.html
               fast/html/details-add-summary-7-and-click.html
               fast/html/details-add-summary-7.html
               fast/html/details-add-summary-8-and-click.html
               fast/html/details-add-summary-8.html
               fast/html/details-add-summary-9-and-click.html
               fast/html/details-add-summary-9.html
               fast/html/details-mouse-click.html
               fast/html/details-no-summary1.html
               fast/html/details-no-summary2.html
               fast/html/details-no-summary3.html
               fast/html/details-no-summary4.html
               fast/html/details-open-javascript.html
               fast/html/details-open1.html
               fast/html/details-open2.html
               fast/html/details-open3.html
               fast/html/details-open4.html
               fast/html/details-open5.html
               fast/html/details-open6.html
               fast/html/details-position.html
               fast/html/details-remove-summary-1-and-click.html
               fast/html/details-remove-summary-1.html
               fast/html/details-remove-summary-2-and-click.html
               fast/html/details-remove-summary-2.html
               fast/html/details-remove-summary-3-and-click.html
               fast/html/details-remove-summary-3.html
               fast/html/details-remove-summary-4-and-click.html
               fast/html/details-remove-summary-4.html
               fast/html/details-remove-summary-5-and-click.html
               fast/html/details-remove-summary-5.html
               fast/html/details-remove-summary-6-and-click.html
               fast/html/details-remove-summary-6.html
               fast/html/details-writing-mode.html

        http://www.w3.org/TR/html5/interactive-elements.html#the-details-element

        The main <summary> element is the first <summary> element of a <details> element.
        All other childs of the <details> element are rendered only if the attribute 'open' is set.
        Click event toggles the 'open' attribute.

        * html/HTMLDetailsElement.cpp:
        (WebCore::HTMLDetailsElement::HTMLDetailsElement):
        (WebCore::HTMLDetailsElement::findMainSummary):
        (WebCore::HTMLDetailsElement::childrenChanged):
        (WebCore::HTMLDetailsElement::finishParsingChildren):
        (WebCore::HTMLDetailsElement::parseMappedAttribute):
        (WebCore::HTMLDetailsElement::childShouldCreateRenderer):
        (WebCore::HTMLDetailsElement::defaultEventHandler):
        * html/HTMLDetailsElement.h:
        (WebCore::HTMLDetailsElement::mainSummary):

        Method createRenderer added to class HTMLSummaryElement.

        * html/HTMLSummaryElement.cpp:
        (WebCore::HTMLSummaryElement::createRenderer):
        * html/HTMLSummaryElement.h:

        The first <summary> element is positioned at the top of its <details> parent.
        The area occupied by this main <summary> element is the interactive area of the
        <details> element. If the <details> tag has no <summary> child an OwnedSummaryRenderer
        is created and added to the corresponding RenderDetails object.

        * rendering/RenderDetails.cpp:
        (WebCore::RenderDetails::RenderDetails):
        (WebCore::RenderDetails::destroy):
        (WebCore::RenderDetails::summaryBlock):
        (WebCore::RenderDetails::contentBlock):
        (WebCore::RenderDetails::addChild):
        (WebCore::RenderDetails::removeChild):
        (WebCore::RenderDetails::setMarkerStyle):
        (WebCore::RenderDetails::styleDidChange):
        (WebCore::RenderDetails::getRenderPosition):
        (WebCore::RenderDetails::markerDestroyed):
        (WebCore::RenderDetails::summaryDestroyed):
        (WebCore::RenderDetails::moveSummaryToContents):
        (WebCore::RenderDetails::createSummaryStyle):
        (WebCore::RenderDetails::replaceMainSummary):
        (WebCore::RenderDetails::createDefaultSummary):
        (WebCore::RenderDetails::checkMainSummary):
        (WebCore::RenderDetails::layout):
        (WebCore::RenderDetails::isOpen):
        (WebCore::RenderDetails::getParentOfFirstLineBox):
        (WebCore::RenderDetails::firstNonMarkerChild):
        (WebCore::RenderDetails::updateMarkerLocation):
        * rendering/RenderDetails.h:
        (WebCore::RenderDetails::interactiveArea):
        (WebCore::RenderDetails::removeLeftoverAnonymousBlock):
        (WebCore::RenderDetails::createsAnonymousWrapper):
        (WebCore::RenderDetails::requiresForcedStyleRecalcPropagation):

        A marker is added to the main <summary> element to indicate the current value of the 'open'
        attribute of the <details> element.

        * rendering/RenderDetailsMarker.cpp:
        (WebCore::RenderDetailsMarker::RenderDetailsMarker):
        (WebCore::RenderDetailsMarker::destroy):
        (WebCore::RenderDetailsMarker::lineHeight):
        (WebCore::RenderDetailsMarker::baselinePosition):
        (WebCore::RenderDetailsMarker::computePreferredLogicalWidths):
        (WebCore::RenderDetailsMarker::layout):
        (WebCore::RenderDetailsMarker::getRelativeMarkerRect):
        (WebCore::RenderDetailsMarker::isOpen):
        (WebCore::createPath):
        (WebCore::createDownArrowPath):
        (WebCore::createUpArrowPath):
        (WebCore::createLeftArrowPath):
        (WebCore::createRightArrowPath):
        (WebCore::RenderDetailsMarker::orientation):
        (WebCore::RenderDetailsMarker::getCanonicalPath):
        (WebCore::RenderDetailsMarker::getPath):
        (WebCore::RenderDetailsMarker::paint):
        * rendering/RenderDetailsMarker.h:
        (WebCore::toRenderDetailsMarker):

        * rendering/RenderSummary.cpp:
        (WebCore::RenderSummary::RenderSummary):
        (WebCore::RenderSummary::destroy):
        (WebCore::RenderSummary::parentDetails):
        (WebCore::RenderSummary::styleDidChange):
        * rendering/RenderSummary.h:

        * rendering/RenderTreeAsText.cpp:
        (WebCore::RenderTreeAsText::writeRenderObject):

2011-03-14  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=56296
        Clean up IconDatabaseBase header.

        -Get rid of the "PlatformString.h" include and replace it with a forward declaration.
        -Group methods by which are used in WebCore directly and which are used in WebKit ports.

        This'll make it easier to use in external frameworks (like WebKit2).

        * loader/icon/IconDatabase.h:
        * loader/icon/IconDatabaseBase.h:
        (WebCore::IconDatabaseBase::retainIconForPageURL):
        (WebCore::IconDatabaseBase::releaseIconForPageURL):
        (WebCore::IconDatabaseBase::iconForPageURL):
        (WebCore::IconDatabaseBase::setIconURLForPageURL):
        (WebCore::IconDatabaseBase::setIconDataForIconURL):
        (WebCore::IconDatabaseBase::iconDataKnownForIconURL):
        (WebCore::IconDatabaseBase::loadDecisionForIconURL):
        (WebCore::IconDatabaseBase::importIconURLForPageURL):
        (WebCore::IconDatabaseBase::importIconDataForIconURL):
        (WebCore::IconDatabaseBase::open):

2011-03-14  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r81026.
        http://trac.webkit.org/changeset/81026
        https://bugs.webkit.org/show_bug.cgi?id=56313

        Breaks gtk 64-bit tests (Requested by podivilov on #webkit).

        * inspector/InspectorBrowserDebuggerAgent.cpp:
        (WebCore::InspectorBrowserDebuggerAgent::InspectorBrowserDebuggerAgent):
        (WebCore::InspectorBrowserDebuggerAgent::inspectedURLChanged):
        (WebCore::InspectorBrowserDebuggerAgent::restoreStickyBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::setXHRBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::removeXHRBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::willSendXMLHttpRequest):
        (WebCore::InspectorBrowserDebuggerAgent::clear):
        * inspector/InspectorBrowserDebuggerAgent.h:
        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager.prototype.createXHRBreakpoint):
        (WebInspector.BreakpointManager.prototype._createXHRBreakpoint):
        (WebInspector.BreakpointManager.prototype.breakpointViewForEventData):
        (WebInspector.BreakpointManager.prototype._projectChanged):
        (WebInspector.BreakpointManager.prototype._validateBreakpoints):
        (WebInspector.BreakpointManager.prototype._createEventListenerBreakpointId):
        (WebInspector.BreakpointManager.prototype._createXHRBreakpointId):
        (WebInspector.XHRBreakpoint):
        (WebInspector.XHRBreakpoint.prototype._enable):
        (WebInspector.XHRBreakpoint.prototype._disable):
        (WebInspector.XHRBreakpoint.prototype._serializeToJSON):
        (WebInspector.XHRBreakpointView):
        (WebInspector.XHRBreakpointView.prototype.compareTo):
        (WebInspector.XHRBreakpointView.prototype.populateEditElement):
        (WebInspector.XHRBreakpointView.prototype.populateLabelElement):
        (WebInspector.XHRBreakpointView.prototype.populateStatusMessageElement):
        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.XHRBreakpointsSidebarPane.addButtonClicked):
        (WebInspector.XHRBreakpointsSidebarPane):
        (WebInspector.XHRBreakpointsSidebarPane.prototype.addBreakpointItem):
        (WebInspector.XHRBreakpointsSidebarPane.prototype._startEditingBreakpoint):
        (WebInspector.XHRBreakpointsSidebarPane.prototype._hideEditBreakpointDialog):
        * inspector/front-end/CallStackSidebarPane.js:
        (WebInspector.CallStackSidebarPane.prototype.update):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype._debuggerPaused):
        (WebInspector.ScriptsPanel.prototype._clearInterface):
        * inspector/front-end/Settings.js:
        (WebInspector.Settings):
        * inspector/front-end/inspector.js:
        (WebInspector.resetFocusElement):
        (WebInspector.createXHRBreakpointsSidebarPane.breakpointAdded):
        (WebInspector.createXHRBreakpointsSidebarPane):
        (WebInspector.set attached):

2011-03-14  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Factor out binary search algo from the insertionIndexForObjectInListSortedByFunction function.
        https://bugs.webkit.org/show_bug.cgi?id=56312

        Test: inspector/utilities.html

        * inspector/front-end/utilities.js:

2011-03-12  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: re-implement xhr breakpoints.
        https://bugs.webkit.org/show_bug.cgi?id=56252

        - restore xhr breakpoints one by one instead of using setAllBrowserBreakpoints
        - store xhr breakpoints in a separate setting
        - move presentation-related code from BreakpointManager to XHRBreakpointsSidebarPane

        Test: inspector/debugger/xhr-breakpoints.html

        * inspector/InspectorBrowserDebuggerAgent.cpp:
        (WebCore::InspectorBrowserDebuggerAgent::InspectorBrowserDebuggerAgent):
        (WebCore::InspectorBrowserDebuggerAgent::inspectedURLChanged):
        (WebCore::InspectorBrowserDebuggerAgent::restoreStickyBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::setXHRBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::removeXHRBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::willSendXMLHttpRequest):
        (WebCore::InspectorBrowserDebuggerAgent::clear):
        * inspector/InspectorBrowserDebuggerAgent.h:
        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager.prototype.setXHRBreakpoint):
        (WebInspector.BreakpointManager.prototype.removeXHRBreakpoint):
        (WebInspector.BreakpointManager.prototype.breakpointViewForEventData):
        (WebInspector.BreakpointManager.prototype._projectChanged):
        (WebInspector.BreakpointManager.prototype._validateBreakpoints):
        (WebInspector.BreakpointManager.prototype._createEventListenerBreakpointId):
        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.XHRBreakpointsSidebarPane):
        (WebInspector.XHRBreakpointsSidebarPane.prototype._addButtonClicked.finishEditing):
        (WebInspector.XHRBreakpointsSidebarPane.prototype._addButtonClicked):
        (WebInspector.XHRBreakpointsSidebarPane.prototype._setBreakpoint):
        (WebInspector.XHRBreakpointsSidebarPane.prototype._removeBreakpoint):
        (WebInspector.XHRBreakpointsSidebarPane.prototype._contextMenu.removeBreakpoint):
        (WebInspector.XHRBreakpointsSidebarPane.prototype._contextMenu):
        (WebInspector.XHRBreakpointsSidebarPane.prototype._checkboxClicked):
        (WebInspector.XHRBreakpointsSidebarPane.prototype._labelClicked.finishEditing):
        (WebInspector.XHRBreakpointsSidebarPane.prototype._labelClicked):
        (WebInspector.XHRBreakpointsSidebarPane.prototype.highlightBreakpoint):
        (WebInspector.XHRBreakpointsSidebarPane.prototype.clearBreakpointHighlight):
        (WebInspector.XHRBreakpointsSidebarPane.prototype._saveBreakpoints):
        (WebInspector.XHRBreakpointsSidebarPane.prototype._restoreBreakpoints):
        (WebInspector.XHRBreakpointsSidebarPane.prototype._projectChanged):
        * inspector/front-end/CallStackSidebarPane.js:
        (WebInspector.CallStackSidebarPane.prototype.update):
        (WebInspector.CallStackSidebarPane.prototype._xhrBreakpointHit):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype._debuggerPaused):
        (WebInspector.ScriptsPanel.prototype._clearInterface):
        * inspector/front-end/Settings.js:
        (WebInspector.Settings):
        * inspector/front-end/inspector.js:
        (WebInspector.resetFocusElement):
        (WebInspector.set attached):

2011-03-14  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: move breakpoints restoring to debugger presentation model.
        https://bugs.webkit.org/show_bug.cgi?id=56123

        DebuggerModel's "breakpoint-added" and "breakpoint-removed" events are gone since
        setBreakpoint/removeBreakpoint are now called from DPM only.

        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::disable):
        (WebCore::InspectorDebuggerAgent::enableDebuggerAfterShown):
        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel.prototype.enableDebugger):
        (WebInspector.DebuggerModel.prototype._debuggerWasEnabled):
        (WebInspector.DebuggerModel.prototype._debuggerWasDisabled):
        (WebInspector.DebuggerModel.prototype.setBreakpoint.didSetBreakpoint):
        (WebInspector.DebuggerModel.prototype.setBreakpoint):
        (WebInspector.DebuggerModel.prototype.setBreakpointBySourceId):
        (WebInspector.DebuggerModel.prototype.removeBreakpoint):
        (WebInspector.DebuggerModel.prototype._breakpointResolved):
        (WebInspector.DebuggerModel.prototype.reset):
        (WebInspector.DebuggerDispatcher.prototype.debuggerWasEnabled):
        (WebInspector.DebuggerDispatcher.prototype.debuggerWasDisabled):
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel):
        (WebInspector.DebuggerPresentationModel.prototype._debuggerWasEnabled):
        (WebInspector.DebuggerPresentationModel.prototype._parsedScriptSource):
        (WebInspector.DebuggerPresentationModel.prototype._failedToParseScriptSource):
        (WebInspector.DebuggerPresentationModel.prototype._scriptSourceChanged):
        (WebInspector.DebuggerPresentationModel.prototype.breakpointsForSourceFileId):
        (WebInspector.DebuggerPresentationModel.prototype.setBreakpoint):
        (WebInspector.DebuggerPresentationModel.prototype.setBreakpointEnabled):
        (WebInspector.DebuggerPresentationModel.prototype.updateBreakpoint):
        (WebInspector.DebuggerPresentationModel.prototype.removeBreakpoint):
        (WebInspector.DebuggerPresentationModel.prototype.findBreakpoint):
        (WebInspector.DebuggerPresentationModel.prototype._breakpointAdded):
        (WebInspector.DebuggerPresentationModel.prototype._breakpointRemoved):
        (WebInspector.DebuggerPresentationModel.prototype._breakpointResolved):
        (WebInspector.DebuggerPresentationModel.prototype._restoreBreakpoints):
        (WebInspector.DebuggerPresentationModel.prototype._saveBreakpoints):
        (WebInspector.DebuggerPresentationModel.prototype.reset):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype._debuggerWasEnabled):
        (WebInspector.ScriptsPanel.prototype._debuggerWasDisabled):

2011-03-14  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r81015.
        http://trac.webkit.org/changeset/81015
        https://bugs.webkit.org/show_bug.cgi?id=56308

        A Similar patch landed in r76960 (Requested by philn-tp on
        #webkit).

        * GNUmakefile.am:

2011-03-14  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: don't use innerText, use textContent instead.
        https://bugs.webkit.org/show_bug.cgi?id=56307

        * inspector/front-end/AuditFormatters.js:
        (WebInspector.AuditFormatters.snippet):
        * inspector/front-end/ElementsTreeOutline.js:
        * inspector/front-end/GoToLineDialog.js:
        * inspector/front-end/HelpScreen.js:
        (WebInspector.HelpScreen):
        * inspector/front-end/ShortcutsHelp.js:
        (WebInspector.ShortcutsSection.prototype.renderSection):
        (WebInspector.ShortcutsSection.prototype._renderHeader):

2011-03-14  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Pavel Feldman.

        Web Inspector: [Text editor] Disable live-edit in favor of the text editor
        https://bugs.webkit.org/show_bug.cgi?id=56176

        * inspector/front-end/Settings.js:

2011-03-14  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Pavel Feldman.

        Web Inspector: [REGRESSION] scroll does not work in source frame when mouse is inside the gutter
        https://bugs.webkit.org/show_bug.cgi?id=56095

        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer):

2011-03-11  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: move breakpoints restoring after live edit to debugger presentation model.
        https://bugs.webkit.org/show_bug.cgi?id=56179

        Presentation model should move breakpoints based on text diff as required by "revert to revision" action in resources panel.

        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel):
        (WebInspector.DebuggerModel.prototype.setBreakpoint.didSetBreakpoint):
        (WebInspector.DebuggerModel.prototype.setBreakpoint):
        (WebInspector.DebuggerModel.prototype.reset):
        (WebInspector.DebuggerModel.prototype.editScriptSource.didEditScriptSource):
        (WebInspector.DebuggerModel.prototype.editScriptSource):
        (WebInspector.DebuggerModel.prototype.get callFrames):
        (WebInspector.DebuggerModel.prototype._pausedScript):
        (WebInspector.DebuggerModel.prototype._resumedScript):
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel):
        (WebInspector.DebuggerPresentationModel.prototype._scriptSourceChanged):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._scriptSourceChanged):

2011-03-10  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Optimize backend-frontend data transfer volume for CSS styles
        https://bugs.webkit.org/show_bug.cgi?id=56111

        This change reduces the getStylesForNode() payload more than twice for BODY elements.

        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyle::populateObjectWithStyleProperties):
        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSProperty.parsePayload):

2011-03-14  John Knottenbelt  <jknotten@chromium.org>

        Reviewed by Steve Block.

        Detach Geolocation from Frame when Page destroyed.
        https://bugs.webkit.org/show_bug.cgi?id=52877

        On Page destruction, any outstanding Geolocation permission
        requests should be cancelled, because the Geolocation can only
        access the client indirectly via m_frame->page().

        Page destruction is signalled by a call to the
        Frame::pageDestroyed() method. This explictly calls
        DOMWindow::resetGeolocation which ultimately calls Geolocation::reset.

        Geolocation::reset() detaches from the GeolocationController,
        cancels requests, watches and single shots, and sets the
        permission state back to Unknown.

        Frame::pageDestroyed() is also called by FrameLoader even though
        the page is not destroyed. We should still cancel permission
        requests, because the GeolocationClient will become inaccessible
        to the Geolocation object after this call.

        Frame::transferChildFrameToNewDocument also indirectly calls
        Geolocation::reset when the frame is reparented between
        pages. Ideally we would like the Geolocation's activities to
        continue after reparenting, see bug
        https://bugs.webkit.org/show_bug.cgi?id=55577

        Since GeolocationController is owned by Page, and all Geolocation
        objects will now unsubscribe from the GeolocationController on
        pageDetached(), we no longer need to call stopUpdating() from the
        GeolocationController's destructor. Instead we can simply assert
        that there should be no no observers. See related bug
        https://bugs.webkit.org/show_bug.cgi?id=52216 .

        Introduced new method 'numberOfPendingPermissionRequests' on
        GeolocationClientMock to count the number of outstanding pending
        permission requests. This provides a reusable implementation for
        client-based implementations of the LayoutTestController's
        numberOfPendingGeolocationPermissionRequests method.

        Test: fast/dom/Geolocation/page-reload-cancel-permission-requests.html

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::resetGeolocation):
        * page/DOMWindow.h:
        * page/Frame.cpp:
        (WebCore::Frame::pageDestroyed):
        (WebCore::Frame::transferChildFrameToNewDocument):
        * page/Geolocation.cpp:
        (WebCore::Geolocation::~Geolocation):
        (WebCore::Geolocation::page):
        (WebCore::Geolocation::reset):
        (WebCore::Geolocation::disconnectFrame):
        (WebCore::Geolocation::lastPosition):
        (WebCore::Geolocation::requestPermission):
        (WebCore::Geolocation::startUpdating):
        (WebCore::Geolocation::stopUpdating):
        * page/Geolocation.h:
        * page/GeolocationController.cpp:
        (WebCore::GeolocationController::~GeolocationController):
        * page/Navigator.cpp:
        (WebCore::Navigator::resetGeolocation):
        * page/Navigator.h:
        * platform/mock/GeolocationClientMock.cpp:
        (WebCore::GeolocationClientMock::numberOfPendingPermissionRequests):
        * platform/mock/GeolocationClientMock.h:

2011-03-14  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Pavel Feldman.

        Web Inspector: REGRESSION: Messed up with the tabIndex for text editor
        https://bugs.webkit.org/show_bug.cgi?id=56183

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._handleKeyDown):
        (WebInspector.SourceFrame.prototype._handleSave):
        (WebInspector.SourceFrame.prototype._handleRevertEditing):
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextEditorMainPanel):
        (WebInspector.TextEditorMainPanel.prototype.set readOnly):

2011-03-14  Chris Rogers  <crogers@google.com>

        Reviewed by Xan Lopez.

        Add all web audio auto-generated files to GTK make system
        https://bugs.webkit.org/show_bug.cgi?id=50497

        No new tests since these are build-system tweaks.

        * GNUmakefile.am:

2011-03-14  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: make DOMAgent event target, remove dependency from ElementsPanel.
        https://bugs.webkit.org/show_bug.cgi?id=56268

        * inspector/Inspector.idl:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::reset):
        (WebCore::InspectorDOMAgent::performSearch):
        (WebCore::InspectorDOMAgent::cancelSearch):
        (WebCore::InspectorDOMAgent::onMatchJobsTimer):
        (WebCore::InspectorDOMAgent::reportNodesAsSearchResults):
        * inspector/InspectorDOMAgent.h:
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMAgent.prototype.requestDocument.mycallback):
        (WebInspector.DOMAgent.prototype.requestDocument):
        (WebInspector.DOMAgent.prototype._attributesUpdated):
        (WebInspector.DOMAgent.prototype._characterDataModified):
        (WebInspector.DOMAgent.prototype._documentUpdated):
        (WebInspector.DOMAgent.prototype._setDocument):
        (WebInspector.DOMAgent.prototype._childNodeCountUpdated):
        (WebInspector.DOMAgent.prototype._childNodeInserted):
        (WebInspector.DOMAgent.prototype._childNodeRemoved):
        (WebInspector.DOMAgent.prototype._removeBreakpoints):
        (WebInspector.DOMAgent.prototype.performSearch):
        (WebInspector.DOMAgent.prototype.cancelSearch):
        (WebInspector.DOMDispatcher.prototype.searchResults):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel):
        (WebInspector.ElementsPanel.prototype._reset):
        (WebInspector.ElementsPanel.prototype._documentUpdated):
        (WebInspector.ElementsPanel.prototype.searchCanceled):
        (WebInspector.ElementsPanel.prototype.performSearch):
        (WebInspector.ElementsPanel.prototype._addNodesToSearchResult):
        (WebInspector.ElementsPanel.prototype._attributesUpdated):
        (WebInspector.ElementsPanel.prototype._characterDataModified):
        (WebInspector.ElementsPanel.prototype._nodeInserted):
        (WebInspector.ElementsPanel.prototype._nodeRemoved):
        (WebInspector.ElementsPanel.prototype._childNodeCountUpdated):
        (WebInspector.ElementsPanel.prototype.updateModifiedNodes):

2011-03-14  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: add tests for edit dom operations.
        https://bugs.webkit.org/show_bug.cgi?id=56248

        Test: inspector/elements/edit-dom-actions.html

        * inspector/Inspector.idl:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::assertNode):
        (WebCore::InspectorDOMAgent::assertElement):
        (WebCore::InspectorDOMAgent::assertHTMLElement):
        (WebCore::InspectorDOMAgent::nodeToSelectOn):
        (WebCore::InspectorDOMAgent::querySelector):
        (WebCore::InspectorDOMAgent::querySelectorAll):
        (WebCore::InspectorDOMAgent::setAttribute):
        (WebCore::InspectorDOMAgent::removeAttribute):
        (WebCore::InspectorDOMAgent::getOuterHTML):
        (WebCore::InspectorDOMAgent::setOuterHTML):
        * inspector/InspectorDOMAgent.h:
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMNode.prototype.setAttribute):
        (WebInspector.DOMNode.prototype.removeAttribute):
        * inspector/front-end/inspector.js:
        (WebInspector.startEditing.defaultFinishHandler):

2011-03-14  Brady Eidson  <beidson@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/8762095> and https://bugs.webkit.org/show_bug.cgi?id=55172
        Need WK2 API to view/manage origins with LocalStorage

        * storage/StorageTracker.cpp:
        (WebCore::StorageTracker::initializeTracker): Make sure the TextEncoding map is initialized on the main thread
          before the StorageTracker thread can do it on the background thread.

2011-03-13  Anton D'Auria  <adauria@apple.com>

        Reviewed by Brady Eidson and David Levin, landed by Brady Eidson.

        Fixed lock-taking order to prevent deadlock, added lock for m_client,
        removed premature return in syncImportOriginIdentifiers when tracker
        db does not exist because that prevented syncFileSystemAndTrackerDatabase()
        from running until next LocalStorage db creation, cleaned up
        StorageTracker::scheduleTask() code for readability.
        
        https://bugs.webkit.org/show_bug.cgi?id=56285
        
        * storage/StorageTracker.cpp:
        (WebCore::StorageTracker::trackerDatabasePath):
        (WebCore::StorageTracker::syncImportOriginIdentifiers): If tracker db isn't
        optionally opened (as in the case when it doesn't exist on disk), don't
        exit early and call syncFileSystemAndTrackerDatabase(), which will create
        a tracker db if localstorage db files are found on disk by calling setOriginDetails.
        (WebCore::StorageTracker::syncFileSystemAndTrackerDatabase):
        (WebCore::StorageTracker::setOriginDetails):
        (WebCore::StorageTracker::scheduleTask): readability changes.
        (WebCore::StorageTracker::syncSetOriginDetails):
        (WebCore::StorageTracker::syncDeleteAllOrigins):
        (WebCore::StorageTracker::syncDeleteOrigin):
        (WebCore::StorageTracker::cancelDeletingOrigin): order lock-taking consistently to avoid deadlock.
        (WebCore::StorageTracker::setClient):
        * storage/StorageTracker.h:

2011-03-13  Anton D'Auria  <adauria@apple.com>

        Reviewed and landed by Brady Eidson.

        Invalid assertion in StorageTracker - PageGroup::numberOfPageGroups() == 1
        https://bugs.webkit.org/show_bug.cgi?id=56240

        This assertion is invalid until LocalStorage is either global or is isolated by PageGroup.

        * storage/StorageTracker.cpp:
        (WebCore::StorageTracker::origins):
        (WebCore::StorageTracker::deleteAllOrigins):
        (WebCore::StorageTracker::deleteOrigin):

2011-03-13  Pratik Solanki  <psolanki@apple.com>

        Reviewed by Dan Bernstein.

        Make adjustMIMETypeIfNecessary use CFNetwork directly
        https://bugs.webkit.org/show_bug.cgi?id=55912

        Follow up fix for Layout Test failure. Fix typo - it should be text/plain, not test/plain.

        * platform/network/mac/WebCoreURLResponse.mm:
        (WebCore::adjustMIMETypeIfNecessary):

2011-03-13  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        Include hyphenation information in text representation of render tree
        https://bugs.webkit.org/show_bug.cgi?id=56287

        (WebCore::writeTextRun): If the text box is hyphenated, output the hyphenation
        string.

2011-03-13  David Levin  <levin@chromium.org>

        Improve my hasitly added build fix and added a bug https://bugs.webkit.org/show_bug.cgi?id=56288
        above addressing this FIXME.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):

2011-03-13  David Levin  <levin@chromium.org>

        Build fix adding remaining enum values to switch statement.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):

2011-03-13  Sam Weinig  <sam@webkit.org>

        Fix windows build.

        * platform/network/cf/ResourceErrorCF.cpp:
        (WebCore::ResourceError::ResourceError):
        Add missing constructor.

2011-03-13  David Sosby  <dsosby@rim.com>

        Reviewed by Dan Bernstein.

        REGRESSION: Soft hyphen is not always rendered
        https://bugs.webkit.org/show_bug.cgi?id=56017
        
        The check to flag a text block as hyphenated was only
        occurring at break points in the line. If no break points
        were found after the soft hyphen then the line would not
        be flagged hyphenated. Adding a check for soft hyphen at
        the end of the text run resolves the issue.

        Test: fast/text/soft-hyphen-4.html

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::findNextLineBreak):

2011-03-13  Dan Bernstein  <mitz@apple.com>

        Reviewed by Mark Rowe.

        REGRESSION (r80438): fast/text/hyphenate-character failing in pixel mode
        https://bugs.webkit.org/show_bug.cgi?id=56280

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::tryHyphenating): Avoid subtracting 1 from an unsigned 0.

2011-03-13  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add ability to create a WKErrorRef
        <rdar://problem/9115768>
        https://bugs.webkit.org/show_bug.cgi?id=56279

        * WebCore.exp.in:
        Add new exports.

        * platform/network/cf/ResourceError.h:
        * platform/network/cf/ResourceErrorCF.cpp:
        (WebCore::ResourceError::platformCompare):
        (WebCore::ResourceError::cfError):
        (WebCore::ResourceError::operator CFErrorRef):
        (WebCore::ResourceError::ResourceError):
        (WebCore::ResourceError::cfStreamError):
        (WebCore::ResourceError::operator CFStreamError):
        * platform/network/mac/ResourceErrorMac.mm:
        (WebCore::ResourceError::ResourceError):
        (WebCore::ResourceError::platformCompare):
        (WebCore::ResourceError::nsError):
        (WebCore::ResourceError::operator NSError *):
        (WebCore::ResourceError::cfError):
        (WebCore::ResourceError::operator CFErrorRef):
        Clean up ResourceError a bit and add ability to create a ResourceError from a CFErrorRef
        regardless of whether CFNetwork is being used.

2011-03-13  Pratik Solanki  <psolanki@apple.com>

        Reviewed by Brady Eidson.

        Make adjustMIMETypeIfNecessary use CFNetwork directly
        https://bugs.webkit.org/show_bug.cgi?id=55912

        Convert category method [NSURLResponse adjustMIMETypeIfNecessary] to C function
        WebCore::adjustMIMETypeIfNecessary() that takes a CFURLResponseRef and is functionally
        identical.

        Testing is covered by existing LayoutTests.

        * WebCore.exp.in:
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:
        * platform/network/mac/ResourceHandleMac.mm:
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveResponse:]):
        * platform/network/mac/WebCoreURLResponse.h:
        * platform/network/mac/WebCoreURLResponse.mm:
        (WebCore::createBinaryExtensionsSet):
        (WebCore::createExtensionToMIMETypeMap):
        (WebCore::mimeTypeFromUTITree):
        (WebCore::adjustMIMETypeIfNecessary):

2011-03-13  Jeremy Moskovich  <jeremy@chromium.org>

        Reviewed by Dimitri Glazkov.

        Update comment in CSSValueKeywords.in
        https://bugs.webkit.org/show_bug.cgi?id=56266

        The enums the comment refers to were moved from RenderStyle.h to RenderStyleConstants.h
        in r36579 but it appears that the comment in CSSValueKeywords.in wasn't updated.

        No tests - just updating a comment.

        * css/CSSValueKeywords.in:

2011-03-13  Anton D'Auria  <adauria@apple.com>

        Reviewed by Alice Liu.

        StorageTracker constructor shouldn't have initialization code and isMainThread() assertion
        https://bugs.webkit.org/show_bug.cgi?id=56259

        Move all StorageTracker initialization to
        StorageTracker::initializeTracker. This also removes the
        requirement that the StorageTracker constructor isn't run
        on the main thread.

        * storage/StorageTracker.cpp:
        (WebCore::StorageTracker::initializeTracker):
        (WebCore::StorageTracker::tracker):
        (WebCore::StorageTracker::StorageTracker):

2011-03-13  Rob Buis  <rwlbuis@gmail.com>

        Reviewed by Dave Hyatt.

        REGRESSION (r61383): Navigation menu laid out incorrectly on aboardtheworld.com
        https://bugs.webkit.org/show_bug.cgi?id=53470

        Prefer !important over normal properties when dealing with duplicate properties in style rules.

        Test: fast/css/duplicate-property-in-rule-important.html

        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::CSSMutableStyleDeclaration):

2011-03-12  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r80895.
        http://trac.webkit.org/changeset/80895
        https://bugs.webkit.org/show_bug.cgi?id=56261

        Causing crashes in several tests including
        t1202-counters-16-c.html (see
        http://build.webkit.org/results/SnowLeopard%20Intel%20Leaks/r80956%20(15528)/results.html)
        (Requested by dave_levin on #webkit).

        * rendering/CounterNode.cpp:
        (WebCore::CounterNode::CounterNode):
        (WebCore::CounterNode::create):
        (WebCore::CounterNode::resetRenderer):
        (WebCore::CounterNode::resetRenderers):
        (WebCore::CounterNode::recount):
        (WebCore::CounterNode::insertAfter):
        (WebCore::CounterNode::removeChild):
        (WebCore::showTreeAndMark):
        * rendering/CounterNode.h:
        (WebCore::CounterNode::renderer):
        * rendering/RenderCounter.cpp:
        (WebCore::findPlaceForCounter):
        (WebCore::RenderCounter::~RenderCounter):
        (WebCore::RenderCounter::originalText):
        (WebCore::RenderCounter::invalidate):
        (WebCore::destroyCounterNodeWithoutMapRemoval):
        (WebCore::RenderCounter::destroyCounterNodes):
        (WebCore::RenderCounter::destroyCounterNode):
        (WebCore::updateCounters):
        (showCounterRendererTree):
        * rendering/RenderCounter.h:
        * rendering/RenderObjectChildList.cpp:
        (WebCore::invalidateCountersInContainer):
        (WebCore::RenderObjectChildList::invalidateCounters):
        * rendering/RenderObjectChildList.h:

2011-03-12  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        REGRESSION (r76474): IntegerArray hash hashes only 1/4 of the array
        https://bugs.webkit.org/show_bug.cgi?id=56258

        No tests because the wrong hashing is mostly harmless. The only symptom
        we have seen is an occasional assertion in debug builds about the size
        not being a multiple of two. But a worse hash is worse for performance too.

        * platform/cf/BinaryPropertyList.cpp:
        (WebCore::IntegerArrayHash::hash): Pass in the size in bytes rather
        than the number of array entries.

2011-03-12  Cameron Zwarich  <zwarich@apple.com>

        Not reviewed.

        Fix the build with newer GCCs and remove some extra whitespae.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::uint8_t):

2011-03-12  Cameron Zwarich  <zwarich@apple.com>

        Rubber-stamped by Oliver Hunt.

        Removed unused ARMv5 code. The ARMv5 case now falls under the general
        unaligned accessed case.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneDeserializer::readLittleEndian):
        (WebCore::CloneDeserializer::readString):

2011-03-12  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Oliver Hunt.

        WebCore fails to build with Clang on ARM
        https://bugs.webkit.org/show_bug.cgi?id=56257

        Add an explicit instantiation of writeLittleEndian for uint8_t and move it to
        namespace scope, since explicit specializations are not allowed at class scope.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::writeLittleEndian):

2011-03-11  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Dragging image to desktop gives webloc instead of image file in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=56193

        * WebCore.exp.in: Added some additional exports. Re-sorted.

2011-03-12  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r80919.
        http://trac.webkit.org/changeset/80919
        https://bugs.webkit.org/show_bug.cgi?id=56251

        all windows bots failed to compile this change (Requested by
        loislo on #webkit).

        * bridge/c/c_class.cpp:
        * bridge/c/c_runtime.cpp:
        * bridge/jni/JavaMethod.cpp:
        * plugins/PluginViewNone.cpp:

2011-03-12  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed WinCE build fix for r80900.

        * CMakeListsWinCE.txt: Removed IconDatabaseNone.cpp.

2011-03-12  Andras Becsi  <abecsi@webkit.org>

        Unreviewed typo fix.

        No new tests needed.

        * WebCore.pro: Fix typo in header name.

2011-03-12  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: Inspect Element action regression fix.

        * inspector/front-end/inspector.js:
        (WebInspector.inspect):

2011-03-12  Ilya Tikhonovsky  <loislo@chromium.org>

        Unreviewed. One line fix for inspector/dom-breakpoints.html

        * inspector/front-end/BreakpointManager.js:
        (WebInspector.DOMBreakpointView.prototype.populateStatusMessageElement.decorateNode):

2011-03-12  Ilya Tikhonovsky  <loislo@chromium.org>

        Unreviewed build fix.

        Almost all inspector tests are crashing after r80928.

        * inspector/front-end/inspector.js:

2011-03-11  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: follow up to error reporting, fixing multiple regressions.
        https://bugs.webkit.org/show_bug.cgi?id=56243

        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::setPropertyValue):
        * inspector/InjectedScript.h:
        * inspector/Inspector.idl:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::getChildNodes):
        (WebCore::InspectorDOMAgent::getOuterHTML):
        (WebCore::InspectorDOMAgent::getEventListenersForNode):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorRuntimeAgent.cpp:
        (WebCore::InspectorRuntimeAgent::setPropertyValue):
        * inspector/InspectorRuntimeAgent.h:
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMNode.prototype.setNodeName):
        (WebInspector.DOMNode.prototype.setNodeValue):
        (WebInspector.DOMNode.prototype.getChildNodes):
        (WebInspector.DOMNode.prototype.getOuterHTML):
        (WebInspector.DOMNode.prototype.setOuterHTML):
        (WebInspector.DOMNode.prototype.removeNode):
        (WebInspector.DOMNode.prototype.copyNode):
        (WebInspector.DOMAgent.prototype.pushNodeToFrontend):
        (WebInspector.DOMAgent.prototype.pushNodeByPathToFrontend):
        (WebInspector.EventListeners.getEventListenersForNode):
        * inspector/front-end/DOMStorage.js:
        (WebInspector.DOMStorage.prototype.getEntries):
        (WebInspector.DOMStorage.prototype.setItem):
        (WebInspector.DOMStorage.prototype.removeItem):
        * inspector/front-end/DOMStorageItemsView.js:
        (WebInspector.DOMStorageItemsView.prototype.update):
        (WebInspector.DOMStorageItemsView.prototype._showDOMStorageEntries):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype._createTooltipForNode.setTooltip):
        (WebInspector.ElementsTreeElement.prototype.updateChildren):
        ():
        * inspector/front-end/EventListenersSidebarPane.js:
        (WebInspector.EventListenersSidebarPane.prototype.update.callback):
        (WebInspector.EventListenersSidebarPane.prototype.update):
        * inspector/front-end/ObjectPropertiesSection.js:
        (WebInspector.ObjectPropertyTreeElement.prototype.applyExpression.callback):
        (WebInspector.ObjectPropertyTreeElement.prototype.applyExpression):
        * inspector/front-end/PropertiesSidebarPane.js:
        (WebInspector.PropertiesSidebarPane.prototype.update.nodeResolved):
        * inspector/front-end/RemoteObject.js:
        (WebInspector.RemoteObject.prototype.setPropertyValue):
        (WebInspector.RemoteObject.prototype.evaluate):
        * inspector/front-end/inspector.js:

2011-03-12  Jer Noble  <jer.noble@apple.com>

        Unreviewed build fix.

        Fix GTK+ builds by wrapping sections of full screen code in USE(ACCELERATED_COMPOSITING)
        checks.

        * dom/Document.cpp:
        (WebCore::Document::webkitWillEnterFullScreenForElement):
        (WebCore::Document::webkitDidEnterFullScreenForElement):
        (WebCore::Document::webkitWillExitFullScreenForElement):
        (WebCore::Document::webkitDidExitFullScreenForElement):

2011-03-12  Ryuan Choi  <ryuan.choi@samsung.com>

        Unreviewed build fix.

        [EFL] Fix build break because of several reason.
        https://bugs.webkit.org/show_bug.cgi?id=56244

        * CMakeLists.txt: Add missing files.
        * platform/posix/FileSystemPOSIX.cpp: Add PLATFORM(EFL).

2011-03-11  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: move profiler related methods from inspector agent to profiler agent
        https://bugs.webkit.org/show_bug.cgi?id=56204

        * inspector/Inspector.idl:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        (WebCore::InspectorAgent::restoreInspectorStateFromCookie):
        (WebCore::InspectorAgent::setFrontend):
        (WebCore::InspectorAgent::disconnectFrontend):
        (WebCore::InspectorAgent::populateScriptObjects):
        (WebCore::InspectorAgent::showProfilesPanel):
        * inspector/InspectorAgent.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::enableProfiler):
        (WebCore::InspectorController::disableProfiler):
        (WebCore::InspectorController::profilerEnabled):
        (WebCore::InspectorController::startUserInitiatedProfiling):
        (WebCore::InspectorController::stopUserInitiatedProfiling):
        (WebCore::InspectorController::isRecordingUserInitiatedProfile):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::profilerEnabledImpl):
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::create):
        (WebCore::InspectorProfilerAgent::InspectorProfilerAgent):
        (WebCore::InspectorProfilerAgent::enable):
        (WebCore::InspectorProfilerAgent::disable):
        (WebCore::InspectorProfilerAgent::setFrontend):
        (WebCore::InspectorProfilerAgent::clearFrontend):
        (WebCore::InspectorProfilerAgent::restore):
        (WebCore::InspectorProfilerAgent::restoreEnablement):
        (WebCore::InspectorProfilerAgent::startUserInitiatedProfiling):
        (WebCore::InspectorProfilerAgent::stopUserInitiatedProfiling):
        * inspector/InspectorProfilerAgent.h:
        (WebCore::InspectorProfilerAgent::start):
        (WebCore::InspectorProfilerAgent::stop):
        * inspector/front-end/ProfileView.js:
        (WebInspector.CPUProfileType.prototype.buttonClicked):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel):
        (WebInspector.ProfilesPanel.prototype._registerProfileType):
        (WebInspector.ProfilesPanel.prototype._toggleProfiling):
        * inspector/front-end/inspector.js:
        (WebInspector._createPanels):

2011-03-11  Jer Noble  <jer.noble@apple.com>

        Reviewed by Anders Carlsson.

        WebCore::Document should notify ChromeClient when the full screen renderer's backing changes.
        https://bugs.webkit.org/show_bug.cgi?id=56226

        * dom/Document.cpp:
        (WebCore::Document::webkitWillEnterFullScreenForElement): Call setRootFullScreenLayer().
        (WebCore::Document::webkitDidEnterFullScreenForElement): Ditto.
        (WebCore::Document::webkitWillExitFullScreenForElement): Ditto.
        (WebCore::Document::webkitDidExitFullScreenForElement): Ditto.
        (WebCore::Document::setFullScreenRendererSize): Layout after setting the renderer's size.

2011-03-11  Jer Noble  <jer.noble@apple.com>

        Reviewed by Anders Carlsson.

        Create new interface stubs to support full screen mode in WebKit2.

        WebKit2: Plumb new full screen animation APIs through WebKit2.
        https://bugs.webkit.org/show_bug.cgi?id=55993

        * page/ChromeClient.h:
        (WebCore::ChromeClient::setRootFullScreenLayer): Added.

2011-03-11  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Ensure all values are correctly tagged in the registerfile
        https://bugs.webkit.org/show_bug.cgi?id=56214

        Make sure everything builds still.

        * bridge/c/c_class.cpp:
        * bridge/c/c_runtime.cpp:
        * bridge/jni/JavaMethod.cpp:
        * plugins/PluginViewNone.cpp:

2011-03-11  Mark Rowe  <mrowe@apple.com>

        Fix the 32-bit build.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::MediaPlayerPrivateAVFoundation):

2011-03-11  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Eric Carlsson.

        <rdar://problem/9124537> Crashes during layout tests due to overrelease of AVFoundation objects.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createContextVideoRenderer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setAsset):

2011-03-11  Chris Marrin  <cmarrin@apple.com>

        Unreviewed.

        Fixes an error with the checkin for https://bugs.webkit.org/show_bug.cgi?id=52468

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::createTransformAnimationsFromKeyframes):

2011-03-11  Brady Eidson  <beidson@apple.com>

        Attempted Qt build fix for https://bugs.webkit.org/show_bug.cgi?id=56216

        * loader/icon/IconDatabase.h: Make this guy public.

2011-03-11  Brady Eidson  <beidson@apple.com>

        Attempted Qt build fix for https://bugs.webkit.org/show_bug.cgi?id=56216

        * loader/icon/IconDatabase.h:
        (WebCore::IconDatabase::delayDatabaseCleanup): Maybe Qt has Icon Database disabled, so we need to define this here?

2011-03-11  Brady Eidson  <beidson@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=56216
        Fix the Qt build following the same pattern of the patch.

        * loader/icon/IconDatabase.h:
        * loader/icon/IconDatabaseBase.cpp:
        (WebCore::IconDatabaseBase::databasePath): Added to the virtual base.
        * loader/icon/IconDatabaseBase.h:
        (WebCore::IconDatabaseBase::isOpen): Ditto.

2011-03-11  Ben Taylor  <bentaylor.solx86@gmail.com>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=56198
        Fix conditional which had an int for one case and a pointer for another.

        No new tests. Fix compilation on Solaris 10 with SunStudio 12 C++

        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::checkIfLoadIsComplete):

2011-03-11  Brady Eidson  <beidson@apple.com>

        Windows build fix.

        * history/HistoryItem.cpp:
        * loader/icon/IconDatabaseBase.cpp:

2011-03-11  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/8648311> and https://bugs.webkit.org/show_bug.cgi?id=56216
        Rework disabled IconDatabase builds while allowing for a pluggable icon database implementation.

        Project file stuff:
        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCore.vcproj/WebCore.vcproj:

        * loader/icon/IconDatabase.cpp:
        * loader/icon/IconDatabase.h: Inherit from IconDatabaseBase.

        * loader/icon/IconDatabaseBase.cpp: Added.
        (WebCore::IconDatabaseBase::iconURLForPageURL):
        (WebCore::iconDatabase):
        (WebCore::setGlobalIconDatabase):
        * loader/icon/IconDatabaseBase.h: Added.
        (WebCore::IconDatabaseBase::IconDatabaseBase):
        (WebCore::IconDatabaseBase::~IconDatabaseBase):
        (WebCore::IconDatabaseBase::setEnabled):
        (WebCore::IconDatabaseBase::isEnabled):
        (WebCore::IconDatabaseBase::defaultIcon):
        (WebCore::IconDatabaseBase::retainIconForPageURL):
        (WebCore::IconDatabaseBase::releaseIconForPageURL):
        (WebCore::IconDatabaseBase::iconForPageURL):
        (WebCore::IconDatabaseBase::setIconURLForPageURL):
        (WebCore::IconDatabaseBase::setIconDataForIconURL):
        (WebCore::IconDatabaseBase::iconDataKnownForIconURL):
        (WebCore::IconDatabaseBase::loadDecisionForIconURL):
        (WebCore::IconDatabaseBase::pageURLMappingCount):
        (WebCore::IconDatabaseBase::retainedPageURLCount):
        (WebCore::IconDatabaseBase::iconRecordCount):
        (WebCore::IconDatabaseBase::iconRecordCountWithData):
        (WebCore::IconDatabaseBase::importIconURLForPageURL):
        (WebCore::IconDatabaseBase::importIconDataForIconURL):
        (WebCore::IconDatabaseBase::shouldStopThreadActivity):
        (WebCore::IconDatabaseBase::open):
        (WebCore::IconDatabaseBase::close):
        (WebCore::IconDatabaseBase::removeAllIcons):
        (WebCore::IconDatabaseBase::setPrivateBrowsingEnabled):
        (WebCore::IconDatabaseBase::setClient):

        * loader/icon/IconDatabaseNone.cpp: Removed.

2011-03-11  Brady Eidson  <beidson@apple.com>

        Attempt at a build-fix for https://bugs.webkit.org/show_bug.cgi?id=51878

        * page/PageGroup.h: Declare this method, even if the definition will end up being empty.

2011-03-11  Michael Nordman  <michaeln@google.com>

        Reviewed by Dmitry Titov.

        Adding the '~' to the dtor (duh).

        No new tests.

        * storage/SQLCallbackWrapper.h:
        (WebCore::SQLCallbackWrapper::~SQLCallbackWrapper):

2011-03-11  Carol Szabo  <carol.szabo@nokia.com>

        Reviewed by David Hyatt.

        Introduced double linkage between a CounterNode and its display renderer.

        use of freed pointer in WebCore::RenderCounter::originalText()
        https://bugs.webkit.org/show_bug.cgi?id=56065

        No new tests. This bug could only be reproduced manually by
        refreshing the page during load at a critical point.
        See bug attachment for testing.

        * rendering/CounterNode.cpp:
        Introduced new member "m_owner" to store the renderer that has the
        style directives that produce the CounterNode.
        Repurposed m_renderer to reffer to the RenderCounter that shows the
        CounterNode.
        (WebCore::CounterNode::CounterNode):
        Updated member initialization.
        (WebCore::CounterNode::create):
        (WebCore::CounterNode::resetRenderer):
        (WebCore::CounterNode::resetRenderers):
        (WebCore::CounterNode::recount):
        (WebCore::CounterNode::removeChild):
        (WebCore::CounterNode::insertAfter):
        No functional changes.
        (WebCore::showTreeAndMark):
        Added flushing to ensure that the output is complete.
        * rendering/CounterNode.h:
        (WebCore::CounterNode::owner):
        Renamed from renderer()
        (WebCore::CounterNode::renderer):
        (WebCore::CounterNode::setRenderer):
        Added new accessors for the display renderer.
        * rendering/RenderCounter.cpp:
        (WebCore::findPlaceForCounter):
        Fixed comments. No functional changes.
        (WebCore::RenderCounter::~RenderCounter):
        Made sure that the CounterNode that this renderers displays is
        detached from this.
        (WebCore::RenderCounter::originalText):
        (WebCore::RenderCounter::invalidate):
        Added code to update m_renderer on the displayed CounterNode.
        (WebCore::destroyCounterNodeWithoutMapRemoval):
        (WebCore::RenderCounter::destroyCounterNodes):
        (WebCore::RenderCounter::destroyCounterNode):
        (WebCore::updateCounters):
        No change, just kept code in line with the changes above.
        (showCounterRendererTree):
        Added fflush to ensure complete display.
        * rendering/RenderCounter.h:
        * rendering/RenderObjectChildList.cpp:
        * rendering/RenderObjectChildList.h:
        Removed unneeded invalidateCounters related functions.

2011-03-11  Luke Macpherson   <macpherson@chromium.org>

        Reviewed by Eric Seidel.

        Introduce lookup-table based approach for applying CSS properties.
        The aim is to be a starting point for refactoring
        CSSStyleSelector::applyProperty() into more readable, maintainable code.
        https://bugs.webkit.org/show_bug.cgi?id=54707

        No new behavior / covered by existing tests.

        * css/CSSStyleApplyProperty.cpp: Added.
        (WebCore::ApplyPropertyNull):
        Class that provides empty implementations of inherit, initial, value.
        (WebCore::ApplyPropertyDefault::ApplyPropertyDefault):
        Class that calls the appropriate RenderStyle setters directly.
        (WebCore::ApplyPropertyColorBase::ApplyPropertyColorBase):
        Class for handling CSSProperty*Color.
        (WebCore::ApplyPropertyColor::ApplyPropertyColor):
        Class for handling CSSPropertyColor.
        (WebCore::CSSStyleApplyProperty::sharedCSSStyleApplyProperty):
        Singleton initializer.
        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
        Constructor that bulds up the map from property id to apply-er objects.
        * css/CSSStyleApplyProperty.h: Added.
        (WebCore::CSSStyleApplyProperty::inherit):
        Handle the inherit case for a given property.
        (WebCore::CSSStyleApplyProperty::initial):
        Handle the initial case for a given property.
        (WebCore::CSSStyleApplyProperty::value):
        Apply a value to a given property.
        (WebCore::CSSStyleApplyProperty::implements):
        Returns true if the provided property id is implemented.
        (WebCore::CSSStyleApplyProperty::index):
        Private function to determine the index of a property the property map.
        (WebCore::CSSStyleApplyProperty::valid):
        Function to determine that a given property id is valid.
        (WebCore::CSSStyleApplyProperty::setPropertyValue):
        (WebCore::CSSStyleApplyProperty::propertyValue):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::CSSStyleSelector):
        Get reference to the CSSStyleApplyProperty singleton.
        (WebCore::CSSStyleSelector::applyProperty):
        Now calls into CSSStyleApplyProperty for implemented property ids.
        Deleted color-related methods from the property id switch.
        * css/CSSStyleSelector.h:
        (WebCore::CSSStyleSelector::style):
        Made public to allow access from CSSStyleApplyProperty.
        (WebCore::CSSStyleSelector::parentStyle):
        Made public to allow access from CSSStyleApplyProperty.
        * rendering/style/RenderStyle.h:
        Made CSSStyleApplyProperty a friend class. Necessary because it needs
        to access the private getters and setters on this clsass.

2011-03-11  Anton D'Auria  <adauria@apple.com>

        Reviewed and landed by Brady Eidson.

        Add WebKit1 API to view and delete local storage
        https://bugs.webkit.org/show_bug.cgi?id=51878

        Created StorageTracker as a central point for tracking and deleting LocalStorage per origin.
        StorageTracker maintains its own database of origin identifiers and backing db paths,
        and this allows it to contain more relational data in the future, like variable quotas per origin.

        On initialization, StorageTracker syncs its database with LocalStorage files on disk. It adds
        an origin entry when StorageAreaSync performs a first sync for an origin.

        All StorageTracker file operations are performed on one background thread with a task queue.

        Tests: storage/domstorage/localstorage/storagetracker/storage-tracker-1-prepare.html
               storage/domstorage/localstorage/storagetracker/storage-tracker-2-create.html
               storage/domstorage/localstorage/storagetracker/storage-tracker-3-delete-all.html
               storage/domstorage/localstorage/storagetracker/storage-tracker-4-create.html
               storage/domstorage/localstorage/storagetracker/storage-tracker-5-delete-one.html

        * GNUmakefile.am:
        * WebCore.exp.in:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * page/PageGroup.cpp:
        (WebCore::PageGroup::clearLocalStorageForAllOrigins):
        (WebCore::PageGroup::clearLocalStorageForOrigin):
        (WebCore::PageGroup::syncLocalStorage):
        (WebCore::PageGroup::numberOfPageGroups):
        * page/PageGroup.h:
        * platform/chromium/FileSystemChromium.cpp:
        (WebCore::listDirectory):
        * platform/posix/FileSystemPOSIX.cpp:
        (WebCore::listDirectory):
        * storage/LocalStorageTask.cpp:
        (WebCore::LocalStorageTask::LocalStorageTask):
        (WebCore::LocalStorageTask::performTask):
        * storage/LocalStorageTask.h:
        (WebCore::LocalStorageTask::createOriginIdentifiersImport):
        (WebCore::LocalStorageTask::createSetOriginDetails):
        (WebCore::LocalStorageTask::createDeleteOrigin):
        (WebCore::LocalStorageTask::createDeleteAllOrigins):
        * storage/StorageAreaImpl.cpp:
        (WebCore::StorageAreaImpl::clearForOriginDeletion):
        (WebCore::StorageAreaImpl::sync):
        * storage/StorageAreaImpl.h:
        * storage/StorageAreaSync.cpp:
        (WebCore::StorageAreaSync::scheduleCloseDatabase):
        (WebCore::StorageAreaSync::openDatabase):
        (WebCore::StorageAreaSync::sync):
        (WebCore::StorageAreaSync::deleteEmptyDatabase):
        (WebCore::StorageAreaSync::scheduleSync):
        * storage/StorageAreaSync.h:
        * storage/StorageNamespace.h:
        * storage/StorageNamespaceImpl.cpp:
        (WebCore::StorageNamespaceImpl::clearOriginForDeletion):
        (WebCore::StorageNamespaceImpl::clearAllOriginsForDeletion):
        (WebCore::StorageNamespaceImpl::sync):
        * storage/StorageNamespaceImpl.h:
        * storage/StorageTracker.cpp: Added.
        (WebCore::StorageTracker::initializeTracker):
        (WebCore::StorageTracker::tracker):
        (WebCore::StorageTracker::StorageTracker):
        (WebCore::StorageTracker::setStorageDirectoryPath):
        (WebCore::StorageTracker::trackerDatabasePath):
        (WebCore::StorageTracker::openTrackerDatabase):
        (WebCore::StorageTracker::importOriginIdentifiers):
        (WebCore::StorageTracker::syncImportOriginIdentifiers):
        (WebCore::StorageTracker::syncFileSystemAndTrackerDatabase):
        (WebCore::StorageTracker::setOriginDetails):
        (WebCore::StorageTracker::scheduleTask):
        (WebCore::StorageTracker::syncSetOriginDetails):
        (WebCore::StorageTracker::origins):
        (WebCore::StorageTracker::deleteAllOrigins):
        (WebCore::StorageTracker::syncDeleteAllOrigins):
        (WebCore::StorageTracker::deleteOrigin):
        (WebCore::StorageTracker::syncDeleteOrigin):
        (WebCore::StorageTracker::willDeleteAllOrigins):
        (WebCore::StorageTracker::willDeleteOrigin):
        (WebCore::StorageTracker::canDeleteOrigin):
        (WebCore::StorageTracker::cancelDeletingOrigin):
        (WebCore::StorageTracker::setClient):
        (WebCore::StorageTracker::syncLocalStorage):
        * storage/StorageTracker.h: Added.
        * storage/StorageTrackerClient.h: Added.
        (WebCore::StorageTrackerClient::~StorageTrackerClient):

2011-03-11  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        JavaMethod does not correctly check for a null jstring for the method name
        https://bugs.webkit.org/show_bug.cgi?id=56187

        No new tests, simple typo fix.

        * bridge/jni/JavaMethod.cpp:
        (JavaMethod::JavaMethod):

2011-03-11  Adrienne Walker  <enne@google.com>

        Reviewed by James Robinson.

        [chromium] Compositor uses too much texture memory for scrollbars
        https://bugs.webkit.org/show_bug.cgi?id=56212

        Compositor invalidations can be off the page (and very large), but
        scrollbars only need to care about the invalidation that's visible.
        The large invalidation was causing the tiler layer size to grow
        needlessly larger than the scrollbar.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::invalidateRootLayerRect):

2011-03-11  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=52987
        
        REGRESSION: Overflowing columns not repainted correctly
        
        Make sure to add in column overflow as visual overflow as well.  It was only propagating layout overflow, which is obviously not
        sufficient, since blocks paint their own columns.

        Added fast/multicol/scrolling-overflow.html

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

2011-03-11  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Simon Fraser.

        Set canvasUsesAcceleratedDrawing setting to be off(false) by default
        https://bugs.webkit.org/show_bug.cgi?id=56215

        No new tests. Does not affect behavior. Just keeping the setting off by default.

        * page/Settings.cpp:
        (WebCore::Settings::Settings):

2011-03-11  Andy Estes  <aestes@apple.com>

        Reviewed by David Hyatt.

        Table cells with dynamically added percentage height descendants do not
        grow in size if the table has already been laid out.
        https://bugs.webkit.org/show_bug.cgi?id=56174
        
        Table cells ignore their specified size and collapse to fit their
        children. When a descendent with percentage height is present before
        the table is first laid out, the descendent is sized based on the
        specified size of the table cell. However, when the child isn't present
        when the table is first laid out, the table cell ignores its specified
        size and collapses down to 0. Then, when the child div is added in a
        separate run loop iteration, it is sized to be 100% of the collapsed
        cell height instead of 100% of the cell's specified height. We should
        not get different layouts depending on the timing of tree construction.
        
        Fix this by clearing intrinsic padding before calculating the table
        cell's override height when we detect a child that should flex the
        table cell.

        Test: fast/table/dynamic-descendant-percentage-height.html

        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::setOverrideSizeFromRowHeight): clear
        intrinsic padding before setting the override size.
        * rendering/RenderTableCell.h:
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::layoutRows): Call
        setOverrideSizeFromRowHeight() instead of setOverrideSize().

2011-03-11  Michael Nordman  <michaeln@google.com>

        Reviewed by David Levin.

        Add SQLCallbackWrapper
        Instead of directly holding RefPtrs to the Callback objects in SQLStatement and SQLTransaction, hold a wrapper objects
        which holds those references whose dtors will schedule the release of those references on the ScriptExecution thread.
        https://bugs.webkit.org/show_bug.cgi?id=55919

        No new tests, existing tests apply.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * storage/SQLCallbackWrapper.h: Added.
        (WebCore::SQLCallbackWrapper::SQLCallbackWrapper):
        (WebCore::SQLCallbackWrapper::clear):
        (WebCore::SQLCallbackWrapper::unwrap):
        (WebCore::SQLCallbackWrapper::hasCallback):
        (WebCore::SQLCallbackWrapper::safeRelease):
        * storage/SQLStatement.cpp:
        (WebCore::SQLStatement::create):
        (WebCore::SQLStatement::SQLStatement):
        (WebCore::SQLStatement::performCallback):
        * storage/SQLStatement.h:
        (WebCore::SQLStatement::hasStatementCallback):
        (WebCore::SQLStatement::hasStatementErrorCallback):
        * storage/SQLTransaction.cpp:
        (WebCore::SQLTransaction::SQLTransaction):
        (WebCore::SQLTransaction::executeSQL):
        (WebCore::SQLTransaction::checkAndHandleClosedOrInterruptedDatabase):
        (WebCore::SQLTransaction::deliverTransactionCallback):
        (WebCore::SQLTransaction::deliverStatementCallback):
        (WebCore::SQLTransaction::postflightAndCommit):
        (WebCore::SQLTransaction::deliverSuccessCallback):
        (WebCore::SQLTransaction::handleTransactionError):
        (WebCore::SQLTransaction::deliverTransactionErrorCallback):
        * storage/SQLTransaction.h:

2011-03-11  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/8955589> Adopt AVFoundation media back end on Lion.

        No new tests, existing media tests cover this.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::installedMediaEngines): Register MediaPlayerPrivateAVFoundationObjC.
        (WebCore::bestMediaEngineForTypeAndCodecs): Kill some whitespace.
        (WebCore::MediaPlayer::loadWithNextMediaEngine): Ditto.
        (WebCore::MediaPlayer::inMediaDocument): Ditto.
        * platform/graphics/MediaPlayer.h:

        * platform/graphics/avfoundation: Added.
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp: Added.
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h: Added.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.h: Added.
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundationObjC.mm: Added.

2011-03-11  Dean Jackson  <dino@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=56205
        m_restrictions needs to allow multiple values (a bitfield)

        HTMLMediaElement::m_restrictions needs to hold multiple values, so
        change BehaviorRestrictions to an unsigned typedef and rename the
        existing enum BehaviorRestrictionFlags.

        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::setBehaviorRestrictions):

2011-03-11  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=47206
        
        Table rows don't support ::before/::after.  Add support to RenderTableRow::styleDidChange so that ::before/::after content gets
        properly constructed.

        Added fast/css-generated-content/table-row-before-after.html

        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::styleDidChange):
        * rendering/RenderTableRow.h:

2011-03-11  James Robinson  <jamesr@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] Avoid updating a composited layer&apos;s contents if the layer has nonpositive dimensions
        https://bugs.webkit.org/show_bug.cgi?id=56209

        This matches the behavior prior to r80482.  No test since the only changes in
        behavior are avoiding work on invisible layers, which is unobservable,
        and fixing a crash due to bug 56153.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::updateContentsRecursive):

2011-03-11  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=47159
        
        CSS2.1 failures in background position parsing.
        
        Rewrite background position component parsing to match the spec.  Our old parsing would allow "100% left" to be valid
        when it should not have.  Rename parseFillPositionXY to parseFillPositionComponent and pass in enough information for
        it to understand what the first component was.
        
        For individual property parsing using background-position-x/y, I added new functions that just handle that without
        worrying about the other component.
        
        In order to pass the CSS2.1 test, I also had to fix multiple background parsing.  The number of layers in multiple
        backgrounds is determined solely by the background-image property and not by any of the other properties.  cullEmptyLayers
        has been changed to always consider a layer empty if it has no image set, even if other properties are set.
        
        A number of layout tests had to be patched as they were invalid.  A couple of them relied on incorrect background-position
        parsing (e.g., "50 left") and another relied on incorrect multiple background parsing.  It's not clear if the computed style
        should actually include the additional values when no image is set though, so that should perhaps be the subject of a 
        follow-up bug.

        Added fast/backgrounds/background-position-parsing.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseFillPositionX):
        (WebCore::CSSParser::parseFillPositionY):
        (WebCore::CSSParser::parseFillPositionComponent):
        (WebCore::CSSParser::parseFillPosition):
        (WebCore::CSSParser::parseFillProperty):
        (WebCore::CSSParser::parseTransformOrigin):
        (WebCore::CSSParser::parsePerspectiveOrigin):
        * css/CSSParser.h:
        * rendering/style/FillLayer.cpp:
        (WebCore::FillLayer::fillUnsetProperties):
        (WebCore::FillLayer::cullEmptyLayers):

2011-03-11  Vangelis Kokkevis  <vangelis@chromium.org>

        Reviewed by James Robinson.

        [chromium] Allow large layers with non-identity transforms to be drawn
        as long as their visible portion is smaller than the largest supported
        texture size. This code will soon be replaced by tiled layers.
        https://bugs.webkit.org/show_bug.cgi?id=55984

        Test: platform/chromium/compositing/huge-layer-rotated.html

        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::updateContentsIfDirty):
        (WebCore::ContentLayerChromium::draw):
        * platform/graphics/chromium/ContentLayerChromium.h:

2011-03-09  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Adam Roben.

        REGRESSION (5.0.3-ToT): Scrolling text doesn&apos;t scroll in Star Wars intro animation
        https://bugs.webkit.org/show_bug.cgi?id=52468

        Added WIN32 to the ifdef controlling whether animations are applied in normal or
        reverse order. On Mac, animations used to be applied in reverse, but 
        <rdar://problem/7095638> fixed this in the release after Snow Leopard.
        But that patch has not be applied to the Safari Windows SDK yet. For now
        I've made Windows use the reverse order logig. <rdar://problem/9112233> is
        tracking the inclusion of the patch on Windows.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::createTransformAnimationsFromKeyframes):

2011-03-11  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Eric Seidel.

        Let the parser yield for layout before running scripts
        https://bugs.webkit.org/show_bug.cgi?id=54355

        Prior to this patch, the parser would yield to perform a layout/paint before running a
        script only if the script or a stylesheet blocking the script is not loaded yet. Since we
        don't preload scan into the body while parsing the head, typically we'll block on a script
        early in the body that causes us to yield to do the first paint within a reasonable time.

        However, I'm planning to change the PreloadScanner to scan into the body from the head.
        That significantly improves overall load time, but would hurt first paint time because
        fewer scripts would be blocked during parsing and thus wouldn't yield.

        This change causes us to yield before running scripts if we haven't painted yet (regardless
        of whether or not the script is loaded). In addition to allowing the above mentioned
        PreloadScanner change to be implemented without regressing first paint time, this also
        improves first paint time by itself.

        I tested Alexa's top 45 websites using Web Page Replay to control the content and simulate
        bandwidth. This patch improved average first paint time by 1% over an unlimited connection,
        6% over a 1Mbps connection and 11% over a 5Mbps connection. There was no statistically
        signifcant change in page load time.

        Within the pages tested, 33 had no statistically significant change in time to first paint,
        12 improved, and none regressed. Of the improved, some of the standouts from the 1Mbps set
        are: 20% on youtube, 37% on wiki, 27% on ebay, 13% on cnn, 16% on espn, 74% on sohu.

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::canTakeNextToken): This is the new yield point.
        (WebCore::HTMLDocumentParser::pumpTokenizer): Remove ASSERT that we are not paused. isPaused
        means that we are waiting for a script. Bug 54574 changed pumpTokenizer() so that it does
        the right thing whether we are just before a token or waiting for a script. Now that we may
        yield before a token or before a script, this may be called while paused.
        * html/parser/HTMLParserScheduler.cpp:
        (WebCore::HTMLParserScheduler::checkForYieldBeforeScript): Added.
        * page/FrameView.h:
        (WebCore::FrameView::hasEverPainted): Added.

2011-03-11  Dimitri Glazkov  <dglazkov@chromium.org>

        Fix crashes in dom/html/level2/html/HTMLInputElement*.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::adjustRenderStyle): Added a null-check for e,
            because e can certainly be a null.

2011-03-09  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by David Hyatt.

        Choke text-decoration when entering shadow DOM subtree.
        https://bugs.webkit.org/show_bug.cgi?id=56044

        No new tests, because the functionality can't be tested yet.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::adjustRenderStyle): Added a check for shadow DOM root.

2011-03-08  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Carlson.

        Convert MediaControlTimeDisplayElement to use standard layout with a custom renderer.
        https://bugs.webkit.org/show_bug.cgi?id=55972

        Instead of poking at the time display elements all the way from RenderMedia,
        let the standard layout cycle take care of things. Move the logic of calculating
        when to collapse the time display elements into a custom renderer, since
        this is not something that can be accomplished with CSS.

        Also, the logic of keeping the timeline slider at least 100px needed refreshing,
        since it didn't actually keep it at 100px.

        * html/shadow/MediaControls.cpp: Moved the logic of determining visibility
            of time display elements to RenderMediaControlTimeDisplay, eliminating
            updateTimeDisplayVisibility method.
        * html/shadow/MediaControls.h: Removed decl.
        * rendering/MediaControlElements.cpp:
        (WebCore::RenderMediaControlTimeDisplay::RenderMediaControlTimeDisplay):
            Added new renderer class.
        (WebCore::RenderMediaControlTimeDisplay::layout): Simplified (and corrected)
            size-sensing logic, still using hard-coded values.
        (WebCore::MediaControlTimeDisplayElement::MediaControlTimeDisplayElement):
            Removed m_isVisible member, which is no longer necessary.
        (WebCore::MediaControlTimeDisplayElement::createRenderer): Added to
            return the new renderer.
        * rendering/MediaControlElements.h: Adjusted decls.
        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::layout): Remove the now-unnecessary poking at
            media controls in layout.

2011-03-09  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Carlson.

        Start focusing updates to media controls, away from always updating everything.
        https://bugs.webkit.org/show_bug.cgi?id=56038

        For now, the new methods just call generic MediaControls::update.

        Covered by existing tests.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::attributeChanged): Changed to use MediaControls::reset.
        (WebCore::HTMLMediaElement::setMuted): Changed to use MediaControls::changedMute.
        (WebCore::HTMLMediaElement::updateVolume): Changed to use MediaControls::changedVolume.
        (WebCore::HTMLMediaElement::defaultEventHandler): Changed to use the new mediaControls
            accessor.
        (WebCore::HTMLMediaElement::setClosedCaptionsVisible): Changed to use
            MediaControls::changedClosedCaptionsVisibility.
        (WebCore::HTMLMediaElement::mediaControls): Added.
        (WebCore::HTMLMediaElement::hasMediaControls): Added.
        * html/HTMLMediaElement.h: Added decls.
        * html/shadow/MediaControls.cpp:
        (WebCore::MediaControls::reset): Added.
        (WebCore::MediaControls::changedMute): Added.
        (WebCore::MediaControls::changedVolume): Added.
        (WebCore::MediaControls::changedClosedCaptionsVisibility): Added.
        * html/shadow/MediaControls.h: Added decls.

2011-03-11  Alexis Menard  <alexis.menard@openbossa.org>

        Reviewed by Martin Robinson.

        [GStreamer] When seeking webKitWebSrcStop release the frame but should not.
        https://bugs.webkit.org/show_bug.cgi?id=55703

        When calling webKitWebSrcStop in case of a seeking, the frame should not
        be reset (the source hasn't change). The frame may be used to get the network
        context. Some network stack (like Qt) are relaying on the network context
        to work.

        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webKitWebSrcStop):

2011-03-11  Dean Jackson  <dino@apple.com>

        Unreviewed.

        Build fixes for GTK and Leopard.

        * bindings/gobject/GNUmakefile.am:
        - add missing WebKitAnimation* generated bindings
        * page/WebKitAnimation.idl:
        - use double in place of float (the core values are double anyway)

2011-03-11  Dean Jackson  <dino@apple.com>

        Unreviewed build fix for QT.

        * WebCore.pro:

2011-03-11  Dean Jackson  <dino@apple.com>

        Reviewed by Simon Fraser and Chris Marrin.

        https://bugs.webkit.org/show_bug.cgi?id=54151
        Implement an API to play/pause/scrub animations

        This is Part 1. Adds the new WebKitAnimation and WebKitAnimationList
        APIs, exposed via Element.getWebKitAnimations(). This first pass
        is a read-only API - a subsequent commit will add the ability
        to scrub animations.

        Test: animations/animation-api-1.html

        * Android.derived.jscbindings.mk:
        * Android.derived.v8bindings.mk:
        * Android.mk:
        * Android.v8bindings.mk:
        * CMakeLists.txt:
        * CodeGenerators.pri:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        - All build settings updated for new files
        * bindings/js/JSBindingsAllInOne.cpp:
        - Include new custom files
        * bindings/js/JSWebKitAnimationCustom.cpp: Added.
        (WebCore::JSWebKitAnimation::iterationCount):
        - Custom property getter so that we can return INFINITY
        * bindings/js/JSWebKitAnimationListCustom.cpp: Added.
        (WebCore::JSWebKitAnimationList::markChildren):
        - Make sure WebKitAnimations are marked
        * bindings/v8/custom/V8WebKitAnimationCustom.cpp: Added.
        (WebCore::V8WebkitAnimation::iterationCountAccessorGetter):
        - Custom property getter so that we can return INFINITY
        * dom/Element.cpp:
        (WebCore::Element::webkitGetAnimations):
        * dom/Element.h:
        * dom/Element.idl:
        - New API entry point
        * page/DOMWindow.idl:
        - Constructor definitions for WebKitAnimation and WebKitAnimationList
        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::~AnimationBase):
        - Since AnimationBase can now live longer (if a WebKitAnimation is
        held in Javascript) we need to guard for the renderer having disappeared.
        (WebCore::AnimationBase::setElapsedTime):
        (WebCore::AnimationBase::play):
        (WebCore::AnimationBase::pause):
        - Stub implementations at present
        * page/animation/AnimationBase.h:
        (WebCore::AnimationBase::animation):
        - Expose the Animation properties
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::animationsForRenderer):
        (WebCore::AnimationController::animationsForRenderer):
        - Builds the list of WebKitAnimations
        * page/animation/AnimationController.h:
        * page/animation/AnimationControllerPrivate.h:
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::updateKeyframeAnimations):
        - Make sure we clear the renderer if we are removing the animation
        (WebCore::CompositeAnimation::animations):
        * page/animation/CompositeAnimation.h:
        * page/WebKitAnimation.cpp: Added.
        (WebCore::WebKitAnimation::WebKitAnimation):
        (WebCore::WebKitAnimation::name):
        (WebCore::WebKitAnimation::duration):
        (WebCore::WebKitAnimation::elapsedTime):
        (WebCore::WebKitAnimation::setElapsedTime):
        (WebCore::WebKitAnimation::delay):
        (WebCore::WebKitAnimation::iterationCount):
        (WebCore::WebKitAnimation::paused):
        (WebCore::WebKitAnimation::ended):
        (WebCore::WebKitAnimation::direction):
        (WebCore::WebKitAnimation::fillMode):
        (WebCore::WebKitAnimation::pause):
        (WebCore::WebKitAnimation::play):
        - The implementation of the new API. All the read-only parts are
        done, but elapsedTime, play() and pause() are stubs.
        * page/WebKitAnimation.h: Added.
        (WebCore::WebKitAnimation::create):
        (WebCore::WebKitAnimation::~WebKitAnimation):
        * page/WebKitAnimation.idl: Added.
        * page/WebKitAnimationList.cpp: Added.
        * page/WebKitAnimationList.h: Added.
        * page/WebKitAnimationList.idl: Added.
        - Copies NodeList implementation

2011-03-11  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: introduce error argument for all the callbacks on frontend.
        https://bugs.webkit.org/show_bug.cgi?id=56100

        * inspector/CodeGeneratorInspector.pm:
        * inspector/front-end/AuditRules.js:
        (WebInspector.AuditRules.evaluateInTargetWindow):
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun.allStylesCallback):
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun):
        (WebInspector.AuditRules.ImageDimensionsRule.prototype.doRun.getStyles):
        (WebInspector.AuditRules.ImageDimensionsRule.prototype.doRun):
        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleModel.prototype.getStylesAsync):
        (WebInspector.CSSStyleModel.prototype.getComputedStyleAsync):
        (WebInspector.CSSStyleModel.prototype.getInlineStyleAsync):
        (WebInspector.CSSStyleModel.prototype.setRuleSelector):
        (WebInspector.CSSStyleModel.prototype.setRuleSelector.callback):
        (WebInspector.CSSStyleModel.prototype.addRule):
        (WebInspector.CSSStyleModel.prototype.addRule.callback):
        (WebInspector.CSSStyleModel.prototype._styleSheetChanged.callback):
        (WebInspector.CSSStyleModel.prototype._styleSheetChanged):
        (WebInspector.CSSStyleModel.prototype._onRevert):
        (WebInspector.CSSStyleDeclaration.prototype.insertPropertyAt):
        (WebInspector.CSSProperty.prototype.setText.callback):
        (WebInspector.CSSProperty.prototype.setText):
        (WebInspector.CSSProperty.prototype.setDisabled.callback):
        (WebInspector.CSSProperty.prototype.setDisabled):
        (WebInspector.CSSStyleSheet.createForId):
        (WebInspector.CSSStyleSheet.prototype.setText):
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.evalInInspectedWindow):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMNode.prototype.setNodeName):
        (WebInspector.DOMNode.prototype.setNodeValue):
        (WebInspector.DOMNode.prototype.setAttribute):
        (WebInspector.DOMNode.prototype.removeAttribute):
        (WebInspector.DOMNode.prototype.childNodes.mycallback):
        (WebInspector.DOMNode.prototype.childNodes):
        (WebInspector.DOMNode.prototype.outerHTML):
        (WebInspector.DOMNode.prototype.setOuterHTML):
        (WebInspector.DOMNode.prototype.removeNode):
        (WebInspector.DOMNode.prototype.copyNode):
        (WebInspector.DOMAgent.prototype.pushNodeToFrontend):
        (WebInspector.DOMAgent.prototype.pushNodeByPathToFrontend):
        (WebInspector.DOMAgent.prototype._documentUpdated):
        (WebInspector.ApplicationCacheDispatcher.getApplicationCachesAsync):
        (WebInspector.Cookies.getCookiesAsync):
        (WebInspector.EventListeners.getEventListenersForNodeAsync):
        * inspector/front-end/DOMStorage.js:
        (WebInspector.DOMStorage.prototype.getEntries):
        (WebInspector.DOMStorage.prototype.setItem):
        (WebInspector.DOMStorage.prototype.removeItem):
        * inspector/front-end/Database.js:
        (WebInspector.Database.prototype.getTableNames):
        (WebInspector.Database.prototype.executeSql):
        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel.prototype.setBreakpoint.didSetBreakpoint):
        (WebInspector.DebuggerModel.prototype.setBreakpoint):
        (WebInspector.DebuggerModel.prototype.setBreakpointBySourceId):
        (WebInspector.DebuggerModel.prototype.editScriptSource):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype._setSearchingForNode):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype._createTooltipForNode.resolvedNode):
        (WebInspector.ElementsTreeElement.prototype._createTooltipForNode):
        (WebInspector.ElementsTreeElement.prototype._tagNameEditingCommitted.changeTagNameCallback):
        (WebInspector.ElementsTreeElement.prototype._tagNameEditingCommitted):
        ():
        * inspector/front-end/ExtensionPanel.js:
        (WebInspector.ExtensionWatchSidebarPane.prototype._onEvaluate):
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype._onEvaluateOnInspectedPage):
        * inspector/front-end/NetworkManager.js:
        (WebInspector.NetworkManager.prototype.requestContent):
        (WebInspector.NetworkManager.prototype._processCachedResources):
        * inspector/front-end/ProfileView.js:
        (WebInspector.CPUProfileView.profileCallback):
        (WebInspector.CPUProfileView):
        * inspector/front-end/ProfilesPanel.js:
        * inspector/front-end/RemoteObject.js:
        (WebInspector.RemoteObject.resolveNode):
        (WebInspector.RemoteObject.prototype.getProperties.remoteObjectBinder):
        (WebInspector.RemoteObject.prototype.getProperties):
        (WebInspector.RemoteObject.prototype.setPropertyValue):
        (WebInspector.RemoteObject.prototype.evaluate):
        * inspector/front-end/Script.js:
        (WebInspector.Script.prototype.requestSource.didGetScriptSource):
        (WebInspector.Script.prototype.requestSource):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.evaluateInSelectedCallFrame.updatingCallbackWrapper):
        (WebInspector.ScriptsPanel.prototype.evaluateInSelectedCallFrame):
        (WebInspector.ScriptsPanel.prototype._setPauseOnExceptions):
        * inspector/front-end/inspector.js:
        ():
        (WebInspector.doLoadedDone.onPopulateScriptObjects):
        (WebInspector.doLoadedDone.propertyNamesCallback):
        (WebInspector.doLoadedDone):

2011-03-11  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: split InjectedScriptHost into InjectedScriptManager and InjectedScriptHost
        https://bugs.webkit.org/show_bug.cgi?id=56173

        Moved all injected script managing logic into InjectedScriptManager which is owned by InspectorController.

        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSInjectedScriptHostCustom.cpp:
        * bindings/js/JSInjectedScriptManager.cpp: Added.
        (WebCore::InjectedScriptManager::createInjectedScript):
        (WebCore::InjectedScriptManager::discardInjectedScript):
        (WebCore::InjectedScriptManager::injectedScriptFor):
        (WebCore::InjectedScriptManager::canAccessInspectedWindow):
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        * bindings/v8/custom/V8InjectedScriptManager.cpp: Copied from Source/WebCore/bindings/v8/custom/V8InjectedScriptHostCustom.cpp.
        (WebCore::WeakReferenceCallback):
        (WebCore::createInjectedScriptHostV8Wrapper):
        (WebCore::InjectedScriptManager::createInjectedScript):
        (WebCore::InjectedScriptManager::discardInjectedScript):
        (WebCore::InjectedScriptManager::injectedScriptFor):
        (WebCore::InjectedScriptManager::canAccessInspectedWindow):
        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::addToFrontend):
        * inspector/ConsoleMessage.h:
        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::canAccessInspectedWindow):
        * inspector/InjectedScript.h:
        * inspector/InjectedScriptHost.cpp:
        (WebCore::InjectedScriptHost::create):
        (WebCore::InjectedScriptHost::InjectedScriptHost):
        (WebCore::InjectedScriptHost::~InjectedScriptHost):
        (WebCore::InjectedScriptHost::disconnect):
        (WebCore::InjectedScriptHost::inspectImpl):
        (WebCore::InjectedScriptHost::clearConsoleMessages):
        (WebCore::InjectedScriptHost::databaseIdImpl):
        (WebCore::InjectedScriptHost::storageIdImpl):
        * inspector/InjectedScriptHost.h:
        (WebCore::InjectedScriptHost::init):
        (WebCore::InjectedScriptHost::setFrontend):
        (WebCore::InjectedScriptHost::clearFrontend):
        * inspector/InjectedScriptManager.cpp: Added.
        (WebCore::InjectedScriptManager::create):
        (WebCore::InjectedScriptManager::InjectedScriptManager):
        (WebCore::InjectedScriptManager::~InjectedScriptManager):
        (WebCore::InjectedScriptManager::disconnect):
        (WebCore::InjectedScriptManager::injectedScriptHost):
        (WebCore::InjectedScriptManager::injectedScriptForId):
        (WebCore::InjectedScriptManager::injectedScriptForObjectId):
        (WebCore::InjectedScriptManager::discardInjectedScripts):
        (WebCore::InjectedScriptManager::releaseObjectGroup):
        (WebCore::InjectedScriptManager::injectedScriptSource):
        (WebCore::InjectedScriptManager::injectScript):
        * inspector/InjectedScriptManager.h: Copied from Source/WebCore/inspector/InjectedScriptHost.h.
        * inspector/Inspector.idl:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        (WebCore::InspectorAgent::inspectedPageDestroyed):
        (WebCore::InspectorAgent::focusNode):
        (WebCore::InspectorAgent::didClearWindowObjectInWorld):
        (WebCore::InspectorAgent::createFrontendLifetimeAgents):
        (WebCore::InspectorAgent::didCommitLoad):
        (WebCore::InspectorAgent::domContentLoadedEventFired):
        * inspector/InspectorAgent.h:
        * inspector/InspectorBrowserDebuggerAgent.cpp:
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::InspectorConsoleAgent):
        (WebCore::InspectorConsoleAgent::~InspectorConsoleAgent):
        (WebCore::InspectorConsoleAgent::clearConsoleMessages):
        (WebCore::InspectorConsoleAgent::addInspectedNode):
        (WebCore::InspectorConsoleAgent::setConsoleMessagesEnabled):
        (WebCore::InspectorConsoleAgent::addConsoleMessage):
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::disconnectFrontend):
        * inspector/InspectorController.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::InspectorDOMAgent):
        (WebCore::InspectorDOMAgent::discardBindings):
        (WebCore::InspectorDOMAgent::pushNodeToFrontend):
        (WebCore::InspectorDOMAgent::resolveNode):
        * inspector/InspectorDOMAgent.h:
        (WebCore::InspectorDOMAgent::create):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::create):
        (WebCore::InspectorDebuggerAgent::InspectorDebuggerAgent):
        (WebCore::InspectorDebuggerAgent::evaluateOnCallFrame):
        (WebCore::InspectorDebuggerAgent::currentCallFrames):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorRuntimeAgent.cpp:
        (WebCore::InspectorRuntimeAgent::create):
        (WebCore::InspectorRuntimeAgent::InspectorRuntimeAgent):
        (WebCore::InspectorRuntimeAgent::~InspectorRuntimeAgent):
        (WebCore::InspectorRuntimeAgent::evaluate):
        (WebCore::InspectorRuntimeAgent::evaluateOn):
        (WebCore::InspectorRuntimeAgent::getProperties):
        (WebCore::InspectorRuntimeAgent::setPropertyValue):
        (WebCore::InspectorRuntimeAgent::releaseObject):
        (WebCore::InspectorRuntimeAgent::releaseObjectGroup):
        * inspector/InspectorRuntimeAgent.h:
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.this.treeOutline.focusedNodeChanged):
        (WebInspector.ElementsPanel):

2011-03-11  Anton Muhin  <antonm@chromium.org>

        Reviewed by Adam Barth.

        [v8] Change the way group id for CSS objects is calculated
        https://bugs.webkit.org/show_bug.cgi?id=56117

        Do not treat CSSStyleDeclarations under not CSSRule as belonging to the same object group
        as they should not be reachable in JavaScript.

        Covered by existing layout tests.  Fact of absence of retention is not trivial to prove.

        * bindings/v8/V8GCController.cpp:
        (WebCore::calculateGroupId):
        (WebCore::DOMObjectGrouperVisitor::visitDOMWrapper):

2011-03-11  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: hover over elements in Elements panel does not highlight nodes
        https://bugs.webkit.org/show_bug.cgi?id=56121

        In DOM trees with a comment and/or doctype preceding the HTML tag, the tree container right boundary
        is 16px apart from the OL right boundary, and we miss the relevant LI by 4px. The fix is to compensate
        for these 16px when computing the test point coordinates.

        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeOutline.prototype._treeElementFromEvent):

2011-03-11  Yury Semikhatsky  <yurys@chromium.org>

        Unreviewed. Roll out r80837.

        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::InjectedScriptHost::createInjectedScript):
        (WebCore::InjectedScriptHost::discardInjectedScript):
        (WebCore::InjectedScriptHost::injectedScriptFor):
        (WebCore::InjectedScriptHost::canAccessInspectedWindow):
        * bindings/js/JSInjectedScriptManager.cpp: Removed.
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::WeakReferenceCallback):
        (WebCore::createInjectedScriptHostV8Wrapper):
        (WebCore::InjectedScriptHost::createInjectedScript):
        (WebCore::InjectedScriptHost::discardInjectedScript):
        (WebCore::InjectedScriptHost::injectedScriptFor):
        (WebCore::InjectedScriptHost::canAccessInspectedWindow):
        * bindings/v8/custom/V8InjectedScriptManager.cpp: Removed.
        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::addToFrontend):
        * inspector/ConsoleMessage.h:
        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::canAccessInspectedWindow):
        * inspector/InjectedScript.h:
        * inspector/InjectedScriptHost.cpp:
        (WebCore::InjectedScriptHost::InjectedScriptHost):
        (WebCore::InjectedScriptHost::~InjectedScriptHost):
        (WebCore::InjectedScriptHost::inspectImpl):
        (WebCore::InjectedScriptHost::clearConsoleMessages):
        (WebCore::InjectedScriptHost::databaseIdImpl):
        (WebCore::InjectedScriptHost::storageIdImpl):
        (WebCore::InjectedScriptHost::injectedScriptForId):
        (WebCore::InjectedScriptHost::injectedScriptForObjectId):
        (WebCore::InjectedScriptHost::injectedScriptForMainFrame):
        (WebCore::InjectedScriptHost::discardInjectedScripts):
        (WebCore::InjectedScriptHost::releaseObjectGroup):
        (WebCore::InjectedScriptHost::frontend):
        (WebCore::InjectedScriptHost::injectedScriptSource):
        (WebCore::InjectedScriptHost::injectScript):
        * inspector/InjectedScriptHost.h:
        (WebCore::InjectedScriptHost::create):
        (WebCore::InjectedScriptHost::inspectorAgent):
        (WebCore::InjectedScriptHost::disconnectController):
        * inspector/InjectedScriptManager.cpp: Removed.
        * inspector/InjectedScriptManager.h: Removed.
        * inspector/Inspector.idl:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        (WebCore::InspectorAgent::inspectedPageDestroyed):
        (WebCore::InspectorAgent::focusNode):
        (WebCore::InspectorAgent::didClearWindowObjectInWorld):
        (WebCore::InspectorAgent::createFrontendLifetimeAgents):
        (WebCore::InspectorAgent::didCommitLoad):
        (WebCore::InspectorAgent::domContentLoadedEventFired):
        * inspector/InspectorAgent.h:
        (WebCore::InspectorAgent::injectedScriptHost):
        * inspector/InspectorBrowserDebuggerAgent.cpp:
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::InspectorConsoleAgent):
        (WebCore::InspectorConsoleAgent::~InspectorConsoleAgent):
        (WebCore::InspectorConsoleAgent::clearConsoleMessages):
        (WebCore::InspectorConsoleAgent::setConsoleMessagesEnabled):
        (WebCore::InspectorConsoleAgent::addConsoleMessage):
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::disconnectFrontend):
        * inspector/InspectorController.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::InspectorDOMAgent):
        (WebCore::InspectorDOMAgent::discardBindings):
        (WebCore::InspectorDOMAgent::addInspectedNode):
        (WebCore::InspectorDOMAgent::pushNodeToFrontend):
        (WebCore::InspectorDOMAgent::resolveNode):
        * inspector/InspectorDOMAgent.h:
        (WebCore::InspectorDOMAgent::create):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::create):
        (WebCore::InspectorDebuggerAgent::InspectorDebuggerAgent):
        (WebCore::InspectorDebuggerAgent::evaluateOnCallFrame):
        (WebCore::InspectorDebuggerAgent::currentCallFrames):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorRuntimeAgent.cpp:
        (WebCore::InspectorRuntimeAgent::InspectorRuntimeAgent):
        (WebCore::InspectorRuntimeAgent::~InspectorRuntimeAgent):
        (WebCore::InspectorRuntimeAgent::evaluate):
        (WebCore::InspectorRuntimeAgent::evaluateOn):
        (WebCore::InspectorRuntimeAgent::getProperties):
        (WebCore::InspectorRuntimeAgent::setPropertyValue):
        (WebCore::InspectorRuntimeAgent::releaseObject):
        (WebCore::InspectorRuntimeAgent::releaseObjectGroup):
        * inspector/InspectorRuntimeAgent.h:
        (WebCore::InspectorRuntimeAgent::create):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.this.treeOutline.focusedNodeChanged):
        (WebInspector.ElementsPanel):

2011-03-11  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: split InjectedScriptHost into InjectedScriptManager and InjectedScriptHost
        https://bugs.webkit.org/show_bug.cgi?id=56173

        Moved all injected script managing logic into InjectedScriptManager which is owned by InspectorController.

        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSInjectedScriptHostCustom.cpp:
        * bindings/js/JSInjectedScriptManager.cpp: Added.
        (WebCore::InjectedScriptManager::createInjectedScript):
        (WebCore::InjectedScriptManager::discardInjectedScript):
        (WebCore::InjectedScriptManager::injectedScriptFor):
        (WebCore::InjectedScriptManager::canAccessInspectedWindow):
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        * bindings/v8/custom/V8InjectedScriptManager.cpp: Copied from Source/WebCore/bindings/v8/custom/V8InjectedScriptHostCustom.cpp.
        (WebCore::WeakReferenceCallback):
        (WebCore::createInjectedScriptHostV8Wrapper):
        (WebCore::InjectedScriptManager::createInjectedScript):
        (WebCore::InjectedScriptManager::discardInjectedScript):
        (WebCore::InjectedScriptManager::injectedScriptFor):
        (WebCore::InjectedScriptManager::canAccessInspectedWindow):
        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::addToFrontend):
        * inspector/ConsoleMessage.h:
        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::canAccessInspectedWindow):
        * inspector/InjectedScript.h:
        * inspector/InjectedScriptHost.cpp:
        (WebCore::InjectedScriptHost::create):
        (WebCore::InjectedScriptHost::InjectedScriptHost):
        (WebCore::InjectedScriptHost::~InjectedScriptHost):
        (WebCore::InjectedScriptHost::disconnect):
        (WebCore::InjectedScriptHost::inspectImpl):
        (WebCore::InjectedScriptHost::clearConsoleMessages):
        (WebCore::InjectedScriptHost::databaseIdImpl):
        (WebCore::InjectedScriptHost::storageIdImpl):
        * inspector/InjectedScriptHost.h:
        (WebCore::InjectedScriptHost::init):
        (WebCore::InjectedScriptHost::setFrontend):
        (WebCore::InjectedScriptHost::clearFrontend):
        * inspector/InjectedScriptManager.cpp: Added.
        (WebCore::InjectedScriptManager::create):
        (WebCore::InjectedScriptManager::InjectedScriptManager):
        (WebCore::InjectedScriptManager::~InjectedScriptManager):
        (WebCore::InjectedScriptManager::disconnect):
        (WebCore::InjectedScriptManager::injectedScriptHost):
        (WebCore::InjectedScriptManager::injectedScriptForId):
        (WebCore::InjectedScriptManager::injectedScriptForObjectId):
        (WebCore::InjectedScriptManager::discardInjectedScripts):
        (WebCore::InjectedScriptManager::releaseObjectGroup):
        (WebCore::InjectedScriptManager::injectedScriptSource):
        (WebCore::InjectedScriptManager::injectScript):
        * inspector/InjectedScriptManager.h: Copied from Source/WebCore/inspector/InjectedScriptHost.h.
        * inspector/Inspector.idl:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        (WebCore::InspectorAgent::inspectedPageDestroyed):
        (WebCore::InspectorAgent::focusNode):
        (WebCore::InspectorAgent::didClearWindowObjectInWorld):
        (WebCore::InspectorAgent::createFrontendLifetimeAgents):
        (WebCore::InspectorAgent::didCommitLoad):
        (WebCore::InspectorAgent::domContentLoadedEventFired):
        * inspector/InspectorAgent.h:
        * inspector/InspectorBrowserDebuggerAgent.cpp:
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::InspectorConsoleAgent):
        (WebCore::InspectorConsoleAgent::~InspectorConsoleAgent):
        (WebCore::InspectorConsoleAgent::clearConsoleMessages):
        (WebCore::InspectorConsoleAgent::addInspectedNode):
        (WebCore::InspectorConsoleAgent::setConsoleMessagesEnabled):
        (WebCore::InspectorConsoleAgent::addConsoleMessage):
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::disconnectFrontend):
        * inspector/InspectorController.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::InspectorDOMAgent):
        (WebCore::InspectorDOMAgent::discardBindings):
        (WebCore::InspectorDOMAgent::pushNodeToFrontend):
        (WebCore::InspectorDOMAgent::resolveNode):
        * inspector/InspectorDOMAgent.h:
        (WebCore::InspectorDOMAgent::create):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::create):
        (WebCore::InspectorDebuggerAgent::InspectorDebuggerAgent):
        (WebCore::InspectorDebuggerAgent::evaluateOnCallFrame):
        (WebCore::InspectorDebuggerAgent::currentCallFrames):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorRuntimeAgent.cpp:
        (WebCore::InspectorRuntimeAgent::create):
        (WebCore::InspectorRuntimeAgent::InspectorRuntimeAgent):
        (WebCore::InspectorRuntimeAgent::~InspectorRuntimeAgent):
        (WebCore::InspectorRuntimeAgent::evaluate):
        (WebCore::InspectorRuntimeAgent::evaluateOn):
        (WebCore::InspectorRuntimeAgent::getProperties):
        (WebCore::InspectorRuntimeAgent::setPropertyValue):
        (WebCore::InspectorRuntimeAgent::releaseObject):
        (WebCore::InspectorRuntimeAgent::releaseObjectGroup):
        * inspector/InspectorRuntimeAgent.h:
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.this.treeOutline.focusedNodeChanged):
        (WebInspector.ElementsPanel):

2011-03-09  Hans Wennborg  <hans@chromium.org>

        Reviewed by Jeremy Orlow.

        IndexedDB: Make IDBBackingStore abstract
        https://bugs.webkit.org/show_bug.cgi?id=56013

        Make IDBBackingStore abstract to allow for multiple implementations.
        Move the SQLite implementation to IDBSQLiteBackingStore.

        No new tests: refactoring only.

        * WebCore.gypi:
        * storage/IDBBackingStore.h:
        (WebCore::IDBBackingStore::~IDBBackingStore):
        * storage/IDBFactoryBackendImpl.cpp:
        (WebCore::IDBFactoryBackendImpl::open):
        * storage/IDBSQLiteBackingStore.cpp:
        (WebCore::IDBSQLiteBackingStore::IDBSQLiteBackingStore):
        (WebCore::IDBSQLiteBackingStore::~IDBSQLiteBackingStore):
        (WebCore::runCommands):
        (WebCore::createTables):
        (WebCore::createMetaDataTable):
        (WebCore::getDatabaseSchemaVersion):
        (WebCore::migrateDatabase):
        (WebCore::IDBSQLiteBackingStore::open):
        (WebCore::IDBSQLiteBackingStore::extractIDBDatabaseMetaData):
        (WebCore::IDBSQLiteBackingStore::setIDBDatabaseMetaData):
        (WebCore::IDBSQLiteBackingStore::getObjectStores):
        (WebCore::IDBSQLiteBackingStore::createObjectStore):
        (WebCore::doDelete):
        (WebCore::IDBSQLiteBackingStore::deleteObjectStore):
        (WebCore::whereSyntaxForKey):
        (WebCore::bindKeyToQuery):
        (WebCore::lowerCursorWhereFragment):
        (WebCore::upperCursorWhereFragment):
        (WebCore::IDBSQLiteBackingStore::getObjectStoreRecord):
        (WebCore::bindKeyToQueryWithNulls):
        (WebCore::IDBSQLiteBackingStore::putObjectStoreRecord):
        (WebCore::IDBSQLiteBackingStore::clearObjectStore):
        (WebCore::IDBSQLiteBackingStore::deleteObjectStoreRecord):
        (WebCore::IDBSQLiteBackingStore::nextAutoIncrementNumber):
        (WebCore::IDBSQLiteBackingStore::keyExistsInObjectStore):
        (WebCore::IDBSQLiteBackingStore::forEachObjectStoreRecord):
        (WebCore::IDBSQLiteBackingStore::getIndexes):
        (WebCore::IDBSQLiteBackingStore::createIndex):
        (WebCore::IDBSQLiteBackingStore::deleteIndex):
        (WebCore::IDBSQLiteBackingStore::putIndexDataForRecord):
        (WebCore::IDBSQLiteBackingStore::deleteIndexDataForRecord):
        (WebCore::IDBSQLiteBackingStore::getObjectViaIndex):
        (WebCore::keyFromQuery):
        (WebCore::IDBSQLiteBackingStore::getPrimaryKeyViaIndex):
        (WebCore::IDBSQLiteBackingStore::keyExistsInIndex):
        (WebCore::IDBSQLiteBackingStore::openObjectStoreCursor):
        (WebCore::IDBSQLiteBackingStore::openIndexKeyCursor):
        (WebCore::IDBSQLiteBackingStore::openIndexCursor):
        (WebCore::IDBSQLiteBackingStore::createTransaction):
        * storage/IDBSQLiteBackingStore.h: Added.

2011-03-11  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed build error fix.

        [EFL] Fix build break when SHARED_CORE is ON
        https://bugs.webkit.org/show_bug.cgi?id=56155

        * platform/efl/ContextMenuEfl.cpp:
        (WebCore::ContextMenu::ContextMenu):
        * platform/efl/ContextMenuItemEfl.cpp:
        (WebCore::ContextMenuItem::nativeMenuItem):
        (WebCore::ContextMenuItem::ContextMenuItem):
        (WebCore::ContextMenuItem::~ContextMenuItem):

2011-03-11  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: resource load cancellation is reported to console as an error
        https://bugs.webkit.org/show_bug.cgi?id=55764

        - mark interruptionForPolicyChangeError as cancellation
        - do not log resource cancelation as an error
        - always push resource to front-end before console message, so front-end can use resource info while formatting message.

        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::didFailLoading):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didReceiveResourceResponseImpl):
        (WebCore::InspectorInstrumentation::didFailLoadingImpl):
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::stopLoadingForPolicyChange):

2011-03-10  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Get rid of has/add/removeStyleClass() methods on Element.prototype - Step 1
        https://bugs.webkit.org/show_bug.cgi?id=56096

        No new tests, as this is a refactoring.

        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.EventListenerBreakpointsSidebarPane):
        * inspector/front-end/DetailedHeapshotView.js:
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel):
        (WebInspector.BaseStorageTreeElement):
        (WebInspector.BaseStorageTreeElement.prototype.onattach):
        (WebInspector.StorageCategoryTreeElement):
        (WebInspector.FrameTreeElement):
        (WebInspector.FrameResourceTreeElement):
        (WebInspector.DatabaseTreeElement):
        (WebInspector.DatabaseTableTreeElement):
        (WebInspector.DOMStorageTreeElement):
        (WebInspector.CookieTreeElement):
        (WebInspector.ApplicationCacheTreeElement):
        (WebInspector.ResourceRevisionTreeElement):
        * inspector/front-end/utilities.js:
        (Element.prototype.removeStyleClass):
        (Element.prototype.addStyleClass):
        (Element.prototype.hasStyleClass):

2011-03-11  Brian Salomon  <bsalomon@google.com>

        Reviewed by Kenneth Russell.

        Adds GrContext flush call to PlatformContextSkia destructor. 
Calls GrContext flush with int parameter instead of bool due to skia 
revision.       

        No new tests needed.

        * platform/graphics/chromium/DrawingBufferChromium.cpp:
        (WebCore::DrawingBuffer::publishToPlatformLayer):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::~PlatformContextSkia):
        (WebCore::PlatformContextSkia::setSharedGraphicsContext3D):

2011-03-10  Chris Guillory  <chris.guillory@google.com>

        Reviewed by James Robinson.

        Fix for Coverity discovered NO_EFFECT (self-assign) defect.
        https://bugs.webkit.org/show_bug.cgi?id=54143

        * platform/graphics/gpu/TilingData.cpp:
        (WebCore::TilingData::setMaxTextureSize):

2011-03-10  Emil A Eklund  <eae@chromium.org>

        Reviewed by Alexey Proskuryakov.

        The web colours palevioletred and mediumpurple are incorrect
        https://bugs.webkit.org/show_bug.cgi?id=46658

        Changed value for the palevioletred and mediumpurple colors to match
        the css3 specification.

        Test: fast/css/named-colors.html

        * inspector/front-end/Color.js:
        * platform/ColorData.gperf:

2011-03-10  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed build fix.

        [WML] Fix build error
        https://bugs.webkit.org/show_bug.cgi?id=56078

        * wml/WMLInputElement.cpp:
        (WebCore::WMLInputElement::defaultEventHandler):

2011-03-10  Jeremy Moskovich  <jeremy@chromium.org>

        Reviewed by Darin Adler.

        Fix navigation menus on a bunch of sites in WebKit.
        https://bugs.webkit.org/show_bug.cgi?id=52535

        WebKit doesn't support position:relative for several table elements and
        overwrites the style internally when position:relative is encountered.
        Unfortunately position:relative affects the choice of nodes returned by
        offsetParent.

        This CL adds a bit to RenderStyle to track whether position:relative was
        overwritten.  The value is then consulted in offsetParent which makes us
        match FF/IE.

        Tests: fast/block/positioning/offsetLeft-relative-iframe.html
               fast/block/positioning/offsetLeft-relative-td.html

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::adjustRenderStyle):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::isOriginallyRelPositioned):
        (WebCore::RenderObject::offsetParent):
        * rendering/RenderObject.h:
        * rendering/style/RenderStyle.h: Add a bit to track the original value of position:relative.
        (WebCore::InheritedFlags::positionWasRelative):
        (WebCore::InheritedFlags::setPositionWasRelative):
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):
        * rendering/style/StyleRareNonInheritedData.h:

2011-03-10  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        REGRESSION (r66428/r71892): Crash after assertion failure (!m_reachedTerminalState) in ResourceLoader::didCancel()
        https://bugs.webkit.org/show_bug.cgi?id=51357

        Previously, we would try to print from a callstack that didn't want a
        nested event loop, leading to re-entrancy problems.  In this patch, we
        complete the print call asynchronously, giving us a clean stack on
        which to run the nested event loop.

        Test: printing/print-close-crash.html

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::DOMWindow):
        (WebCore::DOMWindow::print):
        (WebCore::DOMWindow::printTimerFired):
        * page/DOMWindow.h:

2011-03-11  Roland Steiner  <rolandsteiner@chromium.org>

        Reviewed by Ryosuke Niwa.

        Bug 55570 - Remove dependency of dom/InputElement.cpp on html/ and wml/
        https://bugs.webkit.org/show_bug.cgi?id=55570

        Add a virtual function toInputElement() to Node that has a default
        implementation of returning 0.
        For HTMLInputElement and WMLInputElement (which derive from InputElement)
        override this to return the object.
        Change all calling sites of the old toInputElement to use the new member
        function. This also allows us to save some casts.

        No new tests. (refactoring)

        * WebCore.exp.in:
        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::textMarkerDataForVisiblePosition):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isPasswordField):
        (WebCore::AccessibilityRenderObject::isIndeterminate):
        (WebCore::AccessibilityRenderObject::isNativeCheckboxOrRadio):
        (WebCore::AccessibilityRenderObject::isChecked):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::canShareStyleWithElement):
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector):
        * dom/CheckedRadioButtons.cpp:
        (WebCore::CheckedRadioButtons::removeButton):
        * dom/InputElement.cpp:
        * dom/InputElement.h:
        * dom/Node.cpp:
        (WebCore::Node::toInputElement):
        * dom/Node.h:
        * html/HTMLInputElement.h:
        (WebCore::HTMLInputElement::toInputElement):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::inputElement):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::isChecked):
        (WebCore::RenderTheme::isIndeterminate):
        * wml/WMLInputElement.h:
        (WebCore::WMLInputElement::toInputElement):

2011-03-10  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Reviewed by Kenneth Rohde Christiansen.

        [EFL] New mediaControl css file for EFL
        https://bugs.webkit.org/show_bug.cgi?id=55460

        Add new mediaControl css file for html5 video UI.

        * CMakeLists.txt:
        * CMakeListsEfl.txt:
        * css/mediaControlsEfl.css: Added.
        (audio):
        (audio::-webkit-media-controls-panel, video::-webkit-media-controls-panel):
        (video:-webkit-full-page-media::-webkit-media-controls-panel):
        (audio::-webkit-media-controls-mute-button, video::-webkit-media-controls-mute-button):
        (audio::-webkit-media-controls-play-button, video::-webkit-media-controls-play-button):
        (audio::-webkit-media-controls-timeline-container, video::-webkit-media-controls-timeline-container):
        (audio::-webkit-media-controls-current-time-display, video::-webkit-media-controls-current-time-display):
        (audio::-webkit-media-controls-time-remaining-display, video::-webkit-media-controls-time-remaining-display):
        (audio::-webkit-media-controls-timeline, video::-webkit-media-controls-timeline):
        (audio::-webkit-media-controls-volume-slider-container, video::-webkit-media-controls-volume-slider-container):
        (audio::-webkit-media-controls-volume-slider, video::-webkit-media-controls-volume-slider):
        (audio::-webkit-media-controls-seek-back-button, video::-webkit-media-controls-seek-back-button):
        (audio::-webkit-media-controls-seek-forward-button, video::-webkit-media-controls-seek-forward-button):
        (audio::-webkit-media-controls-fullscreen-button, video::-webkit-media-controls-fullscreen-button):
        (audio::-webkit-media-controls-rewind-button, video::-webkit-media-controls-rewind-button):
        (audio::-webkit-media-controls-return-to-realtime-button, video::-webkit-media-controls-return-to-realtime-button):
        (audio::-webkit-media-controls-toggle-closed-captions-button, video::-webkit-media-controls-toggle-closed-captions-button):
        (audio::-webkit-media-controls-volume-slider-mute-button, video::-webkit-media-controls-volume-slider-mute-button):
        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::extraMediaControlsStyleSheet):

2011-03-10  Emil A Eklund  <eae@chromium.org>

        Reviewed by Dimitri Glazkov.

        style.display affecting the initial selectedIndex value of a <select> when its multiple attribute is set programatically
        https://bugs.webkit.org/show_bug.cgi?id=53860

        Preserve selection when changing between multi-select and single-select
        for <select> boxes even if it has not yet been rendered.

        Test: fast/dom/HTMLSelectElement/change-multiple-preserve-selection.html

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::setMultiple):

2011-03-10  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Tony Chang.

        update comment to reference new DOM Core spec
        https://bugs.webkit.org/show_bug.cgi?id=56079

        I'm excising all instances of WRONG_DOCUMENT_ERR from WebKit.
        This is the only one that's actually specified to fire
        in the latest DOM Core spec.

        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument):

2011-03-10  Rik Cabanier  <cabanier@gmail.com>

        Reviewed by Tony Gentilcore.

        Fix that allows fixed length values to be floating point
        https://bugs.webkit.org/show_bug.cgi?id=52699

        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSStyleSelector.cpp:
        (WebCore::convertToLength):
        (WebCore::convertToIntLength):
        (WebCore::convertToFloatLength):
        (WebCore::CSSStyleSelector::applyProperty):
        (WebCore::CSSStyleSelector::createTransformOperations):
        * platform/Length.h:
        (WebCore::Length::Length):
        (WebCore::Length::operator==):
        (WebCore::Length::operator!=):
        (WebCore::Length::rawValue):
        (WebCore::Length::type):
        (WebCore::Length::quirk):
        (WebCore::Length::setValue):
        (WebCore::Length::calcFloatValue):
        (WebCore::Length::isZero):
        (WebCore::Length::blend):
        (WebCore::Length::getIntValue):
        (WebCore::Length::getFloatValue):
        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::recalcColumn):
        (WebCore::AutoTableLayout::calcEffectiveLogicalWidth):
        * rendering/FixedTableLayout.cpp:
        (WebCore::FixedTableLayout::calcWidthArray):

2011-03-10  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r80800.
        http://trac.webkit.org/changeset/80800
        https://bugs.webkit.org/show_bug.cgi?id=56163

        Caused hundreds of tests to crash on Windows 7 (Requested by
        rniwa on #webkit).

        * page/EventHandler.cpp:
        (WebCore::EventHandler::mouseMoved):
        (WebCore::EventHandler::updateMouseEventTargetNode):
        * page/FocusController.cpp:
        (WebCore::FocusController::setActive):
        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::~FrameView):
        * page/FrameView.h:
        * page/Page.cpp:
        * page/Page.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::wheelEvent):
        * platform/ScrollView.h:
        * rendering/RenderDataGrid.cpp:
        (WebCore::RenderDataGrid::RenderDataGrid):
        (WebCore::RenderDataGrid::~RenderDataGrid):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::~RenderLayer):
        * rendering/RenderLayer.h:
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::RenderListBox):
        (WebCore::RenderListBox::~RenderListBox):

2011-03-10  Alice Boxhall  <aboxhall@chromium.org>

        Reviewed by Dimitri Glazkov.

        NULL pointer crash when using :empty and :first-line pseudoclass selectors together
        https://bugs.webkit.org/show_bug.cgi?id=53316

        :empty is calculated for each element during parsing, but then not 
        recalculated after any child elements are attached. Force style 
        re-calculation on elements which have :empty in their style when
        their children are changed.

        Test: fast/css/empty-first-line-crash.html

        * dom/Element.cpp:
        (WebCore::checkForEmptyStyleChange): Pull out empty style checking
        logic from checkForSiblingStyleChanges().
        (WebCore::checkForSiblingStyleChanges): Use new checkForEmptyStyleChanges()
        method.
        (WebCore::Element::childrenChanged):  Call checkForEmptyStyleChanges() when
        called with changedByParser = true.

2011-03-10  Emil A Eklund  <eae@chromium.org>

        Unreviewed build fix.

        Fix Leopard Release build broken by r80797.

        * html/CollectionCache.h:

2011-03-10  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin Adler.

        Fix for <rdar://problem/8944558> Overlay scrollers in overflow areas need to 
        send notifications appropriate times (showing up, resizing)
        -and corresponding-
        https://bugs.webkit.org/show_bug.cgi?id=56067

        The general strategy here is to add a HashSet of ScrollableAreas to the page that 
        can be accessed when necessary to send notifications to all ScrollableAreas.

        Find layers for relevant node and if the layers are in the Page's ScrollableArea 
        set, then send the relevant notification.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::mouseMoved):
        (WebCore::EventHandler::updateMouseEventTargetNode):

        When the page is set active or not active, iterate through the Page's 
        ScrollableAreas to send hide/show notifications. 
        * page/FocusController.cpp:
        (WebCore::FocusController::setActive):

        When a FrameView is created, add it to the ScrollableArea set. When it's 
        destroyed, remove it.
        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::~FrameView):

        Iterate through the Page's ScrollableAreas to send the paint notification.
        (WebCore::FrameView::notifyPageThatContentAreaWillPaint):
        * page/FrameView.h:

        Add the new ScrollableArea set.
        * page/Page.cpp:
        (WebCore::Page::addScrollableArea):
        (WebCore::Page::removeScrollableArea):
        (WebCore::Page::pageContainsScrollableArea):
        * page/Page.h:
        (WebCore::Page::scrollableAreaSet):

        notifyPageThatContentAreaWillPaint() is a dummy function implemented in FrameView.
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::notifyPageThatContentAreaWillPaint):

        Call notifyPageThatContentAreaWillPaint() instead of calling 
        contentAreaWillPaint() just for the ScrollView.
        (WebCore::ScrollView::paint):
        * platform/ScrollView.h:

        Add/remove ScrollableAreas to the set.
        * rendering/RenderDataGrid.cpp:
        (WebCore::RenderDataGrid::RenderDataGrid):
        (WebCore::RenderDataGrid::~RenderDataGrid):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::RenderListBox):
        (WebCore::RenderListBox::~RenderListBox):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::~RenderLayer):

        Should have implemented this ScrollableArea-interface function a while ago.
        (WebCore::RenderLayer::currentMousePosition):
        * rendering/RenderLayer.h:

2011-03-10  takano takumi  <takano@apple.com>

        Reviewed by David Hyatt.

        Crash in RenderCombineText::combineText when running fast/text/international/text-combine-parser-test.html on Windows with full page heap enabled
        https://bugs.webkit.org/show_bug.cgi?id=55069

        No new tests. If the test above runs without crash, the fix should be okay.

        * dom/Node.cpp:
        (WebCore::Node::diff):
        - Changed to return Detach when textCombine style was changed.
        * rendering/RenderCombineText.cpp:
        (WebCore::RenderCombineText::styleDidChange):
        (WebCore::RenderCombineText::setTextInternal):
        (WebCore::RenderCombineText::width):
        (WebCore::RenderCombineText::adjustTextOrigin):
        (WebCore::RenderCombineText::charactersToRender):
        (WebCore::RenderCombineText::combineText):
        - Added assertions to ensure the passed object is RenderCombineText.
        * rendering/RenderCombineText.h:
        (WebCore::RenderCombineText::isCombineText):
        - Added to distinguish plain RenderText and RenderCombineText.
        (WebCore::toRenderCombineText):
        - Added assertions to ensure the passed object is RenderCombineText.
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isCombineText):
        - Added to distinguish plain RenderText and RenderCombineText.

2011-03-10  Emil A Eklund  <eae@chromium.org>

        Reviewed by Darin Adler.

        Collection cache not reset when moving base node between documents
        https://bugs.webkit.org/show_bug.cgi?id=55446

        Fix bug where HTMLCollection::resetCollectionInfo does not reset the
        cache when the base node is moved to a different document by making sure
        that the DOMVersion is updated and that it's unique across documents.

        Tests: fast/dom/HTMLFormElement/invalid-form-field.html
               fast/dom/HTMLFormElement/move-option-between-documents.html
               fast/dom/collection-nameditem-move-between-documents.html

        * dom/Document.cpp:
        (WebCore::Document::Document):
        * dom/Document.h:
        (WebCore::Document::incDOMTreeVersion):
        (WebCore::Document::domTreeVersion):
        * dom/Node.cpp:
        (WebCore::Node::setDocumentRecursively):
        * html/FormAssociatedElement.cpp:
        (WebCore::FormAssociatedElement::resetFormOwner):
        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::resetCollectionInfo):
        * xml/XPathResult.h:

2011-03-10  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed build fix.

        [EFL] Fix build break when CROSS_PLATFORM_CONTEXT_MENUS is disabled.
        https://bugs.webkit.org/show_bug.cgi?id=56005

        There are build breaks when CROSS_PLATFORM_CONTEXT_MENUS is disabled.

        * platform/efl/ContextMenuEfl.cpp:
        (WebCore::ContextMenu::ContextMenu):
        * platform/efl/ContextMenuItemEfl.cpp:

2011-03-10  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Tony Chang.

        startOfBlock and endOfBlock may return a position inside hr
        https://bugs.webkit.org/show_bug.cgi?id=56025

        Replaced calls to enclosingBlockFlowElement in startOfBlock and endOfBlock by
        calls to enclosingBlock. Added EditingBoundaryCrossingRule to the argument lists
        of startOfBlock, endOfBlock, and enclosingBlock. Also replaced the last boolean
        argument variable of enclosingNodeOfType by EditingBoundaryCrossingRule.

        Also replaced calls to enclosingBlockFlowElement in inSameBlock by calls to
        enclosingBlock to be consitent with startOfBlock and endOfBlock.

        This patch also replaced calls to deprecatedNode in startOfBlock, endOfBlock,
        and inSameBlock by calls to containerNode because the enclosing block of a position
        should never be before or after the position.

        No tests are added because this change only affects WebCore internally.

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::initializePositionData): Calls enclosingNodeOfType.
        Pass CanCrossEditingBoundary instead of false.
        * editing/htmlediting.cpp:
        (WebCore::unsplittableElementForPosition): Ditto.
        (WebCore::enclosingBlock): Takes EditingBoundaryCrossingRule and passes it to
        enclosingNodeOfType.
        (WebCore::enclosingNodeOfType): Takes EditingBoundaryCrossingRule instead of boolean.
        Fixed a bug that it stops walking the tree when it reached the root editable node
        even when the editing boundary crossing rule is CanCrossEditingBoundary.
        * editing/htmlediting.h: Prototype changes.
        * editing/visible_units.cpp:
        (WebCore::startOfBlock): Calls enclosingBlock instead of enclosingBlockFlowElement.
        Also added an early exit when there's no enclosing block.
        (WebCore::endOfBlock): Ditto. The early exist in this case prevents crash in
        lastPositionInNode.
        (WebCore::inSameBlock): Calls enclosingBlock instead of enclosingBlockFlowElement.
        (WebCore::isStartOfBlock): Calls startOfBlock with CanCrossEditingBoundary because
        we don't care where the start of block is when we're comparing against the given position.
        (WebCore::isEndOfBlock): Ditto.
        * editing/visible_units.h:

2011-03-10  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Dan Bernstein.

        Backspace deletes all non-BMP symbols at once, and then some
        https://bugs.webkit.org/show_bug.cgi?id=55971
        <rdar://problem/8725312>

        Test: platform/mac/editing/input/insert-delete-smp-symbol.html

        * rendering/RenderText.cpp:
        (WebCore::isMark): This matches what Core Foundation does for all characters that I tested.
        (WebCore::RenderText::previousOffsetForBackwardDeletion): Changed to use isMark().

2011-03-10  Chris Evans  <cevans@chromium.org>

        Reviewed by Adam Barth.

        Error in StyleElement::process with large nodesets
        https://bugs.webkit.org/show_bug.cgi?id=56150

        Test: none due to excessive runtime and CRASH() vs. real crash.

        * dom/StyleElement.cpp:
        (WebCore::StyleElement::process): Handle large node sets better.

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

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=47151
        
        Percentage heights should skip anonymous containing blocks when computing the used value.

        Added fast/block/basic/percentage-height-inside-anonymous-block.html

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

2011-03-10  Nat Duca  <nduca@chromium.org>

        Reviewed by James Robinson.

        [chromium] Make updateAndDrawLayers argumentless.
        https://bugs.webkit.org/show_bug.cgi?id=55985

        Made the TilePainters and viewport parameters for
        LayerRendererChromium member variables instead of arguments on
        updateAndDrawLayers. In a future change, this will allows us to
        draw the layer tree without the WebView's assistance.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::create):
        (WebCore::LayerRendererChromium::LayerRendererChromium):
        (WebCore::LayerRendererChromium::verticalScrollbarRect):
        (WebCore::LayerRendererChromium::horizontalScrollbarRect):
        (WebCore::LayerRendererChromium::invalidateRootLayerRect):
        (WebCore::LayerRendererChromium::updateRootLayerContents):
        (WebCore::LayerRendererChromium::updateRootLayerScrollbars):
        (WebCore::LayerRendererChromium::drawRootLayer):
        (WebCore::LayerRendererChromium::setViewport):
        (WebCore::LayerRendererChromium::updateAndDrawLayers):
        (WebCore::LayerRendererChromium::updateLayers):
        (WebCore::LayerRendererChromium::drawLayers):
        (WebCore::LayerRendererChromium::setRootLayer):
        (WebCore::LayerRendererChromium::getFramebufferPixels):
        (WebCore::LayerRendererChromium::cleanupSharedObjects):
        * platform/graphics/chromium/LayerRendererChromium.h:
        (WebCore::LayerRendererChromium::viewportSize):
        * platform/graphics/chromium/cc/CCHeadsUpDisplay.cpp:
        (WebCore::CCHeadsUpDisplay::draw):

2011-01-25  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Implement spin buttons for GTK+ 2.x
        https://bugs.webkit.org/show_bug.cgi?id=53098

        Implement spin buttons for GTK+ 2.x. This allows proper render and functioning
        for input type=number. The implementation is based on the one in gtkspinbutton.c
        from the GTK+ sources.

        * platform/gtk/RenderThemeGtk.h: Added new members and getters.
        * platform/gtk/RenderThemeGtk2.cpp:
        (WebCore::RenderThemeGtk::platformInit): Initialize spin button widget.
        (WebCore::RenderThemeGtk::adjustRepaintRect): We need to draw outside the
        spin button area to have proper rendering. There doesn't seem to be any other
        clean way of having spin buttons that are the size of the text input frame.
        (WebCore::RenderThemeGtk::adjustInnerSpinButtonStyle): Added implementation.
        (WebCore::RenderThemeGtk::paintInnerSpinButton): Ditto.
        (WebCore::RenderThemeGtk::gtkSpinButton): Added.

2011-03-10  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Ryosuke Niwa.

        InsertUnorderedList over a non-editable region and multiple lines enters an infinite loop
        https://bugs.webkit.org/show_bug.cgi?id=53409

        Fixing broken handling of mixed-editability content for InsertListCommand. Previously, if the selection
        spanned non-contenteditable regions, it would get stuck endlessly iterating the same region as the algorithm
        didn't skip the editable boundary.

        Test: editing/execCommand/insert-list-with-noneditable-content.html

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::cleanupAfterDeletion): Changed signature to take the destination
        position for the active editing command. Without this, there are cases when the destination happens
        to be a placeholder, and we remove it.
        (WebCore::CompositeEditCommand::moveParagraphs):
        * editing/CompositeEditCommand.h:
        * editing/InsertListCommand.cpp:
        (WebCore::InsertListCommand::doApply): Added logic to the paragraph iteration loop to handle pockets of
        non-editable content in an editable context. Previously, this could cause an infinite loop.
        * editing/visible_units.cpp:
        (WebCore::startOfParagraph): Added a mode of operation where we'll jump across non-editable
        content in the same paragraph to reach the actual editable paragraph start.
        (WebCore::endOfParagraph): Ditto.
        (WebCore::startOfNextParagraph): Now uses the aforementioned non-editable content skipping mode of
        endOfParagraph.

2011-03-10  Berend-Jan Wever  <skylined@chromium.org>

        Reviewed by Darin Adler.

        Calling focus() on an area element not in a document should not cause a NULL ptr crash
        https://bugs.webkit.org/show_bug.cgi?id=54877

        Test: fast/dom/HTMLAreaElement/area-islink-focus-null-ptr-crash.html

        * dom/Element.cpp:
        (WebCore::Element::focus): Check element is in the document before allowing focus
        * html/HTMLAreaElement.cpp: 
        (WebCore::HTMLAreaElement::imageElement): Check element has a parent before checking if its parent is a map

2011-03-10  Xiyuan Xia  <xiyuan@chromium.org>

        Reviewed by Tony Chang.

        [Chromium] Fix default single selection select's popup background on chromium/linux
        https://bugs.webkit.org/show_bug.cgi?id=56023

        Test: fast/html/select-dropdown-consistent-background-color.html

        * css/themeChromiumLinux.css:

2011-03-10  Kris Jordan  <krisjordan@gmail.com>

        Reviewed by Alexey Proskuryakov.

        Improve default Accept header to give preference to HTML over XML.
        https://bugs.webkit.org/show_bug.cgi?id=27267

        * loader/FrameLoader.cpp:Changed default accept header to match
        FireFox' as per bug 27267.

2011-03-10  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] [Webkit2] There are no scrollbars visible in the MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=56125

        No new tests. This functionality will be tested once we have TestRunner
        implementation for WebKit2 with pixel dumping support.

        * GNUmakefile.am: Add a new define with tracks whether or not we are using
        our specialized GTK+ ScrollView.
        * platform/ScrollView.cpp: Only use the GTK+-specific ScrollView if we are compiling
        WebKit1.
        (WebCore::ScrollView::wheelEvent):
        * platform/gtk/ScrollViewGtk.cpp: Ditto.

2011-03-10  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        Assertion fails by validating a form twice very quickly
        https://bugs.webkit.org/show_bug.cgi?id=56069

        If the interactive validation is invoked when a form control is in
        needsLayout() state, an assertion in isFocusable() fails. To avoid it,
        Add a call to updateLayoutIgnorePendingStylesheets() before isFocusable().

        Test: fast/forms/interactive-validation-assertion-by-validate-twice.html

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::validateInteractively):
          Calls updateLayoutIgnorePendingStylesheets().

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

        Reviewed by Beth Dakin.

        https://bugs.webkit.org/show_bug.cgi?id=47143
        
        Static distance computation is wrong when an ancestor is also positioned.  We need to go up the container()
        chain (after initially starting with the parent()) when doing this computation, so that we properly skip
        intermediate boxes between two positioned blocks.

        Added fast/block/positioning/static-distance-with-positioned-ancestor.html.

        * rendering/RenderBox.cpp:
        (WebCore::computeInlineStaticDistance):
        (WebCore::computeBlockStaticDistance):

2011-03-10  Adrienne Walker  <enne@google.com>

        Reviewed by Kenneth Russell.

        [chromium] Make tiled compositor data structure more efficient.
        https://bugs.webkit.org/show_bug.cgi?id=54133

        Previously, the compositor had a sparse 2D array of tiles for the
        whole page, most of which were null.  The tiles were implicitly
        located based on their position in the array. This was inefficient
        when the page grew (e.g. infinite scrolling) and caused some bugs
        (e.g. width * height > MAX_INT).  This change modifies tiles to have
        explicit positions so they can be stored in a hash map.

        Tests: LayoutTests/compositing/

        * platform/graphics/chromium/LayerTilerChromium.cpp:
        (WebCore::LayerTilerChromium::reset):
        (WebCore::LayerTilerChromium::createTile):
        (WebCore::LayerTilerChromium::invalidateTiles):
        (WebCore::LayerTilerChromium::contentRectToTileIndices):
        (WebCore::LayerTilerChromium::tileAt):
        (WebCore::LayerTilerChromium::tileContentRect):
        (WebCore::LayerTilerChromium::tileLayerRect):
        (WebCore::LayerTilerChromium::invalidateRect):
        (WebCore::LayerTilerChromium::invalidateEntireLayer):
        (WebCore::LayerTilerChromium::update):
        (WebCore::LayerTilerChromium::updateFromPixels):
        (WebCore::LayerTilerChromium::draw):
        (WebCore::LayerTilerChromium::growLayerToContain):
        * platform/graphics/chromium/LayerTilerChromium.h:
        (WebCore::LayerTilerChromium::Tile::Tile):
        (WebCore::LayerTilerChromium::Tile::i):
        (WebCore::LayerTilerChromium::Tile::j):
        (WebCore::LayerTilerChromium::Tile::moveTo):
        (WebCore::LayerTilerChromium::TileMapKeyTraits::emptyValue):
        (WebCore::LayerTilerChromium::TileMapKeyTraits::constructDeletedValue):
        (WebCore::LayerTilerChromium::TileMapKeyTraits::isDeletedValue):

2011-03-10  Ryosuke Niwa  <rniwa@webkit.org>

        Unreviewed build fix for r80752; Negated the boolean logic.

        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::next):
        (WebCore::VisiblePosition::previous):

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

        Reviewed by Adam Roben.

        Make the same change to xheight on Windows for CG.

        * platform/graphics/win/SimpleFontDataCGWin.cpp:
        (WebCore::SimpleFontData::platformInit):

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

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=47147
        
        Fix for repaint issues when the root element is a table and needs to paint a background that
        covers the entire canvas.  Remove paintRootBoxDecorations and replace with paintRootBoxFillLayers,
        so that it can be called only for fill layer painting.  Make tables and normal boxes both
        call this new method.  Fix the dirty check at the start of RenderTable paint to not happen if
        the table is the root of the document (this same check exists in RenderBlock painting already).

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintRootBoxFillLayers):
        (WebCore::RenderBox::paintBoxDecorations):
        (WebCore::RenderBox::paintBoxDecorationsWithSize):
        * rendering/RenderBox.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::calculateCompositedBounds):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::paint):
        (WebCore::RenderTable::paintBoxDecorations):

2011-03-10  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r80749.
        http://trac.webkit.org/changeset/80749
        https://bugs.webkit.org/show_bug.cgi?id=56143

        "Caused at least 3 media tests to be flaky" (Requested by
        tonyg-cr on #webkit).

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::canTakeNextToken):
        (WebCore::HTMLDocumentParser::pumpTokenizer):
        * html/parser/HTMLParserScheduler.cpp:
        * html/parser/HTMLParserScheduler.h:
        (WebCore::HTMLParserScheduler::checkForYieldBeforeToken):
        * page/FrameView.h:

2011-03-10  Sam Weinig  <sam@webkit.org>

        Reviewed by David Hyatt.

        Regression: Content not drawn when scrolling horizontally in an RTL page
        https://bugs.webkit.org/show_bug.cgi?id=55077

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::overhangAmount):
        (WebCore::ScrollView::calculateOverhangAreasForPainting):
        Take the scroll origin into account when calculating overhang.

        * platform/ScrollView.h:
        * rendering/RenderLayer.h:
        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::scrollOrigin):
        Move identical scroll origin member from ScrollView and RenderLayer
        to shared base ScrollableArea. This is also needed so that the animator
        can access it.

        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::pinnedInDirection):
        (WebCore::ScrollAnimatorMac::smoothScrollWithEvent):
        (WebCore::ScrollAnimatorMac::snapRubberBandTimerFired):
        Account for a scroll origin when doing calculating scroll offsets.

2011-03-09  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Simon Fraser.

        Plumb through settings for accelerated drawing for canvas
        https://bugs.webkit.org/show_bug.cgi?id=56039

        No new tests. Doesn't affect behavior, just adding a switch to toggle canvas backends.

        * WebCore.exp.in:
        * html/HTMLCanvasElement.cpp:
        * html/canvas/CanvasRenderingContext2D.cpp:
        * page/Settings.cpp:
        * page/Settings.h:

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

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=47157
        
        CSS2.1 test suite failures because the ex unit is broken with the Ahem font.
        
        Remove the code that tries to also include the maxX of the glyph bounds for the
        'x' glyph, since it just causes the x-height to be way too large in cases where the 'x' glyph extends
        below the baseline.

        Remove the Apple Symbol hack for ex units, since the person who added that was confused by another
        issue, namely that CGFontGetXHeight wasn't being properly multiplied by the pointSize.  That's why
        the value was too small.  Patched the code to just multiply by pointSize and took out the hack.
        
        Fix causes many tests in the css2.1 directory to progress, so no new tests required.  Many other
        layout tests change because the xHeight for Lucida Grande gets smaller by a little bit, and radio
        buttons use ex horizontal margins by default.

        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::platformInit):

2011-03-10  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Tony Chang.

        VisiblePosition's next and previous should take an enum instead of a boolean
        https://bugs.webkit.org/show_bug.cgi?id=56135

        Changed the argument type of VisiblePosition::next and VisiblePosition::previous
        from bool to EditingBoundaryCrossingRule. Also got rid of StayInEditableContent enum
        in VisibleSelection and replaced it by EditingBoundaryCrossingRule because the enum
        was only used in VisiblePosition::isAll and subsequently in SelectionController::isAll
        to call VisiblePosition::next and VisiblePosition::previous.

        * WebCore.exp.in:
        * dom/Position.cpp:
        (WebCore::Position::trailingWhitespacePosition):
        * editing/ApplyBlockElementCommand.cpp:
        (WebCore::ApplyBlockElementCommand::doApply):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::breakOutOfEmptyMailBlockquotedParagraph):
        * editing/InsertListCommand.cpp:
        (WebCore::InsertListCommand::doApply):
        (WebCore::InsertListCommand::listifyParagraph):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::shouldMergeStart):
        (WebCore::ReplaceSelectionCommand::shouldMergeEnd):
        (WebCore::ReplaceSelectionCommand::doApply):
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::modifyExtendingRight):
        (WebCore::SelectionController::modifyExtendingForward):
        (WebCore::SelectionController::modifyMovingForward):
        (WebCore::SelectionController::modifyExtendingLeft):
        (WebCore::SelectionController::modifyExtendingBackward):
        (WebCore::SelectionController::modifyMovingBackward):
        * editing/SelectionController.h:
        (WebCore::SelectionController::isAll):
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::deleteKeyPressed):
        (WebCore::TypingCommand::forwardDeleteKeyPressed):
        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::next):
        (WebCore::VisiblePosition::previous):
        * editing/VisiblePosition.h:
        * editing/VisibleSelection.cpp:
        (WebCore::VisibleSelection::isAll):
        (WebCore::VisibleSelection::setStartAndEndFromBaseAndExtentRespectingGranularity):
        * editing/VisibleSelection.h:
        * editing/htmlediting.cpp:
        (WebCore::selectionForParagraphIteration):
        * editing/visible_units.cpp:
        (WebCore::startOfNextParagraph):

2011-03-10  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Tony Gentilcore.

        Remove CRASH() calls added to track down bug 53045
        https://bugs.webkit.org/show_bug.cgi?id=56137

        Remove CRASH() calls added by r76575 and re-label ones added by r80155
        and r80269 as being associated with bug 56124 (which may still be
        happening).

        * css/CSSImageValue.cpp:
        (WebCore::CSSImageValue::cachedImage):
        * css/CSSSelector.h:
        * css/CSSSelectorList.cpp:
        (WebCore::CSSSelectorList::deleteSelectors):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::CachedResource):
        (WebCore::CachedResource::~CachedResource):
        * loader/cache/CachedResource.h:

2011-03-10  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Eric Seidel.

        Let the parser yield for layout before running scripts
        https://bugs.webkit.org/show_bug.cgi?id=54355

        Prior to this patch, the parser would yield to perform a layout/paint before running a
        script only if the script or a stylesheet blocking the script is not loaded yet. Since we
        don't preload scan into the body while parsing the head, typically we'll block on a script
        early in the body that causes us to yield to do the first paint within a reasonable time.

        However, I'm planning to change the PreloadScanner to scan into the body from the head.
        That significantly improves overall load time, but would hurt first paint time because
        fewer scripts would be blocked during parsing and thus wouldn't yield.

        This change causes us to yield before running scripts if we haven't painted yet (regardless
        of whether or not the script is loaded). In addition to allowing the above mentioned
        PreloadScanner change to be implemented without regressing first paint time, this also
        improves first paint time by itself.

        I tested Alexa's top 45 websites using Web Page Replay to control the content and simulate
        bandwidth. This patch improved average first paint time by 1% over an unlimited connection,
        6% over a 1Mbps connection and 11% over a 5Mbps connection. There was no statistically
        signifcant change in page load time.

        Within the pages tested, 33 had no statistically significant change in time to first paint,
        12 improved, and none regressed. Of the improved, some of the standouts from the 1Mbps set
        are: 20% on youtube, 37% on wiki, 27% on ebay, 13% on cnn, 16% on espn, 74% on sohu.

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::canTakeNextToken): This is the new yield point.
        (WebCore::HTMLDocumentParser::pumpTokenizer): Remove ASSERT that we are not paused. isPaused
        means that we are waiting for a script. Bug 54574 changed pumpTokenizer() so that it does
        the right thing whether we are just before a token or waiting for a script. Now that we may
        yield before a token or before a script, this may be called while paused.
        * html/parser/HTMLParserScheduler.cpp:
        (WebCore::HTMLParserScheduler::checkForYieldBeforeScript): Added.
        * page/FrameView.h:
        (WebCore::FrameView::hasEverPainted): Added.

2011-03-10  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        Some Gtk code uses defined(USE_FREETYPE) instead of just USE(FREETYPE)
        https://bugs.webkit.org/show_bug.cgi?id=55996

        Use the macre USE instead of defined fro WTF_USE_FREETYPE and
        WTF_USE_PANGO.

        * GNUmakefile.am:
        * platform/graphics/cairo/OwnPtrCairo.cpp:
        * platform/graphics/cairo/OwnPtrCairo.h:
        * platform/graphics/cairo/RefPtrCairo.cpp:
        * platform/graphics/cairo/RefPtrCairo.h:
        * platform/graphics/gtk/FontGtk.cpp:
        (WebCore::setPangoAttributes):
        (WebCore::Font::drawComplexText):
        (WebCore::Font::floatWidthForComplexText):
        (WebCore::Font::offsetForPositionForComplexText):
        (WebCore::Font::selectionRectForComplexText):

2011-03-10  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Rolled back in 80277 and 80280 with event handler layout test failures fixed.
        https://bugs.webkit.org/show_bug.cgi?id=55653

        The failures were caused by a last minute typo: assigning to currentEvent
        instead of m_currentEvent.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMGlobalObject.cpp:
        * bindings/js/JSDOMGlobalObject.h:
        * bindings/js/JSDOMWindowBase.cpp:
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSDOMWindowCustom.h:
        * bindings/js/JSWorkerContextBase.cpp:

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

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=56129, vertical text broken on Lion and Leopard.

        Add Snow Leopard ifdefs for the scaling by point size and then the division by unitsPerEm to the
        translationsTransform applied to the results from CTFontGetVerticalTranslationsForGlyphs, since
        this is done already on Lion and Leopard.

        * platform/graphics/mac/FontMac.mm:
        (WebCore::showGlyphsWithAdvances):

2011-03-10  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r80701.
        http://trac.webkit.org/changeset/80701
        https://bugs.webkit.org/show_bug.cgi?id=56126

        fast/dom/Geolocation/window-close-crash.html fails on Snow
        Leopard release builds (Requested by mihaip on #webkit).

        * page/DOMWindow.cpp:
        * page/DOMWindow.h:
        * page/Frame.cpp:
        (WebCore::Frame::pageDestroyed):
        (WebCore::Frame::transferChildFrameToNewDocument):
        * page/Geolocation.cpp:
        (WebCore::Geolocation::~Geolocation):
        (WebCore::Geolocation::disconnectFrame):
        (WebCore::Geolocation::lastPosition):
        (WebCore::Geolocation::requestPermission):
        (WebCore::Geolocation::startUpdating):
        (WebCore::Geolocation::stopUpdating):
        * page/Geolocation.h:
        * page/GeolocationController.cpp:
        (WebCore::GeolocationController::~GeolocationController):
        * page/Navigator.cpp:
        * page/Navigator.h:
        * platform/mock/GeolocationClientMock.cpp:
        * platform/mock/GeolocationClientMock.h:

2011-03-10  Pratik Solanki  <psolanki@apple.com>

        Reviewed by Alexey Proskuryakov.

        ASSERT_NOT_REACHED triggered in WebCore::mapHTTPPipeliningPriorityToResourceLoadPriority
        https://bugs.webkit.org/show_bug.cgi?id=56075

        Map priority value 3, which means no priority, to ResourceLoadPriorityUnresolved.

        * platform/network/cf/ResourceRequestCFNet.h:
        (WebCore::mapHTTPPipeliningPriorityToResourceLoadPriority):
        (WebCore::mapResourceLoadPriorityToHTTPPipeliningPriority):

2011-03-10  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Pavel Feldman.

        Web Inspector: [Text editor] Substitute live-edit mode activation by double-click
        https://bugs.webkit.org/show_bug.cgi?id=56084

        Also fixed a regression: console was not opening/closing on ESC key press because tabIndex="0" attribute was preserved for a readOnly viewer.

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame):
        (WebInspector.SourceFrame.prototype._startEditing):
        (WebInspector.SourceFrame.prototype._registerShortcuts):
        (WebInspector.SourceFrame.prototype._handleKeyDown):
        (WebInspector.SourceFrame.prototype._handleSave):
        (WebInspector.SourceFrame.prototype._handleRevertEditing):
        (WebInspector.SourceFrame.prototype._doubleClick):
        * inspector/front-end/TextEditorModel.js:
        (WebInspector.TextEditorModel.prototype.get text):
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer.prototype.get readOnly):
        (WebInspector.TextEditorMainPanel):
        (WebInspector.TextEditorMainPanel.prototype.set readOnly):
        (WebInspector.TextEditorMainPanel.prototype.get readOnly):

2011-03-10  Greg Simon  <gregsimon@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Need new graphic icon for garbage collect button.
        https://bugs.webkit.org/show_bug.cgi?id=55794

        No new tests: gc tests are flaky due to non-determinisic
        behavior of collection APIs (more notes in bug)

        * English.lproj/localizedStrings.js:
        * WebCore.gypi:
        * bindings/js/ScriptProfiler.cpp:
        (WebCore::ScriptProfiler::collectGarbage):
        * bindings/js/ScriptProfiler.h:
        * bindings/v8/ScriptProfiler.cpp:
        (WebCore::ScriptProfiler::collectGarbage):
        * bindings/v8/ScriptProfiler.h:
        * inspector/Inspector.idl:
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::collectGarbage):
        * inspector/InspectorProfilerAgent.h:
        * inspector/front-end/Images/garbageCollectButtonGlyph.png: Added.
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype.get statusBarItems):
        (WebInspector.TimelinePanel.prototype._createStatusbarButtons):
        (WebInspector.TimelinePanel.prototype._garbageCollectButtonClicked):
        * inspector/front-end/inspector.css:
        (.garbage-collect-status-bar-item .glyph):

2011-03-10  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: better names for HAR export commands
        https://bugs.webkit.org/show_bug.cgi?id=56097

        Rename Export to HAR to Copy entry/network log as HAR
        Expose Copy as HAR unconditionally, remove related settings entry.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkPanel.prototype._contextMenu):
        * inspector/front-end/Settings.js:

2011-03-10  Qi Zhang  <qi.2.zhang@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] Mobile Devices should include Model and Firmware Version in Webkit Generated User Agent String
        https://bugs.webkit.org/show_bug.cgi?id=48636

        Fix a typo in features.pri that turns on this feature on mobile
        devices by default.

        * features.pri:

2011-03-10  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Invalid expected parameter list in CSSAgent.setSelectorText() callback (CSSStyleModel.js)
        https://bugs.webkit.org/show_bug.cgi?id=56092

        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleModel.prototype.setRuleSelector):

2011-03-10  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: rolling out r80478 and its follow ups for breaking
        inspector and engadget.com.
        https://bugs.webkit.org/show_bug.cgi?id=49401

        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::performTask):
        (WebCore::Document::postTask):
        * dom/Document.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::setDefersLoading):
        * manual-tests/database-callback-deferred.html: Removed.
        * page/PageGroupLoadDeferrer.cpp:
        (WebCore::PageGroupLoadDeferrer::PageGroupLoadDeferrer):
        (WebCore::PageGroupLoadDeferrer::~PageGroupLoadDeferrer):

2011-03-10  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Kenneth Rohde Christiansen.

        Tiled backing store's delegated scroll request uses incorrect convention
        https://bugs.webkit.org/show_bug.cgi?id=56011

        Use a point instead of delta, when relaying the scroll request from
        ScrollView::setScrollPosition.

        * loader/EmptyClients.h:
        (WebCore::EmptyChromeClient::delegatedScrollRequested):
        * page/Chrome.cpp:
        (WebCore::Chrome::delegatedScrollRequested):
        * page/Chrome.h:
        * page/ChromeClient.h:
        * platform/HostWindow.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::setScrollPosition):

2011-03-10  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: brush up DOM agent API.
        https://bugs.webkit.org/show_bug.cgi?id=56093

        * inspector/Inspector.idl:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::childNodes):
        (WebCore::InspectorDOMAgent::setNodeName):
        (WebCore::InspectorDOMAgent::outerHTML):
        (WebCore::InspectorDOMAgent::setNodeValue):
        * inspector/InspectorDOMAgent.h:
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMNode):
        (WebInspector.DOMNode.prototype.hasAttributes):
        (WebInspector.DOMNode.prototype.nodeType):
        (WebInspector.DOMNode.prototype.nodeName):
        (WebInspector.DOMNode.prototype.setNodeName):
        (WebInspector.DOMNode.prototype.localName):
        (WebInspector.DOMNode.prototype.nodeValue):
        (WebInspector.DOMNode.prototype.setNodeValue):
        (WebInspector.DOMNode.prototype.setAttribute):
        (WebInspector.DOMNode.prototype.attributes):
        (WebInspector.DOMNode.prototype.removeAttribute):
        (WebInspector.DOMNode.prototype.childNodes.mycallback):
        (WebInspector.DOMNode.prototype.childNodes):
        (WebInspector.DOMNode.prototype.outerHTML):
        (WebInspector.DOMNode.prototype.setOuterHTML):
        (WebInspector.DOMNode.prototype.removeNode):
        (WebInspector.DOMNode.prototype.copyNode):
        (WebInspector.DOMNode.prototype.path):
        (WebInspector.DOMNode.prototype._setAttributesPayload):
        (WebInspector.DOMNode.prototype._addAttribute):
        (WebInspector.DOMAgent.prototype._characterDataModified):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.updateBreadcrumb):
        (WebInspector.ElementsPanel.prototype.decorateNodeLabel):
        (WebInspector.ElementsPanel.prototype.handleCopyEvent):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeOutline.prototype.findTreeElement):
        (WebInspector.ElementsTreeElement):
        (WebInspector.ElementsTreeElement.prototype.updateChildren):
        (WebInspector.ElementsTreeElement.prototype._updateChildren):
        (WebInspector.ElementsTreeElement.prototype._startEditingTarget):
        (WebInspector.ElementsTreeElement.prototype._startEditing):
        (WebInspector.ElementsTreeElement.prototype._attributeEditingCommitted):
        (WebInspector.ElementsTreeElement.prototype._tagNameEditingCommitted.moveToNextAttributeIfNeeded):
        (WebInspector.ElementsTreeElement.prototype._tagNameEditingCommitted):
        (WebInspector.ElementsTreeElement.prototype._textNodeEditingCommitted):
        (WebInspector.ElementsTreeElement.prototype._attributeHTML):
        ():
        * inspector/front-end/EventListenersSidebarPane.js:
        ():
        * inspector/front-end/MetricsSidebarPane.js:
        * inspector/front-end/StylesSidebarPane.js:
        * inspector/front-end/utilities.js:

2011-03-09  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [STYLES] Editing a property value adds a word for any property value that uses a paren
        https://bugs.webkit.org/show_bug.cgi?id=56002

        * inspector/front-end/StylesSidebarPane.js: Introduce an additional check.

2011-03-09  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: use DebuggerPresentation instead of DebuggerModel in source frame delegate.
        https://bugs.webkit.org/show_bug.cgi?id=56034

        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype.continueToLine):
        (WebInspector.DebuggerPresentationModel.prototype.setBreakpoint):
        (WebInspector.DebuggerPresentationModel.prototype.updateBreakpoint):
        (WebInspector.DebuggerPresentationModel.prototype.findBreakpoint):
        (WebInspector.DebuggerPresentationModel.prototype._sourceLocationToActualLocation):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._createSourceFrame):
        (WebInspector.SourceFrameDelegateForScriptsPanel):
        (WebInspector.SourceFrameDelegateForScriptsPanel.prototype.setBreakpoint):
        (WebInspector.SourceFrameDelegateForScriptsPanel.prototype.updateBreakpoint):
        (WebInspector.SourceFrameDelegateForScriptsPanel.prototype.removeBreakpoint):
        (WebInspector.SourceFrameDelegateForScriptsPanel.prototype.findBreakpoint):
        (WebInspector.SourceFrameDelegateForScriptsPanel.prototype.continueToLine):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._contextMenu.else.editBreakpointCondition.didEditBreakpointCondition):
        (WebInspector.SourceFrame.prototype._contextMenu.else.editBreakpointCondition):
        (WebInspector.SourceFrame.prototype._contextMenu.else.setBreakpointEnabled):
        (WebInspector.SourceFrame.prototype._contextMenu):
        (WebInspector.SourceFrame.prototype._mouseDown):
        (WebInspector.SourceFrameDelegate.prototype.removeBreakpoint):
        (WebInspector.SourceFrameDelegate.prototype.updateBreakpoint):

2011-03-09  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: elements dom tree - word wrap toggle
        https://bugs.webkit.org/show_bug.cgi?id=44311

        A "Word Wrap" option is now shown in a context menu for the entire DOM tree content area
        and persisted into application settings.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype._contextMenuEventFired):
        (WebInspector.ElementsPanel.prototype._contextMenuEventFired.toggleWordWrap):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeOutline):
        (WebInspector.ElementsTreeOutline.prototype._treeElementFromEvent):
        (WebInspector.ElementsTreeOutline.prototype.populateContextMenu):
        (WebInspector.ElementsTreeElement.prototype.onreveal):
        * inspector/front-end/Settings.js:
        (WebInspector.Settings):
        * inspector/front-end/inspector.css:
        (#elements-content.nowrap):
        (#elements-content > ol):

2011-03-09  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: re-implement breakpoints sidebar pane based on debugger presentation model.
        https://bugs.webkit.org/show_bug.cgi?id=55823

        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.JavaScriptBreakpointsSidebarPane):
        (WebInspector.JavaScriptBreakpointsSidebarPane.prototype.addBreakpoint.didLoadSnippet):
        (WebInspector.JavaScriptBreakpointsSidebarPane.prototype.addBreakpoint):
        (WebInspector.JavaScriptBreakpointsSidebarPane.prototype.removeBreakpoint):
        (WebInspector.JavaScriptBreakpointsSidebarPane.prototype.highlightBreakpoint):
        (WebInspector.JavaScriptBreakpointsSidebarPane.prototype.clearBreakpointHighlight):
        (WebInspector.JavaScriptBreakpointsSidebarPane.prototype._createBreakpointItemId):
        (WebInspector.JavaScriptBreakpointsSidebarPane.prototype._breakpointClicked):
        (WebInspector.JavaScriptBreakpointsSidebarPane.prototype._breakpointCheckboxClicked):
        (WebInspector.JavaScriptBreakpointsSidebarPane.prototype._contextMenu):
        (WebInspector.JavaScriptBreakpointsSidebarPane.prototype.reset):
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel):
        (WebInspector.DebuggerPresentationModel.prototype._parsedScriptSource):
        (WebInspector.DebuggerPresentationModel.prototype._failedToParseScriptSource):
        (WebInspector.DebuggerPresentationModel.prototype._revealHiddenBreakpoints):
        (WebInspector.DebuggerPresentationModel.prototype.breakpointsForSourceFileId):
        (WebInspector.DebuggerPresentationModel.prototype.setBreakpointEnabled):
        (WebInspector.DebuggerPresentationModel.prototype.removeBreakpoint):
        (WebInspector.DebuggerPresentationModel.prototype._breakpointAdded):
        (WebInspector.DebuggerPresentationModel.prototype.set selectedCallFrame):
        (WebInspector.DebuggerPresentationModel.prototype._actualLocationToSourceLocation):
        (WebInspector.DebuggerPresentationModel.prototype.reset):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype._breakpointAdded):
        (WebInspector.ScriptsPanel.prototype._breakpointRemoved):
        (WebInspector.ScriptsPanel.prototype._debuggerPaused):
        (WebInspector.ScriptsPanel.prototype.reset):
        (WebInspector.ScriptsPanel.prototype._clearInterface):

2011-03-10  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Pavel Feldman.

        Web Inspector: Highlighter refactoring
        https://bugs.webkit.org/show_bug.cgi?id=56015

        * inspector/front-end/TextEditorHighlighter.js:
        (WebInspector.TextEditorHighlighter):
        (WebInspector.TextEditorHighlighter.prototype.set mimeType):
        (WebInspector.TextEditorHighlighter.prototype.highlight):
        (WebInspector.TextEditorHighlighter.prototype.updateHighlight):
        (WebInspector.TextEditorHighlighter.prototype._highlightInChunks):
        (WebInspector.TextEditorHighlighter.prototype._highlightLines):
        (WebInspector.TextEditorHighlighter.prototype._selectHighlightState):
        (WebInspector.TextEditorHighlighter.prototype._clearHighlightState):
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextEditorMainPanel.prototype._buildChunks):
        (WebInspector.TextEditorMainPanel.prototype._updateHighlightsForRange):

2011-03-05  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: move breakpoint column adjustment to debugger model.
        https://bugs.webkit.org/show_bug.cgi?id=55821

        Test: inspector/debugger/debug-inlined-scripts.html

        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel.prototype.setBreakpoint.didSetBreakpoint):
        (WebInspector.DebuggerModel.prototype.setBreakpoint):
        * inspector/front-end/SourceFrameContent.js:
        (WebInspector.SourceFrameContent.prototype.sourceFrameLineNumberToActualLocation):

2011-01-21  John Knottenbelt  <jknotten@chromium.org>

        Reviewed by Dmitry Titov.

        Detach Geolocation from Frame when Page destroyed.
        https://bugs.webkit.org/show_bug.cgi?id=52877

        On Page destruction, any outstanding Geolocation permission
        requests should be cancelled, because the Geolocation can only
        access the client indirectly via m_frame->page().

        Page destruction is signalled by a call to the
        Frame::pageDestroyed() method. This explictly calls
        DOMWindow::resetGeolocation which ultimately calls Geolocation::reset.

        Geolocation::reset() detaches from the GeolocationController,
        cancels requests, watches and single shots, and sets the
        permission state back to Unknown.

        Frame::pageDestroyed() is also called by FrameLoader even though
        the page is not destroyed. We should still cancel permission
        requests, because the GeolocationClient will become inaccessible
        to the Geolocation object after this call.

        Frame::transferChildFrameToNewDocument also indirectly calls
        Geolocation::reset when the frame is reparented between
        pages. Ideally we would like the Geolocation's activities to
        continue after reparenting, see bug
        https://bugs.webkit.org/show_bug.cgi?id=55577

        Since GeolocationController is owned by Page, and all Geolocation
        objects will now unsubscribe from the GeolocationController on
        pageDetached(), we no longer need to call stopUpdating() from the
        GeolocationController's destructor. Instead we can simply assert
        that there should be no no observers. See related bug
        https://bugs.webkit.org/show_bug.cgi?id=52216 .

        Introduced new method 'numberOfPendingPermissionRequests' on
        GeolocationClientMock to count the number of outstanding pending
        permission requests. This provides a reusable implementation for
        client-based implementations of the LayoutTestController's
        numberOfPendingGeolocationPermissionRequests method.

        Test: fast/dom/Geolocation/page-reload-cancel-permission-requests.html

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::resetGeolocation):
        * page/DOMWindow.h:
        * page/Frame.cpp:
        (WebCore::Frame::pageDestroyed):
        (WebCore::Frame::transferChildFrameToNewDocument):
        * page/Geolocation.cpp:
        (WebCore::Geolocation::~Geolocation):
        (WebCore::Geolocation::page):
        (WebCore::Geolocation::reset):
        (WebCore::Geolocation::disconnectFrame):
        (WebCore::Geolocation::lastPosition):
        (WebCore::Geolocation::requestPermission):
        (WebCore::Geolocation::startUpdating):
        (WebCore::Geolocation::stopUpdating):
        * page/Geolocation.h:
        * page/GeolocationController.cpp:
        (WebCore::GeolocationController::~GeolocationController):
        * page/Navigator.cpp:
        (WebCore::Navigator::resetGeolocation):
        * page/Navigator.h:
        * platform/mock/GeolocationClientMock.cpp:
        (WebCore::GeolocationClientMock::numberOfPendingPermissionRequests):
        * platform/mock/GeolocationClientMock.h:

2011-03-10  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Darin Adler.

        Able to move nodes across documents
        https://bugs.webkit.org/show_bug.cgi?id=19524

        Makes cross-document appendChild, insertBefore, Range.insertNode and Range.surroundContents work.
        This matches Gecko and the new Dom Core spec. There are a number of Range methods where we don't 
        match Gecko or the spec that will need to be updated in a following patch.

        Test: fast/dom/move-nodes-across-documents.html

        * dom/Element.cpp:
        (WebCore::Element::removeAttributeNode):
        * dom/NamedNodeMap.cpp:
        (WebCore::NamedNodeMap::setNamedItem):
        * dom/Node.cpp:
        (WebCore::Node::setDocumentRecursively):
        (WebCore::checkAcceptChild):
        (WebCore::Node::checkReplaceChild):
        * dom/Range.cpp:
        (WebCore::Range::insertNode):
        (WebCore::Range::surroundContents):

2011-03-09  Antti Koivisto  <antti@apple.com>

        Not reviewed.

        Reverting crash catching code, the bug being hunted was fixed by
        http://trac.webkit.org/changeset/80686

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::CachedResourceLoader):
        (WebCore::CachedResourceLoader::~CachedResourceLoader):
        (WebCore::CachedResourceLoader::requestImage):
        (WebCore::CachedResourceLoader::requestUserCSSStyleSheet):
        (WebCore::CachedResourceLoader::requestResource):
        (WebCore::CachedResourceLoader::setAutoLoadImages):
        (WebCore::CachedResourceLoader::load):
        (WebCore::CachedResourceLoader::loadDone):
        (WebCore::CachedResourceLoader::preload):
        (WebCore::CachedResourceLoader::requestPreload):
        * loader/cache/CachedResourceLoader.h:

2011-03-09  Peter Kasting  <pkasting@google.com>

        Unreviewed, build fix.

        * StringsNotToBeLocalized.txt: Add function names I forgot.
        * platform/win/SystemInfo.cpp: #if out some uncalled functions on WinCE,
          since they don't compile anyway.  Use ZeroMemory() instead of "= {0}"
          since Qt is stupid and (sometimes?!) warns about it.
        (WebCore::windowsVersion):
        (WebCore::processorArchitecture):

2011-03-09  Peter Kasting  <pkasting@google.com>

        Reviewed by Ryosuke Niwa.

        Add UA string tags for Windows 64.
        https://bugs.webkit.org/show_bug.cgi?id=55226

        * StringsNotToBeLocalized.txt:
        * platform/win/SystemInfo.cpp:
        (WebCore::osVersionForUAString):
        (WebCore::isWOW64):
        (WebCore::processorArchitecture):
        (WebCore::architectureTokenForUAString):
        (WebCore::windowsVersionForUAString):

2011-03-09  Peter Kasting  <pkasting@google.com>

        Unreviewed, attempted build fix.

        * WebCore.pri: Try to update include path for Qt Windows build.

2011-03-09  Peter Kasting  <pkasting@google.com>

        Unreviewed, build fix.

        * platform/win/SystemInfo.cpp:
        (WebCore::windowsVersionForUAString): Fix const conversion warning on Qt.

2011-03-09  Peter Kasting  <pkasting@google.com>

        Reviewed by Mihai Parparita.

        Unify Windows version checks.
        https://bugs.webkit.org/show_bug.cgi?id=55979

        * GNUmakefile.am: Fix spaces -> tabs.
        * StringsNotToBeLocalized.txt:
        * WebCore.pro: Add SystemInfo.* to Qt build.
        * platform/chromium/ScrollbarThemeChromiumWin.cpp:
        (WebCore::ScrollbarThemeChromiumWin::invalidateOnMouseEnterExit):
        (WebCore::ScrollbarThemeChromiumWin::getThemeState):
        (WebCore::ScrollbarThemeChromiumWin::getThemeArrowState):
        * platform/graphics/chromium/GlyphPageTreeNodeChromiumWin.cpp:
        (WebCore::fillBMPGlyphs):
        * platform/win/CursorWin.cpp:
        (WebCore::createSharedCursor):
        * platform/win/ScrollbarThemeWin.cpp:
        (WebCore::ScrollbarThemeWin::ScrollbarThemeWin):
        * platform/win/SystemInfo.cpp: Add full-fledged version check and UA string helper function.
        (WebCore::windowsVersion):
        (WebCore::windowsVersionForUAString):
        * platform/win/SystemInfo.h: Add full-fledged version check and UA string helper function.
        * rendering/RenderThemeChromiumWin.cpp:
        (WebCore::getNonClientMetrics):
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::getThemeData):
        (WebCore::RenderThemeWin::paintMenuList):
        (WebCore::RenderThemeWin::paintMenuListButton):

2011-03-09  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Tony Gentilcore.

        REGRESSION (r74807): memory corruption after CachedResourceLoader refactoring
        https://bugs.webkit.org/show_bug.cgi?id=53045
        
        Copy the URL out of the CachedResource that is being revalidated, so
        that we can still use it (in m_validatedURLs) after removing the
        resource from the memory cache, which may delete it.

        No new tests, since I was not able to trigger this locally (in a layout
        test or otherwise).

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::revalidateResource):

2011-03-09  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        VO reporting incorrect list count for http://www.macworld.com/news.html
        https://bugs.webkit.org/show_bug.cgi?id=56064

        <li> tags should not be ignored, because they provide valuable information
        to screen readers.

        Test: platform/mac/accessibility/list-items-ignored.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::accessibilityIsIgnored):

2011-03-09  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        <rdar://problem/8733254> Float disappears after incremental layout
        Fixed the original bug and a copule more issues noticed while doing so.

        Tests: fast/dynamic/dirty-float-in-clean-line.html
               fast/dynamic/float-at-line-break.html
               fast/dynamic/float-from-empty-line.html

        * rendering/RenderBlock.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::layoutInlineChildren): If findNextLineBreak() returned an empty line,
        update the line break info of the last line with the new line break position. This is tested
        by float-from-empty-line.html.
        (WebCore::RenderBlock::checkFloatsInCleanLine): Factored out code from determineStartPosition()
        into this new function.
        (WebCore::RenderBlock::determineStartPosition): Call checkFloatsInCleanLine().
        (WebCore::RenderBlock::determineEndPosition): When iterating over lines, check clean lines with
        floats, as they may yet become dirty because of the floats. This is tested by
        dirty-float-in-clean-line.html.
        (WebCore::RenderBlock::findNextLineBreak): If a float fits on the line, and the current line
        break is at the float, advance it to after the float. Otherwise, if the line gets dirty and the
        next one does not, the float will not make it into any line. This is tested by
        float-at-line-break.html.

2011-03-09  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Kent Tamura.

        selectionStart reports wrong caret position when the last characters are newlines
        https://bugs.webkit.org/show_bug.cgi?id=56061

        The bug was caused by SelectionController::setSelection's not calling
        notifyRendererOfSelectionChange when old selection was equal to new selection.

        Because InsertLineBreakCommand inserts a text node with a single LF before the caret,
        this condition holds after the command is executed. However, the values of
        selectionStart and selectionEnd still need to be updated in this case because
        the offsets counted from the beginning of textarea have been increased by 1.

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::setSelection): Call notifyRendererOfSelectionChange
        when m_selection = s.
        * manual-tests/selection-start-after-inserting-line-break-in-textarea.html: Added.

2011-03-09  Andy Estes  <aestes@apple.com>

        Reviewed by Adam Barth.

        Bad cast in HTMLTreeBuilder::processStartTag
        https://bugs.webkit.org/show_bug.cgi?id=55955

        Test: fast/parser/self-closing-foreign-content.html

        When the parser encounters an svg or mathml root element, it places the
        insertion mode into InForeignContentMode. However, if the root element
        is self-closing (e.g. <svg />) then the element is never placed on the
        open elements stack. This leaves the parser in an inconsistent state
        where it is in InForeignContentMode but no foreign content is in the
        open element stack.

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTagForInBody): If a self-closing
        foreign element is inserted into the tree, do not set the insertion
        mode to InForeignContentMode.

2011-03-09  Gavin Barraclough  <barraclough@apple.com>

        Qt build fix.

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

2011-03-09  Andy Estes  <aestes@apple.com>

        Reviewed by Adam Barth.

        REGRESSION (r80320): Assertion failure when processing mis-nested foreign content.
        https://bugs.webkit.org/show_bug.cgi?id=55982

        Test: fast/parser/fragment-foreign-content-misnested.html
        
        It is a parse error to encounter certain start tags while the parser's
        insertion mode is InForeignContentMode (e.g. <br>). In these cases, we
        are to pop open elements off the HTMLElementStack until a foreign
        content scope marker is encountered. Before the change in r80320 to not
        insert a fake HTML element during fragment parsing, said fake HTML
        element counted as a foreign content scope marker.
        
        With r80320, no fake HTML element is inserted and the stack is popped
        until empty in cases where no other element claims to be a foreign
        content scope marker. Fix this by treating the DocumentFragment as a
        foreign content scope marker.

        * html/parser/HTMLElementStack.cpp:
        (WebCore::HTMLNames::isForeignContentScopeMarker): Take a
        ContainerNode* instead of a Element*.
        (WebCore::HTMLElementStack::popUntilForeignContentScopeMarker): Pass
        topNode() to isForeignContentScopeMarker() instead of top().

2011-03-09  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Darin Adler.

        Bug 56041 - RexExp constructor should only accept flags "gim"
        We also should be passing the flags around as a bitfield rather than a string,
        and should not have redundant, incompatible code for converting the string to a bitfield!

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneDeserializer::readTerminal):
            - Need to parse flags string back to enum.

2011-03-09  James Robinson  <jamesr@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium]: Regression - Explicitly copy compositing properties from LayerChromium to CCLayerImpl
        https://bugs.webkit.org/show_bug.cgi?id=56021

        Initializes the m_doubleSided flag of LayerChromiums to the default
        value of true so the back sides of layers without
        backface-visibility:hidden are rendered.

        Test: compositing/backface-visibility.html

        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::LayerChromium):

2011-03-09  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/9110316> REGRESSION: 'ex' unit broken for vertical text

        Fall back to the verticalRightOrientation data when obtaining the x-height for vertically oriented
        text. That way we use the same metrics as for horizontal.

        This fixes regressions in fast/lists and fast/overflow vertical text tests.

        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::platformInit):
        (WebCore::SimpleFontData::platformBoundsForGlyph):

2011-03-09  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Tony Chang.

        REGRESSION: crash in nextLinePosition when extending selection forward by line in an empty document
        https://bugs.webkit.org/show_bug.cgi?id=56004

        The crash was caused by the false assumption that rootEditableElement() or documentElement()
        always return non-null pointer. Fixed the bug by adding an early exit.

        Test: editing/selection/extend-by-line-in-empty-document.html

        * editing/visible_units.cpp:
        (WebCore::previousLinePosition):
        (WebCore::nextLinePosition):

2011-03-09  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: it should be possible to copy stack trace from call stack sidebar pane.
        https://bugs.webkit.org/show_bug.cgi?id=56024

        * English.lproj/localizedStrings.js:
        * inspector/front-end/CallStackSidebarPane.js:
        (WebInspector.CallStackSidebarPane):
        (WebInspector.CallStackSidebarPane.prototype.update):
        (WebInspector.CallStackSidebarPane.prototype._contextMenu):

2011-03-09  David Hyatt  <hyatt@apple.com>

        Reviewed by Darin Adler.

        Patch FontPlatformDataLinux to properly initialize and copy orientation/text-orientation in all
        places.  Make sure text-orientation is specified in the lookups/creation in FontCustomPlatformData
        and FontCache.

        * platform/graphics/chromium/FontPlatformDataLinux.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        * platform/graphics/chromium/FontPlatformDataLinux.h:
        (WebCore::FontPlatformData::FontPlatformData):

2011-03-09  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        JavaNPObject should not use JNI directly
        https://bugs.webkit.org/show_bug.cgi?id=56009

        We move the JNI code to access a Java object's fields into
        a new JavaInstance::getField() method.

        No new tests, refactoring only.

        * bridge/jni/v8/JavaInstanceV8.cpp:
        (JavaInstance::getField):
        * bridge/jni/v8/JavaInstanceV8.h:
        * bridge/jni/v8/JavaNPObjectV8.cpp:
        (JSC::Bindings::JavaNPObjectGetProperty):

2011-03-09  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        NPAPI - jvalue conversion should not be in JavaInstance
        https://bugs.webkit.org/show_bug.cgi?id=55967

        No new tests, refactoring only.

        * bridge/jni/v8/JavaInstanceV8.cpp:
        (JavaInstance::invokeMethod):
        * bridge/jni/v8/JavaInstanceV8.h:
        * bridge/jni/v8/JavaNPObjectV8.cpp:
        (JSC::Bindings::JavaNPObjectInvoke):

2011-03-09  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Adam Roben.

        Use the Cookie Storage from the Private Browsing Storage Session directly
        https://bugs.webkit.org/show_bug.cgi?id=55986

        * WebCore.exp.in:
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

        * platform/network/mac/CookieStorageMac.mm:
        (WebCore::setCookieStoragePrivateBrowsingEnabled):
        Just copy the cookie storage from the private browsing storage session.
        * platform/network/cf/CookieStorageCFNet.cpp:
        (WebCore::setCookieStoragePrivateBrowsingEnabled):
        Ditto.

2011-03-09  Andrey Kosyakov  <caseq@chromium.org>

        Unreviewed. Fixed a crash in InspectorInstrumentation::didReceiveResponse() when loader is null (broken in r80639)

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didReceiveResourceResponseImpl):

2011-03-09  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: pass explicit agent references to InspectorBackendDispatcher
        https://bugs.webkit.org/show_bug.cgi?id=55820

        * inspector/CodeGeneratorInspector.pm:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::disconnectFrontend):
        (WebCore::InspectorController::dispatchMessageFromFrontend):

2011-03-09  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: resource errors are not reported before front-end is opened
        https://bugs.webkit.org/show_bug.cgi?id=55939

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didReceiveResourceResponseImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didReceiveResourceResponse):
        (WebCore::InspectorInstrumentation::didFailLoading):

2011-03-08  Hans Wennborg  <hans@chromium.org>

        Reviewed by Jeremy Orlow.

        IndexedDB: Add BackingStoreType parameter to IDBFactoryBackendInterface::open
        https://bugs.webkit.org/show_bug.cgi?id=55948

        Add a parameter that allows for selection of alternative backing store
        implementations.

        No new tests: no new functionality.

        * storage/IDBFactory.cpp:
        (WebCore::IDBFactory::open):
        * storage/IDBFactoryBackendImpl.cpp:
        (WebCore::IDBFactoryBackendImpl::open):
        * storage/IDBFactoryBackendImpl.h:
        * storage/IDBFactoryBackendInterface.h:

2011-03-08  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        Factor out JNI method call to be used by both JSC and V8
        https://bugs.webkit.org/show_bug.cgi?id=55966

        No new tests, refactoring only.

        * bridge/jni/JNIUtility.cpp:
        (JSC::Bindings::callJNIMethod):
        * bridge/jni/JNIUtility.h:
        * bridge/jni/jsc/JavaInstanceJSC.cpp:
        (JavaInstance::invokeMethod):
        * bridge/jni/v8/JavaInstanceV8.cpp:
        (JavaInstance::invokeMethod):

2011-03-09  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Pavel Feldman.

        Web Inspector: [Text editor] Regression in handling DOMNodeInserted/DOMNodeRemoved events
        https://bugs.webkit.org/show_bug.cgi?id=55818

        * inspector/front-end/TextViewer.js:
        (WebInspector.TextEditorMainPanel.prototype._handleDOMUpdates):

2011-03-09  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Web Inspector: we don't need to transfer objectId and hasChildren for primitive values.
        https://bugs.webkit.org/show_bug.cgi?id=55998

        * inspector/InjectedScriptSource.js:

2011-03-09  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: watch expressions should show string values in quotes.
        https://bugs.webkit.org/show_bug.cgi?id=55846

        * inspector/InjectedScriptSource.js:
        * inspector/front-end/ObjectPropertiesSection.js:
        (WebInspector.ObjectPropertyTreeElement.prototype.update):
        * inspector/front-end/RemoteObject.js:
        (WebInspector.LocalJSONObject.prototype.get description):
        * inspector/front-end/WatchExpressionsSidebarPane.js:
        (WebInspector.WatchExpressionsSection.prototype.update):
        * inspector/front-end/inspector.css:
        (.console-formatted-string, .console-formatted-regexp):

2011-03-09  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: "length" getter is invoked upon console object formatting.
        https://bugs.webkit.org/show_bug.cgi?id=55220

        * inspector/InjectedScriptSource.js:

2011-03-08  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: remove groupName from objectId.
        https://bugs.webkit.org/show_bug.cgi?id=55825

        * inspector/InjectedScriptSource.js:

2011-03-08  Xiaomei Ji  <xji@chromium.org>

        Reviewed by David Hyatt.

        Fix Regression: Content not drawn when scrolling horizontally in an RTL page.
        https://bugs.webkit.org/show_bug.cgi?id=55077.

        Inside ScrollView::calculateOverhangAreasForPainting(), when scroll position
        is negative, should include the position value into overhang rectangle's 
        starting position. 

        Tests: fast/dom/scroll-reveal-left-overflow.html
               fast/dom/scroll-reveal-top-overflow.html

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::calculateOverhangAreasForPainting):

2011-03-08  Daniel Bates  <dbates@rim.com>

        Reviewed by Darin Adler.

        Add templatized CSSMutableStyleDeclaration::get{ShorthandValue, CommonValue, LayeredShorthandValue}()
        https://bugs.webkit.org/show_bug.cgi?id=55351

        By using some template magic CSSMutableStyleDeclaration::get{ShorthandValue, CommonValue, LayeredShorthandValue}()
        can be called on an array A without the caller explicitly specifying the size of A.

        No functionality was changed. So no new tests.

        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::getPropertyValue): Modified to call templatized variants of
        CSSMutableStyleDeclaration::get{ShorthandValue, CommonValue, LayeredShorthandValue}().
        (WebCore::CSSMutableStyleDeclaration::getLayeredShorthandValue): Renamed second argument from "number" to "size"
        to better reflect its purpose - to be the size of the passed array.
        (WebCore::CSSMutableStyleDeclaration::getShorthandValue): Ditto.
        (WebCore::CSSMutableStyleDeclaration::getCommonValue): Ditto.
        (WebCore::CSSMutableStyleDeclaration::cssText): Modified to call templatized variant of CSSMutableStyleDeclaration::getShorthandValue().
        * css/CSSMutableStyleDeclaration.h:
        (WebCore::CSSMutableStyleDeclaration::getShorthandValue): Added templatized function that can determine
        the size of a passed array. Changed type of second argument to size_t since it represents the size of
        an array.
        (WebCore::CSSMutableStyleDeclaration::getCommonValue): Ditto.
        (WebCore::CSSMutableStyleDeclaration::getLayeredShorthandValue): Ditto.

2011-03-08  Enrica Casucci  <enrica@apple.com>

        Reviewed by Darin Adler.
        
        REGRESSION: Copied content loses formatting on paste to external apps.
        https://bugs.webkit.org/show_bug.cgi?id=47615
        <rdar://problem/9001214>
        
        This is a resubmission of a patch that was landed a while ago then rolled
        back because of a build failure on SnowLeopard and Leopard on the 32-bit builds.

        This patch adds a way for WebKit2 to create NSAttributedStrings from
        a DOM range without using the AppKit api initWithDOMRange that internally
        needs to access the WebView. The NSAttributedString is needed to create
        RTF formats in the pasteboard.
        This is to be considered a first step, since in the future we want to have
        an implementation based on the TextIterator.
        * WebCore.xcodeproj/project.pbxproj:
        * platform/mac/HTMLConverter.h: Added.
        * platform/mac/HTMLConverter.mm: Added.
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::writeSelection):

2011-03-08  James Robinson  <jamesr@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] Explicitly copy compositing properties from LayerChromium to CCLayerImpl
        https://bugs.webkit.org/show_bug.cgi?id=55900

        This adds an explicit step to synchronize properties from
        LayerChromiums to their corresponding CCLayerImpls.

        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::setBounds):
        * platform/graphics/chromium/LayerChromium.h:
        (WebCore::LayerChromium::bounds):
        (WebCore::LayerChromium::doubleSided):
        (WebCore::LayerChromium::setDoubleSided):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::updatePropertiesAndRenderSurfaces):
        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        (WebCore::CCLayerImpl::CCLayerImpl):
        (WebCore::CCLayerImpl::updateFromLayer):
        (WebCore::CCLayerImpl::descendantsDrawsContent):
        * platform/graphics/chromium/cc/CCLayerImpl.h:
        (WebCore::CCLayerImpl::anchorPoint):
        (WebCore::CCLayerImpl::anchorPointZ):
        (WebCore::CCLayerImpl::masksToBounds):
        (WebCore::CCLayerImpl::opacity):
        (WebCore::CCLayerImpl::position):
        (WebCore::CCLayerImpl::preserves3D):
        (WebCore::CCLayerImpl::sublayerTransform):
        (WebCore::CCLayerImpl::transform):

2011-03-08  James Robinson  <jamesr@chromium.org>

        Chromium compile fix.

        * platform/graphics/chromium/SimpleFontDataLinux.cpp:
        (WebCore::SimpleFontData::platformInit):

2011-03-08  Peter Kasting  <pkasting@google.com>

        Reviewed by James Robinson.

        Unify Windows version checks, part 1.
        https://bugs.webkit.org/show_bug.cgi?id=55979

        Make everyone (I hope) pull in SystemInfo.cpp.  Eliminate the
        now-unnecessary WindowsVersion.cpp from Chromium.

        * GNUmakefile.am:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * platform/chromium/ScrollbarThemeChromiumWin.cpp:
        (WebCore::ScrollbarThemeChromiumWin::invalidateOnMouseEnterExit):
        (WebCore::ScrollbarThemeChromiumWin::getThemeState):
        (WebCore::ScrollbarThemeChromiumWin::getThemeArrowState):
        * platform/chromium/WindowsVersion.cpp: Removed.
        * platform/chromium/WindowsVersion.h: Removed.
        * platform/graphics/chromium/GlyphPageTreeNodeChromiumWin.cpp:
        (WebCore::fillBMPGlyphs):
        * rendering/RenderThemeChromiumWin.cpp:
        (WebCore::getNonClientMetrics):

2011-03-08  Ryosuke Niwa  <rniwa@webkit.org>

        Chromium Linux build fix attempt after r80582.

        * platform/graphics/chromium/FontLinux.cpp:
        (WebCore::Font::drawGlyphs):
        * platform/graphics/chromium/SimpleFontDataLinux.cpp:
        (WebCore::SimpleFontData::platformInit):
        * platform/graphics/skia/GlyphPageTreeNodeSkia.cpp:
        (WebCore::GlyphPage::fill):

2011-03-08  Ryosuke Niwa  <rniwa@webkit.org>

        Mac build fix attempt for r80582.

        * platform/graphics/mac/ComplexTextControllerATSUI.cpp:
        (WebCore::disableLigatures):

2011-03-08  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Kent Tamura.

        Remove calls to deprecatedEditingOffset in SelectionController and VisibleSelection
        https://bugs.webkit.org/show_bug.cgi?id=54937

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::setSelection): Calls anchorNode() instead of deprecatedNode() to obtain
        the document. Also restrained the lifetime of document variable.
        (WebCore::removingNodeRemovesPosition): Compare the node with anchorNode() instead of deprecatedNode()
        to determine whether or not position becomes null after removing a node.
        (WebCore::SelectionController::directionOfEnclosingBlock): The enclosing block is always a container
        so call containerNode() instead of deprecatedNode().
        (WebCore::SelectionController::debugRenderer): Call containerNode() and computeOffsetInContainer()
        instead of deprecatedNode() and deprecatedEditingOffset() respectively.
        (WebCore::SelectionController::isInPasswordField): Look for the shadow root from containerNode()
        instead of deprecatedNode to determine whether or not selection inside a password field. Also assert
        that the specified position is not before or after the shadow root as it violates our assumption.
        * editing/VisibleSelection.cpp:
        (WebCore::makeSearchRange): Call containerNode() and offsetInContainerNode() instead of deprecatedNode()
        and deprecatedEditingOffset() respectively because start is always parent anchored and therefore
        guaranteed to be an offset inside an anchor node.
        (WebCore::VisibleSelection::adjustSelectionToAvoidCrossingEditingBoundaries): Call containerNode()
        instead of deprecatedNode() to look for the lowest editable ancestor because position before or after
        an editable element isn't editable.
        * page/DOMSelection.cpp: Call containerNode() and offsetInContainerNode() instead of deprecatedNode()
        and deprecatedEditingOffset() respectively in the following functions because they are exposed to
        DOM, which doesn't have before/after concept.
        (WebCore::DOMSelection::anchorNode):
        (WebCore::DOMSelection::anchorOffset):
        (WebCore::DOMSelection::focusNode):
        (WebCore::DOMSelection::focusOffset):
        (WebCore::DOMSelection::baseNode):
        (WebCore::DOMSelection::baseOffset):
        (WebCore::DOMSelection::extentNode):
        (WebCore::DOMSelection::extentOffset):

2011-03-08  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Adam Roben.

        Correct uninitialized variable in PolicyCallback found while
        running WebKit in BoundsChecker.
        https://bugs.webkit.org/show_bug.cgi?id=45199.

        * loader/PolicyCallback.cpp:
        (WebCore::PolicyCallback::PolicyCallback): Initialize
        m_argument.

2011-03-08  Brent Fulgham  <bfulgham@webkit.org>

        More build bustage fix.

        * platform/graphics/win/cairo/FontPlatformData.h:
        (WebCore::FontPlatformData::setOrientation): Duplicate accessor
        in WinCairo-local header.  This is such a mess!

2011-03-08  David Hyatt  <hyatt@apple.com>

        Fix build bustage.  Hide orientation setting behind a setter and stub it out in all
        FontPlatformData classes.  (This class really needs to move to a common header with ifdefs.)

        * platform/graphics/SimpleFontData.cpp:
        (WebCore::SimpleFontData::verticalRightOrientationFontData):
        * platform/graphics/cg/FontPlatformData.h:
        (WebCore::FontPlatformData::setOrientation):
        * platform/graphics/chromium/FontPlatformDataChromiumWin.h:
        (WebCore::FontPlatformData::setOrientation):
        * platform/graphics/chromium/FontPlatformDataLinux.h:
        (WebCore::FontPlatformData::setOrientation):
        * platform/graphics/cocoa/FontPlatformData.h:
        (WebCore::FontPlatformData::setOrientation):
        * platform/graphics/freetype/FontPlatformData.h:
        (WebCore::FontPlatformData::setOrientation):
        * platform/graphics/qt/FontPlatformData.h:
        (WebCore::FontPlatformData::setOrientation):
        * platform/graphics/wince/FontPlatformData.h:
        (WebCore::FontPlatformData::setOrientation):
        * platform/graphics/wx/FontPlatformData.h:
        (WebCore::FontPlatformData::setOrientation):

2011-03-08  Joe Wild  <joseph.wild@nokia.com>

        Reviewed by Csaba Osztrogonác.

        [Qt] Missing SVG variables
        https://bugs.webkit.org/show_bug.cgi?id=32941

        Basically, this patch just modifies features.pri to the Qt build to
        pass on the ENABLE_SVG_* flags to the IDL binding generator.

        Also I had remove global-construtors.html from the skip list and
        updated the associated expected results files.

        * features.pri:
        * page/DOMWindow.idl:

2011-03-08  Alok priyadarshi  <alokp@chromium.org>

        Reviewed by Dimitri Glazkov.

        Plugins needs a way to trigger style recalc
        https://bugs.webkit.org/show_bug.cgi?id=55242

        No test needed. A simple get function is added.

        * platform/graphics/chromium/PluginLayerChromium.h:
        (WebCore::PluginLayerChromium::getTextureId):

2011-03-08  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=48540, support the text-orientation CSS property.
        
        This patch adds support for two values of the text-orientation property (the ones that actually matter): vertical-right and upright.
        The TextOrientation is part of the FontDescription and used to look up fonts (similar to FontOrientation).
        
        Orientation of non-CJK characters is done using fallback font data of the appropriate orientation type, e.g., verticalRightOrientation and
        uprightOrientation fallback font data.  Vertical right is just implemented as a normal horizontal font.  Upright is implemented as a
        vertically oriented font that rotates all glyphs.
        
        The main complication implementing text-orientation is that fonts have "baked-in" vertical glyphs for letters that are hardcoded to
        a vertical right facing.  This means that you can use those special vertical glyphs for vertical-right orientation without having to 
        fall back, but then for upright orientation you have to ignore them and still fall back.  As you can see from the test case, this doesn't
        work very well, but hopefully it won't be all that common.  Limitations of CoreText prevent this case from rendering properly in either the
        simple or complex code paths, although the simple code path at least gets close.

        Added fast/blockflow/text-orientation-basic.html

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::getFontData):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator TextOrientation):
        * css/CSSPropertyNames.in:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyDeclarations):
        (WebCore::CSSStyleSelector::applyProperty):
        * css/CSSValueKeywords.in:
        * loader/cache/CachedFont.cpp:
        (WebCore::CachedFont::platformDataFromCustomData):
        * loader/cache/CachedFont.h:
        * platform/graphics/FontCache.cpp:
        (WebCore::FontPlatformDataCacheKey::FontPlatformDataCacheKey):
        (WebCore::FontPlatformDataCacheKey::operator==):
        (WebCore::computeHash):
        (WebCore::FontCache::getCachedFontPlatformData):
        * platform/graphics/FontDescription.h:
        (WebCore::FontDescription::FontDescription):
        (WebCore::FontDescription::textOrientation):
        (WebCore::FontDescription::setTextOrientation):
        (WebCore::FontDescription::operator==):
        * platform/graphics/FontFastPath.cpp:
        (WebCore::Font::glyphDataForCharacter):
        (WebCore::offsetToMiddleOfGlyph):
        * platform/graphics/SimpleFontData.cpp:
        (WebCore::SimpleFontData::SimpleFontData):
        (WebCore::SimpleFontData::verticalRightOrientationFontData):
        (WebCore::SimpleFontData::uprightOrientationFontData):
        (WebCore::SimpleFontData::brokenIdeographFontData):
        (WebCore::SimpleFontData::DerivedFontData::~DerivedFontData):
        * platform/graphics/SimpleFontData.h:
        (WebCore::SimpleFontData::hasVerticalGlyphs):
        (WebCore::SimpleFontData::isTextOrientationFallback):
        * platform/graphics/cairo/FontCustomPlatformData.h:
        * platform/graphics/cocoa/FontPlatformData.h:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::textOrientation):
        (WebCore::FontPlatformData::hash):
        (WebCore::FontPlatformData::operator==):
        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::operator=):
        * platform/graphics/freetype/FontCustomPlatformDataFreeType.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/haiku/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/haiku/FontCustomPlatformData.h:
        * platform/graphics/mac/ComplexTextControllerCoreText.cpp:
        (WebCore::ComplexTextController::collectComplexTextRunsForCharactersCoreText):
        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::FontCache::createFontPlatformData):
        * platform/graphics/mac/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/mac/FontCustomPlatformData.h:
        * platform/graphics/mac/FontMac.mm:
        (WebCore::showGlyphsWithAdvances):
        (WebCore::Font::drawGlyphs):
        * platform/graphics/mac/GlyphPageTreeNodeMac.cpp:
        (WebCore::shouldUseCoreText):
        (WebCore::GlyphPage::fill):
        * platform/graphics/mac/SimpleFontDataCoreText.cpp:
        (WebCore::SimpleFontData::getCFStringAttributes):
        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::platformInit):
        (WebCore::SimpleFontData::platformBoundsForGlyph):
        (WebCore::SimpleFontData::platformWidthForGlyph):
        * platform/graphics/pango/FontCustomPlatformDataPango.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/qt/FontCustomPlatformData.h:
        * platform/graphics/qt/FontCustomPlatformDataQt.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/skia/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/skia/FontCustomPlatformData.h:
        * platform/graphics/win/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/win/FontCustomPlatformData.h:
        * platform/graphics/win/FontCustomPlatformDataCairo.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/win/FontCustomPlatformDataCairo.h:
        * platform/graphics/wince/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/wince/FontCustomPlatformData.h:
        * platform/text/TextOrientation.h: Added.
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::requiresIdeographicBaseline):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::initialTextOrientation):

2011-03-08  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        addInlineStyleIfNeeded should take EditingStyle
        https://bugs.webkit.org/show_bug.cgi?id=55950

        Deployed EditingStyle in addInlineStyleIfNeeded, StyleChange::StyleChange, and StyleChange::init.
        Also extracted EditingStyle::styleIsPresentInComputedStyleOfNode from removeStyleFromRunBeforeApplyingStyle.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::StyleChange::StyleChange): Takes EditingStyle instead of CSSStyleDeclaration.
        (WebCore::StyleChange::init): Ditto.
        (WebCore::ApplyStyleCommand::applyBlockStyle): Instantiates StyleChange.
        (WebCore::ApplyStyleCommand::applyInlineStyleToNodeRange): Calls addInlineStyleIfNeeded.
        (WebCore::ApplyStyleCommand::removeStyleFromRunBeforeApplyingStyle): Calls styleIsPresentInComputedStyleOfNode.
        (WebCore::ApplyStyleCommand::removeInlineStyleFromElement): Calls EditingStyle::mergeInlineStyleOfElement
        instead of manually merging styles.
        (WebCore::ApplyStyleCommand::applyInlineStyleToPushDown): Calls addInlineStyleIfNeeded.
        (WebCore::ApplyStyleCommand::addInlineStyleIfNeeded): Takes EditingStyle instead of CSSMutableStyleDeclaration.
        * editing/ApplyStyleCommand.h:
        * editing/CompositeEditCommand.h:
        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::styleIsPresentInComputedStyleOfNode): Extracted from removeStyleFromRunBeforeApplyingStyle.
        * editing/EditingStyle.h:

2011-03-08  Nico Weber  <thakis@chromium.org>

        Reviewed by James Robinson.

        Crash on big blur radius with canvas
        https://bugs.webkit.org/show_bug.cgi?id=55951

        Move the clamping code out of an if branch, so that it happens in the
        canvas case as well.

        Test: fast/canvas/shadow-huge-blur.html

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::setPlatformShadow):

2011-03-08  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Sam Weinig.

        WK2: Cannot set focus on an element when focus is outside of WKView
        https://bugs.webkit.org/show_bug.cgi?id=55281
    
        In WK2, focus cannot be set from the WebProcess side because there's no platformWidget().
        Instead, the focus/unfocus messages need to be sent to the UIProcess side.

        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::setFocus):

2011-03-08  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Overflow: scroll areas should not paint white in scroll corner if the 
        scrollbars are overlay.
        <rdar://problem/9082871>

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintScrollCorner):
        Don't paint the scroll corner white if we have overlay scrollbars.

2011-03-08  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Darin Adler.

        The first time animations are committed they have a bad start time
        https://bugs.webkit.org/show_bug.cgi?id=55947

        Do a check for a returned lastCommitTime of <=0 and replace it
        with the mediaTime.


        * platform/graphics/ca/win/CACFLayerTreeHost.cpp:
        (WebCore::CACFLayerTreeHost::notifyAnimationsStarted):

2011-03-08  James Kozianski  <koz@chromium.org>

        Reviewed by David Levin.

        Expose isValidProtocol() in KURL.h.
        https://bugs.webkit.org/show_bug.cgi?id=54594

        This is needed to validate protocols used in calls to
        navigator.registerProtocolHandler().

        * platform/KURL.cpp:
        * platform/KURL.h:
        * platform/KURLGoogle.cpp:
        (WebCore::isValidProtocol):

2011-03-08  Adam Roben  <aroben@apple.com>

        Set svn:mime-type to text/css for all Inspector CSS files

        This will cause them to be served with the correct MIME type from svn.webkit.org's web
        interface.

        Rubber-stamped by Tim Hatcher.

        * inspector/front-end/audits.css: Added property svn:mime-type.
        * inspector/front-end/goToLineDialog.css: Added property svn:mime-type.
        * inspector/front-end/heapProfiler.css: Added property svn:mime-type.
        * inspector/front-end/helpScreen.css: Added property svn:mime-type.
        * inspector/front-end/inspector.css: Added property svn:mime-type.
        * inspector/front-end/inspectorSyntaxHighlight.css: Added property svn:mime-type.
        * inspector/front-end/networkPanel.css: Added property svn:mime-type.
        * inspector/front-end/popover.css: Added property svn:mime-type.
        * inspector/front-end/textViewer.css: Added property svn:mime-type.

2011-03-08  Andrei Popescu  <andreip@google.com>

        Reviewed by Steve Block.

        IDBCallbacks::onsuccess(IDBIndex*) is unused and should be removed.
        https://bugs.webkit.org/show_bug.cgi?id=55938

        The IndexedDatabase specification changed and IDBIndex objects are no
        longer created asynchronously. We therefore no longer need this method.

        No new tests, just cleanup.

        * storage/IDBCallbacks.h:
        * storage/IDBRequest.cpp:
        * storage/IDBRequest.h:

2011-03-08  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r80551.
        http://trac.webkit.org/changeset/80551
        https://bugs.webkit.org/show_bug.cgi?id=55933

        It broke 285 tests on Qt bot (Requested by Ossy on #webkit).

        * WebCore.pro:
        * platform/SharedBuffer.cpp:
        * platform/SharedBuffer.h:
        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::QNetworkReplyHandler):
        (WebCore::QNetworkReplyHandler::sendResponseIfNeeded):
        (WebCore::QNetworkReplyHandler::forwardData):
        (WebCore::QNetworkReplyHandler::start):
        * platform/network/qt/QNetworkReplyHandler.h:
        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::ResourceHandle::supportsBufferedData):
        (WebCore::ResourceHandle::bufferedData):
        * platform/qt/QtByteBlock.cpp: Removed.
        * platform/qt/QtByteBlock.h: Removed.
        * platform/qt/SharedBufferQt.cpp:

2011-03-08  Andreas Kling  <kling@webkit.org>

        Reviewed by Benjamin Poulain.

        RenderObject: Pass complex type arguments as const-references.

        * WebCore.exp.in:
        * rendering/RenderObject.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::drawBoxSideFromPath):
        (WebCore::RenderObject::drawArcForBoxSide):
        (WebCore::RenderObject::localToAbsolute):
        (WebCore::RenderObject::absoluteToLocal):

2011-03-08  Andreas Kling  <kling@webkit.org>

        Reviewed by Antonio Gomes.

        Path: Make measurement functions const
        https://bugs.webkit.org/show_bug.cgi?id=55914

        * platform/graphics/Path.cpp:
        (WebCore::Path::length):
        (WebCore::Path::pointAtLength):
        (WebCore::Path::normalAngleAtLength):
        * platform/graphics/Path.h:
        * platform/graphics/cairo/PathCairo.cpp:
        (WebCore::Path::strokeBoundingRect):
        * platform/graphics/cg/PathCG.cpp:
        (WebCore::Path::strokeBoundingRect):
        * platform/graphics/openvg/PathOpenVG.cpp:
        (WebCore::Path::strokeBoundingRect):
        (WebCore::Path::length):
        (WebCore::Path::pointAtLength):
        (WebCore::Path::normalAngleAtLength):
        * platform/graphics/qt/PathQt.cpp:
        (WebCore::Path::strokeBoundingRect):
        (WebCore::Path::length):
        (WebCore::Path::pointAtLength):
        (WebCore::Path::normalAngleAtLength):
        * platform/graphics/skia/PathSkia.cpp:
        (WebCore::Path::strokeBoundingRect):
        * platform/graphics/wince/PathWinCE.cpp:
        (WebCore::Path::strokeBoundingRect):
        * platform/graphics/wx/PathWx.cpp:
        (WebCore::Path::strokeBoundingRect):

2011-03-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Do not set juntion sides on scrollbar stepper buttons
        https://bugs.webkit.org/show_bug.cgi?id=55868

        Fixes rendering of steppers for themes using rounded stepper
        buttons on scrollbars like Adwaita.

        * platform/gtk/ScrollbarThemeGtk3.cpp:
        (WebCore::ScrollbarThemeGtk::paintButton):

2011-03-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Use doubles instead of integers for coordinates when rendering arrows
        https://bugs.webkit.org/show_bug.cgi?id=55866

        To prevent off-by-one rounding errors.

        * platform/gtk/RenderThemeGtk3.cpp:
        (WebCore::RenderThemeGtk::paintMenuList):
        * platform/gtk/ScrollbarThemeGtk3.cpp:
        (WebCore::ScrollbarThemeGtk::paintButton):

2011-03-08  Markus Goetz  <guruz@guruz.de>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Use the QNetworkAccessManager zerocopy feature
        https://bugs.webkit.org/show_bug.cgi?id=50082

        The feature will be introduced in Qt 4.8.
        This patch is backwards compatible with Qt 4.7.

        * WebCore.pro:
        * platform/SharedBuffer.cpp:
        * platform/SharedBuffer.h:
        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::QNetworkReplyHandler):
        (WebCore::QNetworkReplyHandler::bufferedData):
        (WebCore::QNetworkReplyHandler::sendResponseIfNeeded):
        (WebCore::QNetworkReplyHandler::downloadProgress):
        (WebCore::QNetworkReplyHandler::forwardData):
        (WebCore::QNetworkReplyHandler::start):
        * platform/network/qt/QNetworkReplyHandler.h:
        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::ResourceHandle::supportsBufferedData):
        (WebCore::ResourceHandle::bufferedData):
        * platform/qt/SharedBufferQt.cpp:
        (WebCore::SharedBuffer::wrapQtByteBlock):
        (WebCore::SharedBuffer::hasPlatformData):
        (WebCore::SharedBuffer::platformData):
        (WebCore::SharedBuffer::platformDataSize):
        (WebCore::SharedBuffer::maybeTransferPlatformData):
        (WebCore::SharedBuffer::clearPlatformData):

2011-03-08  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Fix compilation warnings after r80429
        https://bugs.webkit.org/show_bug.cgi?id=55864

        * platform/gtk/WidgetGtk.cpp:

2011-03-08  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, GTK build fix after r80536

        * GNUmakefile.am:

2011-03-08  Zan Dobersek  <zandobersek@gmail.com>

        Reviewed by Martin Robinson.

        [Gtk] toDataURL uses incorrect quality value when saving GdkPixbuf to buffer
        https://bugs.webkit.org/show_bug.cgi?id=55878

        Multiply the quality parameter by 100 to put it in the range [0, 100] as needed
        when saving GdkPixbuf to a buffer.

        * platform/graphics/gtk/ImageBufferGtk.cpp:
        (WebCore::ImageBuffer::toDataURL):

2011-03-07  Daniel Cheng  <dcheng@chromium.org>

        Unreviewed.

        Final build fix for r80536.

        * DerivedSources.make:

2011-03-07  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Reviewed by Kent Tamura.

        [EFL] Adjust functions of WebCore's efl port to WebKit coding style
        https://bugs.webkit.org/show_bug.cgi?id=55924

        Adjust webkit style to PlatformKeyboardEventEfl, PlatformMouseEventEfl and WidgetEfl files.

        * platform/efl/PlatformKeyboardEventEfl.cpp:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        * platform/efl/PlatformMouseEventEfl.cpp:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        * platform/efl/WidgetEfl.cpp:
        (WebCore::Widget::frameRectsChanged):
        (WebCore::Widget::setEvasObject):

2011-03-07  Daniel Cheng  <dcheng@chromium.org>

        Unreviewed.

        More build fixes for r80536.

        * CMakeLists.txt:
        * platform/chromium/ClipboardChromium.cpp:
        * platform/chromium/ClipboardChromium.h:

2011-03-07  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Reviewed by Antonio Gomes.

        [EFL] Adjust functions of ScrollbarEfl.cpp to WebKit coding style
        https://bugs.webkit.org/show_bug.cgi?id=55917

        Adjust webkit style to ScrollbarEfl files.

        * platform/efl/ScrollbarEfl.cpp:
        (scrollbarEflEdjeMessage):
        (ScrollbarEfl::setParent):
        (ScrollbarEfl::updateThumbPositionAndProportion):
        (ScrollbarEfl::frameRectsChanged):
        (ScrollbarEfl::paint):
        * platform/efl/ScrollbarEfl.h:

2011-03-07  Daniel Cheng  <dcheng@chromium.org>

        Unreviewed.

        Build fix for Chromium after r80536.

        * platform/chromium/DataTransferItemChromium.cpp:
        * platform/chromium/DataTransferItemsChromium.cpp:

2011-03-07  Daniel Cheng  <dcheng@chromium.org>

        Unreviewed.

        More build fixes for r80536.

        * CMakeLists.txt:
        * platform/chromium/ClipboardChromium.cpp:
        * platform/chromium/ClipboardChromium.h:

2011-03-07  Daniel Cheng  <dcheng@chromium.org>

        Reviewed by David Levin.

        Add support for DataTransferItems
        https://bugs.webkit.org/show_bug.cgi?id=55115

        This patch adds stubs for DataTransferItems/DataTransferItem as well as implementing the
        basic functionality on the Chromium port. With the exception of DataTransferItem::getAsFile,
        all functionality on the DataTransferItems collection has been implemented.
        This change does not actually hook up DataTransferItems to reflect the actual contents of a
        drop/paste operation or to allow mutation of data in a copy/drag start yet. That will be
        enabled via several followup patches.

        Test: editing/pasteboard/data-transfer-items.html

        * Android.mk:
        * CMakeLists.txt:
        * CodeGenerators.pri:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/generic/RuntimeEnabledFeatures.cpp:
        * bindings/generic/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setDataTransferItemsEnabled):
        (WebCore::RuntimeEnabledFeatures::dataTransferItemsEnabled):
        * bindings/scripts/CodeGeneratorV8.pm: Do not emit an #include line for DOMString, since it's built-in.
        * dom/Clipboard.h:
        (WebCore::Clipboard::policy):
        * dom/Clipboard.idl:
        * dom/DataTransferItem.cpp: Added.
        * dom/DataTransferItem.h: Added.
        (WebCore::DataTransferItem::~DataTransferItem):
        * dom/DataTransferItem.idl: Added.
        * dom/DataTransferItems.h: Added.
        (WebCore::DataTransferItems::~DataTransferItems):
        * dom/DataTransferItems.idl: Added.
        * dom/StringCallback.cpp: Added.
        (WebCore::StringCallback::scheduleCallback):
        * dom/StringCallback.h: Added.
        (WebCore::StringCallback::~StringCallback):
        * dom/StringCallback.idl: Added.
        * platform/chromium/ClipboardChromium.cpp:
        (WebCore::ClipboardChromium::items):
        * platform/chromium/ClipboardChromium.h:
        * platform/chromium/DataTransferItemChromium.cpp: Added.
        (WebCore::DataTransferItemChromium::create):
        (WebCore::DataTransferItemChromium::DataTransferItemChromium):
        (WebCore::DataTransferItemChromium::kind):
        (WebCore::DataTransferItemChromium::type):
        (WebCore::DataTransferItemChromium::getAsString):
        * platform/chromium/DataTransferItemChromium.h: Added.
        * platform/chromium/DataTransferItemsChromium.cpp: Added.
        (WebCore::DataTransferItemsChromium::create):
        (WebCore::DataTransferItemsChromium::DataTransferItemsChromium):
        (WebCore::DataTransferItemsChromium::length):
        (WebCore::DataTransferItemsChromium::item):
        (WebCore::DataTransferItemsChromium::deleteItem):
        (WebCore::DataTransferItemsChromium::clear):
        (WebCore::DataTransferItemsChromium::add):
        * platform/chromium/DataTransferItemsChromium.h: Added.

2011-03-07  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        selectionHasStyle and selectionStartHasStyle should use EditingStyle
        https://bugs.webkit.org/show_bug.cgi?id=55902

        Deployed EditingStyle in selectionHasStyle and selectionStartHasStyle.
        This allowed us to move triStateOfStyle from Editor.cpp to EditingStyle.cpp.

        Also changed the argument lists of selectionHasStyle and selectionStartHasStyle
        to take a property id and a value instead of a CSSMutableStyleDeclaration to cleanup
        call sites of these two functions.

        * WebCore.exp.in: Updated the signature of selectionHasStyle. No longer exports
        selectionStartHasStyle because it's not called anywhere outside of WebCore.
        * WebCore.order: Ditto.
        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::EditingStyle): Added a new constructor that takes a property id
        and a property value.
        (WebCore::EditingStyle::triStateOfStyle): Moved from Editor.cpp.
        * editing/EditingStyle.h:
        (WebCore::EditingStyle::create): Added.
        * editing/Editor.cpp:
        (WebCore::Editor::selectionStartHasStyle): Takes a property id and a value instead of
        a CSSStyleDeclaration.
        (WebCore::Editor::selectionHasStyle): Ditto.
        * editing/Editor.h: Updated the signatures of selectionStartHasStyle and selectionHasStyle.
        * editing/EditorCommand.cpp:
        (WebCore::executeToggleStyle): Calls selectionStartHasStyle and selectionHasStyle.
        (WebCore::stateStyle): Ditto.
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::checkOrEnableIfNeeded): Ditto.

2011-03-07  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        REGRESSION (HTML5 tree builder): Text selection in a large text document is extremely slow
        https://bugs.webkit.org/show_bug.cgi?id=55898

        <rdar://problem/9095839> REGRESSION: Mail hangs with a certain large mail message when
        linkifying e-mail addresses in in -[DOMCharacterData setData:]

        Changes render tree of fast/text/large-text-composed-char.html, but not image results.

        * dom/CharacterData.cpp: (WebCore::CharacterData::parserAppendData):
        Changed parserAppendData() to accept a maximum length, and moved code from Text::createWithLengthLimit().

        * dom/CharacterData.h: Moved a constant for maximum length from Text.h.

        * dom/Text.cpp: (WebCore::Text::createWithLengthLimit):
        * dom/Text.h:
        This function was unused in ToT. Moved code around to share with CharacterData.

        * html/parser/HTMLConstructionSite.cpp: (WebCore::HTMLConstructionSite::insertTextNode):
        Chnaged to split large text nodes while parsing again.

2011-03-07  Alice Boxhall  <aboxhall@chromium.org>

        Reviewed by Adam Barth.

        Fix platform/image-encoders/JPEGImageEncoder.cpp empty_output_buffer() behaviour
        https://bugs.webkit.org/show_bug.cgi?id=54522

        Fix jpegEmptyOutputBuffer() by ignoring free_in_buffer value as required.

        No new tests, as this code is not yet used in WebKit. Once this code is used to implement canvas.toDataUrl(), the canvas tests will exercise it.

        * platform/image-encoders/JPEGImageEncoder.cpp:
        (WebCore::jpegEmptyOutputBuffer):

2011-03-07  Sergey Glazunov  <serg.glazunov@gmail.com>

        Reviewed by Eric Seidel.

        Add the missing insertedIntoDocument() call in SVGVKernElement and SVGHKernElement
        https://bugs.webkit.org/show_bug.cgi?id=55896

        Test: svg/dom/vkern-element-crash.html

        * svg/SVGHKernElement.cpp:
        (WebCore::SVGHKernElement::insertedIntoDocument):
        * svg/SVGVKernElement.cpp:
        (WebCore::SVGVKernElement::insertedIntoDocument):

2011-03-07  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r80514.
        http://trac.webkit.org/changeset/80514
        https://bugs.webkit.org/show_bug.cgi?id=55915

        Caused assertion failures (Requested by ukai on #webkit).

        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::setPlatformShadow):
        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::paintSkBitmap):

2011-03-07  Cosmin Truta  <ctruta@chromium.org>

        Reviewed by Adam Barth.

        SVG <image> referenced by <use> is displayed incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=55750

        The result of sourceURI must use the URL of the enclosing document as base.
        Otherwise, the base may sometimes be empty, and, as a consequence,
        the intermediate KURL object may be invalid.

        Test: svg/custom/use-image-in-g.svg

        * svg/SVGImageLoader.cpp:
        (WebCore::SVGImageLoader::sourceURI):

2011-03-07  Helder Correia  <helder@sencha.com>

        Reviewed by Simon Fraser.

        Shadow is not shown when using strokeRect with a gradient strokeStyle
        https://bugs.webkit.org/show_bug.cgi?id=52509

        This happens in CG and is related to bug 51869, this time to be fixed
        in GraphicsContext::strokeRect(const FloatRect& r, float lineWidth).
        We need to draw the gradient clipped to the stroke on a CGLayer first,
        and then draw the layer on the GraphicsContext.

        Tests: fast/canvas/canvas-strokeRect-gradient-shadow.html
               svg/css/rect-gradient-stroke-shadow.svg

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::strokeRect):

2011-03-07  Justin Novosad  <junov@chromium.org>

        Reviewed by Kenneth Russell.

        Fix for blurs behind bitmap images in Chromium, and boosting
        shadow blur quality 
        Bug URLs:
                https://bugs.webkit.org/show_bug.cgi?id=55410
                https://bugs.webkit.org/show_bug.cgi?id=55506

        No new tests. Covered by existing layout tests. 

        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::setPlatformShadow): Turn on high quality shadows and fix shadow color
        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::paintSkBitmap): Propagate the draw looper from context to painter

2011-03-07  Andreas Kling  <kling@webkit.org>

        Unreviewed Mac build fix after r80508.

        * WebCore.exp.in:

2011-03-07  Enrica Casucci  <enrica@apple.com>

        Unreviewed build fix.

        Rolling back  http://trac.webkit.org/changeset/80497 due to the
        32-bit build failures.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/mac/HTMLConverter.h: Removed.
        * platform/mac/HTMLConverter.mm: Removed.
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::writeSelection):

2011-03-07  Andreas Kling  <kling@webkit.org>

        Reviewed by Benjamin Poulain.

        FrameView::setBaseBackgroundColor: Pass Color argument as const-reference.

        * page/FrameView.cpp:
        (WebCore::FrameView::setBaseBackgroundColor):
        * page/FrameView.h:

2011-03-07  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        REGRESSION(r78147): Crash on http://gnarf.net/jquery/test/
        https://bugs.webkit.org/show_bug.cgi?id=55894

        The m_frame can disappear out from under us, and there's no point in
        checking whether the load is complete in a non-existant frame.

        Test: fast/parser/document-write-into-initial-document.html

        * dom/Document.cpp:
        (WebCore::Document::explicitClose):

2011-03-07  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r80500.
        http://trac.webkit.org/changeset/80500
        https://bugs.webkit.org/show_bug.cgi?id=55908

        Caused mysterious GYP error (Requested by abarth on #webkit).

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:

2011-03-07  Adam Barth  <abarth@webkit.org>

        Fix Chromium Mac build.  This header should only be included when the
        feature is enabled.

        * platform/cf/RunLoopTimerCF.cpp:

2011-03-07  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        Add WML files to WebCore.gypi
        https://bugs.webkit.org/show_bug.cgi?id=55905

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:

2011-03-07  Adrienne Walker  <enne@google.com>

        Reviewed by James Robinson.

        [chromium] Add missing include to #define Skia parameter
        https://bugs.webkit.org/show_bug.cgi?id=55885

        * platform/graphics/chromium/ShaderChromium.h:

2011-03-07  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        AX: WK1 needs to use ScrollView attachment for AXScrollArea, WK2 does not
        https://bugs.webkit.org/show_bug.cgi?id=55706

        * WebCore.exp.in:
        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::rootObjectForFrame):
        * accessibility/AXObjectCache.h:
        * accessibility/AccessibilityScrollView.cpp:
        (WebCore::AccessibilityScrollView::isAttachment):
        (WebCore::AccessibilityScrollView::widgetForAttachmentView):
        * accessibility/AccessibilityScrollView.h:
        (WebCore::AccessibilityScrollView::firstChild):
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:]):

2011-03-07  Enrica Casucci  <enrica@apple.com>

        Reviewed by Darin Adler.
        
        REGRESSION: Copied content loses formatting on paste to external apps.
        https://bugs.webkit.org/show_bug.cgi?id=47615
        <rdar://problem/9001214>

        This is a resubmission of a patch that was landed a while ago then rolled
        back because of a build failure on SnowLeopard and Leopard.
        
        This patch adds a way for WebKit2 to create NSAttributedStrings from
        a DOM range without using the AppKit api initWithDOMRange that internally
        needs to access the WebView. The NSAttributedString is needed to create
        RTF formats in the pasteboard.
        This is to be considered a first step, since in the future we want to have
        an implementation based on the TextIterator.

        * WebCore.xcodeproj/project.pbxproj: Added new file.
        * platform/mac/HTMLConverter.h: Added.
        * platform/mac/HTMLConverter.mm: Added.
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::writeSelection): We now use WebHTMLConverter
        class for WebKit2 to create the NSAttributedString from the DOM range.

2011-03-07  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        Add some missing platform files to WebCore.gypi
        https://bugs.webkit.org/show_bug.cgi?id=55897

        There are a bunch more, but this is a start.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:

2011-03-07  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        Rename JNIBridgeV8.cpp/h to JavaFieldV8.cpp/h
        https://bugs.webkit.org/show_bug.cgi?id=55879

        No new tests, refactoring only.

        * Android.v8bindings.mk:
        * WebCore.gypi:
        * bridge/jni/v8/JavaClassV8.cpp:
        * bridge/jni/v8/JavaClassV8.h:
        * bridge/jni/v8/JavaFieldV8.cpp: Renamed from Source/WebCore/bridge/jni/v8/JNIBridgeV8.cpp.
        (JavaField::JavaField):
        * bridge/jni/v8/JavaFieldV8.h: Renamed from Source/WebCore/bridge/jni/v8/JNIBridgeV8.h.
        (JSC::Bindings::JavaField::name):
        (JSC::Bindings::JavaField::type):
        (JSC::Bindings::JavaField::getJNIType):
        * bridge/jni/v8/JavaInstanceV8.cpp:
        * bridge/jni/v8/JavaNPObjectV8.cpp:

2011-03-07  Daniel Cheng  <dcheng@chromium.org>

        Reviewed by Tony Chang.

        Add plumbing for paste support to ChromiumDataObject::types()
        https://bugs.webkit.org/show_bug.cgi?id=55792

        This is a preliminary patch to support event.dataTransfer.items. This
        adds plumbing to support retrieving the types in a paste event. It also
        moves the check for files in a drag/paste up to ClipboardChromium, since
        internal code needs to be able to differentiate between actual files in
        a drag and someone that simply decided to use "Files" as a custom type
        string.

        Test: editing/pasteboard/onpaste-text-html-types.html

        * platform/chromium/ChromiumDataObject.cpp:
        (WebCore::ChromiumDataObject::types):
        (WebCore::ChromiumDataObject::containsFilenames):
        * platform/chromium/ChromiumDataObject.h:
        * platform/chromium/ClipboardChromium.cpp:
        (WebCore::ClipboardChromium::types):
        * platform/chromium/ClipboardMimeTypes.cpp:
        * platform/chromium/ClipboardMimeTypes.h:

2011-03-07  Takayoshi Kochi  <kochi@chromium.org>

        Reviewed by Tony Chang.

        [chromium] Use preferred locale information when choosing fallback
        font using fontconfig on Linux platform.
        http://bugs.webkit.org/show_bug.cgi?id=55453

        No new tests, as it depends on ICU and locale setting, so it will be
        covered by Chromium side.

        * platform/chromium/PlatformBridge.h:
        * platform/graphics/chromium/FontCacheLinux.cpp:

2011-03-07  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add gobject, cpp, and objc bindings to WebCore.gypi
        https://bugs.webkit.org/show_bug.cgi?id=55892

        These are also excluded from the Chromium build but needed for various
        other ports.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:

2011-03-07  Sergey Glazunov  <serg.glazunov@gmail.com>

        Reviewed by Dimitri Glazkov.

        Node::checkAddChild and Node::checkReplaceChild shouldn't change the owner document of a node
        https://bugs.webkit.org/show_bug.cgi?id=55803

        Test: fast/dom/dom-method-document-change.html

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::insertBefore):
        (WebCore::ContainerNode::replaceChild):
        (WebCore::ContainerNode::appendChild):
        * dom/Node.cpp:
        (WebCore::Node::checkReplaceChild):
        (WebCore::Node::checkAddChild):
        * dom/Node.h:

2011-03-07  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r80484.
        http://trac.webkit.org/changeset/80484
        https://bugs.webkit.org/show_bug.cgi?id=55891

        requires Chromium DEPS roll (Requested by dcheng on #webkit).

        * platform/chromium/ChromiumDataObject.cpp:
        (WebCore::ChromiumDataObject::types):
        * platform/chromium/ChromiumDataObject.h:
        (WebCore::ChromiumDataObject::containsFilenames):
        * platform/chromium/ClipboardChromium.cpp:
        (WebCore::ClipboardChromium::types):
        * platform/chromium/ClipboardMimeTypes.cpp:
        * platform/chromium/ClipboardMimeTypes.h:

2011-03-07  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        Add missing bindings/js files to WebCore.gypi
        https://bugs.webkit.org/show_bug.cgi?id=55888

        These files are excluded from the Chromium build but needed for the Mac
        build.

        * WebCore.gypi:

2011-03-07  Daniel Cheng  <dcheng@chromium.org>

        Reviewed by Tony Chang.

        Add plumbing for paste support to ChromiumDataObject::types()
        https://bugs.webkit.org/show_bug.cgi?id=55792

        This is a preliminary patch to support event.dataTransfer.items. This
        adds plumbing to support retrieving the types in a paste event. It also
        moves the check for files in a drag/paste up to ClipboardChromium, since
        internal code needs to be able to differentiate between actual files in
        a drag and someone that simply decided to use "Files" as a custom type
        string.

        Test: editing/pasteboard/onpaste-text-html-types.html

        * platform/chromium/ChromiumDataObject.cpp:
        (WebCore::ChromiumDataObject::types):
        (WebCore::ChromiumDataObject::containsFilenames):
        * platform/chromium/ChromiumDataObject.h:
        * platform/chromium/ClipboardChromium.cpp:
        (WebCore::ClipboardChromium::types):
        * platform/chromium/ClipboardMimeTypes.cpp:
        * platform/chromium/ClipboardMimeTypes.h:

2011-03-07  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        Viewport Warning/Error Messages Are Now Inaccurate
        https://bugs.webkit.org/show_bug.cgi?id=53707

        Correct and improve the error messages for viewport parsing.

        Tests: fast/viewport/viewport-warnings-1.html
               fast/viewport/viewport-warnings-2.html
               fast/viewport/viewport-warnings-3.html
               fast/viewport/viewport-warnings-4.html
               fast/viewport/viewport-warnings-5.html
               fast/viewport/viewport-warnings-6.html

        * dom/ViewportArguments.cpp:
        (WebCore::numericPrefix):
        (WebCore::findSizeValue): remove incorrect device-width / height tips.
        (WebCore::setViewportFeature): report a warning for an unrecognized key.
        (WebCore::viewportErrorMessageTemplate): added template for unrecognized key.
        (WebCore::viewportErrorMessageLevel): classify an unrecognized key is an error.
        * dom/ViewportArguments.h: removed no longer used warnings.

2011-03-07  James Robinson  <jamesr@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] Separate the update and draw portions of LayerRendererChromium's drawLayers function
        https://bugs.webkit.org/show_bug.cgi?id=54047

        This splits up LayerRendererChromium::drawLayers() into two phases,
        one that updates layers and one that actually draws them.  Most of the
        patch is moving the bodies of drawLayers() and updateLayersRecursive()
        into smaller helper functions.

        The main entry point is renamed updateAndDrawLayers(), but otherwise
        has the same signature as drawLayers() did.  Internally it does the
        following:

        1.) Updates the root layer's contents
        2.) Updates the root layer's scrollbars
        3.) Updates the RenderSurface tree and the contents of all child
        layers
        4.) Draws the root layer and root layer scrollbars
        5.) Draws all child layers using the previously updated
        CCLayerImpl/RenderSurface data.

        A few things still need to be done after this patch to complete the separation
        of the update and draw step, but they can happen in later patches:
        *) The root layer and root layer scrollbars contents should be
        uploaded to textures at draw time, not update time.
        *) The RenderSurface tree should be updated at draw time, not update
        time.

        Covered by the compositing/ tests.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::LayerRendererChromium):
        (WebCore::LayerRendererChromium::updateRootLayerContents):
        (WebCore::LayerRendererChromium::updateRootLayerScrollbars):
        (WebCore::LayerRendererChromium::drawRootLayer):
        (WebCore::LayerRendererChromium::updateAndDrawLayers):
        (WebCore::LayerRendererChromium::updateLayers):
        (WebCore::LayerRendererChromium::drawLayers):
        (WebCore::LayerRendererChromium::getFramebufferPixels):
        (WebCore::LayerRendererChromium::updatePropertiesAndRenderSurfaces):
        (WebCore::LayerRendererChromium::updateContentsRecursive):
        (WebCore::LayerRendererChromium::drawLayer):
        * platform/graphics/chromium/LayerRendererChromium.h:
        (WebCore::LayerRendererChromium::visibleRectSize):
        * platform/graphics/chromium/RenderSurfaceChromium.cpp:
        (WebCore::RenderSurfaceChromium::drawSurface):
        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        * platform/graphics/chromium/cc/CCLayerImpl.h:

2011-03-07  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Sort WebCore.gypi
        https://bugs.webkit.org/show_bug.cgi?id=55887

        These files should be in order.  This is preparation for adding in the
        missing files.

        * WebCore.gypi:

2011-03-07  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed buildfix after r80478.

        * dom/Document.cpp: Add suggested parentheses to make GCC happy.
        (WebCore::Document::didReceiveTask):

2011-03-07  Yong Li  <yoli@rim.com>

        Reviewed by Darin Adler.

        Defer ScriptExecutionContext::Task's in Document when page loading is deferred.
        Schedule them with timer when page loading is resumed. The tasks will be performed
        in the original order. This fixes the problem that database callbacks could be missed
        when page loading was deferred.
        https://bugs.webkit.org/show_bug.cgi?id=49401

        Manual test added: manual-tests/database-callback-deferred.html.

        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::~Document):
        (WebCore::Document::didReceiveTask):
        (WebCore::Document::postTask):
        (WebCore::Document::pendingTasksTimerFired):
        (WebCore::Document::willDeferLoading):
        (WebCore::Document::didResumeLoading):
        * dom/Document.h:
        * manual-tests/database-callback-deferred.html: Added.
        * page/PageGroupLoadDeferrer.cpp:
        (WebCore::PageGroupLoadDeferrer::PageGroupLoadDeferrer):
        (WebCore::PageGroupLoadDeferrer::~PageGroupLoadDeferrer):

2011-03-07  Antti Koivisto  <antti@apple.com>

        Reviewed by Sam Weinig.

        Use HashMaps for caching primitive values
        https://bugs.webkit.org/show_bug.cgi?id=55873
        
        Most documents use only small subset of cacheable primitive values. By replacing
        fixed size cache arrays with HashMaps we can reduce the constant memory usage while also
        expanding the range of cacheable values.

        * css/CSSPrimitiveValueCache.cpp:
        (WebCore::CSSPrimitiveValueCache::CSSPrimitiveValueCache):
        (WebCore::CSSPrimitiveValueCache::createIdentifierValue):
        (WebCore::CSSPrimitiveValueCache::createColorValue):
        (WebCore::CSSPrimitiveValueCache::createValue):
        * css/CSSPrimitiveValueCache.h:

2011-03-07  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        Split JNIBridgeJSC.cpp/h into JavaArrayJSC.cpp/h and JavaFieldJSC.cpp/h
        https://bugs.webkit.org/show_bug.cgi?id=55881

        No new tests, refactoring only.

        * Android.jscbindings.mk:
        * GNUmakefile.am:
        * WebCore.xcodeproj/project.pbxproj:
        * bridge/jni/jsc/JNIBridgeJSC.cpp: Removed.
        * bridge/jni/jsc/JNIBridgeJSC.h: Removed.
        * bridge/jni/jsc/JNIUtilityPrivate.cpp:
        * bridge/jni/jsc/JavaClassJSC.cpp:
        * bridge/jni/jsc/JavaClassJSC.h:
        * bridge/jni/jsc/JavaInstanceJSC.cpp:

2011-03-07  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Replace WebKit2's decidePolicyForMIMEType with decidePolicyForResponse
        https://bugs.webkit.org/show_bug.cgi?id=55827

        * loader/EmptyClients.h:
        (WebCore::EmptyFrameLoaderClient::dispatchDecidePolicyForResponse):
        * loader/FrameLoaderClient.h:
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::didReceiveResponse):
        * loader/PolicyChecker.cpp:
        (WebCore::PolicyChecker::checkContentPolicy):
        * loader/PolicyChecker.h:
        Rename FrameLoaderClient::dispatchDecidePolicyForMIMEType to dispatchDecidePolicyForResponse
        and pass the entire response, instead of just the MIMEType.

2011-03-07  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Darin Adler.

        Add API to enumerate/delete files downloaded for <audio> and <video>
        https://bugs.webkit.org/show_bug.cgi?id=55267
        <rdar://problem/9049280>

        No new tests, this is just more plumbing.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::getSitesInMediaCache): Make static, call MediaPlayer static method.
        (WebCore::HTMLMediaElement::clearMediaCache): Ditto.
        (WebCore::HTMLMediaElement::clearMediaCacheForSite): Ditto.
        * html/HTMLMediaElement.h:

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayerFactory::MediaPlayerFactory): Add new media engine factory functions.
        (WebCore::addMediaEngine): Ditto.
        (WebCore::MediaPlayer::getSitesInMediaCache): Call static method on all installed media engines.
        (WebCore::MediaPlayer::clearMediaCache): Ditto.
        (WebCore::MediaPlayer::clearMediaCacheForSite): Ditto.
        * platform/graphics/MediaPlayer.h:

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::registerMediaEngine): Update for MediaEngineRegistrar change.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::registerMediaEngine): Ditto.

        * platform/graphics/qt/MediaPlayerPrivatePhonon.cpp:
        (WebCore::MediaPlayerPrivatePhonon::registerMediaEngine): Ditto.

        * platform/graphics/qt/MediaPlayerPrivateQt.cpp:
        (WebCore::MediaPlayerPrivateQt::registerMediaEngine): Ditto.

        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::registerMediaEngine): Ditto.

        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp:
        (WebCore::MediaPlayerPrivate::registerMediaEngine): Ditto.

2011-03-07  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        Split JNIBridge.cpp/h into JavaString.h and JavaMethod.cpp/h
        https://bugs.webkit.org/show_bug.cgi?id=55774

        No new tests, refactoring only.

        * Android.jscbindings.mk:
        * Android.v8bindings.mk:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * bridge/jni/JavaMethod.cpp:
        (JavaMethod::JavaMethod):
        (JavaMethod::~JavaMethod):
        (appendClassName):
        (JavaMethod::signature):
        (JavaMethod::JNIReturnType):
        (JavaMethod::methodID):
        * bridge/jni/JavaMethod.h:
        (JSC::Bindings::JavaMethod::name):
        (JSC::Bindings::JavaMethod::returnType):
        (JSC::Bindings::JavaMethod::parameterAt):
        (JSC::Bindings::JavaMethod::numParameters):
        (JSC::Bindings::JavaMethod::isStatic):
        * bridge/jni/JavaString.h:
        (JSC::Bindings::JavaString::JavaString):
        (JSC::Bindings::JavaString::utf8):
        (JSC::Bindings::JavaString::length):
        (JSC::Bindings::JavaString::impl):
        * bridge/jni/jni_jsobject.mm:
        * bridge/jni/jsc/JNIBridgeJSC.h:
        * bridge/jni/v8/JNIBridgeV8.h:
        * bridge/jni/v8/JavaClassV8.cpp:
        * bridge/jni/v8/JavaClassV8.h:
        * bridge/jni/v8/JavaInstanceV8.cpp:

2011-03-07  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Steve Block.

        Add source to IDBCursor, objectStore to IDBIndex, and remove storeName
        https://bugs.webkit.org/show_bug.cgi?id=55812

        This brings us in line with what's in the spec:
        http://dvcs.w3.org/hg/IndexedDB/raw-file/tip/Overview.html

        * storage/IDBCursor.cpp:
        (WebCore::IDBCursor::create):
        (WebCore::IDBCursor::IDBCursor):
        (WebCore::IDBCursor::source):
        * storage/IDBCursor.h:
        * storage/IDBCursor.idl:
        * storage/IDBCursorWithValue.cpp:
        (WebCore::IDBCursorWithValue::create):
        (WebCore::IDBCursorWithValue::IDBCursorWithValue):
        * storage/IDBCursorWithValue.h:
        * storage/IDBIndex.cpp:
        (WebCore::IDBIndex::IDBIndex):
        * storage/IDBIndex.h:
        (WebCore::IDBIndex::create):
        (WebCore::IDBIndex::objectStore):
        * storage/IDBIndex.idl:
        * storage/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::createIndex):
        (WebCore::IDBObjectStore::index):
        * storage/IDBRequest.cpp:
        (WebCore::IDBRequest::onSuccess):

2011-03-07  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        AX: kAXCellForColumnAndRowParameterizedAttribute doesn't work ARIA grids with colspans
        https://bugs.webkit.org/show_bug.cgi?id=55735

        The ARIA grid implementation needed to verify the row/column range of a cell instead of 
        assuming a 1-1 mapping between children and row/column.

        Test: platform/mac/accessibility/aria-table-with-colspan-cells.html

        * accessibility/AccessibilityARIAGrid.cpp:
        (WebCore::AccessibilityARIAGrid::cellForColumnAndRow):

2011-03-07  Andrei Popescu  <andreip@google.com>

        Reviewed by Steve Block.

        IDBRequest::onSuccess(IDBObjectStore*) should be removed as it is unused.
        IDBObjectStore objects used to be created asynchronously, so we needed
        this method to be invoked, with the new object store as the parameter,
        whenever the creation succeeded. The spec has changed so that IDBObjectStore
        objects are created synchronously, so this method is no longer needed.
        https://bugs.webkit.org/show_bug.cgi?id=55777

        No new tests, just refactoring.

        * storage/IDBCallbacks.h:
        * storage/IDBRequest.cpp:
        * storage/IDBRequest.h:

2011-03-04  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        JavaParameter should be removed
        https://bugs.webkit.org/show_bug.cgi?id=55772

        No new tests, refactoring only.

        * bridge/jni/JNIBridge.cpp:
        (JavaMethod::JavaMethod):
        (JavaMethod::~JavaMethod):
        (JavaMethod::signature):
        * bridge/jni/JNIBridge.h:
        (JSC::Bindings::JavaMethod::parameterAt):
        (JSC::Bindings::JavaMethod::numParameters):
        * bridge/jni/JNIUtility.h:
        * bridge/jni/jsc/JavaInstanceJSC.cpp:
        (JavaInstance::invokeMethod):
        * bridge/jni/v8/JNIUtilityPrivate.cpp:
        (JSC::Bindings::convertNPVariantToJValue):
        * bridge/jni/v8/JNIUtilityPrivate.h:
        * bridge/jni/v8/JavaInstanceV8.cpp:
        (JavaInstance::invokeMethod):

2011-03-07  Antti Koivisto  <antti@apple.com>

        Reviewed by Oliver Hunt.

        REGRESSION (r79574): fast/dom/global-constructors.html failing on Windows 7 Release (Tests) bots 
        https://bugs.webkit.org/show_bug.cgi?id=55166
        <rdar://problem/9050430>
        
        Make CSS primitive value cache per-document.
        
        Test: http/tests/security/cross-origin-css-primitive.html

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForNinePieceImage):
        (WebCore::zoomAdjustedPixelValue):
        (WebCore::zoomAdjustedNumberValue):
        (WebCore::zoomAdjustedPixelValueForLength):
        (WebCore::valueForReflection):
        (WebCore::getPositionOffsetValue):
        (WebCore::CSSComputedStyleDeclaration::currentColorOrValidColor):
        (WebCore::getBorderRadiusCornerValue):
        (WebCore::computedTransform):
        (WebCore::getDelayValue):
        (WebCore::getDurationValue):
        (WebCore::CSSComputedStyleDeclaration::getFontSizeCSSValuePreferringKeyword):
        (WebCore::CSSComputedStyleDeclaration::valueForShadow):
        (WebCore::valueForFamily):
        (WebCore::renderTextDecorationFlagsToCSSValue):
        (WebCore::fillRepeatToCSSValue):
        (WebCore::fillSizeToCSSValue):
        (WebCore::contentToCSSValue):
        (WebCore::counterToCSSValue):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseSheet):
        (WebCore::CSSParser::parseRule):
        (WebCore::CSSParser::parseKeyframeRule):
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseColor):
        (WebCore::CSSParser::parseSelector):
        (WebCore::CSSParser::parseDeclaration):
        (WebCore::CSSParser::setStyleSheet):
        (WebCore::CSSParser::parseWCSSInputProperty):
        (WebCore::parseBackgroundClip):
        (WebCore::CSSParser::parseFillShorthand):
        (WebCore::CSSParser::parsePage):
        (WebCore::CSSParser::parseSizeParameter):
        (WebCore::CSSParser::parseContent):
        (WebCore::CSSParser::parseAttr):
        (WebCore::CSSParser::parseBackgroundColor):
        (WebCore::CSSParser::parseFillPositionXY):
        (WebCore::CSSParser::parseFillPosition):
        (WebCore::CSSParser::parseFillRepeat):
        (WebCore::CSSParser::parseFillSize):
        (WebCore::CSSParser::parseFillProperty):
        (WebCore::CSSParser::parseAnimationDelay):
        (WebCore::CSSParser::parseAnimationDirection):
        (WebCore::CSSParser::parseAnimationDuration):
        (WebCore::CSSParser::parseAnimationFillMode):
        (WebCore::CSSParser::parseAnimationIterationCount):
        (WebCore::CSSParser::parseAnimationName):
        (WebCore::CSSParser::parseAnimationPlayState):
        (WebCore::CSSParser::parseAnimationProperty):
        (WebCore::CSSParser::parseTransformOriginShorthand):
        (WebCore::CSSParser::parseAnimationTimingFunction):
        (WebCore::CSSParser::parseDashboardRegions):
        (WebCore::CSSParser::parseCounterContent):
        (WebCore::CSSParser::parseShape):
        (WebCore::CSSParser::parseFont):
        (WebCore::CSSParser::parseFontFamily):
        (WebCore::CSSParser::parseFontStyle):
        (WebCore::CSSParser::parseFontVariant):
        (WebCore::CSSParser::parseFontWeight):
        (WebCore::ShadowParseContext::ShadowParseContext):
        (WebCore::ShadowParseContext::commitLength):
        (WebCore::ShadowParseContext::commitStyle):
        (WebCore::CSSParser::parseShadow):
        (WebCore::CSSParser::parseReflect):
        (WebCore::BorderImageParseContext::BorderImageParseContext):
        (WebCore::BorderImageParseContext::commitNumber):
        (WebCore::BorderImageParseContext::commitBorderImage):
        (WebCore::CSSParser::parseBorderImage):
        (WebCore::CSSParser::parseBorderRadius):
        (WebCore::CSSParser::parseCounter):
        (WebCore::parseDeprecatedGradientPoint):
        (WebCore::parseDeprecatedGradientColorStop):
        (WebCore::CSSParser::parseDeprecatedGradient):
        (WebCore::valueFromSideKeyword):
        (WebCore::parseGradientColorOrKeyword):
        (WebCore::CSSParser::parseLinearGradient):
        (WebCore::CSSParser::parseRadialGradient):
        (WebCore::CSSParser::parseGradientColorStops):
        (WebCore::CSSParser::parseTransform):
        (WebCore::CSSParser::parseTransformOrigin):
        (WebCore::CSSParser::parseTextEmphasisStyle):
        * css/CSSParser.h:
        (WebCore::CSSParser::primitiveValueCache):
        * css/CSSPrimitiveValue.cpp:
        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::createIdentifier):
        (WebCore::CSSPrimitiveValue::createColor):
        (WebCore::CSSPrimitiveValue::create):
        * css/CSSPrimitiveValueCache.cpp: Added.
        (WebCore::CSSPrimitiveValueCache::CSSPrimitiveValueCache):
        (WebCore::CSSPrimitiveValueCache::~CSSPrimitiveValueCache):
        (WebCore::CSSPrimitiveValueCache::createIdentifierValue):
        (WebCore::CSSPrimitiveValueCache::createColorValue):
        (WebCore::CSSPrimitiveValueCache::createValue):
        * css/CSSPrimitiveValueCache.h: Added.
        (WebCore::CSSPrimitiveValueCache::create):
        (WebCore::CSSPrimitiveValueCache::createValue):
        * dom/Document.cpp:
        (WebCore::Document::cssPrimitiveValueCache):
        * dom/Document.h:

2011-03-06  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Filter sources in WebCore GYP build for Mac
        https://bugs.webkit.org/show_bug.cgi?id=55857

        This patch removes a large number of files that do not build as part of
        the Mac build.  I'm not fully sold on this method of
        including/excluding files, but it's the "gyp way" so we should probably
        try it first.

        This patch also sets xcode_list_excluded_files to 0, which removes the
        excluded files from the Xcode project file, which is necessary in order
        to prevent the header map feature from including the wrong header file.

        * gyp/WebCore.gyp:

2011-03-07  Ryuan Choi  <ryuan.choi@samsung.com>

        Unreviewed EFL build fix.

        [EFL] Build break on Debug build.
        https://bugs.webkit.org/show_bug.cgi?id=55858

        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::themePartCacheEntrySurfaceCreate):

2011-03-06  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add webcore_derived_source_files to WebCore.gypi
        https://bugs.webkit.org/show_bug.cgi?id=55856

        This is the list of files generated by the Mac port.  It's possible
        other ports generate a different list of files.

        * WebCore.gypi:
        * gyp/WebCore.gyp:

2011-03-06  Naoki Takano  <takano.naoki@gmail.com>

        Reviewed by Kent Tamura.

        Input type=number spin buttons remain invisible but functional after div changed from hidden to visible.
        https://bugs.webkit.org/show_bug.cgi?id=55839
        http://crbug.com/73866
        http://crbug.com/62527

        We also need style change for m_innerSpinButton not only for m_outerSpinBuggon when styleDidChange() is called.

        Test: fast/forms/input-appearance-spinbutton-visibility.html

        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::styleDidChange):

2011-03-06  Naoki Takano  <takano.naoki@gmail.com>

        Reviewed by Kent Tamura.

        [Chromium] Autocomplete suggestion extends out of window (and onto second monitor)
        https://bugs.webkit.org/show_bug.cgi?id=54795

        Implement width clip logic according to browser screen width and popup window width. This fix is enough for Win and Mac, but there is a problem in Linux. Because WebScreenInfoFactory::screenInfo() can get only merged screen size, not the screen size where the browser exists.

        Test: manual-tests/popup-width-restriction-within-screen.html

        * manual-tests/popup-width-restriction-within-screen.html: Added.
        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupContainer::layoutAndCalculateWidgetRect): Implement the width clip logic according to screen width.

2011-03-06  Yuta Kitamura  <yutak@chromium.org>

        Reviewed by Kent Tamura.

        Add SHA-1 for new WebSocket protocol
        https://bugs.webkit.org/show_bug.cgi?id=55039

        * ForwardingHeaders/wtf/SHA1.h: Added.

2011-03-06  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Antti Koivisto.

        QuickTime based media engines should respect private browsing mode
        https://bugs.webkit.org/show_bug.cgi?id=55848

        No new tests, it is only possible to test this by manually deleting and monitoring the
        the Quicktime caches.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::privateBrowsingStateDidChange): Add logging.

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::MediaPlayer): Initialize m_privateBrowsing.
        (WebCore::MediaPlayer::loadWithNextMediaEngine): Set privacy mode on new media engine.
        (WebCore::MediaPlayer::setPrivateBrowsingMode): Stash setting in m_privateBrowsing.
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::setPrivateBrowsingMode):

        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::MediaPlayerPrivateQTKit): Initialize m_privateBrowsing.
        (WebCore::MediaPlayerPrivateQTKit::createQTMovie): Pass private browsing attribute when
            creating new movie.
        (WebCore::MediaPlayerPrivateQTKit::setPrivateBrowsingMode): New, store privacy setting in
            m_privateBrowsing and set movie attribute.

        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::MediaPlayerPrivateQuickTimeVisualContext):
            Initialize m_privateBrowsing.
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::setPrivateBrowsingMode): New, store 
            privacy setting in m_privateBrowsing and call QTMovie.
        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.h:

        * platform/graphics/win/QTMovie.cpp:
        (QTMoviePrivate::QTMoviePrivate): Initialize m_privateBrowsing.
        (QTMovie::load):Pass private browsing property when creating new movie.
        (QTMovie::setPrivateBrowsingMode):  New, store privacy setting in m_privateBrowsing and 
            set movie property.
        * platform/graphics/win/QTMovie.h:

2011-03-06  Daniel Bates  <dbates@rim.com>

        Reviewed by Darin Adler.

        style.borderSpacing always returns empty string
        https://bugs.webkit.org/show_bug.cgi?id=54816

        Teach CSSMutableStyleDeclaration::getPropertyValue() how to reconstitute
        the value for border-spacing from the value of the WebKit internal CSS
        property -webkit-border-horizontal-spacing and -webkit-border-vertical-spacing.

        The CSS property border-spacing describes the horizontal and vertical border
        spacing for an HTML Table element. Notice, WebKit internally represents the value
        of this property as two properties: -webkit-border-horizontal-spacing and
        -webkit-border-vertical-spacing, for the horizontal and vertical border spacing,
        respectively. And WebKit doesn't know to reconstitute these internal properties.
        Therefore style.borderSpacing always returns the empty string.

        Test: fast/css/table-border-spacing.html

        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::getPropertyValue):
        (WebCore::CSSMutableStyleDeclaration::borderSpacingValue): Added.
        * css/CSSMutableStyleDeclaration.h:

2011-03-06  Dan Bernstein  <mitz@apple.com>

        Reviewed by Oliver Hunt.

        <rdar://problem/9093327> Implement -hyphenate-limit-{before,after}
        https://bugs.webkit.org/show_bug.cgi?id=55850

        Tests: fast/css/parsing-hyphenate-limit.html
               fast/text/hyphenate-limit-before-after.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::computedProperties) Updated this array with the new properties and some old properties
        that it was missing.
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue): Added
        CSSPropertyWebkitHyphenateLimit{Before,After}.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue): Parse -webkit-hyphenate-limit-{before,after}, allowing
        'auto' and non-negative integers.

        * css/CSSPropertyNames.in: Added -webkit-hyphenate-limit-{before,after}.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty): Handle CSSPropertyWebkitHyphenateLimit{Before,After}.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::tryHyphenating): Added minimum prefix and suffix length parameters and checks to only
        allow hyphenation if the prefix and the suffix are sufficiently long.
        (WebCore::RenderBlock::findNextLineBreak): Pass the limits to tryHyphenating().

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::diff): A difference in hyphenation limits is a layout difference.

        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::hyphenationLimitBefore): Added.
        (WebCore::InheritedFlags::hyphenationLimitAfter): Added.
        (WebCore::InheritedFlags::setHyphenationLimitBefore): Added.
        (WebCore::InheritedFlags::setHyphenationLimitAfter): Added.
        (WebCore::InheritedFlags::initialHyphenationLimitBefore): Added. Returns -1, which is the
        representation of 'auto'.
        (WebCore::InheritedFlags::initialHyphenationLimitAfter): Ditto.

        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData): Initialize hyphenation limits.
        (WebCore::StyleRareInheritedData::operator==): Compare hyphenation limits.
        * rendering/style/StyleRareInheritedData.h:

2011-03-06  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Sam Weinig.

        WebKit2: Use CFNetwork Sessions API.
        https://bugs.webkit.org/show_bug.cgi?id=55435.

        When Private Browsing is enabled, use cookies from a in-memory cookie storage based on the
        Private Browsing Storage Session.

        * WebCore.exp.in:
        Add the new WKSI functions.
        * platform/mac/WebCoreSystemInterface.h:
        Ditto.
        * platform/mac/WebCoreSystemInterface.mm:
        Ditto.

        * platform/mac/CookieJar.mm:
        (WebCore::cookies):
        If USE(CFURLSTORAGESESSIONS) and there is a Private Browsing Cookie Storage, call into WKSI.
        Otherwise, behave the same as before.
        (WebCore::cookieRequestHeaderFieldValue):
        Ditto.
        (WebCore::setCookies):
        Ditto.
        (WebCore::cookiesEnabled):
        Ditto
        (WebCore::getRawCookies):
        Ditto.
        (WebCore::deleteCookie):
        Ditto.

        * platform/network/CookieStorage.h:
        * platform/network/cf/CookieStorageCFNet.cpp:
        (WebCore::privateBrowsingCookieStorage):
        Keep track of the Private Browsing Cookie Storage in a locally defined static inside a
        function instead of at the global scope.
        (WebCore::currentCookieStorage):
        Use privateBrowsingCookieStorage.
        (WebCore::setCurrentCookieStorage):
        Ditto.
        (WebCore::setCookieStoragePrivateBrowsingEnabled):
        If USE(CFURLSTORAGESESSIONS), send the Private Browsing Storage Session to
        wkCreatePrivateInMemoryHTTPCookieStorage.
        * platform/network/mac/CookieStorageMac.mm:
        (WebCore::privateBrowsingCookieStorage):
        Keep track of the Private Browsing Cookie Storage.
        (WebCore::setCookieStoragePrivateBrowsingEnabled):
        If USE(CFURLSTORAGESESSIONS), then set or clear privateBrowsingCookieStorage().
        Added a FIXME to observe changes to the Private Browsing Cookie Storage when it is defined.

        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::shouldRelaxThirdPartyCookiePolicy):
        Refactor the logic to determine whether or not to relax the third party cookie policy here.
        If USE(CFURLSTORAGESESSIONS), then get the information from the privateBrowsingCookieStorage.
        (WebCore::ResourceHandle::createNSURLConnection):
        Use shouldRelaxThirdPartyCookiePolicy.
        (WebCore::ResourceHandle::loadResourceSynchronously):
        Ditto.

2011-03-05  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r80428.
        http://trac.webkit.org/changeset/80428
        https://bugs.webkit.org/show_bug.cgi?id=55833

        Broke SnowLeopard (Requested by xan_ on #webkit).

        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::handlePostReadFile):

2011-03-01  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Windowless plugins override the view cursor
        https://bugs.webkit.org/show_bug.cgi?id=55531

        manual test: manual-tests/plugins/windowless.html

        * platform/gtk/WidgetGtk.cpp:
        (WebCore::Widget::setCursor): Call into the ChromeClient implementation now.
        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::initXEvent): Instead of setting the window for windowless
        plugin events, set the window value to none. This method is also used to send
        focus in / focus out events to windowed plugins, but this is not one of the plugin
        types where the window parameter matters. This matches what Mozilla does. Also
        pass in the display of the widget itself, not the default display.
        (WebCore::PluginView::handleMouseEvent): When the cursor leaves the plugin area,
        reset the cursor.
        (WebCore::PluginView::platformGetValue): Clean up this section slightly. Give the
        widget the top-level window explicitly. This matches Mozilla.

2011-03-05  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] http/tests/plugins/post-url-file.html fails on GTK+
        https://bugs.webkit.org/show_bug.cgi?id=55826

        Correct the implementation of handlePostReadFile which uses GIO APIs and
        actually resizes the buffer to fit the entire size of the file data. This
        was likely leading to memory corruption until now.

        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::handlePostReadFile): Fix this method.

2011-03-05  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [Chromium] Allow dynamic enabling of detailed heap profiles.
        https://bugs.webkit.org/show_bug.cgi?id=55824

        Detailed heap profiles can be now enabled by typing "leakz" in Profiles tab.

        * inspector/front-end/DetailedHeapshotView.js:
        (WebInspector.DetailedHeapshotView.prototype.isDetailedSnapshot):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype._finishHeapSnapshot.doParse):
        (WebInspector.ProfilesPanel.prototype._finishHeapSnapshot):
        (WebInspector.ProfilesPanel.prototype._reportHeapSnapshotProgress):
        (WebInspector.ProfilesPanel.prototype.handleShortcut):
        (WebInspector.ProfilesPanel.prototype._displayDetailedHeapProfilesEnabledHint.hideHint):
        (WebInspector.ProfilesPanel.prototype._displayDetailedHeapProfilesEnabledHint):
        (WebInspector.ProfilesPanel.prototype._enableDetailedHeapProfiles):
        (WebInspector.ProfilesPanel.prototype._recognizeKeyboardCombo):

2011-03-05  Qi Zhang  <qi.2.zhang@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] Mobile Devices should include Model and Firmware Version in Webkit Generated User Agent String
        https://bugs.webkit.org/show_bug.cgi?id=48636

        Add model infomation into user agent string when qtmobility is available, but only for symbian, Maemo and MeeGo.

        * WebCore.pri:
        * features.pri:

2011-03-05  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: adding null check to prevent inspector tests from failing.

        * inspector/front-end/TextViewer.js:
        (WebInspector.TextEditorGutterChunk.prototype.get offsetTop):
        (WebInspector.TextEditorMainChunk.prototype.get offsetTop):

2011-03-05  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: chromium rebaseline, flaky test fix.

        * inspector/front-end/BreakpointManager.js:
        (WebInspector.DOMBreakpointView.prototype.populateStatusMessageElement.decorateNode):
        (WebInspector.DOMBreakpointView.prototype.populateStatusMessageElement):
        (WebInspector.DOMBreakpointView.prototype._format.formatters.s):
        (WebInspector.DOMBreakpointView.prototype._format.append):
        (WebInspector.DOMBreakpointView.prototype._format):

2011-03-04  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: [chromium] pause when script is running is broken.
        https://bugs.webkit.org/show_bug.cgi?id=55762

        * inspector/CodeGeneratorInspector.pm:

2011-03-05  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        Add Derived Sources to WebCore GYP build
        https://bugs.webkit.org/show_bug.cgi?id=55813

        Adding the derived source action to the GYP file required tweaking
        DerivedSources.make.  I'm not sure how DerivedSources.make worked
        before beause these paths were incorrectly based.

        * DerivedSources.make:
        * gyp/generate-derived-sources.sh: Added.
        * gyp/WebCore.gyp:

2011-03-04  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: fix layout tests flakiness.
        https://bugs.webkit.org/show_bug.cgi?id=55816

        - Order of issuing of evaluateForTestInFrontend was not guaranteed on the backend side (InspectorAgent side)
        - Order of dispatching using timeouts was guaranteed via queueing. Source of all kinds of pains on SnowLeopard Release (inspector.js)

        * inspector/CodeGeneratorInspector.pm:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        (WebCore::InspectorAgent::disconnectFrontend):
        (WebCore::InspectorAgent::populateScriptObjects):
        (WebCore::InspectorAgent::evaluateForTestInFrontend):
        (WebCore::InspectorAgent::issueEvaluateForTestCommands):
        * inspector/InspectorAgent.h:
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.FormattedRecord):
        * inspector/front-end/inspector.js:
        (WebInspector.dispatch):

2011-03-05  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        WebCore GYP build should generate fewer than 10,000 compile errors per file
        https://bugs.webkit.org/show_bug.cgi?id=55810

        This patch adds some missing include paths.  We need to figure out how
        to handle separate include paths per port.  It's clear that
        ForwardingHeaders are only useful for Mac, but it's less clear how to
        handle the others.

        * WebCore.gypi:
        * gyp/WebCore.gyp:

2011-03-05  Dan Bernstein  <mitz@apple.com>

        Reviewed by Cameron Zwarich.

        <rdar://problem/9082946> Make the Core Text code path in GlyphPage::fill() more robust
        https://bugs.webkit.org/show_bug.cgi?id=55817

        * platform/graphics/mac/GlyphPageTreeNodeMac.cpp:
        (WebCore::GlyphPage::fill): When determining if a CTRun uses the primary font, compare against
        a CGFont obtained from Core Text for the primary font. This CGFont may be different from
        the CGFont stored in the FontPlatformData.

2011-03-05  Ilya Sherman  <isherman@chromium.org>

        Reviewed by Darin Adler.

        HTMLInputElement::setValue() should schedule change event when the element is focused.
        Refactored tracking of "changed since last change event" state from renderer to DOM.In service of https://code.google.com/p/chromium/issues
        In service of https://code.google.com/p/chromium/issues/detail?id=42716
        https://bugs.webkit.org/show_bug.cgi?id=53160

        Test: fast/forms/onchange-change-type.html
        Test: fast/forms/onchange-setvalueforuser.html

        * WebCore.exp.in:
        * dom/Document.cpp:
        (WebCore::Document::setFocusedNode):
        * dom/Element.h:
        (WebCore::Element::wasChangedSinceLastFormControlChangeEvent): Added.
        (WebCore::Element::setChangedSinceLastFormControlChangeEvent): Added.
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::HTMLFormControlElement):
        (WebCore::HTMLFormControlElement::wasChangedSinceLastFormControlChangeEvent): Added.
        (WebCore::HTMLFormControlElement::setChangedSinceLastFormControlChangeEvent): Added.
        (WebCore::HTMLFormControlElement::dispatchFormControlChangeEvent): Also clear the "changed since last change event" flag.
        (WebCore::HTMLFormControlElement::dispatchFormControlInputEvent): Also set the "changed since last change event" flag.
        * html/HTMLFormControlElement.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::updateType): Also clear the "changed since last change event" flag.
        (WebCore::HTMLInputElement::setValue):
            For a focused text field, dispatch an input event, but delay the change event until the field loses focus.
        (WebCore::HTMLInputElement::defaultEventHandler):
        (WebCore::HTMLInputElement::stepUpFromRenderer):
        * html/shadow/TextControlInnerElements.cpp:
        (WebCore::SearchFieldCancelButtonElement::defaultEventHandler):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::RenderTextControl):
        (WebCore::RenderTextControl::subtreeHasChanged):
        * rendering/RenderTextControl.h:
        * rendering/RenderTextControlMultiLine.cpp:
        (WebCore::RenderTextControlMultiLine::subtreeHasChanged):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::subtreeHasChanged):
        * wml/WMLInputElement.cpp:
        (WebCore::WMLInputElement::WMLInputElement):
        (WebCore::WMLInputElement::defaultEventHandler):
        * wml/WMLInputElement.h:
        (WebCore::WMLInputElement::wasChangedSinceLastFormControlChangeEvent): Added.
        (WebCore::WMLInputElement::setChangedSinceLastFormControlChangeEvent): Added.

2011-03-04  Xianzhu Wang  <wangxianzhu@google.com>

        Reviewed by Adam Barth.

        Remove fake request loading of SVGImage to avoid MainResourceLoader
        leak. The frame->init() already ensures initialization of the
        document loader.

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

        Test: fast/images/svg-image-leak-loader.html

        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged):

2011-03-04  Mike Reed  <reed@google.com>

        Reviewed by Mihai Parparita.

        [Chromium] fast/canvas/canvas-arc-360-winding.html fails on Linux and Windows
        https://bugs.webkit.org/show_bug.cgi?id=49477

        * platform/graphics/skia/PathSkia.cpp:
        (WebCore::Path::addArc):

2011-03-04  Jia Pu  <jpu@apple.com>

        Reviewed by Darin Adler.

        On Mac, the bounding box sent to EditorClient::showCorrectionPanel() is incorrect when the correction occurs in an iframe.
        https://bugs.webkit.org/show_bug.cgi?id=55717
        <rdar://problem/9018127>

        manual-test: manual-tests/platforms/mac/autocorrection/autocorrection-in-iframe.html

        Previously, the bounding box passed into EditorClient::showCorrectionPanel() is in the frame's
        coordinate. This is incorrect when the correction occurs in an iframe. This patch added code
        to convert the bounding box to window coordinate using ScrollView::contentToWindow().

        * dom/Range.cpp:
        (WebCore::Range::getBoundingClientRect):
        (WebCore::Range::boundingRect):
        * dom/Range.h:
        * editing/Editor.cpp:
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges):
        (WebCore::Editor::correctionPanelTimerFired):
        (WebCore::Editor::windowRectForRange):
        * editing/Editor.h:
        * manual-tests/autocorrection/autocorrection-in-iframe.html: Added.
        * manual-tests/autocorrection/document-for-iframe-test.html: Added.

2011-03-04  Jia Pu  <jpu@apple.com>

        Reviewed by Darin Adler.

        Those checking in Editor::removeSpellAndCorrectionMarkersFromWordsToBeEdited() should be done with VisiblePosition::isNull().
        https://bugs.webkit.org/show_bug.cgi?id=55731

        No new tests. There's no behavioral change.

        This patch improved clarity and readability of Editor::removeSpellAndCorrectionMarkersFromWordsToBeEdited().

        * editing/Editor.cpp:
        (WebCore::Editor::removeSpellAndCorrectionMarkersFromWordsToBeEdited):

2011-03-04  John Bauman  <jbauman@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] premultipliedAlpha WebGL context attribute is ignored.
        https://bugs.webkit.org/show_bug.cgi?id=55411

        Update compositor to set the blending of each layer correctly.

        Test: compositing/webgl/webgl-nonpremultiplied-blend.html

        * platform/graphics/chromium/CanvasLayerChromium.cpp:
        (WebCore::CanvasLayerChromium::CanvasLayerChromium):
        (WebCore::CanvasLayerChromium::draw):
        * platform/graphics/chromium/CanvasLayerChromium.h:
        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::draw):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::drawLayers):
        * platform/graphics/chromium/WebGLLayerChromium.cpp:
        (WebCore::WebGLLayerChromium::setContext):

2011-03-04  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        WebCore GYP build should link with the correct frameworks
        https://bugs.webkit.org/show_bug.cgi?id=55804

        * gyp/WebCore.gyp:

2011-03-04  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        WebCore GYP build should Check For Inappropriate Files in Framework
        https://bugs.webkit.org/show_bug.cgi?id=55806

        * gyp/WebCore.gyp:

2011-03-04  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Adam Barth.

        Add skeletal WebCore.gyp
        https://bugs.webkit.org/show_bug.cgi?id=55802

        This doesn't yet build, but the basic structure is there.

        * WebCore.gypi: Added headers and include directories variables.
        * gyp/WebCore.gyp: Added.

2011-03-04  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        Remove unneeded round-trips through ../Source in the Chromium GYP build
        https://bugs.webkit.org/show_bug.cgi?id=55795

        This is just cleanup work, but it was bugging me.

        * WebCore.gyp/WebCore.gyp:

2011-03-04  Mike Reed  <reed@google.com>

        Reviewed by James Robinson.

        Option to use skia's native text drawing APIs when drawing text
        on Windows, rather than from outlines using drawPath(). This will
        only have a significant effect when the skia-gpu backend is enabled.
        https://bugs.webkit.org/show_bug.cgi?id=55609

        No new tests. This is disabled by default. When enabled, it will draw
        essentially the same, but with slightly different antialiased edges, due
        to differences between the current scanconverter and GDI's font scaler.
        When enabled, we will have to recalibrate layouttest image results. 

        * platform/graphics/skia/SkiaFontWin.cpp:
        (WebCore::skiaDrawText):
        (WebCore::setupPaintForFont):
        (WebCore::paintSkiaText):

2011-03-04  Adrienne Walker  <enne@google.com>

        Reviewed by James Robinson.

        [chromium] Fix texture stride issues on large content and image layers.
        https://bugs.webkit.org/show_bug.cgi?id=55679

        This was an error caused during the refactoring in r80081.

        Tests: LayoutTests/compositing/tiling/huge-layer-img.html

        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::updateTexture):
        * platform/graphics/chromium/ImageLayerChromium.cpp:
        (WebCore::ImageLayerChromium::updateTextureIfNeeded):

2011-03-04  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r80379.
        http://trac.webkit.org/changeset/80379
        https://bugs.webkit.org/show_bug.cgi?id=55799

        "Breaks leopard compile (implicit conversion)" (Requested by
        tonyg-cr on #webkit).

        * css/CSSStyleSelector.cpp:
        (WebCore::convertToLength):
        (WebCore::CSSStyleSelector::applyProperty):
        (WebCore::CSSStyleSelector::createTransformOperations):
        * platform/Length.h:
        (WebCore::Length::Length):
        (WebCore::Length::operator==):
        (WebCore::Length::operator!=):
        (WebCore::Length::rawValue):
        (WebCore::Length::type):
        (WebCore::Length::quirk):
        (WebCore::Length::setValue):
        (WebCore::Length::setRawValue):
        (WebCore::Length::calcFloatValue):
        (WebCore::Length::isZero):
        (WebCore::Length::blend):
        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::recalcColumn):
        (WebCore::AutoTableLayout::calcEffectiveLogicalWidth):
        * rendering/FixedTableLayout.cpp:
        (WebCore::FixedTableLayout::calcWidthArray):

2011-03-04  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Darin Adler.

        WebKit2: Use CFNetwork Sessions API.
        https://bugs.webkit.org/show_bug.cgi?id=55435.

        Add in the CFURLSTORAGESESSIONS guards that I incorrectly left out because the code was
        contained within guards that made USE(CFURLSTORAGESESSIONS) always be true.

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::makeFinalRequest):
        (WebCore::ResourceHandle::willSendRequest):
        * platform/network/cf/ResourceRequestCFNet.cpp:
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::createNSURLConnection):
        (WebCore::ResourceHandle::willSendRequest):
        * platform/network/mac/ResourceRequestMac.mm:

2011-03-04  Yuqiang Xian  <yuqiang.xian@intel.com>

        Reviewed by Darin Adler.

        improve layout performance by reducing the traversal time of the floating objects
        https://bugs.webkit.org/show_bug.cgi?id=55440

        We observered large overhead on traversing the floating objects list
        in logicalLeftOffsetForLine() and logicalRightOffsetForLine() especially
        when the list becomes enormous, for example in the default 30x30 maze test
        from http://ie.microsoft.com/testdrive/Performance/MazeSolver/Default.html
        there're >3700 floating objects. When placing a new floating object the
        entire list (from begin to end) is traversed for multiple times.
        There's a low hanging fruit to reduce the chances to do the traversal
        which is especially applicable in logicalLeftOffsetForLine and logicalRightOffsetForLine.
        As the two routines either cares about FloatLeft objects or FloatRight objects only,
        if we know there's no corresponding type floating objects in the list
        we can avoid the traversal actually. One thing we could do is to record
        the number of FloatLeft objects and the number of FloatRight objects and
        add a check before doing the traversal. This can reduce the time by 45%
        to resolve the 30x30 Maze measured on N470 Netbook MeeGo using latest
        Chromium browser 11 (from 503s to 269s).

        No new tests, relying on existing layout tests.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::~RenderBlock):
        (WebCore::RenderBlock::addOverflowFromFloats):
        (WebCore::RenderBlock::repaintOverhangingFloats):
        (WebCore::RenderBlock::paintFloats):
        (WebCore::RenderBlock::selectionGaps):
        (WebCore::RenderBlock::insertFloatingObject):
        (WebCore::RenderBlock::removeFloatingObject):
        (WebCore::RenderBlock::removeFloatingObjectsBelow):
        (WebCore::RenderBlock::positionNewFloats):
        (WebCore::RenderBlock::positionNewFloatOnLine):
        (WebCore::RenderBlock::logicalLeftOffsetForLine):
        (WebCore::RenderBlock::logicalRightOffsetForLine):
        (WebCore::RenderBlock::nextFloatLogicalBottomBelow):
        (WebCore::RenderBlock::lowestFloatLogicalBottom):
        (WebCore::RenderBlock::clearFloats):
        (WebCore::RenderBlock::addOverhangingFloats):
        (WebCore::RenderBlock::addIntrudingFloats):
        (WebCore::RenderBlock::containsFloat):
        (WebCore::RenderBlock::hitTestFloats):
        (WebCore::RenderBlock::adjustForBorderFit):
        (WebCore::RenderBlock::FloatingObjects::clear):
        (WebCore::RenderBlock::FloatingObjects::increaseObjectsCount):
        (WebCore::RenderBlock::FloatingObjects::decreaseObjectsCount):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::containsFloats):
        (WebCore::RenderBlock::FloatingObjects::FloatingObjects):
        (WebCore::RenderBlock::FloatingObjects::hasLeftObjects):
        (WebCore::RenderBlock::FloatingObjects::hasRightObjects):
        (WebCore::RenderBlock::FloatingObjects::set):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::layoutInlineChildren):
        (WebCore::RenderBlock::matchedEndLine):

2011-03-04  Rik Cabanier  <cabanier@gmail.com>

        Reviewed by David Hyatt.

        Fix that allows fixed length values to be floating point
        https://bugs.webkit.org/show_bug.cgi?id=52699

        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSStyleSelector.cpp:
        (WebCore::convertToLength):
        (WebCore::convertToIntLength):
        (WebCore::convertToFloatLength):
        (WebCore::CSSStyleSelector::applyProperty):
        (WebCore::CSSStyleSelector::createTransformOperations):
        * platform/Length.h:
        (WebCore::Length::Length):
        (WebCore::Length::operator==):
        (WebCore::Length::operator!=):
        (WebCore::Length::rawValue):
        (WebCore::Length::type):
        (WebCore::Length::quirk):
        (WebCore::Length::setValue):
        (WebCore::Length::calcFloatValue):
        (WebCore::Length::isZero):
        (WebCore::Length::blend):
        (WebCore::Length::getIntValue):
        (WebCore::Length::getFloatValue):
        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::recalcColumn):
        (WebCore::AutoTableLayout::calcEffectiveLogicalWidth):
        * rendering/FixedTableLayout.cpp:
        (WebCore::FixedTableLayout::calcWidthArray):

2011-03-04  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Jon Honeycutt.

        Adopt VersionStamper tool for Windows WebKit DLLs
        https://bugs.webkit.org/show_bug.cgi?id=55784
        
        We now use a tool to stamp the version number onto the Apple WebKit DLLs
        during the post-build step.

        * WebCore.vcproj/QTMovieWin.rc: Removed.
        * WebCore.vcproj/QTMovieWin.vcproj:
        * WebCore.vcproj/QTMovieWinPostBuild.cmd: Stamp version with VersionStamper.
        * WebCore.vcproj/QTMovieWinPreBuild.cmd: Don't run auto-version.sh. We don't use autoversion.h in this project.
        * WebCore.vcproj/WebCoreMediaQT.vsprops: Remove unnecessary include paths for resource files.

2011-03-04  Cosmin Truta  <ctruta@chromium.org>

        Reviewed by Adam Barth.

        Clarify comment about potential memory leak in SVGImage
        https://bugs.webkit.org/show_bug.cgi?id=55362

        No functionality change. No new tests.

        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged):

2011-03-04  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Maciej Stachowiak.

        WebKit2: Use CFNetwork Sessions API.
        https://bugs.webkit.org/show_bug.cgi?id=55435.

        When Private Browsing is enabled, get the cached url response from the cache associated with
        the Private Browsing Storage Session.

        * WebCore.exp.in:
        Export the symbol for ResourceHandle::privateBrowsingStorageSession.

2011-03-04  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        JSC and V8 versions of Java bridge should share JobjectWrapper
        https://bugs.webkit.org/show_bug.cgi?id=55763

        No new tests, refactoring only.

        * Android.jscbindings.mk:
        * Android.v8bindings.mk:
        * WebCore.gypi:
        * WebCore.order:
        * WebCore.xcodeproj/project.pbxproj:
        * bridge/jni/JobjectWrapper.cpp:
        (JobjectWrapper::JobjectWrapper):
        (JobjectWrapper::~JobjectWrapper):
        * bridge/jni/JobjectWrapper.h:
        (JSC::Bindings::JobjectWrapper::instance):
        (JSC::Bindings::JobjectWrapper::setInstance):
        (JSC::Bindings::JobjectWrapper::ref):
        (JSC::Bindings::JobjectWrapper::deref):
        * bridge/jni/jsc/JNIBridgeJSC.cpp:
        (JavaField::JavaField):
        (JavaArray::JavaArray):
        * bridge/jni/jsc/JNIBridgeJSC.h:
        * bridge/jni/jsc/JavaInstanceJSC.cpp:
        (JavaInstance::JavaInstance):
        * bridge/jni/jsc/JavaInstanceJSC.h:

2011-03-04  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Nikolas Zimmermann.

        Move shared code into SVGStyledTransformableElement::svgAttributeChanged
        https://bugs.webkit.org/show_bug.cgi?id=55771

        All sub classes of SVGStyledTransformableElement request a relayout
        the same way. So move that code into the common base class.

        * svg/SVGCircleElement.cpp:
        (WebCore::SVGCircleElement::svgAttributeChanged):
        * svg/SVGEllipseElement.cpp:
        (WebCore::SVGEllipseElement::svgAttributeChanged):
        * svg/SVGForeignObjectElement.cpp:
        (WebCore::SVGForeignObjectElement::svgAttributeChanged):
        * svg/SVGGElement.cpp:
        (WebCore::SVGGElement::svgAttributeChanged):
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::svgAttributeChanged):
        * svg/SVGLineElement.cpp:
        (WebCore::SVGLineElement::svgAttributeChanged):
        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::svgAttributeChanged):
        * svg/SVGPolyElement.cpp:
        (WebCore::SVGPolyElement::svgAttributeChanged):
        * svg/SVGRectElement.cpp:
        (WebCore::SVGRectElement::svgAttributeChanged):
        * svg/SVGStyledTransformableElement.cpp:
        (WebCore::SVGStyledTransformableElement::svgAttributeChanged):
        * svg/SVGStyledTransformableElement.h:
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::svgAttributeChanged):

2011-03-03  John Abd-El-Malek  <jam@chromium.org>

        Reviewed by Dimitri Glazkov.

        [chromium] Get rid of IsContentFiltered flags since they&apos;re not used anymore
        https://bugs.webkit.org/show_bug.cgi?id=55748

        * platform/network/chromium/ResourceResponse.cpp:
        (WebCore::ResourceResponse::doPlatformCopyData):
        (WebCore::ResourceResponse::doPlatformAdopt):
        * platform/network/chromium/ResourceResponse.h:
        (WebCore::ResourceResponse::ResourceResponse):

2011-03-03  Timothy Hatcher  <timothy@apple.com>

        Export SerializedScriptValue::create(JSC::ExecState* exec, JSC::JSValue value).

        Reviewed by Darin Adler.

        * WebCore.exp.in: Added __ZN7WebCore21SerializedScriptValue6createEPN3JSC9ExecStateENS1_7JSValueE.

2011-03-04  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: extract all code that depends on source mapping from SourceFrame.
        https://bugs.webkit.org/show_bug.cgi?id=55464

        Extract all dependencies on DebuggerModel and ScriptsPanel to a delegate class
        to encapsulate source mapping aspects from SourceFrame.

        * inspector/front-end/ResourceView.js:
        (WebInspector.ResourceView.createResourceView):
        (WebInspector.SourceFrameDelegateForResourcesPanel):
        (WebInspector.SourceFrameDelegateForResourcesPanel.prototype.requestContent):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._createSourceFrame):
        (WebInspector.SourceFrameDelegateForScriptsPanel):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame):
        (WebInspector.SourceFrame.prototype.show):
        (WebInspector.SourceFrame.prototype._createTextViewer):
        (WebInspector.SourceFrame.prototype._contextMenu.addConditionalBreakpoint.didEditBreakpointCondition):
        (WebInspector.SourceFrame.prototype._contextMenu.addConditionalBreakpoint):
        (WebInspector.SourceFrame.prototype._contextMenu.else.editBreakpointCondition.didEditBreakpointCondition):
        (WebInspector.SourceFrame.prototype._contextMenu.else.editBreakpointCondition):
        (WebInspector.SourceFrame.prototype._contextMenu.else.setBreakpointEnabled):
        (WebInspector.SourceFrame.prototype._contextMenu):
        (WebInspector.SourceFrame.prototype._mouseDown):
        (WebInspector.SourceFrame.prototype._mouseMove):
        (WebInspector.SourceFrame.prototype._hidePopup):
        (WebInspector.SourceFrame.prototype._mouseHover):
        (WebInspector.SourceFrame.prototype._showPopup.showObjectPopup):
        (WebInspector.SourceFrame.prototype._showPopup):
        (WebInspector.SourceFrame.prototype._doubleClick):
        (WebInspector.SourceFrame.prototype._didEditLine):
        (WebInspector.SourceFrameDelegate):
        (WebInspector.SourceFrameDelegate.prototype.requestContent):
        (WebInspector.SourceFrameDelegate.prototype.debuggingSupported):
        (WebInspector.SourceFrameDelegate.prototype.setBreakpoint):
        (WebInspector.SourceFrameDelegate.prototype.removeBreakpoint):
        (WebInspector.SourceFrameDelegate.prototype.updateBreakpoint):
        (WebInspector.SourceFrameDelegate.prototype.findBreakpoint):
        (WebInspector.SourceFrameDelegate.prototype.continueToLine):
        (WebInspector.SourceFrameDelegate.prototype.canEditScriptSource):
        (WebInspector.SourceFrameDelegate.prototype.editScriptSource):
        (WebInspector.SourceFrameDelegate.prototype.debuggerPaused):
        (WebInspector.SourceFrameDelegate.prototype.evaluate):
        (WebInspector.SourceFrameDelegate.prototype.releaseEvaluationResult):

2011-03-04  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [Extensions API] maintain own, unique & persistent identifiers for resources.
        https://bugs.webkit.org/show_bug.cgi?id=55686

        - Use internal ids for resources in extension server.
        - Log errors in inspector tests.

        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer):
        (WebInspector.ExtensionServer.prototype.resetResources):
        (WebInspector.ExtensionServer.prototype._notifyResourceFinished):
        (WebInspector.ExtensionServer.prototype._onRevealAndSelectResource):
        (WebInspector.ExtensionServer.prototype._onGetHAR):
        (WebInspector.ExtensionServer.prototype._onGetResourceContent):
        (WebInspector.ExtensionServer.prototype._resourceId):
        (WebInspector.ExtensionServer.prototype._resourceById):
        * inspector/front-end/HAREntry.js:
        (WebInspector.HARLog):
        (WebInspector.HARLog.prototype._convertResource):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkPanel.prototype._reset):

2011-03-04  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: exceptions when building context menu in network panel
        https://bugs.webkit.org/show_bug.cgi?id=55678

        * inspector/front-end/DataGrid.js:
        (WebInspector.DataGrid.prototype.dataGridNodeFromNode):
        (WebInspector.DataGrid.prototype.dataGridNodeFromPoint):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkPanel.prototype._contextMenu):

2011-03-04  Ilya Sherman  <isherman@chromium.org>

        Reviewed by James Robinson.

        Override paintScrollCorner() for FramelessScrollView to forego any custom scrollbar corner rendering.
        This was previously done in ScrollbarThemeChromium, but we also need this on the Mac when the ScrollView
        is a FramelessScrollView -- which is mostly just for Autofill.
        In service of http://crbug.com/73772 (crash)
        https://bugs.webkit.org/show_bug.cgi?id=55557

        No tests added because this fix is Chromium-specific and the code is currently untestable from within WebKit.
        In particular, DRT crashes when trying to render a FramelessScrollView.

        * platform/ScrollbarTheme.h:
        (WebCore::ScrollbarTheme::paintScrollCorner): Body moved to static function defaultPaintScrollCorner().
        (WebCore::ScrollbarTheme::defaultPaintScrollCorner): Added.
        * platform/chromium/FramelessScrollView.cpp:
        (WebCore::FramelessScrollView::paintContents):
        (WebCore::FramelessScrollView::paintScrollCorner): Fix implementation moved to here from ScrollbarThemeChromium
        * platform/chromium/FramelessScrollView.h:
        * platform/chromium/ScrollbarThemeChromium.cpp:
        * platform/chromium/ScrollbarThemeChromium.h:

2011-03-04  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: move dispatching of didCommitLoad to agents into InspectorInstrumentation
        https://bugs.webkit.org/show_bug.cgi?id=55770

        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        (WebCore::InspectorAgent::didCommitLoad):
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::InspectorCSSAgent):
        (WebCore::InspectorCSSAgent::~InspectorCSSAgent):
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorDatabaseAgent.cpp:
        (WebCore::InspectorDatabaseAgent::~InspectorDatabaseAgent):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didCommitLoadImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didCommitLoad):
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::create):
        (WebCore::InspectorProfilerAgent::InspectorProfilerAgent):
        (WebCore::InspectorProfilerAgent::~InspectorProfilerAgent):
        (WebCore::InspectorProfilerAgent::addProfileFinishedMessageToConsole):
        (WebCore::InspectorProfilerAgent::addStartProfilingMessageToConsole):
        (WebCore::InspectorProfilerAgent::startUserInitiatedProfiling):
        (WebCore::InspectorProfilerAgent::stopUserInitiatedProfiling):
        * inspector/InspectorProfilerAgent.h:
        * inspector/InstrumentingAgents.h:
        (WebCore::InstrumentingAgents::InstrumentingAgents):
        (WebCore::InstrumentingAgents::inspectorCSSAgent):
        (WebCore::InstrumentingAgents::setInspectorCSSAgent):
        (WebCore::InstrumentingAgents::inspectorDOMStorageAgent):
        (WebCore::InstrumentingAgents::setInspectorDOMStorageAgent):
        (WebCore::InstrumentingAgents::inspectorDatabaseAgent):
        (WebCore::InstrumentingAgents::setInspectorDatabaseAgent):
        (WebCore::InstrumentingAgents::inspectorApplicationCacheAgent):
        (WebCore::InstrumentingAgents::setInspectorApplicationCacheAgent):
        (WebCore::InstrumentingAgents::inspectorDebuggerAgent):
        (WebCore::InstrumentingAgents::setInspectorDebuggerAgent):
        (WebCore::InstrumentingAgents::inspectorBrowserDebuggerAgent):
        (WebCore::InstrumentingAgents::setInspectorBrowserDebuggerAgent):
        (WebCore::InstrumentingAgents::inspectorProfilerAgent):
        (WebCore::InstrumentingAgents::setInspectorProfilerAgent):

2011-03-04  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: rename RuntimeAgent's function from releaseWrapperObjectGroup to releaseObjectGroup.
        https://bugs.webkit.org/show_bug.cgi?id=55773

        * inspector/CodeGeneratorInspector.pm:
        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::releaseObjectGroup):
        * inspector/InjectedScript.h:
        * inspector/InjectedScriptHost.cpp:
        (WebCore::InjectedScriptHost::releaseObjectGroup):
        * inspector/InjectedScriptHost.h:
        * inspector/InjectedScriptSource.js:
        (.):
        * inspector/Inspector.idl:
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::clearConsoleMessages):
        * inspector/InspectorRuntimeAgent.cpp:
        (WebCore::InspectorRuntimeAgent::releaseObjectGroup):
        * inspector/InspectorRuntimeAgent.h:
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.completions.evaluatedProperties):
        (WebInspector.ConsoleView.prototype.completions):
        * inspector/front-end/PropertiesSidebarPane.js:
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._hidePopup):
        * inspector/front-end/WatchExpressionsSidebarPane.js:
        (WebInspector.WatchExpressionsSection.prototype.update):

2011-03-02  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Pavel Feldman.

        Web Inspector: Gutter height should be 100% when few lines are displayed
        https://bugs.webkit.org/show_bug.cgi?id=55574

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._startEditing):
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer.prototype._syncScroll):
        (WebInspector.TextEditorGutterPanel.prototype._expandChunks):
        (WebInspector.TextEditorGutterPanel.prototype.textChanged):
        (WebInspector.TextEditorGutterPanel.prototype.syncClientHeight):
        * inspector/front-end/textViewer.css:
        (.text-editor-lines):
        (.text-editor-contents .inner-container):
        (.webkit-line-number):

2011-03-04  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Pavel Feldman.

        Web Inspector: [Text editor] Do bisect to find visible chunks
        https://bugs.webkit.org/show_bug.cgi?id=55685

        * inspector/front-end/TextViewer.js:
        (WebInspector.TextEditorChunkedPanel.prototype._chunkNumberForLine):
        (WebInspector.TextEditorChunkedPanel.prototype._findVisibleChunks):
        (WebInspector.TextEditorChunkedPanel.prototype._repaintAll):
        (WebInspector.TextEditorGutterChunk.prototype.get offsetTop):
        (WebInspector.TextEditorMainPanel.prototype._updateHighlightsForRange):
        (WebInspector.TextEditorMainChunk.prototype.get offsetTop):

2011-03-04  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Pavel Feldman.

        Web Inspector: [Text editor] DOMNodeRemoved events are missing
        https://bugs.webkit.org/show_bug.cgi?id=55769

        * inspector/front-end/TextViewer.js:
        (WebInspector.TextEditorMainPanel):
        (WebInspector.TextEditorMainPanel.prototype._handleDOMUpdates):
        (WebInspector.TextEditorMainChunk):
        (WebInspector.TextEditorMainChunk.prototype._createRow):

2011-03-04  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Remove unnecessary domain and success flags from the response messages.
        https://bugs.webkit.org/show_bug.cgi?id=55768

        We have domain property in the response messages but it is not used because we dispatch
        the responses on the callback associated with seq.

        If we have property 'errors' in the response then success eq false and true in the other case.

        * inspector/CodeGeneratorInspector.pm:

2011-03-04  Christian Dywan  <christian@lanedo.com>

        Reviewed by Gustavo Noronha Silva.

        Enable Copy Image Address context menu item in the Gtk port
        https://bugs.webkit.org/show_bug.cgi?id=55136

        * page/ContextMenuController.cpp:
        * platform/ContextMenuItem.h:
        * platform/LocalizationStrategy.h:
        * platform/LocalizedStrings.cpp:
        * platform/LocalizedStrings.h:
        * platform/gtk/ContextMenuItemGtk.cpp:
        * platform/gtk/LocalizedStringsGtk.cpp:

2011-03-04  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: implement getCompletions via evaluate.
        https://bugs.webkit.org/show_bug.cgi?id=55759

        * inspector/InjectedScript.cpp:
        * inspector/InjectedScript.h:
        * inspector/InjectedScriptSource.js:
        * inspector/Inspector.idl:
        * inspector/InspectorDebuggerAgent.cpp:
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorRuntimeAgent.cpp:
        * inspector/InspectorRuntimeAgent.h:
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.completions.evaluated):
        (WebInspector.ConsoleView.prototype.completions.evaluatedProperties):
        (WebInspector.ConsoleView.prototype.completions):
        (WebInspector.ConsoleView.prototype._reportCompletions):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.evaluateInSelectedCallFrame.updatingCallbackWrapper):
        (WebInspector.ScriptsPanel.prototype.evaluateInSelectedCallFrame):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._showPopup):
        (WebInspector.SourceFrame.prototype._evalSelectionInCallFrame):

2011-03-04  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        V8 version of JavaString should obtain string from JNI in UTF-16 encoding
        https://bugs.webkit.org/show_bug.cgi?id=55566

        We obtain the string from JNI in UTF-16 encoding and convert
        to UTF-8 using our own routines as required. This matches the
        behaviour of the JSC version of JavaString.

        No new tests, no change in behaviour.

        * bridge/jni/v8/JavaStringV8.h:
        (JSC::Bindings::JavaStringImpl::init):
        (JSC::Bindings::JavaStringImpl::utf8):
        (JSC::Bindings::JavaStringImpl::impl):

2011-03-03  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: do not push document into front-end, make it request one.
        https://bugs.webkit.org/show_bug.cgi?id=55664

        * inspector/Inspector.idl:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        * inspector/InspectorAgent.h:
        * inspector/InspectorBrowserDebuggerAgent.cpp:
        (WebCore::InspectorBrowserDebuggerAgent::descriptionForDOMEvent):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::InspectorDOMAgent):
        (WebCore::InspectorDOMAgent::clearFrontend):
        (WebCore::InspectorDOMAgent::setDocument):
        (WebCore::InspectorDOMAgent::getDocument):
        (WebCore::InspectorDOMAgent::pushNodePathToFrontend):
        (WebCore::InspectorDOMAgent::boundNodeId):
        (WebCore::InspectorDOMAgent::resolveNode):
        (WebCore::InspectorDOMAgent::mainFrameDOMContentLoaded):
        * inspector/InspectorDOMAgent.h:
        (WebCore::InspectorDOMAgent::create):
        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager.prototype.restoreDOMBreakpoints):
        (WebInspector.DOMBreakpointView.prototype.populateStatusMessageElement.decorateNode):
        (WebInspector.DOMBreakpointView.prototype.populateStatusMessageElement):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMDocument):
        (WebInspector.DOMAgent):
        (WebInspector.DOMAgent.prototype.requestDocument):
        (WebInspector.DOMAgent.prototype.pushNodeToFrontend):
        (WebInspector.DOMAgent.prototype.pushNodeByPathToFrontend):
        (WebInspector.DOMAgent.prototype._attributesUpdated):
        (WebInspector.DOMAgent.prototype._characterDataModified):
        (WebInspector.DOMAgent.prototype._documentUpdated):
        (WebInspector.DOMAgent.prototype._setDocument):
        (WebInspector.DOMAgent.prototype._setDetachedRoot):
        (WebInspector.DOMAgent.prototype._setChildNodes):
        (WebInspector.DOMAgent.prototype._childNodeInserted):
        (WebInspector.DOMAgent.prototype._childNodeRemoved):
        (WebInspector.DOMDispatcher.prototype.documentUpdated):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.show):
        (WebInspector.ElementsPanel.prototype.setDocument):
        * inspector/front-end/MetricsSidebarPane.js:
        * inspector/front-end/RemoteObject.js:
        (WebInspector.RemoteObject.prototype.pushNodeToFrontend):

2011-03-04  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: summary bar may overlap content of the network item view
        https://bugs.webkit.org/show_bug.cgi?id=55656

        - drop custom summary bar placement logic, do it with CSS instead.

        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkPanel.prototype.resize):
        (WebInspector.NetworkPanel.prototype._createSummaryBar):
        (WebInspector.NetworkPanel.prototype._updateSummaryBar):
        (WebInspector.NetworkPanel.prototype._updateFilter):
        (WebInspector.NetworkPanel.prototype.show):
        (WebInspector.NetworkPanel.prototype.refresh):
        (WebInspector.NetworkPanel.prototype._reset):
        (WebInspector.NetworkPanel.prototype._setLargerResources):
        (WebInspector.NetworkPanel.prototype._updateOffscreenRows):
        * inspector/front-end/networkPanel.css:
        (.network-sidebar .data-grid td):
        (.network-sidebar tr.filler td):
        (.network-summary-bar):
        (.network-sidebar .data-grid .network-summary-bar td):
        (.network-summary-bar img):

2011-03-04  James Su <suzhe@chromium.org>

        Reviewed by Dimitri Glazkov.

        [Chromium] keycode is always 0 when using non-Latin keyboard layout.
        https://bugs.webkit.org/show_bug.cgi?id=54939

        Add KeyEventCocoa.{h,mm}, so that we can reuse them in chromium.

        No intended functionality change.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:

2011-03-04  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed EFL build fix for r80324.

        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::paintThemePart):

2011-03-04  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed EFL build fix for r80324.

        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::paintThemePart):

2011-03-03  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: AppCache agent should have same lifetime as InspectorAgent
        https://bugs.webkit.org/show_bug.cgi?id=55673

        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        (WebCore::InspectorAgent::setFrontend):
        (WebCore::InspectorAgent::disconnectFrontend):
        (WebCore::InspectorAgent::createFrontendLifetimeAgents):
        (WebCore::InspectorAgent::releaseFrontendLifetimeAgents):
        (WebCore::InspectorAgent::didCommitLoad):
        * inspector/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::InspectorApplicationCacheAgent):
        (WebCore::InspectorApplicationCacheAgent::setFrontend):
        (WebCore::InspectorApplicationCacheAgent::clearFrontend):
        * inspector/InspectorApplicationCacheAgent.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::networkStateChangedImpl):
        (WebCore::InspectorInstrumentation::updateApplicationCacheStatusImpl):
        * inspector/InstrumentingAgents.h:
        (WebCore::InstrumentingAgents::inspectorApplicationCacheAgent):
        (WebCore::InstrumentingAgents::setInspectorApplicationCacheAgent):

2011-03-03  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        Cleanup from https://bugs.webkit.org/show_bug.cgi?id=55427.
        
        Call WebCore::startObservingCookieChanges and WebCore::stopObservingCookieChanges
        on all platforms, and stub the functions on platforms that don't implement them.
        
        Add startObservingCookieChanges and stopObservingCookieChanges to TemporaryLinkStubs
        for platforms that don't implement them.

        * platform/android/TemporaryLinkStubs.cpp:
        * platform/brew/TemporaryLinkStubs.cpp:
        * platform/chromium/TemporaryLinkStubs.cpp:
        * platform/efl/TemporaryLinkStubs.cpp:
        * platform/gtk/TemporaryLinkStubs.cpp:
        * platform/haiku/TemporaryLinkStubs.cpp:
        * platform/qt/TemporaryLinkStubsQt.cpp:
        * platform/win/TemporaryLinkStubs.cpp:

2011-03-03  Eric Seidel  <eric@webkit.org>

        Reviewed by Dimitri Glazkov.

        Refactor createRendererIfNeeded to avoid premature nextRenderer calculation
        https://bugs.webkit.org/show_bug.cgi?id=55720

        There are two thing going on here:
        1. Delaying nextRenderer calculation until we actually use it,
           previously we would always compute nextRenderer (expensive!)
           even if no renderer insertion was to occur.
        2. Fix fullscreen elements to be inserted into the right place
           in the rendering tree.  Previously they would always be the last
           child in their parent's list, even if that wasn't the right place.

        I don't know of any way to trigger the fullscreen bug,
        but I tested this with peacekeeper and saw no performance change.

        Peacekeeper's domJQueryBasics is now possibly as much as 2% faster
        but I don't really trust the stability of peacekeeper to begin with.

        This paves the way for further improvement in our nextRenderer calculation.

        * dom/Node.cpp:
        (WebCore::Node::attach):
        (WebCore::Node::previousRenderer):
        (WebCore::Node::nextRenderer):
        (WebCore::Node::createRendererAndStyle):
        (WebCore::wrapWithRenderFullScreen):
        (WebCore::Node::createRendererIfNeeded):
        * dom/Node.h:

2011-03-03  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        Remove LOOSE_PASS_OWN_ARRAY_PTR from PassOwnArrayPtr.h
        https://bugs.webkit.org/show_bug.cgi?id=55554

        * platform/Length.cpp:
        (WebCore::newLengthArray): Pass nullptr instead of 0.

2011-03-03  Nat Duca  <nduca@chromium.org>

        Reviewed by James Robinson.

        [chromium] Create a LayerChromium layerTreeAsText. Add HUD to
        LayerRendererChromium that draws compositor FPS and, optionally,
        the layer tree.
        https://bugs.webkit.org/show_bug.cgi?id=54710

        * WebCore.gypi:
        * platform/graphics/chromium/Canvas2DLayerChromium.h:
        (WebCore::Canvas2DLayerChromium::drawsContent):
        * platform/graphics/chromium/CanvasLayerChromium.h:
        (WebCore::CanvasLayerChromium::layerTypeAsString):
        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::writeIndent):
        (WebCore::ContentLayerChromium::dumpLayerProperties):
        * platform/graphics/chromium/ContentLayerChromium.h:
        (WebCore::ContentLayerChromium::drawsContent):
        (WebCore::ContentLayerChromium::layerTypeAsString):
        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::setName):
        (WebCore::GraphicsLayerChromium::updateNames):
        (WebCore::GraphicsLayerChromium::updateLayerPreserves3D):
        (WebCore::GraphicsLayerChromium::setupContentsLayer):
        * platform/graphics/chromium/GraphicsLayerChromium.h:
        * platform/graphics/chromium/ImageLayerChromium.h:
        (WebCore::ImageLayerChromium::drawsContent):
        (WebCore::ImageLayerChromium::layerTypeAsString):
        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::LayerChromium):
        (WebCore::LayerChromium::setName):
        (WebCore::LayerChromium::layerTreeAsText):
        (WebCore::writeIndent):
        (WebCore::LayerChromium::dumpLayer):
        (WebCore::LayerChromium::dumpLayerProperties):
        * platform/graphics/chromium/LayerChromium.h:
        (WebCore::LayerChromium::name):
        (WebCore::LayerChromium::drawsContent):
        (WebCore::LayerChromium::debugID):
        (WebCore::LayerChromium::layerTypeAsString):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::LayerRendererChromium):
        (WebCore::LayerRendererChromium::~LayerRendererChromium):
        (WebCore::LayerRendererChromium::drawLayers):
        (WebCore::LayerRendererChromium::present):
        (WebCore::LayerRendererChromium::layerTreeAsText):
        (WebCore::LayerRendererChromium::dumpRenderSurfaces):
        * platform/graphics/chromium/LayerRendererChromium.h:
        (WebCore::LayerRendererChromium::getHeadsUpDisplay):
        (WebCore::LayerRendererChromium::rootVisibleRect):
        * platform/graphics/chromium/PluginLayerChromium.h:
        (WebCore::PluginLayerChromium::drawsContent):
        (WebCore::PluginLayerChromium::layerTypeAsString):
        * platform/graphics/chromium/RenderSurfaceChromium.cpp:
        (WebCore::RenderSurfaceChromium::name):
        (WebCore::writeIndent):
        (WebCore::RenderSurfaceChromium::dumpSurface):
        * platform/graphics/chromium/RenderSurfaceChromium.h:
        * platform/graphics/chromium/VideoLayerChromium.h:
        (WebCore::VideoLayerChromium::drawsContent):
        (WebCore::VideoLayerChromium::layerTypeAsString):
        * platform/graphics/chromium/WebGLLayerChromium.h:
        (WebCore::WebGLLayerChromium::drawsContent):
        (WebCore::WebGLLayerChromium::layerTypeAsString):
        * platform/graphics/chromium/cc/CCHeadsUpDisplay.cpp: Added.
        (WebCore::CCHeadsUpDisplay::CCHeadsUpDisplay):
        (WebCore::CCHeadsUpDisplay::~CCHeadsUpDisplay):
        (WebCore::CCHeadsUpDisplay::draw):
        (WebCore::CCHeadsUpDisplay::drawHudContents):
        (WebCore::CCHeadsUpDisplay::onPresent):
        * platform/graphics/chromium/cc/CCHeadsUpDisplay.h: Added.
        (WebCore::CCHeadsUpDisplay::setShowFPSCounter):
        (WebCore::CCHeadsUpDisplay::showFPSCounter):
        (WebCore::CCHeadsUpDisplay::setShowPlatformLayerTree):
        (WebCore::CCHeadsUpDisplay::showPlatformLayerTree):
        (WebCore::CCHeadsUpDisplay::enabled):
        * platform/graphics/chromium/cc/CCLayerImpl.cpp:
        (WebCore::CCLayerImpl::CCLayerImpl):
        (WebCore::writeIndent):
        (WebCore::CCLayerImpl::dumpLayerProperties):
        * platform/graphics/chromium/cc/CCLayerImpl.h:
        (WebCore::CCLayerImpl::debugID):
        (WebCore::CCLayerImpl::setName):
        (WebCore::CCLayerImpl::name):

2011-03-02  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Darin Adler.

        crash in adoptNode with mutation events
        https://bugs.webkit.org/show_bug.cgi?id=50046

        If the DOM is modified during the removeChild call in adoptNode,
        then the setDocument call that follows can leave the DOM in an
        inconsistent state.

        * dom/Document.cpp:
        (WebCore::Document::adoptNode):

2011-03-03  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        Add audio tag tests to the media controls manual test suite.
        https://bugs.webkit.org/show_bug.cgi?id=55722

        * manual-tests/media-controls.html: Added 4 audio tests.

2011-03-03  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Reviewed by Eric Seidel.

        [EFL] Adjust functions of RenderThemeEfl.cpp to WebKit parameter style
        https://bugs.webkit.org/show_bug.cgi?id=54392

        Functions of RenderThemeEfl.cpp adhere efl coding style instead of WebKit coding style.
        WebCore's functions should adhere WebKit coding style.

        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::themePartCacheEntryReset):
        (WebCore::RenderThemeEfl::themePartCacheEntrySurfaceCreate):
        (WebCore::RenderThemeEfl::cacheThemePartNew):
        (WebCore::RenderThemeEfl::cacheThemePartReset):
        (WebCore::RenderThemeEfl::cacheThemePartResizeAndReset):
        (WebCore::RenderThemeEfl::cacheThemePartGet):
        (WebCore::RenderThemeEfl::cacheThemePartFlush):
        (WebCore::RenderThemeEfl::applyEdjeStateFromForm):
        (WebCore::RenderThemeEfl::paintThemePart):
        (WebCore::renderThemeEflColorClassSelectionActive):
        (WebCore::renderThemeEflColorClassSelectionInactive):
        (WebCore::renderThemeEflColorClassFocusRing):
        (WebCore::renderThemeEflColorClassButtonText):
        (WebCore::renderThemeEflColorClassComboText):
        (WebCore::renderThemeEflColorClassEntryText):
        (WebCore::renderThemeEflColorClassSearchText):
        (WebCore::RenderThemeEfl::applyPartDescription):
        (WebCore::RenderThemeEfl::applyPartDescriptions):
        (WebCore::RenderThemeEfl::controlSupportsTints):
        (WebCore::RenderThemeEfl::baselinePosition):
        (WebCore::RenderThemeEfl::paintSliderTrack):
        (WebCore::RenderThemeEfl::adjustSliderTrackStyle):
        (WebCore::RenderThemeEfl::adjustSliderThumbStyle):
        (WebCore::RenderThemeEfl::paintSliderThumb):
        (WebCore::RenderThemeEfl::adjustCheckboxStyle):
        (WebCore::RenderThemeEfl::paintCheckbox):
        (WebCore::RenderThemeEfl::adjustRadioStyle):
        (WebCore::RenderThemeEfl::paintRadio):
        (WebCore::RenderThemeEfl::adjustButtonStyle):
        (WebCore::RenderThemeEfl::paintButton):
        (WebCore::RenderThemeEfl::adjustMenuListStyle):
        (WebCore::RenderThemeEfl::paintMenuList):
        (WebCore::RenderThemeEfl::adjustTextFieldStyle):
        (WebCore::RenderThemeEfl::paintTextField):
        (WebCore::RenderThemeEfl::adjustTextAreaStyle):
        (WebCore::RenderThemeEfl::paintTextArea):
        (WebCore::RenderThemeEfl::adjustSearchFieldDecorationStyle):
        (WebCore::RenderThemeEfl::paintSearchFieldDecoration):
        (WebCore::RenderThemeEfl::adjustSearchFieldResultsButtonStyle):
        (WebCore::RenderThemeEfl::paintSearchFieldResultsButton):
        (WebCore::RenderThemeEfl::adjustSearchFieldResultsDecorationStyle):
        (WebCore::RenderThemeEfl::paintSearchFieldResultsDecoration):
        (WebCore::RenderThemeEfl::adjustSearchFieldCancelButtonStyle):
        (WebCore::RenderThemeEfl::paintSearchFieldCancelButton):
        (WebCore::RenderThemeEfl::adjustSearchFieldStyle):
        (WebCore::RenderThemeEfl::paintSearchField):
        (WebCore::RenderThemeEfl::adjustProgressBarStyle):
        (WebCore::RenderThemeEfl::paintProgressBar):
        (WebCore::RenderThemeEfl::paintMediaFullscreenButton):
        (WebCore::RenderThemeEfl::paintMediaMuteButton):
        (WebCore::RenderThemeEfl::paintMediaPlayButton):
        (WebCore::RenderThemeEfl::paintMediaSeekBackButton):
        (WebCore::RenderThemeEfl::paintMediaSeekForwardButton):
        (WebCore::RenderThemeEfl::paintMediaSliderTrack):
        (WebCore::RenderThemeEfl::paintMediaSliderThumb):
        (WebCore::RenderThemeEfl::paintMediaVolumeSliderContainer):
        (WebCore::RenderThemeEfl::paintMediaVolumeSliderTrack):
        (WebCore::RenderThemeEfl::paintMediaVolumeSliderThumb):
        (WebCore::RenderThemeEfl::paintMediaCurrentTime):

2011-03-03  Andy Estes  <aestes@apple.com>

        Reviewed by Adam Barth.

        Assertion failure in toElement(WebCore::Node*)
        https://bugs.webkit.org/show_bug.cgi?id=55697

        Test: fast/parser/fragment-foreign-content.html

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::constructTreeFromAtomicToken): The current
        element in the HTMLElementStack might be a DocumentFragment if a
        fragment is being parsed who's first node is foreign content.

2011-03-03  Mahesh Kulkarni  <mahesh.kulkarni@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [QT] Implement mock client-based geolocation for layout testing
        https://bugs.webkit.org/show_bug.cgi?id=54334

        Implements client() to GeolocationController to re-use geolocationClientMock class
        for layout testing purpose.

        * page/GeolocationController.h:
        (WebCore::GeolocationController::client):

2011-03-03  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Kent Tamura.

        Stop calling deprecatedNode and deprecatedEditingOffset in InsertTextCommand
        https://bugs.webkit.org/show_bug.cgi?id=55352

        Stopped calling deprecatedNode and deprecatedEditingOffset in the following functions:

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::positionOutsideTabSpan): Takes care of all types of positions and
        no longer calls deprecated functions.
        * editing/InsertTextCommand.cpp:
        (WebCore::InsertTextCommand::positionInsideTextNode): Ditto; renamed from prepareForTextInsertion.
        Check if the text node inside a tab span before checking if the container node is a text node
        because the position before or after a text node can still be inside a tab span.
        (WebCore::InsertTextCommand::input): No longer calls deprecated functions.
        * editing/InsertTextCommand.h:
        * editing/ModifySelectionListLevel.cpp:
        (WebCore::getStartEndListChildren): Call anchorNode() instead of deprecatedNode() because the start
        or the end of selection could be an immediate child of a list node (e.g. br inside ul)

2011-03-03  Hans Wennborg  <hans@chromium.org>

        Reviewed by Jeremy Orlow.

        IndexedDB: Move last bits of SQL into IDBBackingStore
        https://bugs.webkit.org/show_bug.cgi?id=55668

        After this, all SQL code for IndexedDB is in IDBBackingStore.cpp.

        No new tests: refactoring only.

        * storage/IDBBackingStore.cpp:
        (WebCore::IDBBackingStore::createTransaction):
        * storage/IDBBackingStore.h:
        * storage/IDBCursorBackendImpl.h:
        * storage/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::backingStore):
        * storage/IDBDatabaseBackendImpl.h:
        * storage/IDBIndexBackendImpl.h:
        * storage/IDBKey.h:
        * storage/IDBObjectStoreBackendImpl.h:
        * storage/IDBTransactionBackendImpl.cpp:
        (WebCore::IDBTransactionBackendImpl::IDBTransactionBackendImpl):
        * storage/IDBTransactionBackendImpl.h:
        * storage/IDBTransactionBackendInterface.h:
        * storage/IDBTransactionCoordinator.cpp:

2011-03-03  Adam Klein  <adamk@chromium.org>

        Reviewed by David Levin.

        [fileapi] Tighten up ResolveURICallbacks
        https://bugs.webkit.org/show_bug.cgi?id=55638

        Two changes:
          - Retry only on TYPE_MISMATCH_ERR now that Chromium
            properly sets that error code.
          - Call DirectoryEntry instead of DOMFileSystem methods.

        No change in behavior, so no new tests.

        * fileapi/FileSystemCallbacks.cpp:
        (WebCore::ResolveURICallbacks::didOpenFileSystem):

2011-03-03  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Get rid of Page::globalHistoryItem
        https://bugs.webkit.org/show_bug.cgi?id=55738

        The m_globalHistoryItem is only used by Mac and Windows WebKit1.
        Instead of having WebCore updating this member variable, just call out
        to a FrameLoaderClient member function and let WebKit keep it up to date.

        * loader/EmptyClients.h:
        (WebCore::EmptyFrameLoaderClient::dispatchDidRemoveBackForwardItem):
        (WebCore::EmptyFrameLoaderClient::updateGlobalHistoryItemForPage):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame):
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy):
        * loader/FrameLoaderClient.h:
        (WebCore::FrameLoaderClient::updateGlobalHistoryItemForPage):
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::goToItem):
        (WebCore::HistoryController::updateForStandardLoad):
        (WebCore::HistoryController::updateForRedirectWithLockedBackForwardList):
        * page/Page.cpp:
        * page/Page.h:

2011-03-02  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Steve Block.

        Cursor.continue with a key param should test less than, not equal to
        https://bugs.webkit.org/show_bug.cgi?id=55640

        If you supply a param to cursor.continue, we sould guarantee that
        the item we continue to is greater than or equal to the parameter.
        Right now, we only test equality.

        http://dvcs.w3.org/hg/IndexedDB/raw-file/tip/Overview.html#widl-IDBCursor-continue
        http://dvcs.w3.org/hg/IndexedDB/raw-file/tip/Overview.html#dfn-steps-for-iterating-a-cursor

        Test: storage/indexeddb/cursor-continue.html

        * storage/IDBCursorBackendImpl.cpp:
        (WebCore::IDBCursorBackendImpl::continueFunctionInternal):
        * storage/IDBKey.cpp:
        (WebCore::IDBKey::isLessThan):
        (WebCore::IDBKey::isEqual):
        * storage/IDBKey.h:

2011-03-03  Brent Fulgham  <bfulgham@webkit.org>

        Build fix. Need win/cURL DownloadBundle stub.

        * platform/network/curl/DownloadBundle.h: Added.

2011-03-03  Geoffrey Garen  <ggaren@apple.com>

        Rolled out 80277 and 80280 because they caused event handler layout test
        failures.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMGlobalObject.cpp:
        * bindings/js/JSDOMGlobalObject.h:
        * bindings/js/JSDOMWindowBase.cpp:
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSDOMWindowCustom.h:
        * bindings/js/JSWorkerContextBase.cpp:

2011-03-03  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=55721
        Global IconDatabase should be returned by reference, not as a pointer

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::HistoryItem):
        (WebCore::HistoryItem::~HistoryItem):
        (WebCore::HistoryItem::reset):
        (WebCore::HistoryItem::icon):
        (WebCore::HistoryItem::setURLString):

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::startIconLoader):
        (WebCore::FrameLoader::commitIconURLToIconDatabase):

        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::create):

        * loader/icon/IconDatabase.cpp:
        (WebCore::iconDatabase):
        * loader/icon/IconDatabase.h:
        * loader/icon/IconDatabaseNone.cpp:
        (WebCore::iconDatabase):
        * loader/icon/wince/IconDatabaseWinCE.cpp:
        (WebCore::iconDatabase):

        * loader/icon/IconLoader.cpp:
        (WebCore::IconLoader::finishLoading):

2011-03-03  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Martin Robinson.

        Stop instantiating legacy editing positions in FocusController::advanceFocusInDocumentOrder
        https://bugs.webkit.org/show_bug.cgi?id=52742

        Use firstPositionInOrBeforeNode to instantiate appropriate position.

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

2011-03-03  Andy Estes  <aestes@apple.com>

        Reviewed by Darin Adler.

        When displaying the missing plug-in sheet, pass the 'pluginspage'
        attribute to the UI process.
        https://bugs.webkit.org/show_bug.cgi?id=55553

        * WebCore.exp.in: Export __ZN7WebCore9HTMLNames15pluginspageAttrE.
        * html/HTMLAttributeNames.in: Add 'pluginspage' as a known content
        attribute.

2011-03-03  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Adam Roben.

        WebKit2: Use CFNetwork Sessions API.
        https://bugs.webkit.org/show_bug.cgi?id=55435

        Set the Private Browsing Storage Session on requests when Private Browsing is enabled.

        * WebCore.exp.in:
        Support using WKCopyRequestWithStorageSession in WebCore.
        * platform/mac/WebCoreSystemInterface.h:
        Ditto.
        * platform/mac/WebCoreSystemInterface.mm:
        Ditto.

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::makeFinalRequest):
        If Private Browsing is enabled, set the Private Browsing Storage Session on the request.
        (WebCore::ResourceHandle::willSendRequest):
        Ditto.
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::createNSURLConnection):
        Ditto.
        (WebCore::ResourceHandle::willSendRequest):
        Ditto.

        * platform/network/cf/ResourceRequest.h:
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::setStorageSession):
        Call through to WKSI.
        * platform/network/mac/ResourceRequestMac.mm:
        (WebCore::ResourceRequest::setStorageSession):
        Ditto.

2011-03-03  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        REGRESSION: Accelerated transitions are jumpy
        https://bugs.webkit.org/show_bug.cgi?id=55022

        Changed the way default TimingFunction is stored according to Adam Roben's
        suggestion.

        * platform/animation/TimingFunction.h:
        (WebCore::CubicBezierTimingFunction::defaultTimingFunction):

2011-03-03  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        Rename -webkit-hyphenate-locale to -webkit-locale
        https://bugs.webkit.org/show_bug.cgi?id=55709

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::cssPropertyID):
        * css/CSSPropertyNames.in:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::findNextLineBreak):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::diff):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::locale):
        (WebCore::InheritedFlags::setLocale):
        (WebCore::InheritedFlags::initialLocale):
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::operator==):
        * rendering/style/StyleRareInheritedData.h:

2011-03-03  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fixes. Use Font::textMetrics to get ascent value, and add missing include.

        * platform/wx/DragDataWx.cpp:
        * platform/wx/wxcode/win/non-kerned-drawing.cpp:
        (WebCore::drawTextWithSpacing):

2011-03-03  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        JSVariableObject needs to use WriteBarrier for symboltable property storage
        https://bugs.webkit.org/show_bug.cgi?id=55698

        Update to pass JSGlobalData for the symbol table write used
        to set the document property.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::updateDocument):

2011-03-03  Alexey Proskuryakov  <ap@apple.com>

        More build fixing. Move WebCoreKeyboardUIMode.h to a cross-platform location.

        * WebCore.xcodeproj/project.pbxproj:
        * page/WebCoreKeyboardUIMode.h: Copied from WebCore/page/mac/WebCoreKeyboardUIMode.h.
        * page/mac/WebCoreKeyboardUIMode.h: Removed.

2011-03-03  Alexey Proskuryakov  <ap@apple.com>

        Build fix. Should include WebCoreKeyboardUIMode.h on all platforms now.

        * page/ChromeClient.h:

2011-03-02  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        REGRESSION (WebKit2): Tab keys no longer observe Full Keyboard Access
        https://bugs.webkit.org/show_bug.cgi?id=55633
        <rdar://problem/8963023>

        * loader/EmptyClients.h: (WebCore::EmptyChromeClient::keyboardUIMode):
        * page/ChromeClient.h:
        * page/EventHandler.cpp: (WebCore::EventHandler::tabsToLinks):
        Merged tabsToLinks() and keyboardUIMode(). The latter returned a superset of information
        returned by former.

2011-03-03  Dimitri Glazkov  <dglazkov@chromium.org>

        Fix Win compile break, caused by r80276.

        * rendering/RenderThemeWin.h: Changed signature of volumeSliderOffsetFromMuteButton
            to match RenderTheme.h.

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

        Reviewed by Darin Adler.

        Moved all variable object storage inline -- upping the object size limit to 1K
        https://bugs.webkit.org/show_bug.cgi?id=55653

        * bindings/js/JSDOMGlobalObject.cpp:
        * bindings/js/JSDOMGlobalObject.h:
        * bindings/js/JSDOMWindowBase.cpp:
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSDOMWindowCustom.h:
        * bindings/js/JSWorkerContextBase.cpp: Removed out-of-line storage. Changed d-> to m_.

2011-03-03  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        Use RenderBox in volumeSliderOffsetFromMuteButton, since that's what is actually being used.
        https://bugs.webkit.org/show_bug.cgi?id=55099

        Cleanup, no behavior change.

        * html/shadow/MediaControls.cpp:
        (WebCore::MediaControls::updateVolumeSliderContainer): Changed to pass RenderBox
            instead of Node.
        * rendering/RenderMediaControls.cpp:
        (WebCore::RenderMediaControls::volumeSliderOffsetFromMuteButton): Changed
            to use RenderBox as argument.
        * rendering/RenderMediaControls.h: Ditto.
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::volumeSliderOffsetFromMuteButton): Ditto.
        * rendering/RenderTheme.h: Ditto.
        * rendering/RenderThemeChromiumMac.h: Ditto.
        * rendering/RenderThemeChromiumMac.mm:
        (WebCore::RenderThemeChromiumMac::volumeSliderOffsetFromMuteButton): Ditto.
        * rendering/RenderThemeMac.h: Ditto.
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::volumeSliderOffsetFromMuteButton): Ditto.
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::volumeSliderOffsetFromMuteButton): Ditto.

2011-03-03  Alexis Menard  <alexis.menard@openbossa.org>

        Reviewed by Andreas Kling.

        When building with DEFINES+=USE_GSTREAMER=1 we don't want to define ENABLE_QT_MULTIMEDIA to 1.
        Also add the new files added after https://bugs.webkit.org/show_bug.cgi?id=54870 to support GRefPtr
        for GstElement.

        * WebCore.pro:
        * features.pri:

2011-03-03  Anders Carlsson  <andersca@apple.com>

        Try to fix the Windows build again.

        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:
        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp:

2011-03-03  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Dimitri Glazkov.

        Add another CRASH() for CSSSelector double frees
        https://bugs.webkit.org/show_bug.cgi?id=55693

        To help track down bug 53045, add a CRASH call when the the array and/or
        CSSSelector member in CSSSelectorList is disposed of more than once.

        Just a check, no new tests necessary.
        
        * css/CSSSelectorList.cpp:
        (WebCore::CSSSelectorList::deleteSelectors):

2011-03-03  Anders Carlsson  <andersca@apple.com>

        Yet another attempt at fixing the Windows build.

        * platform/graphics/ca/win/CACFLayerTreeHost.cpp:
        * platform/graphics/ca/win/LegacyCACFLayerTreeHost.cpp:
        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.h:
        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp:

2011-03-02  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        REGRESSION: Accelerated transitions are jumpy
        https://bugs.webkit.org/show_bug.cgi?id=55022

        Got rid of default TimingFunction values from PlatformCAAnimation*. A TimingFunction
        is now always passed in. The TimingFunction class now has a static method to get
        a default object which has the 'ease' values in it. I now assert in both Mac and
        Win implementations if a null TimingFunction pointer is seen.

        * platform/animation/TimingFunction.h:
        (WebCore::CubicBezierTimingFunction::create):
        (WebCore::CubicBezierTimingFunction::defaultTimingFunction):
        (WebCore::CubicBezierTimingFunction::CubicBezierTimingFunction):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::timingFunctionForAnimationValue):
        * platform/graphics/ca/mac/PlatformCAAnimationMac.mm:
        (toCAMediaTimingFunction):
        * platform/graphics/ca/win/PlatformCAAnimationWin.cpp:
        (toCACFTimingFunction):

2011-03-03  Tony Gentilcore  <tonyg@chromium.org>

        Unreviewed build fix.

        Fix clang compile after r80220
        https://bugs.webkit.org/show_bug.cgi?id=55692

        * storage/IDBBackingStore.cpp:
        (WebCore::IDBBackingStore::getPrimaryKeyViaIndex):

2011-03-03  Anders Carlsson  <andersca@apple.com>

        Attempt to fix the Windows build.

        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:
        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp:

2011-03-02  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        Rest of WebKit2: Need a way to send notifications to client when cookies change
        https://bugs.webkit.org/show_bug.cgi?id=55427
        <rdar://problem/9056027>

        Add functions to be exported.

        * WebCore.exp.in:

2011-03-03  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Improve WebCore build time by ~5%
        https://bugs.webkit.org/show_bug.cgi?id=55688

        Forward declare the CATransform3D and CGAffineTransform structs instead of including
        large chunks of QuartzCore and Core Graphics.

        On an 8 core Mac Pro, this sped up building WebCore by about 5%.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        * platform/graphics/ca/TransformationMatrixCA.cpp:
        * platform/graphics/transforms/TransformationMatrix.h:

2011-03-03  Andrey Kosyakov  <caseq@chromium.org>

        Unreviewed. Adjusted call to a method renamed in r80102.

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._startEditing):

2011-03-03  Timothy Hatcher  <timothy@apple.com>

        Use APIEntryShim instead of JSLock in SerializedScriptValue to allow it to be used
        by contexts not created by WebCore.

        https://webkit.org/b/55642

        Reviewed by Oliver Hunt.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::SerializedScriptValue::create): Use APIEntryShim instead of JSLock.
        (WebCore::SerializedScriptValue::deserialize): Ditto.

2011-03-03  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        WebCore should check for "Upgrade" and "Connection" header fields in WebSockets handshake
        https://bugs.webkit.org/show_bug.cgi?id=55498
        <rdar://problem/8752706>

        Tests: http/tests/websocket/tests/handshake-fail-by-no-connection-header.html
               http/tests/websocket/tests/handshake-fail-by-no-upgrade-header.html

        * websockets/WebSocketHandshake.h: Removed unused and meaningless setters for response
        header fields. Removed separate member variables for those, as they were duplicating data
        available in response, and there is no reason to squeeze microsecods here.

        * websockets/WebSocketHandshake.cpp:
        (WebCore::WebSocketHandshake::reset): There are no longer member variables for header field
        values to reset here.
        (WebCore::WebSocketHandshake::readServerHandshake): Removed a call for processHeaders().
        (WebCore::WebSocketHandshake::serverWebSocketOrigin): Changed to get the value from response.
        (WebCore::WebSocketHandshake::serverWebSocketLocation): Ditto.
        (WebCore::WebSocketHandshake::serverWebSocketProtocol): Ditto.
        (WebCore::WebSocketHandshake::serverSetCookie): Ditto.
        (WebCore::WebSocketHandshake::serverSetCookie2): Ditto.
        (WebCore::WebSocketHandshake::serverUpgrade): Added.
        (WebCore::WebSocketHandshake::serverConnection): Added.
        (WebCore::WebSocketHandshake::checkResponseHeaders): Added checks for Upgrade and Connection
        header field presence and values.

2011-03-03  Helder Correia  <helder@sencha.com>

        Reviewed by Andreas Kling.

        [Qt] fast/canvas/canvas-strokePath-gradient-shadow.html fails
        https://bugs.webkit.org/show_bug.cgi?id=55651

        When relying on ContextShadow and using a gradient stroke for a path,
        the alpha of the shadow is incorrect.

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

2011-03-03  Martin Robinson  <mrobinson@igalia.com>

        XHTMLMP build broken after r78342
        https://bugs.webkit.org/show_bug.cgi?id=55286

        Fix XHTMLMP build now that the DocumentWriter is a member of DocumentLoader
        instead of FrameLoader.

        No new tests. This is a build fix.

        * dom/Document.cpp:
        (WebCore::Document::isXHTMLMPDocument):

2011-03-03  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Carlson.

        Tweak MediaControlMuteButtonElement class hierarchy.
        https://bugs.webkit.org/show_bug.cgi?id=55614

        This allows the mute button on the panel to have event handlers that are
        different from the mute button in the volume slider.

        No change in behavior, covered by existing tests.

        * html/shadow/MediaControls.cpp:
        (WebCore::MediaControls::createMuteButton): Changed to use MediaControlPanelMuteButtonElement.
        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlMuteButtonElement::updateDisplayType):
        (WebCore::MediaControlPanelMuteButtonElement::MediaControlPanelMuteButtonElement): Added.
        (WebCore::MediaControlPanelMuteButtonElement::create): Added.
        (WebCore::MediaControlPanelMuteButtonElement::shadowPseudoId): Moved.
        * rendering/MediaControlElements.h: Added defs.

2011-03-03  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Resource agent should have same lifetime as Inspector agent
        https://bugs.webkit.org/show_bug.cgi?id=55461

        * inspector/Inspector.idl:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        (WebCore::InspectorAgent::inspectedPageDestroyed): disconnectFrontend is called before the agent is destroyed
        to clear frontend reference in all agents.
        (WebCore::InspectorAgent::restoreInspectorStateFromCookie):
        (WebCore::InspectorAgent::setFrontend):
        (WebCore::InspectorAgent::disconnectFrontend):
        (WebCore::InspectorAgent::releaseFrontendLifetimeAgents):
        (WebCore::InspectorAgent::didCommitLoad):
        * inspector/InspectorAgent.h:
        (WebCore::InspectorAgent::resourceAgent):
        * inspector/InspectorBrowserDebuggerAgent.cpp:
        (WebCore::InspectorBrowserDebuggerAgent::~InspectorBrowserDebuggerAgent):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::~InspectorDebuggerAgent):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didCreateWebSocketImpl):
        (WebCore::InspectorInstrumentation::willSendWebSocketHandshakeRequestImpl):
        (WebCore::InspectorInstrumentation::didReceiveWebSocketHandshakeResponseImpl):
        (WebCore::InspectorInstrumentation::didCloseWebSocketImpl):
        (WebCore::InspectorInstrumentation::retrieveResourceAgent):
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::setFrontend):
        (WebCore::InspectorResourceAgent::clearFrontend):
        (WebCore::InspectorResourceAgent::restore):
        (WebCore::InspectorResourceAgent::~InspectorResourceAgent):
        (WebCore::InspectorResourceAgent::enable):
        (WebCore::InspectorResourceAgent::disable):
        (WebCore::InspectorResourceAgent::InspectorResourceAgent):
        * inspector/InspectorResourceAgent.h:
        (WebCore::InspectorResourceAgent::create):
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::restore):
        * inspector/InspectorTimelineAgent.h:
        * inspector/front-end/NetworkManager.js:
        (WebInspector.NetworkManager):
        (WebInspector.NetworkManager.prototype.frontendReused):
        * inspector/front-end/inspector.js:
        (WebInspector.frontendReused):

2011-03-03  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Andreas Kling.

        CSS RGBA fast-path color parsing should clamp of out-of-range alpha values
        https://bugs.webkit.org/show_bug.cgi?id=55661

        Test case originally written by Andreas Kling <andreas.kling@nokia.com>

        Test: fast/canvas/rgba-parsing.html

        * css/CSSParser.cpp:
        (WebCore::isValidDouble): Check whether the given string is a valid double.
        (WebCore::parseAlphaValue): Out-of-range alpha values should be clamped to the (0.0, 1.0) range.

2011-03-03  David Holloway  <dhollowa@chromium.org>

        Reviewed by Dimitri Glazkov.

        Changes HTMLTextFormControlElement::placeholderShouldBeVisible to account
        for non-empty suggestion text.  The visibility of the placeholder text
        now turned off when suggestion text is set.
        https://bugs.webkit.org/show_bug.cgi?id=55245

        No new tests because, by design, the suggestion text is not accessible
        through the DOM.

        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::placeholderShouldBeVisible):
        * html/HTMLFormControlElement.h:
        (WebCore::HTMLTextFormControlElement::isEmptySuggestedValue):
        * html/HTMLInputElement.h:
        (WebCore::HTMLInputElement::isEmptySuggestedValue):

2011-03-03  Andy Estes  <aestes@apple.com>

        Reviewed by Eric Seidel.

        HTML5 TreeBuilder regressed a Peacekeeper DOM test by 25% (was 40%)
        https://bugs.webkit.org/show_bug.cgi?id=48719
        
        Instead of pushing a fake HTMLHtmlElement onto the open element stack
        during fragment parsing only to later remove it and reparent its
        children to the DocumentFragment, push the DocumentFragment directly
        onto the open element stack as the root node. This requires refactoring
        HTMLElementStack to hold ContainerNode pointers rather than Element
        pointers, which has implications for HTMLConstructionSite and
        HTMLTreeBuilder as well.
        
        With this patch, the regression in Peacekeeper from Safari 5.0.3 to ToT
        is ~14%. However, if you discount the 'domDynamicCreationCreateElement'
        test, ToT is now ~4% faster than Safari 5.0.3. This indicates that the
        regression no longer lies in fragment parsing.

        No new tests. No change in behavior.

        * dom/Element.h:
        (WebCore::Node::hasLocalName):
        * dom/Node.h:
        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLNames::hasImpliedEndTag):
        (WebCore::HTMLConstructionSite::HTMLConstructionSite):
        (WebCore::HTMLConstructionSite::insertHTMLHtmlStartTagInBody):
        (WebCore::HTMLConstructionSite::insertComment):
        (WebCore::HTMLConstructionSite::insertCommentOnHTMLHtmlElement):
        (WebCore::HTMLConstructionSite::attachToCurrent):
        (WebCore::HTMLConstructionSite::insertScriptElement):
        (WebCore::HTMLConstructionSite::insertTextNode):
        (WebCore::HTMLConstructionSite::createElement):
        (WebCore::HTMLConstructionSite::createHTMLElement):
        (WebCore::HTMLConstructionSite::generateImpliedEndTagsWithExclusion):
        (WebCore::HTMLConstructionSite::generateImpliedEndTags):
        (WebCore::HTMLConstructionSite::findFosterSite):
        (WebCore::HTMLConstructionSite::shouldFosterParent):
        * html/parser/HTMLConstructionSite.h:
        (WebCore::HTMLConstructionSite::currentNode):
        * html/parser/HTMLElementStack.cpp:
        (WebCore::HTMLNames::isNumberedHeaderElement):
        (WebCore::HTMLNames::isScopeMarker):
        (WebCore::HTMLNames::isListItemScopeMarker):
        (WebCore::HTMLNames::isTableScopeMarker):
        (WebCore::HTMLNames::isTableBodyScopeMarker):
        (WebCore::HTMLNames::isTableRowScopeMarker):
        (WebCore::HTMLNames::isButtonScopeMarker):
        (WebCore::HTMLNames::isSelectScopeMarker):
        (WebCore::HTMLElementStack::ElementRecord::ElementRecord):
        (WebCore::HTMLElementStack::ElementRecord::replaceElement):
        (WebCore::HTMLElementStack::HTMLElementStack):
        (WebCore::HTMLElementStack::secondElementIsHTMLBodyElement):
        (WebCore::HTMLElementStack::popAll):
        (WebCore::HTMLElementStack::popUntilNumberedHeaderElementPopped):
        (WebCore::HTMLElementStack::popUntil):
        (WebCore::HTMLElementStack::popUntilPopped):
        (WebCore::HTMLElementStack::popUntilTableScopeMarker):
        (WebCore::HTMLElementStack::popUntilTableBodyScopeMarker):
        (WebCore::HTMLElementStack::popUntilTableRowScopeMarker):
        (WebCore::HTMLElementStack::pushHTMLHtmlElement):
        (WebCore::HTMLElementStack::push):
        (WebCore::HTMLElementStack::insertAbove):
        (WebCore::HTMLElementStack::find):
        (WebCore::HTMLElementStack::topmost):
        (WebCore::HTMLElementStack::contains):
        (WebCore::inScopeCommon):
        (WebCore::HTMLElementStack::hasNumberedHeaderElementInScope):
        (WebCore::HTMLElementStack::htmlElement):
        (WebCore::HTMLElementStack::rootNode):
        (WebCore::HTMLElementStack::pushCommon):
        * html/parser/HTMLElementStack.h:
        (WebCore::HTMLElementStack::ElementRecord::element):
        (WebCore::HTMLElementStack::ElementRecord::node):
        (WebCore::HTMLElementStack::topNode):
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::HTMLTreeBuilder):
        (WebCore::HTMLTreeBuilder::processCloseWhenNestedTag):
        (WebCore::HTMLTreeBuilder::processStartTagForInBody):
        (WebCore::HTMLTreeBuilder::processColgroupEndTagForInColumnGroup):
        (WebCore::HTMLTreeBuilder::processStartTag):
        (WebCore::HTMLTreeBuilder::processAnyOtherEndTagForInBody):
        (WebCore::HTMLTreeBuilder::callTheAdoptionAgency):
        (WebCore::HTMLTreeBuilder::resetInsertionModeAppropriately):
        (WebCore::HTMLTreeBuilder::processEndTagForInCell):
        (WebCore::HTMLTreeBuilder::processEndTagForInBody):
        (WebCore::HTMLTreeBuilder::processEndTag):
        (WebCore::HTMLTreeBuilder::processEndOfFile):
        (WebCore::HTMLTreeBuilder::finished):
        * html/parser/HTMLTreeBuilder.h:

2011-03-02  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: inspector protocol should allow different domains to have methods with same name
        https://bugs.webkit.org/show_bug.cgi?id=55558

        * inspector/CodeGeneratorInspector.pm: each command is now identified by domain + command-name(was command-name only).

2011-03-02  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: make selected call frame debugger presentation model property.
        https://bugs.webkit.org/show_bug.cgi?id=55582

        * inspector/front-end/CallStackSidebarPane.js:
        (WebInspector.CallStackSidebarPane):
        (WebInspector.CallStackSidebarPane.prototype.update):
        (WebInspector.CallStackSidebarPane.prototype.set selectedCallFrame):
        (WebInspector.CallStackSidebarPane.prototype._selectedCallFrameIndex):
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.completions):
        * inspector/front-end/DebuggerPresentationModel.js:
        (WebInspector.DebuggerPresentationModel.prototype.set selectedCallFrame):
        (WebInspector.DebuggerPresentationModel.prototype.get selectedCallFrame):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype.getCompletionsOnCallFrame):
        (WebInspector.ScriptsPanel.prototype._debuggerResumed):
        (WebInspector.ScriptsPanel.prototype._sourceFrameLoaded):
        (WebInspector.ScriptsPanel.prototype._callFrameSelected):

2011-03-03  Jia Pu  <jpu@apple.com>

        Reviewed by Darin Adler.

        On Mac OS X, spelling suggestion panel stops showing up after change set 80121
        https://bugs.webkit.org/show_bug.cgi?id=55628

        Removed a call to stopCorrectionPanelTimer() to fix a regression introduced by changeset 80121.

        * editing/Editor.cpp:
        (WebCore::Editor::appliedEditing):
        * manual-tests/autocorrection/autocorrection-contraction.html:

2011-03-03  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: rename "sourceName" to "sourceFileId" in ScriptsPanel.js.
        https://bugs.webkit.org/show_bug.cgi?id=55569

        sourceFileId better reflects the intention to have unique identifier for each source that is shown in scripts panel.

        * inspector/front-end/DebuggerPresentationModel.js:
        * inspector/front-end/ScriptsPanel.js:

2011-03-03  Steve Block  <steveblock@google.com>

        Reviewed by David Levin.

        JavaString API should be implementable by both JSC and V8
        https://bugs.webkit.org/show_bug.cgi?id=55567

        Remove JavaString's UString operator and replace it with a
        script-engine-independent impl() method, which returns a
        StringImpl and can be implemented with both JSC and V8.

        No new tests, refactoring only. 

        * bridge/jni/JNIBridge.h:
        (JSC::Bindings::JavaString::impl):
        * bridge/jni/jni_jsobject.mm:
        (JavaJSObject::call):
        (JavaJSObject::eval):
        (JavaJSObject::getMember):
        (JavaJSObject::setMember):
        (JavaJSObject::removeMember):
        * bridge/jni/jsc/JNIBridgeJSC.cpp:
        (JavaField::valueFromInstance):
        (JavaField::setValueToInstance):
        * bridge/jni/jsc/JavaClassJSC.cpp:
        (JavaClass::JavaClass):
        * bridge/jni/jsc/JavaInstanceJSC.cpp:
        (JavaInstance::invokeMethod):
        * bridge/jni/jsc/JavaStringJSC.h:
        (JSC::Bindings::JavaStringImpl::impl):
        * bridge/jni/v8/JavaStringV8.h:
        (JSC::Bindings::JavaStringImpl::impl):

2011-03-03  Benjamin Poulain  <ikipou@gmail.com>

        Reviewed by Adam Roben.

        REGRESSION (r79817): Lots of leaks of FloatingObjects seen on SnowLeopard Intel Leaks bot
        https://bugs.webkit.org/show_bug.cgi?id=55602

        Delete the FloatingObject referenced by m_floatingObjects when clearing the floats.

        The DeprecatedPtrList was deleting the objects automatically due to its autoDelete behavior. The
        objects need to be deleted manually with ListHashSet.

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

2011-03-03  Hans Wennborg  <hans@chromium.org>

        Reviewed by Jeremy Orlow.

        IndexedDB: Move SQL code, especially for cursors, to IDBBackingStore
        https://bugs.webkit.org/show_bug.cgi?id=55376

        Move SQL code from IDBKey, IDBKeyRange, IDBIndexBackendImpl,
        IDBObjectStoreBackendImpl, and especially IDBCursorBackendImpl.

        No new functionality, so no new tests.

        * storage/IDBBackingStore.cpp:
        (WebCore::lowerCursorWhereFragment):
        (WebCore::upperCursorWhereFragment):
        (WebCore::IDBBackingStore::deleteObjectStoreRecord):
        (WebCore::IDBBackingStore::keyExistsInObjectStore):
        (WebCore::IDBBackingStore::getObjectViaIndex):
        (WebCore::keyFromQuery):
        (WebCore::IDBBackingStore::getPrimaryKeyViaIndex):
        (WebCore::IDBBackingStore::keyExistsInIndex):
        (WebCore::CursorImplCommon::CursorImplCommon::continueInternal):
        (WebCore::CursorImplCommon::ObjectStoreCursorImpl::ObjectStoreCursorImpl):
        (WebCore::CursorImplCommon::ObjectStoreCursorImpl::objectStoreDataId):
        (WebCore::CursorImplCommon::ObjectStoreCursorImpl::key):
        (WebCore::CursorImplCommon::ObjectStoreCursorImpl::value):
        (WebCore::CursorImplCommon::ObjectStoreCursorImpl::continueFunction):
        (WebCore::IDBBackingStore::openObjectStoreCursor):
        (WebCore::ObjectStoreCursorImpl::loadCurrentRow):
        (WebCore::ObjectStoreCursorImpl::currentRowExists):
        (WebCore::IndexKeyCursorImpl::IndexKeyCursorImpl):
        (WebCore::IndexKeyCursorImpl::indexDataId):
        (WebCore::IndexKeyCursorImpl::key):
        (WebCore::IndexKeyCursorImpl::primaryKey):
        (WebCore::IndexKeyCursorImpl::continueFunction):
        (WebCore::IDBBackingStore::openIndexKeyCursor):
        (WebCore::IndexKeyCursorImpl::loadCurrentRow):
        (WebCore::IndexKeyCursorImpl::currentRowExists):
        (WebCore::IndexCursorImpl::IndexCursorImpl):
        (WebCore::IndexCursorImpl::indexDataId):
        (WebCore::IndexCursorImpl::key):
        (WebCore::IndexCursorImpl::primaryKey):
        (WebCore::IndexCursorImpl::value):
        (WebCore::IndexCursorImpl::continueFunction):
        (WebCore::IDBBackingStore::openIndexCursor):
        (WebCore::IndexCursorImpl::loadCurrentRow):
        (WebCore::IndexCursorImpl::currentRowExists):
        * storage/IDBBackingStore.h:
        (WebCore::IDBBackingStore::Cursor::~Cursor):
        * storage/IDBCursorBackendImpl.cpp:
        (WebCore::IDBCursorBackendImpl::IDBCursorBackendImpl):
        (WebCore::IDBCursorBackendImpl::key):
        (WebCore::IDBCursorBackendImpl::value):
        (WebCore::IDBCursorBackendImpl::update):
        (WebCore::IDBCursorBackendImpl::continueFunctionInternal):
        (WebCore::IDBCursorBackendImpl::deleteFunction):
        * storage/IDBCursorBackendImpl.h:
        (WebCore::IDBCursorBackendImpl::create):
        * storage/IDBIndexBackendImpl.cpp:
        (WebCore::IDBIndexBackendImpl::openCursorInternal):
        (WebCore::IDBIndexBackendImpl::getInternal):
        (WebCore::IDBIndexBackendImpl::addingKeyAllowed):
        * storage/IDBIndexBackendImpl.h:
        * storage/IDBKey.cpp:
        (WebCore::IDBKey::isEqual):
        * storage/IDBKey.h:
        * storage/IDBKeyRange.cpp:
        * storage/IDBKeyRange.h:
        * storage/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::putInternal):
        (WebCore::IDBObjectStoreBackendImpl::deleteInternal):
        (WebCore::IDBObjectStoreBackendImpl::openCursorInternal):
        * storage/IDBObjectStoreBackendImpl.h:

2011-03-03  Peter Kasting  <pkasting@google.com>

        Reviewed by James Robinson.

        Drop redundant "Windows; " from the Windows-specific User Agent string.
        https://bugs.webkit.org/show_bug.cgi?id=54567

        * StringsNotToBeLocalized.txt:

2011-03-03  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Combo boxes should emit object:selection-changed even when collapsed
        https://bugs.webkit.org/show_bug.cgi?id=53146

        Emit the selection-changed signals when the menu list value has changed

        Test: platform/gtk/accessibility/combo-box-collapsed-selection-changed.html

        * accessibility/gtk/AXObjectCacheAtk.cpp:
        (WebCore::getListObject): New, return the right list object for
        menu lists and list boxes.
        (WebCore::notifyChildrenSelectionChange): Support menu lists.
        (WebCore::AXObjectCache::postPlatformNotification): Call function
        notifyChildrenSelectionChange for AXMenuListValueChanged.

2011-03-03  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Tony Chang.

        applyInlineStyleToPushDown and removeInlineStyleFromElement should take EditingStyle
        https://bugs.webkit.org/show_bug.cgi?id=55338

        Include wtf/Forward.h instead of wtf/text/String.h

        * editing/EditingStyle.h:

2011-03-03  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed trivial fix after r80169.

        [Qt][WK2] Memory exhausted when building qtwebkit2 on linux
        https://bugs.webkit.org/show_bug.cgi?id=55484

        * WebCore.pro: Typo fix. We have to use linux-g++* instead of linux-g++.


2011-03-02  MORITA Hajime  <morrita@google.com>

        Reviewed by Kent Tamura.

        [Refactoring] Make ScheduledEvent on FrameView abstract out to ScheduleAction
        https://bugs.webkit.org/show_bug.cgi?id=54440

        - Extracted FrameActionScheduler from FrameView
        - Extracted FrameAction abstract class from ScheduledEvent,
          which has fire() virtual method.
        - Renamed ScheduledEvent EventFrameAction
        
        With this change, Any action can be hooked up to the end of the layout.
        
        No new tests. No behavioral change.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * page/FrameActionScheduler.cpp: Added.
        (WebCore::EventFrameAction::EventFrameAction):
        (WebCore::EventFrameAction::fire):
        (WebCore::FrameActionScheduler::FrameActionScheduler):
        (WebCore::FrameActionScheduler::~FrameActionScheduler):
        (WebCore::FrameActionScheduler::isEmpty):
        (WebCore::FrameActionScheduler::clear):
        (WebCore::FrameActionScheduler::pause):
        (WebCore::FrameActionScheduler::resume):
        (WebCore::FrameActionScheduler::dispatch):
        (WebCore::FrameActionScheduler::scheduleAction):
        (WebCore::FrameActionScheduler::scheduleEvent):
        * page/FrameActionScheduler.h: Added.
        (WebCore::FrameAction::FrameAction):
        (WebCore::FrameAction::~FrameAction):
        (WebCore::FrameActionScheduler::isScheduled):
        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::~FrameView):
        (WebCore::FrameView::layout):
        (WebCore::FrameView::scheduleEvent):
        (WebCore::FrameView::pauseScheduledEvents):
        (WebCore::FrameView::resumeScheduledEvents):
        (WebCore::FrameView::performPostLayoutTasks):
        (WebCore::FrameView::updateOverflowStatus):
        * page/FrameView.h:

2011-03-02  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r80201.
        http://trac.webkit.org/changeset/80201
        https://bugs.webkit.org/show_bug.cgi?id=55648

        "caused tests to crash on several bots" (Requested by rniwa on
        #webkit).

        * dom/Element.h:
        (WebCore::Node::hasTagName):
        * dom/Node.h:
        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLNames::hasImpliedEndTag):
        (WebCore::HTMLConstructionSite::insertHTMLHtmlStartTagInBody):
        (WebCore::HTMLConstructionSite::insertComment):
        (WebCore::HTMLConstructionSite::insertCommentOnHTMLHtmlElement):
        (WebCore::HTMLConstructionSite::attachToCurrent):
        (WebCore::HTMLConstructionSite::insertScriptElement):
        (WebCore::HTMLConstructionSite::insertTextNode):
        (WebCore::HTMLConstructionSite::createElement):
        (WebCore::HTMLConstructionSite::createHTMLElement):
        (WebCore::HTMLConstructionSite::generateImpliedEndTagsWithExclusion):
        (WebCore::HTMLConstructionSite::generateImpliedEndTags):
        (WebCore::HTMLConstructionSite::findFosterSite):
        (WebCore::HTMLConstructionSite::shouldFosterParent):
        * html/parser/HTMLConstructionSite.h:
        * html/parser/HTMLElementStack.cpp:
        (WebCore::HTMLNames::isNumberedHeaderElement):
        (WebCore::HTMLNames::isScopeMarker):
        (WebCore::HTMLNames::isListItemScopeMarker):
        (WebCore::HTMLNames::isTableScopeMarker):
        (WebCore::HTMLNames::isTableBodyScopeMarker):
        (WebCore::HTMLNames::isTableRowScopeMarker):
        (WebCore::HTMLNames::isButtonScopeMarker):
        (WebCore::HTMLNames::isSelectScopeMarker):
        (WebCore::HTMLElementStack::ElementRecord::ElementRecord):
        (WebCore::HTMLElementStack::ElementRecord::replaceElement):
        (WebCore::HTMLElementStack::HTMLElementStack):
        (WebCore::HTMLElementStack::secondElementIsHTMLBodyElement):
        (WebCore::HTMLElementStack::popAll):
        (WebCore::HTMLElementStack::popUntilTableScopeMarker):
        (WebCore::HTMLElementStack::popUntilTableBodyScopeMarker):
        (WebCore::HTMLElementStack::popUntilTableRowScopeMarker):
        (WebCore::HTMLElementStack::popUntilForeignContentScopeMarker):
        (WebCore::HTMLElementStack::pushHTMLHtmlElement):
        (WebCore::HTMLElementStack::push):
        (WebCore::HTMLElementStack::insertAbove):
        (WebCore::HTMLElementStack::find):
        (WebCore::HTMLElementStack::topmost):
        (WebCore::inScopeCommon):
        (WebCore::HTMLElementStack::hasNumberedHeaderElementInScope):
        (WebCore::HTMLElementStack::htmlElement):
        (WebCore::HTMLElementStack::bodyElement):
        (WebCore::HTMLElementStack::pushCommon):
        * html/parser/HTMLElementStack.h:
        (WebCore::HTMLElementStack::ElementRecord::element):
        (WebCore::HTMLElementStack::top):
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::HTMLTreeBuilder):
        (WebCore::HTMLTreeBuilder::FragmentParsingContext::finished):
        (WebCore::HTMLTreeBuilder::processCloseWhenNestedTag):
        (WebCore::HTMLTreeBuilder::processStartTagForInBody):
        (WebCore::HTMLTreeBuilder::processColgroupEndTagForInColumnGroup):
        (WebCore::HTMLTreeBuilder::processStartTag):
        (WebCore::HTMLTreeBuilder::processAnyOtherEndTagForInBody):
        (WebCore::HTMLTreeBuilder::callTheAdoptionAgency):
        (WebCore::HTMLTreeBuilder::resetInsertionModeAppropriately):
        (WebCore::HTMLTreeBuilder::processEndTagForInCell):
        (WebCore::HTMLTreeBuilder::processEndTagForInBody):
        (WebCore::HTMLTreeBuilder::processEndTag):
        (WebCore::HTMLTreeBuilder::processEndOfFile):
        (WebCore::HTMLTreeBuilder::finished):
        * html/parser/HTMLTreeBuilder.h:

2011-03-02  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: break down InspectorFrontend into domain-specific classes
        https://bugs.webkit.org/show_bug.cgi?id=55584

        * inspector/CodeGeneratorInspector.pm: InspectorFrontend now contains nested classes for
        all domains that have event notifications.
        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::addToFrontend):
        (WebCore::ConsoleMessage::updateRepeatCountInConsole):
        * inspector/ConsoleMessage.h:
        * inspector/InjectedScriptHost.cpp:
        (WebCore::InjectedScriptHost::inspectImpl):
        * inspector/Inspector.idl:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::inspectedPageDestroyed):
        (WebCore::InspectorAgent::restoreInspectorStateFromCookie):
        (WebCore::InspectorAgent::setFrontend):
        (WebCore::InspectorAgent::disconnectFrontend):
        (WebCore::InspectorAgent::populateScriptObjects):
        (WebCore::InspectorAgent::pushDataCollectedOffline):
        (WebCore::InspectorAgent::didCommitLoad):
        (WebCore::InspectorAgent::domContentLoadedEventFired):
        (WebCore::InspectorAgent::loadEventFired):
        (WebCore::InspectorAgent::postWorkerNotificationToFrontend):
        (WebCore::InspectorAgent::evaluateForTestInFrontend):
        (WebCore::InspectorAgent::showPanel):
        * inspector/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::InspectorApplicationCacheAgent):
        * inspector/InspectorApplicationCacheAgent.h:
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::setFrontend):
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::show):
        (WebCore::InspectorController::close):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::setFrontend):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMStorageResource.cpp:
        (WebCore::InspectorDOMStorageResource::bind):
        * inspector/InspectorDOMStorageResource.h:
        * inspector/InspectorDatabaseAgent.cpp:
        (WebCore::InspectorDatabaseAgent::FrontendProvider::frontend):
        (WebCore::InspectorDatabaseAgent::FrontendProvider::FrontendProvider):
        (WebCore::InspectorDatabaseAgent::setFrontend):
        * inspector/InspectorDatabaseResource.cpp:
        (WebCore::InspectorDatabaseResource::bind):
        * inspector/InspectorDatabaseResource.h:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::setFrontend):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorProfilerAgent.cpp:
        * inspector/InspectorProfilerAgent.h:
        (WebCore::InspectorProfilerAgent::setFrontend):
        (WebCore::InspectorProfilerAgent::clearFrontend):
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::InspectorResourceAgent):
        * inspector/InspectorResourceAgent.h:
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::setFrontend):
        * inspector/InspectorTimelineAgent.h:
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMDispatcher.prototype.inspectElementRequested):
        (WebInspector.DOMDispatcher.prototype.addNodesToSearchResult):
        * inspector/front-end/inspector.js:

2011-03-02  Kent Tamura  <tkent@chromium.org>

        Unreviewed, a trivial regression fix.

        Fix LocalizedNumberICU regression by r80198 and r80199.
        https://bugs.webkit.org/show_bug.cgi?id=55629

        * platform/text/LocalizedNumberICU.cpp:
          We should use U_SUCCESS().
        (WebCore::createFormatterForCurrentLocale):
        (WebCore::parseLocalizedNumber):

2011-03-02  Dan Bernstein  <mitz@apple.com>

        Let Xcode know that Localizable.strings is UTF-16-encoded.

        * WebCore.xcodeproj/project.pbxproj:

2011-03-02  Andy Estes  <aestes@apple.com>

        Reviewed by Eric Seidel.

        HTML5 TreeBuilder regressed a Peacekeeper DOM test by 25% (was 40%)
        https://bugs.webkit.org/show_bug.cgi?id=48719
        
        Instead of pushing a fake HTMLHtmlElement onto the open element stack
        during fragment parsing only to later remove it and reparent its
        children to the DocumentFragment, push the DocumentFragment directly
        onto the open element stack as the root node. This requires refactoring
        HTMLElementStack to hold ContainerNode pointers rather than Element
        pointers, which has implications for HTMLConstructionSite and
        HTMLTreeBuilder as well.
        
        With this patch, the regression in Peacekeeper due to the introduction
        of the HTML5 fragment parsing algorithm is ~14%. The regression from
        Safari 5.0.3 is ~24%.

        No new tests. No change in behavior.

        * dom/Element.h:
        (WebCore::Node::hasLocalName):
        * dom/Node.h:
        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLNames::hasImpliedEndTag):
        (WebCore::HTMLConstructionSite::HTMLConstructionSite):
        (WebCore::HTMLConstructionSite::insertHTMLHtmlStartTagInBody):
        (WebCore::HTMLConstructionSite::insertComment):
        (WebCore::HTMLConstructionSite::insertCommentOnHTMLHtmlElement):
        (WebCore::HTMLConstructionSite::attachToCurrent):
        (WebCore::HTMLConstructionSite::insertScriptElement):
        (WebCore::HTMLConstructionSite::insertTextNode):
        (WebCore::HTMLConstructionSite::createElement):
        (WebCore::HTMLConstructionSite::createHTMLElement):
        (WebCore::HTMLConstructionSite::generateImpliedEndTagsWithExclusion):
        (WebCore::HTMLConstructionSite::generateImpliedEndTags):
        (WebCore::HTMLConstructionSite::findFosterSite):
        (WebCore::HTMLConstructionSite::shouldFosterParent):
        * html/parser/HTMLConstructionSite.h:
        (WebCore::HTMLConstructionSite::currentNode):
        * html/parser/HTMLElementStack.cpp:
        (WebCore::HTMLNames::isNumberedHeaderElement):
        (WebCore::HTMLNames::isScopeMarker):
        (WebCore::HTMLNames::isListItemScopeMarker):
        (WebCore::HTMLNames::isTableScopeMarker):
        (WebCore::HTMLNames::isTableBodyScopeMarker):
        (WebCore::HTMLNames::isTableRowScopeMarker):
        (WebCore::HTMLNames::isButtonScopeMarker):
        (WebCore::HTMLNames::isSelectScopeMarker):
        (WebCore::HTMLElementStack::ElementRecord::ElementRecord):
        (WebCore::HTMLElementStack::ElementRecord::replaceElement):
        (WebCore::HTMLElementStack::HTMLElementStack):
        (WebCore::HTMLElementStack::secondElementIsHTMLBodyElement):
        (WebCore::HTMLElementStack::popAll):
        (WebCore::HTMLElementStack::popUntilNumberedHeaderElementPopped):
        (WebCore::HTMLElementStack::popUntil):
        (WebCore::HTMLElementStack::popUntilPopped):
        (WebCore::HTMLElementStack::popUntilTableScopeMarker):
        (WebCore::HTMLElementStack::popUntilTableBodyScopeMarker):
        (WebCore::HTMLElementStack::popUntilTableRowScopeMarker):
        (WebCore::HTMLElementStack::pushHTMLHtmlElement):
        (WebCore::HTMLElementStack::push):
        (WebCore::HTMLElementStack::insertAbove):
        (WebCore::HTMLElementStack::find):
        (WebCore::HTMLElementStack::topmost):
        (WebCore::HTMLElementStack::contains):
        (WebCore::inScopeCommon):
        (WebCore::HTMLElementStack::hasNumberedHeaderElementInScope):
        (WebCore::HTMLElementStack::htmlElement):
        (WebCore::HTMLElementStack::rootNode):
        (WebCore::HTMLElementStack::pushCommon):
        * html/parser/HTMLElementStack.h:
        (WebCore::HTMLElementStack::ElementRecord::element):
        (WebCore::HTMLElementStack::ElementRecord::node):
        (WebCore::HTMLElementStack::topNode):
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::HTMLTreeBuilder):
        (WebCore::HTMLTreeBuilder::processCloseWhenNestedTag):
        (WebCore::HTMLTreeBuilder::processStartTagForInBody):
        (WebCore::HTMLTreeBuilder::processColgroupEndTagForInColumnGroup):
        (WebCore::HTMLTreeBuilder::processStartTag):
        (WebCore::HTMLTreeBuilder::processAnyOtherEndTagForInBody):
        (WebCore::HTMLTreeBuilder::callTheAdoptionAgency):
        (WebCore::HTMLTreeBuilder::resetInsertionModeAppropriately):
        (WebCore::HTMLTreeBuilder::processEndTagForInCell):
        (WebCore::HTMLTreeBuilder::processEndTagForInBody):
        (WebCore::HTMLTreeBuilder::processEndTag):
        (WebCore::HTMLTreeBuilder::processEndOfFile):
        (WebCore::HTMLTreeBuilder::finished):
        * html/parser/HTMLTreeBuilder.h:

2011-03-02  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r80188.
        http://trac.webkit.org/changeset/80188
        https://bugs.webkit.org/show_bug.cgi?id=55647

        Broke the WebKit API tests. (Requested by xenon on #webkit).

        * WebCore.exp.in:

2011-03-02  Kent Tamura  <tkent@chromium.org>

        Unreviewed, build fix.

        * platform/text/LocalizedNumberICU.cpp:
        (WebCore::createFormatterForCurrentLocale): Fix a typo.

2011-03-02  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        Caching number formatter instances in LocalizedNumber* implementations
        https://bugs.webkit.org/show_bug.cgi?id=55629

        No new tests. This change doesn't change existing behavior, and is
        covered by existing tests.

        * platform/text/LocalizedNumberICU.cpp:
        (WebCore::createFormatterForCurrentLocale):
        (WebCore::numberFormatter): Introduce a function to return a static
          instance of NumberFormat.
        (WebCore::parseLocalizedNumber): Use numberFormatter().
        (WebCore::formatLocalizedNumber): Use numberFormatter().
        * platform/text/mac/LocalizedNumberMac.mm:
        (WebCore::createFormatterForCurrentLocale):
        (WebCore::numberFormatter): Introduce a function to return a static
          instance of NSNumberFormatter.
        (WebCore::parseLocalizedNumber): Use numberFormatter().
        (WebCore::formatLocalizedNumber): Use numberFormatter().

2011-03-02  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Ryosuke Niwa.

        deprecatedEditingOffset should actually return the expected deprecated value for "after" positions
        https://bugs.webkit.org/show_bug.cgi?id=54986

        Calls to deprecatedEditingOffset needs to return the expected value for new Before/After positions
        until we can update all the call sites to consider the new position types.

        No tests. This is intended to simplify the transition to new Positions, not to change behavior.

        * dom/Position.cpp:
        (WebCore::Position::deprecatedEditingOffset):
        (WebCore::Position::offsetForPositionAfterAnchor): Added to do the right thing while ensuring
        inline-speed for most calls to deprecatedEditingOffset.
        * dom/Position.h:

2011-03-02  Timothy Hatcher  <timothy@apple.com>

        Export SerializedScriptValue::create(JSC::ExecState* exec, JSC::JSValue value).

        Reviewed by Darin Adler.

        * WebCore.exp.in: Added __ZN7WebCore21SerializedScriptValue6createEPN3JSC9ExecStateENS1_7JSValueE.

2011-03-02  Daniel Cheng  <dcheng@chromium.org>

        Reviewed by David Levin.

        Manually revert ChromiumDataObject changes.
        https://bugs.webkit.org/show_bug.cgi?id=55627

        No new tests since no functionality should change.

        * WebCore.gypi:
        * editing/chromium/EditorChromium.cpp:
        (WebCore::Editor::newGeneralClipboard):
        * page/chromium/EventHandlerChromium.cpp:
        (WebCore::EventHandler::createDraggingClipboard):
        * platform/chromium/ChromiumDataObject.cpp:
        (WebCore::ChromiumDataObject::clearData):
        (WebCore::ChromiumDataObject::clearAll):
        (WebCore::ChromiumDataObject::clearAllExceptFiles):
        (WebCore::ChromiumDataObject::hasData):
        (WebCore::ChromiumDataObject::types):
        (WebCore::ChromiumDataObject::getData):
        (WebCore::ChromiumDataObject::setData):
        (WebCore::ChromiumDataObject::ChromiumDataObject):
        * platform/chromium/ChromiumDataObject.h:
        (WebCore::ChromiumDataObject::create):
        (WebCore::ChromiumDataObject::copy):
        (WebCore::ChromiumDataObject::urlTitle):
        (WebCore::ChromiumDataObject::setUrlTitle):
        (WebCore::ChromiumDataObject::htmlBaseUrl):
        (WebCore::ChromiumDataObject::setHtmlBaseUrl):
        (WebCore::ChromiumDataObject::containsFilenames):
        (WebCore::ChromiumDataObject::filenames):
        (WebCore::ChromiumDataObject::setFilenames):
        (WebCore::ChromiumDataObject::fileExtension):
        (WebCore::ChromiumDataObject::setFileExtension):
        (WebCore::ChromiumDataObject::fileContentFilename):
        (WebCore::ChromiumDataObject::setFileContentFilename):
        (WebCore::ChromiumDataObject::fileContent):
        (WebCore::ChromiumDataObject::setFileContent):
        * platform/chromium/ClipboardChromium.cpp:
        * platform/chromium/ClipboardChromium.h:

2011-03-02  David Grogan  <dgrogan@chromium.org>

        Reviewed by Jeremy Orlow.

        IndexedDB: fire versionchange events when calling setVersion
        https://bugs.webkit.org/show_bug.cgi?id=55095

        * dom/EventNames.h:
        * storage/IDBDatabase.cpp:
        (WebCore::IDBDatabase::setVersion):
        (WebCore::IDBDatabase::close):
        (WebCore::IDBDatabase::onVersionChange):
        (WebCore::IDBDatabase::open):
        (WebCore::IDBDatabase::enqueueEvent):
        (WebCore::IDBDatabase::dispatchEvent):
        * storage/IDBDatabase.h:
        (WebCore::IDBDatabase::dispatchEvent):
        * storage/IDBDatabase.idl:
        * storage/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::PendingSetVersionCall::create):
        (WebCore::IDBDatabaseBackendImpl::PendingSetVersionCall::databaseCallbacks):
        (WebCore::IDBDatabaseBackendImpl::PendingSetVersionCall::PendingSetVersionCall):
        (WebCore::IDBDatabaseBackendImpl::IDBDatabaseBackendImpl):
        (WebCore::IDBDatabaseBackendImpl::setVersion):
        (WebCore::IDBDatabaseBackendImpl::open):
        (WebCore::IDBDatabaseBackendImpl::close):
        * storage/IDBDatabaseBackendImpl.h:
        * storage/IDBDatabaseBackendInterface.h:
        * storage/IDBDatabaseCallbacks.h: Copied from Source/WebCore/storage/IDBVersionChangeEvent.cpp.
        (WebCore::IDBDatabaseCallbacks::~IDBDatabaseCallbacks):
        * storage/IDBFactoryBackendImpl.cpp:
        (WebCore::IDBFactoryBackendImpl::open):
        * storage/IDBRequest.cpp:
        (WebCore::IDBRequest::onSuccess):
        * storage/IDBVersionChangeEvent.cpp:
        (WebCore::IDBVersionChangeEvent::create):
        (WebCore::IDBVersionChangeEvent::IDBVersionChangeEvent):
        * storage/IDBVersionChangeEvent.h:
        * storage/IDBVersionChangeRequest.cpp:
        (WebCore::IDBVersionChangeRequest::onBlocked):

2011-03-02  Alexey Proskuryakov  <ap@apple.com>

        Fix assertion failures on Gtk bot.

        * page/EventHandler.cpp: (WebCore::EventHandler::tabsToLinks): Removed an overzealous
        assertion. We can get here with non-Tab key events when spatial navigation is enabled.

2011-03-02  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r80139.
        http://trac.webkit.org/changeset/80139
        https://bugs.webkit.org/show_bug.cgi?id=55620

        failing and crashing tests on Snow Leopard bot (Requested by
        mihaip1 on #webkit).

        * page/DOMWindow.cpp:
        * page/DOMWindow.h:
        * page/Frame.cpp:
        (WebCore::Frame::pageDestroyed):
        (WebCore::Frame::transferChildFrameToNewDocument):
        * page/Frame.h:
        (WebCore::Frame::detachFromPage):
        * page/Geolocation.cpp:
        (WebCore::Geolocation::~Geolocation):
        (WebCore::Geolocation::disconnectFrame):
        (WebCore::Geolocation::lastPosition):
        (WebCore::Geolocation::requestPermission):
        (WebCore::Geolocation::startUpdating):
        (WebCore::Geolocation::stopUpdating):
        * page/Geolocation.h:
        * page/GeolocationController.cpp:
        (WebCore::GeolocationController::~GeolocationController):
        * page/Navigator.cpp:
        * page/Navigator.h:
        * platform/mock/GeolocationClientMock.cpp:
        * platform/mock/GeolocationClientMock.h:

2011-03-02  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Adam Roben.

        WebKit2: Use CFNetwork Sessions API.
        https://bugs.webkit.org/show_bug.cgi?id=55435

        Add the ability to create a Private Browsing Storage Session.

        * WebCore.exp.in:
        Export the symbol for ResourceHandle::setPrivateBrowsingStorageSessionIdentifierBase.

        * page/Settings.cpp:
        (WebCore::Settings::setPrivateBrowsingEnabled):
        Propagate the private browsing state to the ResourceHandle.

        * platform/mac/WebCoreSystemInterface.h:
        Add the function declaration for wkCreatePrivateStorageSession.
        * platform/mac/WebCoreSystemInterface.mm:

        * platform/network/ResourceHandle.cpp:
        (WebCore::privateStorageSession):
        Since the same Private Browsing Storage Session will need to be accessed throughout the loading
        code and will need to be used by all web pages and page groups, make it a global static.
        (WebCore::privateBrowsingStorageSessionIdentifierBase):
        Ditto, since the identifier is needed to create the Private Browsing Storage Session.
        (WebCore::ResourceHandle::setPrivateBrowsingEnabled):
        If enabled, create and store the Private Browsing Storage Session.
        (WebCore::ResourceHandle::privateBrowsingStorageSession):
        (WebCore::ResourceHandle::setPrivateBrowsingStorageSessionIdentifierBase):
        * platform/network/ResourceHandle.h:

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::createPrivateBrowsingStorageSession):
        The call to wkCreatePrivateStorageSession needs to be in a file including the correct
        version of WKSI.
        (WebCore::ResourceHandle::privateBrowsingStorageSessionIdentifierDefaultBase):
        Return the bundle identifier.
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::createPrivateBrowsingStorageSession):
        The call to wkCreatePrivateStorageSession needs to be in a file importing the correct
        version of WKSI.
        (WebCore::ResourceHandle::privateBrowsingStorageSessionIdentifierDefaultBase):
        Return the bundle identifier.

2011-03-02  Daniel Cheng  <dcheng@chromium.org>

        Revert frame-specific WebClipboard changes
        https://bugs.webkit.org/show_bug.cgi?id=55617

        This code is no longer needed since we've decided to use the original
        approach to copy/paste drag/drop handling in ClipboardChromium.

        No new tests because no functionality changes.

        * platform/chromium/ChromiumDataObject.cpp:
        (WebCore::ChromiumDataObject::createReadable):
        * platform/chromium/ChromiumDataObject.h:
        * platform/chromium/ClipboardChromium.cpp:
        (WebCore::ClipboardChromium::create):
        * platform/chromium/PlatformBridge.h:
        * platform/chromium/ReadableDataObject.cpp:
        (WebCore::ReadableDataObject::create):
        (WebCore::ReadableDataObject::ReadableDataObject):
        (WebCore::ReadableDataObject::getData):
        (WebCore::ReadableDataObject::urlTitle):
        (WebCore::ReadableDataObject::htmlBaseUrl):
        (WebCore::ReadableDataObject::filenames):
        (WebCore::ReadableDataObject::ensureTypeCacheInitialized):
        * platform/chromium/ReadableDataObject.h:

2011-03-02  Tony Chang  <tony@chromium.org>

        Unreviewed, rolling chromium DEPS to r76362.

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

        * WebCore.gyp/WebCore.gyp: Switch to libjpeg_turbo to match chromium

2011-03-02  Alexey Proskuryakov  <ap@apple.com>

        Build fix.

        * page/ChromeClient.h: (WebCore::ChromeClient::keyboardUIMode): I didn't mean to commit these
        changes yet.

2011-03-02  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by John Sullivan.

        Clean up WebCore tabsToLinks code a little
        https://bugs.webkit.org/show_bug.cgi?id=55606

        No change in behavior, so no tests.

        * html/HTMLFormControlElement.cpp: (WebCore::HTMLFormControlElement::isKeyboardFocusable):
        This is the only caller of tabsToAllControls(). Renamed this function to tabsToAllFormControls().

        * page/EventHandler.cpp:
        (WebCore::EventHandler::isKeyboardOptionTab): Moved from platform specific files. This
        function cannot be file static, because EventHandlerMac.mm uses it.
        (WebCore::eventInvertsTabsToLinksClientCallResult): Merged implementations from platform
        specific files. We can just as well have #if here. Renamed for clarity.
        (WebCore::EventHandler::tabsToLinks): Rewrote in a way that makes it clearer how "invert"
        works.
        
        * page/EventHandler.h: We no longer need invertSenseOfTabsToLinks() here, it's only used
        in EventHandler.cpp.

        * page/android/EventHandlerAndroid.cpp: (WebCore::EventHandler::tabsToAllFormControls):
        * page/brew/EventHandlerBrew.cpp: (WebCore::EventHandler::tabsToAllFormControls):
        * page/chromium/EventHandlerChromium.cpp: (WebCore::EventHandler::tabsToAllFormControls):
        * page/efl/EventHandlerEfl.cpp: (WebCore::EventHandler::tabsToAllFormControls):
        * page/gtk/EventHandlerGtk.cpp: (WebCore::EventHandler::tabsToAllFormControls):
        * page/haiku/EventHandlerHaiku.cpp: (WebCore::EventHandler::tabsToAllFormControls):
        * page/mac/EventHandlerMac.mm: (WebCore::EventHandler::tabsToAllFormControls):
        * page/qt/EventHandlerQt.cpp: (WebCore::EventHandler::tabsToAllFormControls):
        * page/win/EventHandlerWin.cpp: (WebCore::EventHandler::tabsToAllFormControls):
        * page/wx/EventHandlerWx.cpp: (WebCore::EventHandler::tabsToAllFormControls):
        Updating all port files.

2011-02-28  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by James Robinson.

        Split IDBCursor.value into IDBCursor.primaryKey and IDBCursor.value
        https://bugs.webkit.org/show_bug.cgi?id=55443

        Implement http://www.w3.org/Bugs/Public/show_bug.cgi?id=11948

        The idea is to have an IDBCursor and an IDBCursorWithValue interface which
        inherits from the former.  index.openKeyCursor will return the former and
        index/objectStore.openCursor will return the latter.  We'll add a primaryKey
        attribute to IDBCursor.  It will always be the key of the associated object
        store entry.  For index.openCursor cursors, the key attribute will be the key
        of the index.  For objectStore.openCursors, it'll be the same as the
        primaryKey.  The value will be the value of the objectStore entry.

        * WebCore.gypi:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/SerializedScriptValue.cpp:
        (WebCore::SerializedScriptValue::deserializeAndSetProperty):
        * bindings/v8/SerializedScriptValue.h:
        * bindings/v8/custom/V8IDBAnyCustom.cpp:
        (WebCore::toV8):
        * storage/IDBAny.cpp:
        (WebCore::IDBAny::idbCursorWithValue):
        (WebCore::IDBAny::set):
        * storage/IDBAny.h:
        * storage/IDBCursor.cpp:
        (WebCore::IDBCursor::create):
        (WebCore::IDBCursor::primaryKey):
        (WebCore::IDBCursor::value):
        * storage/IDBCursor.h:
        * storage/IDBCursor.idl:
        * storage/IDBCursorBackendImpl.cpp:
        (WebCore::IDBCursorBackendImpl::IDBCursorBackendImpl):
        (WebCore::IDBCursorBackendImpl::primaryKey):
        (WebCore::IDBCursorBackendImpl::value):
        (WebCore::IDBCursorBackendImpl::update):
        (WebCore::IDBCursorBackendImpl::currentRowExists):
        (WebCore::IDBCursorBackendImpl::continueFunctionInternal):
        (WebCore::IDBCursorBackendImpl::deleteFunction):
        (WebCore::IDBCursorBackendImpl::loadCurrentRow):
        * storage/IDBCursorBackendImpl.h:
        (WebCore::IDBCursorBackendImpl::create):
        * storage/IDBCursorBackendInterface.h:
        * storage/IDBCursorWithValue.cpp: Copied from Source/WebCore/storage/IDBCursor.idl.
        (WebCore::IDBCursorWithValue::create):
        (WebCore::IDBCursorWithValue::IDBCursorWithValue):
        (WebCore::IDBCursorWithValue::~IDBCursorWithValue):
        * storage/IDBCursorWithValue.h: Copied from Source/WebCore/storage/IDBCursorBackendInterface.h.
        * storage/IDBCursorWithValue.idl: Copied from Source/WebCore/storage/IDBCursor.idl.
        * storage/IDBIndex.cpp:
        (WebCore::IDBIndex::openCursor):
        (WebCore::IDBIndex::openKeyCursor):
        * storage/IDBIndexBackendImpl.cpp:
        (WebCore::IDBIndexBackendImpl::openCursorInternal):
        (WebCore::IDBIndexBackendImpl::openCursor):
        (WebCore::IDBIndexBackendImpl::openKeyCursor):
        * storage/IDBIndexBackendImpl.h:
        * storage/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::openCursor):
        * storage/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::openCursorInternal):
        * storage/IDBRequest.cpp:
        (WebCore::IDBRequest::IDBRequest):
        (WebCore::IDBRequest::setCursorType):
        (WebCore::IDBRequest::onSuccess):
        (WebCore::IDBRequest::dispatchEvent):
        * storage/IDBRequest.h:

2011-03-02  Aravind Akella  <aravind.akella@nokia.com>

         Reviewed by Csaba Osztrogonác.

         [Qt][WK2] Memory exhausted when building qtwebkit2 on linux
         https://bugs.webkit.org/show_bug.cgi?id=55484

         Using AllInOne files to avoid memory exhaustion for debug 
         builds on 32 bit linux machines.

         No new tests. Fixing a build issue.

         * WebCore.pro:

2011-03-02  Daniel Cheng  <dcheng@chromium.org>

        Reviewed by David Levin.

        Add feature define for data transfer items
        https://bugs.webkit.org/show_bug.cgi?id=55510

        * Configurations/FeatureDefines.xcconfig:
        * GNUmakefile.am:
        * features.pri:

2011-03-02  Dimitri Glazkov  <dglazkov@chromium.org>

        Update location of media-file.js, which was moved in r79630.

        * manual-tests/media-controls.html: Updated location.

2011-03-02  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r80156.
        http://trac.webkit.org/changeset/80156
        https://bugs.webkit.org/show_bug.cgi?id=55604

        "Broke SL compile" (Requested by tonyg-cr on #webkit).

        * bridge/jni/JNIBridge.h:
        (JSC::Bindings::JavaString::operator UString):
        * bridge/jni/jni_jsobject.mm:
        (JavaJSObject::call):
        (JavaJSObject::eval):
        (JavaJSObject::getMember):
        (JavaJSObject::setMember):
        (JavaJSObject::removeMember):
        * bridge/jni/jsc/JavaClassJSC.cpp:
        (JavaClass::JavaClass):
        * bridge/jni/jsc/JavaStringJSC.h:
        (JSC::Bindings::JavaStringImpl::uString):
        * bridge/jni/v8/JavaStringV8.h:

2011-03-02  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        JavaString API should be implementable by both JSC and V8
        https://bugs.webkit.org/show_bug.cgi?id=55567

        Remove JavaString's UString operator and replace it with a
        script-engine-independent impl() method, which returns a
        StringImpl and can be implemented with both JSC and V8.

        No new tests, refactoring only.

        * bridge/jni/JNIBridge.h:
        (JSC::Bindings::JavaString::impl):
        * bridge/jni/jni_jsobject.mm:
        (JavaJSObject::call):
        (JavaJSObject::eval):
        (JavaJSObject::getMember):
        (JavaJSObject::setMember):
        (JavaJSObject::removeMember):
        * bridge/jni/jsc/JavaClassJSC.cpp:
        (JavaClass::JavaClass):
        * bridge/jni/jsc/JavaStringJSC.h:
        (JSC::Bindings::JavaStringImpl::impl):
        * bridge/jni/v8/JavaStringV8.h:
        (JSC::Bindings::JavaStringImpl::impl):

2011-03-02  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Dimitri Glazkov.

        Add CRASH() for CSSSelector double frees
        https://bugs.webkit.org/show_bug.cgi?id=55596
        
        To help track down bug 53045, add a CRASH call when the CSSSelector
        destructor is invoked more than once.

        Just a check, no new tests necessary.

        * css/CSSSelector.h:
        (WebCore::CSSSelector::CSSSelector):
        (WebCore::CSSSelector::~CSSSelector):

2011-03-02  Carol Szabo  <carol.szabo@nokia.com>

        Reviewed by David Hyatt  <hyatt@apple.com>

        content property doesn't support quotes
        https://bugs.webkit.org/show_bug.cgi?id=6503

        Added full support for quotes as defined by CSS 2.1.

        Tests: fast/css/content/content-quotes-01.html
               fast/css/content/content-quotes-02.html
               fast/css/content/content-quotes-03.html
               fast/css/content/content-quotes-04.html
               fast/css/content/content-quotes-05.html
               fast/css/content/content-quotes-06.html

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        Added RenderQuote.cpp/h and QuotesData.cpp/h to the dependency lists
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseQuotes):
        * css/CSSParser.h:
        Added needed stylesheet parsing support for quotes,
        (no-)open-quote and (no-)close-quote
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        Handled setting of the new quotes RenderStyle property and added
        handling of quotes for the content property.
        * css/html.css:
        (q:before):
        (q:after):
        replaced the '"' workaround with open/close-quote
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::dirtyLineBoxesForRenderer):
        Made RenderQuote behave like RenderCounter.
        Needed to ensure that the Quote text is calculated before layout,
        just as it is for RenderCounter.
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isQuote):
        * rendering/RenderObjectChildList.cpp:
        (WebCore::RenderObjectChildList::removeChildNode):
        (WebCore::RenderObjectChildList::appendChildNode):
        (WebCore::RenderObjectChildList::insertChildNode):
        Handled updating of quote depth when renderers are added and removed
        from the tree.
        (WebCore::RenderObjectChildList::updateBeforeAfterContent):
        Added support for Quote content.
        * rendering/RenderQuote.cpp: Added.
        (WebCore::adjustDepth):
        (WebCore::RenderQuote::RenderQuote):
        (WebCore::RenderQuote::~RenderQuote):
        (WebCore::RenderQuote::renderName):
        (WebCore::RenderQuote::placeQuote):
        (WebCore::LanguageData::operator<):
        (WebCore::defaultLanguageQuotes):
        (WebCore::quotesMap):
        (WebCore::quotesForLanguage):
        (WebCore::defaultQuotes):
        (WebCore::RenderQuote::originalText):
        (WebCore::RenderQuote::computePreferredLogicalWidths):
        (WebCore::RenderQuote::rendererSubtreeAttached):
        (WebCore::RenderQuote::rendererRemovedFromTree):
        (WebCore::RenderQuote::styleDidChange):
        * rendering/RenderQuote.h: Added.
        (WebCore::RenderQuote::isQuote):
        (WebCore::toRenderQuote):
        * rendering/RenderingAllInOne.cpp:
        Included RenderQuote.cpp
        * rendering/style/StyleAllInOne.cpp:
        Included QuotesData.cpp
        * rendering/style/ContentData.cpp:
        (WebCore::ContentData::dataEquivalent):
        Checked for quotetype identity.
        (WebCore::ContentData::deleteContent):
        Accounted for the new QUOTE_TYPE.
        * rendering/style/ContentData.h:
        (WebCore::ContentData::isQuote):
        (WebCore::ContentData::quote):
        (WebCore::ContentData::setQuote):
        * rendering/style/QuotesData.cpp: Added.
        (WebCore::QuotesData::create):
        (WebCore::QuotesData::operator==):
        (WebCore::QuotesData::~QuotesData):
        * rendering/style/QuotesData.h: Added.
        (WebCore::QuotesData::data):
        (WebCore::QuotesData::operator delete):
        (WebCore::QuotesData::QuotesData):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::setContent):
        (WebCore::RenderStyle::setQuotes):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::quotes):
        (WebCore::InheritedFlags::setQuotes):
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleAllInOne.cpp:
        Added QuotesData.cpp to the included files list.
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::operator==):
        Included quotes in equality check.
        * rendering/style/StyleRareInheritedData.h:
        Added quotes

2011-03-02  Antti Koivisto  <antti@apple.com>

        Reviewed by Dave Hyatt.

        Selector usage flags should not be set by the CSS parser
        https://bugs.webkit.org/show_bug.cgi?id=55573
        
        Currently flags like Document::usesSiblingRules() are set directly by the CSS parser. This is wrong as 
        we may parse stylesheets that are not actually used for document rendering. This is especially bad when
        the page uses querySelectorAll(). As a result we may end up in various performance penalty boxes 
        triggered by complex selectors for no good reason.
        
        - Use the selector traversal in style selector constructor to figure out which flags
          are actually needed for the currently active style sheets.
        - Remove the selector flag related code from the CSS parser/grammar.
        - Remove the usesDescendantRules flag completely. We have descendant rules in the default
          style sheet, every document uses them.

        * css/CSSGrammar.y:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::updateSpecifiersWithElementName):
        * css/CSSStyleSelector.cpp:
        (WebCore::collectSiblingRulesInDefaultStyle):
        (WebCore::CSSStyleSelector::CSSStyleSelector):
        (WebCore::CSSStyleSelector::Features::Features):
        (WebCore::CSSStyleSelector::Features::~Features):
        (WebCore::CSSStyleSelector::locateCousinList):
        (WebCore::CSSStyleSelector::matchesSiblingRules):
        (WebCore::CSSStyleSelector::canShareStyleWithElement):
        (WebCore::CSSStyleSelector::locateSharedStyle):
        (WebCore::collectFeaturesFromSelector):
        (WebCore::collectFeaturesFromList):
        (WebCore::RuleSet::collectFeatures):
        * css/CSSStyleSelector.h:
        (WebCore::CSSStyleSelector::usesSiblingRules):
        (WebCore::CSSStyleSelector::usesFirstLineRules):
        (WebCore::CSSStyleSelector::usesBeforeAfterRules):
        (WebCore::CSSStyleSelector::usesLinkRules):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::recalcStyle):
        (WebCore::Document::createStyleSelector):
        * dom/Document.h:
        (WebCore::Document::usesSiblingRules):
        (WebCore::Document::setUsesSiblingRules):
        (WebCore::Document::usesFirstLineRules):
        (WebCore::Document::usesBeforeAfterRules):
        (WebCore::Document::setUsesBeforeAfterRules):
        * dom/Element.cpp:
        (WebCore::Element::recalcStyle):

2011-03-02  Brian Weinstein  <bweinstein@apple.com>

        Fix fallout from a last minute renaming.

        * platform/network/cf/CookieStorageCFNet.cpp:
        (WebCore::startObservingCookieChanges):
        (WebCore::stopObservingCookieChanges):

2011-03-01  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        Part of WebKit2: Need a way to send notifications to client when cookies change
        https://bugs.webkit.org/show_bug.cgi?id=55427
        <rdar://problem/9056027>
        
        Add functions on CookieStorage that allow listening for changes in cookies. When
        the cookies are changed, they call through to CookiesStrategy::notifyCookiesChanged.

        No change in behavior requiring tests.

        * platform/CookiesStrategy.h: Added.
        (WebCore::CookiesStrategy::~CookiesStrategy):

        * platform/PlatformStrategies.h:
        (WebCore::PlatformStrategies::cookiesStrategy):
        (WebCore::PlatformStrategies::PlatformStrategies):

        * platform/network/CookieStorage.h: Add new function declarations.

        * platform/network/cf/CookieStorageCFNet.cpp:
        (WebCore::notifyCookiesChangedOnMainThread): Call through to CookiesStrategy::notifyCookiesChanged.
        (WebCore::notifyCookiesChanged): Call notifyCookiesChangedOnMainThread on the main thread.
        (WebCore::beginObservingCookieChanges): Set up cookie observers on the loader run loop.
        (WebCore::finishObservingCookieChanges): Remove our cookie observers from the loader run loop.

        * platform/network/mac/CookieStorageMac.mm:
        (-[CookieStorageObjCAdapter notifyCookiesChangedOnMainThread]): Call through to CookiesStrategy::notifyCookiesChanged.
        (-[CookieStorageObjCAdapter cookiesChangedNotificationHandler:]): Call notifyCookiesChangedOnMainThread on 
            the main thread.
        (-[CookieStorageObjCAdapter registerForCookieChangeNotifications]): Set up the observer for cookie change notifications.
        (-[CookieStorageObjCAdapter unregisterForCookieChangeNotifications]): Remove the observer for cookie change notifications.
        (WebCore::beginObservingCookieChanges): Create our CookieStorageObjCAdapter, and call registerForCookieChangeNotifications.
        (WebCore::finishObservingCookieChanges): Call unregisterForCookieChangeNotifications.
        
        Add new file.
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj: Set role on files we need to include in WebKit to private.

2011-03-02  Sergey Glazunov  <serg.glazunov@gmail.com>

        Reviewed by Dimitri Glazkov.

        A WebKitCSSKeyframesRule object should set itself as the parent for inserted rules
        https://bugs.webkit.org/show_bug.cgi?id=55488

        Test: fast/css/css-keyframe-parent.html

        * css/WebKitCSSKeyframesRule.cpp:
        (WebCore::WebKitCSSKeyframesRule::append):

2011-03-02  Sergio Villar Senin  <svillar@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Add support for external protocol handlers
        https://bugs.webkit.org/show_bug.cgi?id=55473

        Do not unconditionally create and replace the SoupRequester of the
        SoupSession if there is already one. No new tests needed as we
        just allow clients to create their our SoupRequesters.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ensureSessionIsInitialized):

2011-03-02  John Knottenbelt  <jknotten@chromium.org>

        Reviewed by jknotten@chromium.org.

        Fix build-breakage when GEOLOCATION not enabled.
        https://bugs.webkit.org/show_bug.cgi?id=55586

        Geolocation::reset needs to be defined if ENABLE(GEOLOCATION)
        is not true.

        * page/Geolocation.cpp:
        (WebCore::Geolocation::reset):

2011-03-02  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: remove InjectedScriptHost -> DOMAgent dependency.
        https://bugs.webkit.org/show_bug.cgi?id=55575

        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::JSInjectedScriptHost::inspectedNode):
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::V8InjectedScriptHost::inspectedNodeCallback):
        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::addToFrontend):
        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::evaluateOn):
        (WebCore::InjectedScript::wrapObject):
        (WebCore::InjectedScript::wrapNode):
        (WebCore::InjectedScript::inspectNode):
        (WebCore::InjectedScript::nodeAsScriptValue):
        * inspector/InjectedScript.h:
        * inspector/InjectedScriptHost.cpp:
        (WebCore::InjectedScriptHost::addInspectedNode):
        (WebCore::InjectedScriptHost::clearInspectedNodes):
        (WebCore::InjectedScriptHost::copyText):
        (WebCore::InjectedScriptHost::inspectedNode):
        * inspector/InjectedScriptHost.h:
        * inspector/InjectedScriptHost.idl:
        * inspector/InjectedScriptSource.js:
        * inspector/Inspector.idl:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::discardBindings):
        (WebCore::InspectorDOMAgent::addInspectedNode):
        (WebCore::InspectorDOMAgent::resolveNode):
        (WebCore::InspectorDOMAgent::injectedScriptForNode):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorRuntimeAgent.cpp:
        (WebCore::InspectorRuntimeAgent::evaluateOn):
        * inspector/InspectorRuntimeAgent.h:
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype._createTooltipForNode.setTooltip):
        (WebInspector.ElementsTreeElement.prototype._createTooltipForNode.resolvedNode):
        (WebInspector.ElementsTreeElement.prototype._createTooltipForNode):
        * inspector/front-end/PropertiesSidebarPane.js:
        (WebInspector.PropertiesSidebarPane.prototype.update.nodeResolved):
        (WebInspector.PropertiesSidebarPane.prototype.update.nodePrototypesReady):
        (WebInspector.PropertiesSidebarPane.prototype.update.fillSection):
        (WebInspector.PropertiesSidebarPane.prototype.update):
        * inspector/front-end/RemoteObject.js:
        (WebInspector.RemoteObject.resolveNode):
        (WebInspector.RemoteObject.prototype.pushNodeToFrontend):
        (WebInspector.RemoteObject.prototype.evaluate):

2011-01-21  John Knottenbelt  <jknotten@chromium.org>

        Reviewed by Dmitry Titov.

        Detach Geolocation from Frame when Page destroyed.
        https://bugs.webkit.org/show_bug.cgi?id=52877

        On Page destruction, any outstanding Geolocation permission
        requests should be cancelled, because the Geolocation can only
        access the client indirectly via m_frame->page().

        Additionally, if the Frame is reparented to another page, the
        Geolocation should cancel watches, single-shots and requests on
        the old page.

        Page destruction is signalled by a call to the
        Frame::pageDestroyed() method. This calls Frame::detachFromPage,
        where we extend the call chain to Geolocation::detachFromPage()
        where we call Geolocation::reset() which detaches from the
        GeolocationController, cancels requests, watches and single shots,
        and sets the permission state back to Unknown.

        We also now call detachFromPage when the frame reparented in
        Frame::transferChildFrameToNewDocument.

        Frame::pageDestroyed() is also called by FrameLoader even though
        the page is not destroyed. We should still cancel permission
        requests, because the GeolocationClient will become inaccessible
        to the Geolocation object after this call.

        Since GeolocationController is owned by Page, and all Geolocation
        objects will now unsubscribe from the GeolocationController on
        pageDetached(), we no longer need to call stopUpdating() from the
        GeolocationController's destructor. Instead we can simply assert
        that there should be no no observers. See related bug
        https://bugs.webkit.org/show_bug.cgi?id=52216 .

        Introduced new method 'numberOfPendingPermissionRequests' on
        GeolocationClientMock to count the number of outstanding pending
        permission requests. This provides a reusable implementation for
        client-based implementations of the LayoutTestController's
        numberOfPendingGeolocationPermissionRequests method.

        Tests: fast/dom/Geolocation/iframe-reparent.html
               fast/dom/Geolocation/page-reload-cancel-permission-requests.html

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::resetGeolocationPermissions):
        * page/DOMWindow.h:
        * page/Frame.cpp:
        (WebCore::Frame::detachFromPage):
        (WebCore::Frame::pageDestroyed):
        (WebCore::Frame::transferChildFrameToNewDocument):
        * page/Frame.h:
        * page/Geolocation.cpp:
        (WebCore::Geolocation::~Geolocation):
        (WebCore::Geolocation::page):
        (WebCore::Geolocation::reset):
        (WebCore::Geolocation::disconnectFrame):
        (WebCore::Geolocation::lastPosition):
        (WebCore::Geolocation::requestPermission):
        (WebCore::Geolocation::startUpdating):
        (WebCore::Geolocation::stopUpdating):
        * page/Geolocation.h:
        * page/GeolocationController.cpp:
        (WebCore::GeolocationController::~GeolocationController):
        * page/Navigator.cpp:
        (WebCore::Navigator::resetGeolocationPermissions):
        * page/Navigator.h:
        * platform/mock/GeolocationClientMock.cpp:
        (WebCore::GeolocationClientMock::numberOfPendingPermissionRequests):
        * platform/mock/GeolocationClientMock.h:

2011-03-02  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [Chromium] Landing detailed heap snapshots, part 4.
        https://bugs.webkit.org/show_bug.cgi?id=55563

        This part adds implementations for data grids used to display
        different heap snapshots projections. We are almost done.

        * English.lproj/localizedStrings.js:
        * WebCore.gypi:
        * bindings/v8/ScriptHeapSnapshot.cpp:
        (WebCore::ScriptHeapSnapshot::getExactRetainedSize):
        * bindings/v8/ScriptHeapSnapshot.h:
        * inspector/Inspector.idl:
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::getExactHeapSnapshotNodeRetainedSize):
        * inspector/InspectorProfilerAgent.h:
        * inspector/front-end/DetailedHeapshotGridNodes.js:
        (WebInspector.HeapSnapshotObjectNode):
        (WebInspector.HeapSnapshotObjectNode.prototype._createProvider):
        (WebInspector.HeapSnapshotInstanceNode):
        (WebInspector.HeapSnapshotInstanceNode.prototype._createProvider):
        (WebInspector.HeapSnapshotDominatorObjectNode):
        (WebInspector.HeapSnapshotDominatorObjectNode.prototype._createProvider):
        (MixInSnapshotNodeFunctions):
        * inspector/front-end/DetailedHeapshotView.js:
        (WebInspector.HeapSnapshotContainmentDataGrid):
        (WebInspector.HeapSnapshotSortableDataGrid):
        (WebInspector.HeapSnapshotConstructorsDataGrid):
        (WebInspector.HeapSnapshotDiffDataGrid):
        (WebInspector.HeapSnapshotDominatorsDataGrid):
        (WebInspector.HeapSnapshotRetainingPathsList):
        (WebInspector.DetailedHeapshotView.profileCallback):
        (WebInspector.DetailedHeapshotView):
        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshotEdge.prototype.get isInvisible):
        (WebInspector.HeapSnapshotEdge.prototype.toString):
        (WebInspector.HeapSnapshot.prototype._init):
        (WebInspector.HeapSnapshot.prototype._buildAggregatesIndexes):
        (WebInspector.HeapSnapshot.prototype._markInvisibleEdges):
        (WebInspector.HeapSnapshotPathFinder.prototype._skipEdge):
        * inspector/front-end/Images/helpButtonGlyph.png: Added.
        * inspector/front-end/Panel.js:
        (WebInspector.Panel.prototype.reset):
        * inspector/front-end/Popover.js:
        (WebInspector.Popover):
        (WebInspector.Popover.prototype.show):
        (WebInspector.Popover.prototype.hide):
        (WebInspector.Popover.prototype.get visible):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype._reset):
        (WebInspector.ProfilesPanel.prototype.getProfile):
        * inspector/front-end/heapProfiler.css:
        * inspector/front-end/inspector.js:
        (WebInspector.resetFocusElement):

2011-03-02  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/55534> Clean up macros in Extensions3DOpenGL.cpp

        Reviewed by Darin Adler.

        Change "#if GL_APPLE_vertex_array_object" macros to check that
        GL_APPLE_vertex_array_object is both defined and non-zero.

        * platform/graphics/opengl/Extensions3DOpenGL.cpp:
        (WebCore::Extensions3DOpenGL::createVertexArrayOES):
        (WebCore::Extensions3DOpenGL::deleteVertexArrayOES): Remove
        empty #else clause.
        (WebCore::Extensions3DOpenGL::isVertexArrayOES):
        (WebCore::Extensions3DOpenGL::bindVertexArrayOES): Add early
        return check.  Remove #else clause that would never have
        compiled (since array is not a WTF::String).

2011-03-01  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        Assertion failure after removing a selection in keydown handler
        https://bugs.webkit.org/show_bug.cgi?id=51389

        The bug was caused by textWillBeReplaced's not always updating selection, and
        shouldRemovePositionAfterAdoptingTextReplacement's not moving the end offset when it's
        at the end of replaced data.

        Fixed the bug by always updating selection in textWillBeReplaced and fixing the condition
        to move the offset in shouldRemovePositionAfterAdoptingTextReplacement. Also added a call
        to setSelection instead of directly modifying m_selection to notify all the clients.
        Namely, the call to EditorClient::respondToChangedSelection is required for
        setting-input-value-cancel-ime-composition.html.

        Note that we must update layout before calling setSelection because setSelection calls
        setFocusedNodeIfNeeded and it requires layout to be up-to-date. Without this call, tests
        such as fast/forms/input-appearance-maxlength.html hits an assertion in Node::isFocusable.

        Test: editing/input/setting-input-value-cancel-ime-composition.html

        * editing/SelectionController.cpp:
        (WebCore::shouldRemovePositionAfterAdoptingTextReplacement): When replacing text, the offset
        of the selection end must be updated even if it was at the end of the replaced text.
        e.g. removing "world" from "hello world] WebKit" should result in "hello ] WebKit" not
        "hello  WebK[it". Note we don't move the offset if no text is removed because appending
        "world" to "hello ]" should result in "hello ]world" not "hello world]".
        (WebCore::SelectionController::textWillBeReplaced): Calls setSelection to update
        the selection instead of modifying m_selection directly.

2011-03-02  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Pavel Feldman.

        Web Inspector: highlighted line does not span horizonally in scripts panel while debugging.
        https://bugs.webkit.org/show_bug.cgi?id=54675

        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer.prototype._syncScroll):
        (WebInspector.TextEditorChunkedPanel.prototype._buildChunks):
        (WebInspector.TextEditorChunkedPanel.prototype.makeLineAChunk):
        (WebInspector.TextEditorGutterPanel):
        (WebInspector.TextEditorGutterPanel.prototype._expandChunks):
        (WebInspector.TextEditorGutterPanel.prototype.textChanged):
        (WebInspector.TextEditorMainPanel):
        (WebInspector.TextEditorMainPanel.prototype.set readOnly):
        (WebInspector.TextEditorMainPanel.prototype._getSelection):
        (WebInspector.TextEditorMainPanel.prototype._selectionToPosition):
        (WebInspector.TextEditorMainPanel.prototype._handleDOMSubtreeModified):
        (WebInspector.TextEditorMainPanel.prototype._applyDomUpdates):
        (WebInspector.TextEditorMainPanel.prototype._updateChunksForRanges):
        * inspector/front-end/textViewer.css:
        (.inner-container):

2011-03-02  Oleg Romashin  <romaxa@gmail.com>

        Reviewed by Andreas Kling.

        Fixing inspector compilation with JAVASCRIPT_DEBUGGER disabled
        https://bugs.webkit.org/show_bug.cgi?id=55477

        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::populateScriptObjects):

2011-03-02  Kent Tamura  <tkent@chromium.org>

        Unreviewed, a trivial fix for r80096.

        REGRESSION (r80096): [Chromium] fast/forms/input-number-unacceptable-style.html failure
        https://bugs.webkit.org/show_bug.cgi?id=55562

        * platform/text/LocalizedNumberICU.cpp:
        (WebCore::parseLocalizedNumber): Check the ParsePosition after NumberFormat::parse()
          to reject strings with a valid number + extra letters.

2011-03-02  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        JObjectWrapper should be moved to its own file
        https://bugs.webkit.org/show_bug.cgi?id=55384

        No new tests, refactoring only.

        * Android.v8bindings.mk:
        * WebCore.gypi:
        * bridge/jni/v8/JNIBridgeV8.cpp:
        (JavaField::JavaField):
        * bridge/jni/v8/JNIBridgeV8.h:
        * bridge/jni/v8/JavaInstanceV8.cpp:
        (JavaInstance::JavaInstance):
        * bridge/jni/v8/JavaInstanceV8.h:
        * bridge/jni/v8/JobjectWrapper.cpp: Copied from Source/WebCore/bridge/jni/v8/JNIBridgeV8.h.
        (JobjectWrapper::JobjectWrapper):
        (JobjectWrapper::~JobjectWrapper):
        * bridge/jni/v8/JobjectWrapper.h: Copied from Source/WebCore/bridge/jni/v8/JNIBridgeV8.h.
        (JSC::Bindings::JobjectWrapper::instance):
        (JSC::Bindings::JobjectWrapper::setInstance):
        (JSC::Bindings::JobjectWrapper::ref):
        (JSC::Bindings::JobjectWrapper::deref):

2011-02-25  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: factor search logic out of inspector.js
        https://bugs.webkit.org/show_bug.cgi?id=54965

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.searchCanceled):
        (WebInspector.ElementsPanel.prototype.switchToAndFocus):
        (WebInspector.ElementsPanel.prototype._updateMatchesCount):
        * inspector/front-end/Panel.js:
        (WebInspector.Panel.prototype.searchCanceled):
        (WebInspector.Panel.prototype.performSearch.updateMatchesCount):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.searchCanceled):
        (WebInspector.ScriptsPanel.prototype.performSearch.finishedCallback):
        (WebInspector.ScriptsPanel.prototype.performSearch):
        * inspector/front-end/SearchController.js: Added.
        (WebInspector.SearchController):
        (WebInspector.SearchController.prototype.updateSearchMatchesCount):
        (WebInspector.SearchController.prototype.updateSearchLabel):
        (WebInspector.SearchController.prototype.cancelSearch):
        (WebInspector.SearchController.prototype.handleShortcut):
        (WebInspector.SearchController.prototype.activePanelChanged.performPanelSearch):
        (WebInspector.SearchController.prototype.activePanelChanged):
        (WebInspector.SearchController.prototype._updateSearchMatchesCount):
        (WebInspector.SearchController.prototype._focusSearchField):
        (WebInspector.SearchController.prototype._onSearchFieldManualFocus):
        (WebInspector.SearchController.prototype._onKeyDown):
        (WebInspector.SearchController.prototype._onSearch):
        (WebInspector.SearchController.prototype._performSearch):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:
        (WebInspector.set currentPanel):
        (WebInspector.set attached):
        (WebInspector.doLoadedDone):
        (WebInspector.documentKeyDown):

2011-03-02  Renata Hodovan  <reni@webkit.org>

        Reviewed by Andreas Kling.

        FEMorphologyElement changes doesn't require relayout
        https://bugs.webkit.org/show_bug.cgi?id=55462

        When the FEMorphologyElement receives an update message but the given value remains the same we don't need
        to relayout the filter.

        No new tests are needed because this modification is covered by the dynamic update tests of FEMorphology.

        * platform/graphics/filters/FEMorphology.cpp:
        (WebCore::FEMorphology::setMorphologyOperator):
        (WebCore::FEMorphology::setRadiusX):
        (WebCore::FEMorphology::setRadiusY):
        * platform/graphics/filters/FEMorphology.h:
        * svg/SVGFEMorphologyElement.cpp:
        (WebCore::SVGFEMorphologyElement::setFilterEffectAttribute):
        (WebCore::SVGFEMorphologyElement::svgAttributeChanged):
        * svg/SVGFEMorphologyElement.h:

2011-03-01  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        Assertion fails when a form validation bubble appears
        https://bugs.webkit.org/show_bug.cgi?id=55550

        Test: fast/forms/interactive-validation-attach-assertion.html

        * html/ValidationMessage.cpp:
        (WebCore::ValidationMessage::buildBubbleTree):
         Just remove unnecessary attach().

2011-03-01  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        Support localized numbers in <input type=number>
        https://bugs.webkit.org/show_bug.cgi?id=42484

        This change adds support of localized numbers in <input type=number>.
        This affects only the UI, and not HTMLInputElement::value.

        - Remove the keyboard input restriction feature because it is hard to
          retrieve characters usable for localized numbers in ICU.

        - Separate convertFromVisibleValue() from sanitizeValue().
          sanitizeValue() is used for not only converting a renderer value to a
          DOM value.

        - Implement LocalizedNumber functions for ICU and NSNumberFormatter.
          It is used only in Chromium for now.

        Test: manual-tests/input-number-localization.html

        * WebCore.gypi: Use LocalizedNumberICU.cpp.
        * WebCore.xcodeproj/project.pbxproj:
          Add LocalizedNumberMac.mm and remove LocalizedNumberNone.cpp.
        * dom/InputElement.h: Introduce convertFromVisibleValue().
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::convertFromVisibleValue):
        * html/HTMLInputElement.h:
        * html/InputType.cpp:
        (WebCore::InputType::convertFromVisibleValue):
        * html/InputType.h:
        * html/NumberInputType.cpp: Remove isHTMLNumberCharacter(),
          isNumberCharacter(), and handleBeforeTextInsertedEvent() because we
          remove the keyboard input restriction feature for type=number.
        (WebCore::NumberInputType::convertFromVisibleValue):
        (WebCore::NumberInputType::sanitizeValue):
        * html/NumberInputType.h:
        * manual-tests/input-number-localization.html: Add a manual test because
          the behavior depends on the current locale.
        * platform/text/LocalizedNumber.h: Remove isLocalizedNumberCharacter().
        * platform/text/LocalizedNumberICU.cpp:
          Implement LocalizedNumber functions with ICU NumberFormat.
        (WebCore::createFormatterForCurrentLocale):
        (WebCore::parseLocalizedNumber):
        (WebCore::formatLocalizedNumber):
        * platform/text/LocalizedNumberNone.cpp: Remove isLocalizedNumberCharacter().
        * platform/text/mac/LocalizedNumberMac.mm:
          Implement LocalizedNumber functions with NSNumberFormatter.
        (WebCore::parseLocalizedNumber):
        (WebCore::formatLocalizedNumber):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::subtreeHasChanged):
        * wml/WMLInputElement.h:
        (WebCore::WMLInputElement::convertFromVisibleValue):
          Implemented as a function doing nothing.

2011-03-01  Yuta Kitamura  <yutak@chromium.org>

        Reviewed by Darin Adler.

        REGRESSION(r78383): Failure to connect on websocketstest.com
        https://bugs.webkit.org/show_bug.cgi?id=54811

        After r78383, KURL::setPort() no longer appends ":port" part
        if that port is the default port for URL scheme. This broke
        SocketStreamHandleCFNet, whose code was based on an assumption
        that KURL::setPort() always inserts ":port" part.

        To fix this, KURL::port() call is removed from SocketStreamHandle
        and the port number is calculated on-the-fly.

        Unfortunately it is impossible to write a test; this bug only
        affects WebSockets connecting to the default port (port 80
        for ws, port 443 for wss), while we use different ports to test
        WebSockets in LayoutTests.

        * platform/network/cf/SocketStreamHandle.h:
        * platform/network/cf/SocketStreamHandleCFNet.cpp:
        (WebCore::SocketStreamHandle::SocketStreamHandle):
        (WebCore::SocketStreamHandle::createStreams):
        (WebCore::SocketStreamHandle::port):

2011-03-01  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r80079.
        http://trac.webkit.org/changeset/80079
        https://bugs.webkit.org/show_bug.cgi?id=55547

        "Broke the Win debug build?" (Requested by dcheng on #webkit).

        * Configurations/FeatureDefines.xcconfig:
        * GNUmakefile.am:
        * features.pri:

2011-02-25  Adrienne Walker  <enne@google.com>

        Reviewed by James Robinson.

        [chromium] Abstract "pixels with a graphics context" into its own class
        https://bugs.webkit.org/show_bug.cgi?id=55259

        This creates new PlatformCanvas/PlatformImage classes which wrap
        all of the #ifdef Skia/Cg warts from the compositor.  All classes
        (LayerTilerChromium, ContentLayerChromium, and ImageLayerChromium) are
        modified to use these abstractions.

        Tests: LayoutTests/compositing

        * WebCore.gypi:
        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::updateContentsIfDirty):
        (WebCore::ContentLayerChromium::resizeUploadBuffer):
        (WebCore::ContentLayerChromium::updateTextureIfNeeded):
        (WebCore::ContentLayerChromium::updateTexture):
        (WebCore::ContentLayerChromium::draw):
        * platform/graphics/chromium/ContentLayerChromium.h:
        * platform/graphics/chromium/ImageLayerChromium.cpp:
        (WebCore::ImageLayerChromium::updateContentsIfDirty):
        (WebCore::ImageLayerChromium::updateTextureIfNeeded):
        * platform/graphics/chromium/ImageLayerChromium.h:
        * platform/graphics/chromium/LayerTilerChromium.cpp:
        (WebCore::LayerTilerChromium::contentRectToTileIndices):
        (WebCore::LayerTilerChromium::update):
        (WebCore::LayerTilerChromium::updateFromPixels):
        * platform/graphics/chromium/LayerTilerChromium.h:
        * platform/graphics/chromium/PlatformCanvas.cpp: Added.
        (WebCore::PlatformCanvas::PlatformCanvas):
        (WebCore::PlatformCanvas::~PlatformCanvas):
        (WebCore::PlatformCanvas::resize):
        (WebCore::PlatformCanvas::AutoLocker::AutoLocker):
        (WebCore::PlatformCanvas::AutoLocker::~AutoLocker):
        (WebCore::PlatformCanvas::Painter::Painter):
        (WebCore::PlatformCanvas::Painter::~Painter):
        * platform/graphics/chromium/PlatformCanvas.h: Added.
        (WebCore::PlatformCanvas::AutoLocker::pixels):
        (WebCore::PlatformCanvas::Painter::context):
        (WebCore::PlatformCanvas::size):
        * platform/graphics/chromium/PlatformImage.cpp: Copied from Source/WebCore/platform/graphics/chromium/ImageLayerChromium.cpp.
        (WebCore::PlatformImage::PlatformImage):
        (WebCore::PlatformImage::updateFromImage):
        * platform/graphics/chromium/PlatformImage.h: Added.
        (WebCore::PlatformImage::pixels):
        (WebCore::PlatformImage::size):

2011-03-01  Daniel Cheng  <dcheng@chromium.org>

        Reviewed by David Levin.

        Add feature define for data transfer items
        https://bugs.webkit.org/show_bug.cgi?id=55510

        * Configurations/FeatureDefines.xcconfig:
        * GNUmakefile.am:
        * features.pri:

2011-03-01  Joseph Pecoraro  <joepeck@webkit.org>

        Unreviewed. Roll out r80068 and r80073 due to breaking WebKit2 Qt port.

        * dom/ViewportArguments.cpp:
        (WebCore::computeViewportAttributes):
        (WebCore::numericPrefix):
        (WebCore::findSizeValue):
        (WebCore::setViewportFeature):
        (WebCore::viewportErrorMessageTemplate):
        (WebCore::viewportErrorMessageLevel):
        * dom/ViewportArguments.h:

2011-03-01  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by James Robinson.

        IDBKeyRange.bound() should not use the optional options object
        https://bugs.webkit.org/show_bug.cgi?id=55419

        http://dvcs.w3.org/hg/IndexedDB/raw-file/tip/Overview.html#range-concept

        Added some code to existing tests to cover these cases.

        * storage/IDBKeyRange.cpp:
        (WebCore::IDBKeyRange::bound):
        * storage/IDBKeyRange.h:
        * storage/IDBKeyRange.idl:

2011-03-01  Dan Bernstein  <mitz@apple.com>

        Build fix.

        * dom/DocumentMarkerController.cpp:
        (WebCore::DocumentMarkerController::clearDescriptionOnMarkersIntersectingRange):

2011-03-01  Kent Tamura  <tkent@chromium.org>

        Unreviewed. Apply sort-Xcode-project-file.

        * WebCore.xcodeproj/project.pbxproj:

2011-03-01  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by James Robinson.

        V8 code generator doesn't properly support a single SerializedScriptValue attribute
        https://bugs.webkit.org/show_bug.cgi?id=55530

        This is tested by the bindings tests changes.

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/scripts/test/CPP/WebDOMTestSerializedScriptValueInterface.cpp: Added.
        (WebDOMTestSerializedScriptValueInterface::WebDOMTestSerializedScriptValueInterfacePrivate::WebDOMTestSerializedScriptValueInterfacePrivate):
        (WebDOMTestSerializedScriptValueInterface::WebDOMTestSerializedScriptValueInterface):
        (WebDOMTestSerializedScriptValueInterface::operator=):
        (WebDOMTestSerializedScriptValueInterface::impl):
        (WebDOMTestSerializedScriptValueInterface::~WebDOMTestSerializedScriptValueInterface):
        (WebDOMTestSerializedScriptValueInterface::value):
        (toWebCore):
        (toWebKit):
        * bindings/scripts/test/CPP/WebDOMTestSerializedScriptValueInterface.h: Added.
        * bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp: Added.
        (WebKit::kit):
        (webkit_dom_test_serialized_script_value_interface_get_value):
        (WebKit::core):
        (webkit_dom_test_serialized_script_value_interface_finalize):
        (webkit_dom_test_serialized_script_value_interface_set_property):
        (webkit_dom_test_serialized_script_value_interface_get_property):
        (webkit_dom_test_serialized_script_value_interface_constructed):
        (webkit_dom_test_serialized_script_value_interface_class_init):
        (webkit_dom_test_serialized_script_value_interface_init):
        (WebKit::wrapTestSerializedScriptValueInterface):
        * bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.h: Added.
        * bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterfacePrivate.h: Added.
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterfaceConstructor::JSTestInterfaceConstructor):
        (WebCore::JSTestInterface::JSTestInterface):
        * bindings/scripts/test/JS/JSTestInterface.h:
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        (WebCore::JSTestMediaQueryListListenerConstructor::JSTestMediaQueryListListenerConstructor):
        (WebCore::JSTestMediaQueryListListener::JSTestMediaQueryListListener):
        (WebCore::jsTestMediaQueryListListenerPrototypeFunctionMethod):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSTestObjConstructor::JSTestObjConstructor):
        (WebCore::JSTestObj::JSTestObj):
        (WebCore::jsTestObjPrototypeFunctionVoidMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionIntMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionObjMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionMethodThatRequiresAllArgs):
        (WebCore::jsTestObjPrototypeFunctionMethodThatRequiresAllArgsAndThrows):
        (WebCore::jsTestObjPrototypeFunctionSerializedValue):
        (WebCore::jsTestObjPrototypeFunctionIdbKey):
        (WebCore::jsTestObjPrototypeFunctionOptionsObject):
        (WebCore::jsTestObjPrototypeFunctionCustomArgsAndException):
        (WebCore::jsTestObjPrototypeFunctionWithDynamicFrameAndArg):
        (WebCore::jsTestObjPrototypeFunctionWithDynamicFrameAndOptionalArg):
        (WebCore::jsTestObjPrototypeFunctionWithDynamicFrameAndUserGesture):
        (WebCore::jsTestObjPrototypeFunctionWithDynamicFrameAndUserGestureASAD):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndOptionalArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndTwoOptionalArgs):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonCallbackArgAndCallbackArg):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod1):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod2):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod3):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod4):
        (WebCore::jsTestObjPrototypeFunctionClassMethodWithOptional):
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp: Added.
        (WebCore::JSTestSerializedScriptValueInterfaceConstructor::createStructure):
        (WebCore::JSTestSerializedScriptValueInterfaceConstructor::JSTestSerializedScriptValueInterfaceConstructor):
        (WebCore::JSTestSerializedScriptValueInterfaceConstructor::getOwnPropertySlot):
        (WebCore::JSTestSerializedScriptValueInterfaceConstructor::getOwnPropertyDescriptor):
        (WebCore::JSTestSerializedScriptValueInterfacePrototype::self):
        (WebCore::JSTestSerializedScriptValueInterface::JSTestSerializedScriptValueInterface):
        (WebCore::JSTestSerializedScriptValueInterface::createPrototype):
        (WebCore::JSTestSerializedScriptValueInterface::getOwnPropertySlot):
        (WebCore::JSTestSerializedScriptValueInterface::getOwnPropertyDescriptor):
        (WebCore::jsTestSerializedScriptValueInterfaceValue):
        (WebCore::jsTestSerializedScriptValueInterfaceConstructor):
        (WebCore::JSTestSerializedScriptValueInterface::getConstructor):
        (WebCore::toJS):
        (WebCore::toTestSerializedScriptValueInterface):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h: Copied from Source/WebCore/bindings/scripts/test/JS/JSTestInterface.h.
        (WebCore::JSTestSerializedScriptValueInterface::createStructure):
        (WebCore::JSTestSerializedScriptValueInterface::impl):
        (WebCore::JSTestSerializedScriptValueInterfacePrototype::createStructure):
        (WebCore::JSTestSerializedScriptValueInterfacePrototype::JSTestSerializedScriptValueInterfacePrototype):
        * bindings/scripts/test/ObjC/DOMTestSerializedScriptValueInterface.h: Added.
        * bindings/scripts/test/ObjC/DOMTestSerializedScriptValueInterface.mm: Added.
        (-[DOMTestSerializedScriptValueInterface dealloc]):
        (-[DOMTestSerializedScriptValueInterface finalize]):
        (-[DOMTestSerializedScriptValueInterface value]):
        (core):
        (kit):
        * bindings/scripts/test/ObjC/DOMTestSerializedScriptValueInterfaceInternal.h: Added.
        * bindings/scripts/test/TestSerializedScriptValueInterface.idl: Added.
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::ConfigureV8TestInterfaceTemplate):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp: Copied from Source/WebCore/bindings/scripts/test/V8/V8TestInterface.cpp.
        (WebCore::TestSerializedScriptValueInterfaceInternal::V8_USE):
        (WebCore::ConfigureV8TestSerializedScriptValueInterfaceTemplate):
        (WebCore::V8TestSerializedScriptValueInterface::GetRawTemplate):
        (WebCore::V8TestSerializedScriptValueInterface::GetTemplate):
        (WebCore::V8TestSerializedScriptValueInterface::HasInstance):
        (WebCore::V8TestSerializedScriptValueInterface::wrapSlow):
        (WebCore::V8TestSerializedScriptValueInterface::derefObject):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.h: Added.
        (WebCore::V8TestSerializedScriptValueInterface::toNative):
        (WebCore::V8TestSerializedScriptValueInterface::wrap):
        (WebCore::toV8):

2011-03-01  Oliver Hunt  <oliver@apple.com>

        Reviewed by Joseph Pecoraro.

        Misaligned memory access in CloneDeserializer on all ARM arch.
        https://bugs.webkit.org/show_bug.cgi?id=48742

        Push platforms that need aligned memory access down the
        endian independent serialization and deserialization
        paths.

        * bindings/js/SerializedScriptValue.cpp:

2011-03-01  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        Viewport Warning/Error Messages Are Now Inaccurate
        https://bugs.webkit.org/show_bug.cgi?id=53707

        Correct and improve the error messages for viewport
        parsing. Clarify the difference between incorrect
        keys, values, and when to use the device-width or
        device-height constants.

        * dom/ViewportArguments.cpp:
        (WebCore::computeViewportAttributes): suggest using keywords if fixed input matches device width or height.
        (WebCore::numericPrefix):
        (WebCore::findSizeValue): remove incorrect warnings about fixed numbers because we don't know the device width or height.
        (WebCore::setViewportFeature): report a warning for an unrecognized key.
        (WebCore::viewportErrorMessageTemplate): added template for unrecognized key.
        (WebCore::viewportErrorMessageLevel):
        * dom/ViewportArguments.h:

2011-03-01  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        WebKit does not merge text decorations in the typing style and the selected element properly
        https://bugs.webkit.org/show_bug.cgi?id=55349

        The bug was caused by EditingStyle::mergeTypingStyle's not properly merging text decoration property.
        Fixed the bug by extracting a function from ApplyStyleCommand::pushDownInlineStyleAroundNode and
        calling it in pushDownInlineStyleAroundNode and in mergeTypingStyle.

        Test: editing/execCommand/merge-text-decoration-with-typing-style.html

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyInlineStyleToPushDown): Takes EditingStyle*;
        calls mergeInlineStyleOfElement.
        (WebCore::ApplyStyleCommand::pushDownInlineStyleAroundNode): Calls applyInlineStyleToPushDown.
        (WebCore::ApplyStyleCommand::removeInlineStyle): Ditto.
        * editing/ApplyStyleCommand.h:
        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::mergeTypingStyle): Added; calls mergeStyle.
        (WebCore::EditingStyle::mergeInlineStyleOfElement): Ditto.
        (WebCore::EditingStyle::mergeStyle): Extracted from applyInlineStyleToPushDown.
        * editing/EditingStyle.h:

2011-03-01  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Ryosuke Niwa.

        Stop instantiating legacy editing Positions in VisiblePosition
        https://bugs.webkit.org/show_bug.cgi?id=52919

        Changing VisiblePosition completely away from legacy positions.

        No new tests since this is functionaly equivalent.

        * WebCore.exp.in: Removing the legacy VisiblePosition constructor and
        adding the PositionIsOffsetInAnchor symbol. If we must create VisiblePositions
        outside of WebCore, they should be parent anchored.
        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::visiblePositionForTextMarkerData):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::startOfStyleRange):
        (WebCore::endOfStyleRange):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::visiblePositionForIndex):
        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (objectAndOffsetUnignored):
        * dom/Position.cpp:
        (WebCore::Position::document): Added this inline function to avoid the necessity
        of calling anchorNode to assure a document from a Position.
        (WebCore::Position::upstream): Fixed to correctly respect PositionIsAfterAnchor
        (WebCore::Position::downstream): ditto
        * dom/Range.cpp:
        (WebCore::Range::editingStartPosition):
        * editing/Editor.cpp:
        (WebCore::Editor::canDeleteRange):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply):
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::selectFrameElementInParentIfFullySelected):
        (WebCore::SelectionController::setSelectedRange):
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::shouldRepresentNodeOffsetZero):
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::deleteKeyPressed):
        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::leftVisuallyDistinctCandidate):
        (WebCore::VisiblePosition::rightVisuallyDistinctCandidate):
        (WebCore::VisiblePosition::canonicalPosition):
        (WebCore::VisiblePosition::characterAfter):
        (WebCore::VisiblePosition::localCaretRect):
        (WebCore::makeRange):
        (WebCore::startVisiblePosition):
        (WebCore::endVisiblePosition):
        (WebCore::setStart):
        (WebCore::setEnd):
        (WebCore::isFirstVisiblePositionInNode):
        (WebCore::isLastVisiblePositionInNode):
        * editing/VisiblePosition.h:
        (WebCore::VisiblePosition::VisiblePosition):
        * editing/htmlediting.cpp:
        (WebCore::firstInSpecialElement):
        (WebCore::lastInSpecialElement):
        (WebCore::visiblePositionBeforeNode):
        (WebCore::visiblePositionAfterNode):
        * editing/visible_units.cpp:
        (WebCore::startPositionForLine):
        (WebCore::endPositionForLine):
        (WebCore::previousLinePosition):
        (WebCore::nextLinePosition):
        (WebCore::startOfParagraph):
        (WebCore::endOfParagraph):
        (WebCore::endOfBlock):
        (WebCore::startOfDocument):
        (WebCore::endOfDocument):
        (WebCore::logicalStartPositionForLine):
        (WebCore::logicalEndPositionForLine):
        * page/DOMSelection.cpp:
        (WebCore::DOMSelection::collapse):
        (WebCore::DOMSelection::setBaseAndExtent):
        (WebCore::DOMSelection::setPosition):
        (WebCore::DOMSelection::extend):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEventSingleClick):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::createVisiblePosition):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::visiblePositionForIndex):
        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::selectSubString):

2011-03-01  Jeremy Orlow  <jorlow@chromium.org>

       Reviewed by Steve Block.

       When an IDBTransaction is aborted, all requests that have not yet fired should fire an ABORT_ERR
       https://bugs.webkit.org/show_bug.cgi?id=54785

       This patch adds in a lot of sanity checks/ASSERTs to make sure we're doing
       the right thing and continue to do the right thing. It also modifies EventQueue
       so that we can cancel an event. To do this efficiently, the vector is now a
       ListHashSet.

       Cancelling the event is harder/messier, but the most deterministic thing to do.
       To the user, the work isn't done until we fire the onsuccess/onerror handler.
       So the event (which does fire that) needs to be cancelable.

       transaction-abort.html tests this.

       * dom/EventQueue.cpp:
       (WebCore::EventQueue::enqueueEvent):
       (WebCore::EventQueue::cancelEvent):
       (WebCore::EventQueue::pendingEventTimerFired):
       (WebCore::EventQueue::dispatchEvent):
       * dom/EventQueue.h:
       * dom/ExceptionCode.cpp:
       * storage/IDBCursor.cpp:
       (WebCore::IDBCursor::update):
       (WebCore::IDBCursor::deleteFunction):
       * storage/IDBDatabaseBackendImpl.cpp:
       (WebCore::IDBDatabaseBackendImpl::close):
       * storage/IDBDatabaseException.h:
       * storage/IDBIndex.cpp:
       (WebCore::IDBIndex::openCursor):
       (WebCore::IDBIndex::openKeyCursor):
       (WebCore::IDBIndex::get):
       (WebCore::IDBIndex::getKey):
       * storage/IDBObjectStore.cpp:
       (WebCore::IDBObjectStore::get):
       (WebCore::IDBObjectStore::add):
       (WebCore::IDBObjectStore::put):
       (WebCore::IDBObjectStore::deleteFunction):
       (WebCore::IDBObjectStore::clear):
       (WebCore::IDBObjectStore::openCursor):
       * storage/IDBRequest.cpp:
       (WebCore::IDBRequest::IDBRequest):
       (WebCore::IDBRequest::~IDBRequest):
       (WebCore::IDBRequest::readyState):
       (WebCore::IDBRequest::markEarlyDeath):
       (WebCore::IDBRequest::source):
       (WebCore::IDBRequest::abort):
       (WebCore::IDBRequest::onSuccess):
       (WebCore::IDBRequest::dispatchEvent):
       (WebCore::IDBRequest::enqueueEvent):
       * storage/IDBRequest.h:
       * storage/IDBTransaction.cpp:
       (WebCore::IDBTransaction::registerRequest):
       (WebCore::IDBTransaction::unregisterRequest):
       (WebCore::IDBTransaction::onAbort):
       * storage/IDBTransaction.h:

2011-03-01  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Mihai Parparita.

        EventQueue needs to be ref counted
        https://bugs.webkit.org/show_bug.cgi?id=55512

        EventQueue needs to be ref counted because it's possible for its instance
        to be deleted while it's dispatching events. This is the reason why
        https://bugs.webkit.org/show_bug.cgi?id=54785 had to be reverted.

        No change of behavior, so no tests.

        * dom/Document.h:
        * dom/EventQueue.cpp:
        (WebCore::EventQueue::create):
        * dom/EventQueue.h:

2011-03-01  Helder Correia  <helder@sencha.com>

        Reviewed by Simon Fraser.

        No shadow when stroking a path with a gradient
        https://bugs.webkit.org/show_bug.cgi?id=55436

        This happens in CG and is related to bug 52509, this time to be fixed
        in GraphicsContext::strokePath(). The gradient needs to be drawn
        clipped to the stroke on a CGLayer first, then the layer drawn on the
        GraphicsContext.

        Tests: fast/canvas/canvas-strokePath-gradient-shadow.html
               svg/css/path-gradient-stroke-shadow.svg

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::strokePath):

2011-03-01  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        Fix Font::spaceWidth() to be a float instead of an int.

        * platform/graphics/Font.h:
        (WebCore::Font::spaceWidth):

2011-02-28  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        Chromium gypi file should include Java bridge files from WebCore/bridge
        https://bugs.webkit.org/show_bug.cgi?id=55387

        No new tests, no code changes.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:

2011-03-01  James Simonsen  <simonjam@chromium.org>

        Reviewed by Tony Gentilcore.

        [Web Timing] Handle the case where no responseEnd time is available.
        https://bugs.webkit.org/show_bug.cgi?id=55444

        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::MainResourceLoader): Initialize to 0.
        (WebCore::MainResourceLoader::didFinishLoading): Fall back to current time if no other time is available.

2011-03-01  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed, adding missing change for r80034.

        Add a handler class for Win32 HANDLE
        https://bugs.webkit.org/show_bug.cgi?id=55334

        * platform/win/Win32Handle.h: Added missing WTF_MAKE_NONCOPYABLE macro.

2011-03-01  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r80037.
        http://trac.webkit.org/changeset/80037
        https://bugs.webkit.org/show_bug.cgi?id=55508

        broke compile on SL (Requested by tonyg-cr on #webkit).

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSParser.h:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * css/html.css:
        (q:before):
        (q:after):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::dirtyLineBoxesForRenderer):
        * rendering/RenderObject.h:
        * rendering/RenderObjectChildList.cpp:
        (WebCore::RenderObjectChildList::removeChildNode):
        (WebCore::RenderObjectChildList::appendChildNode):
        (WebCore::RenderObjectChildList::insertChildNode):
        (WebCore::RenderObjectChildList::updateBeforeAfterContent):
        * rendering/RenderQuote.cpp: Removed.
        * rendering/RenderQuote.h: Removed.
        * rendering/RenderingAllInOne.cpp:
        * rendering/style/ContentData.cpp:
        (WebCore::ContentData::dataEquivalent):
        (WebCore::ContentData::deleteContent):
        * rendering/style/ContentData.h:
        * rendering/style/QuotesData.cpp: Removed.
        * rendering/style/QuotesData.h: Removed.
        * rendering/style/RenderStyle.cpp:
        * rendering/style/RenderStyle.h:
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleAllInOne.cpp:
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::operator==):
        * rendering/style/StyleRareInheritedData.h:

2011-03-01  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Dave Hyatt.

        Paint outline for tables.
        https://bugs.webkit.org/show_bug.cgi?id=55474

        Test: fast/table/table-and-parts-outline.html

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::paintObject):

2011-03-01  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r80028.
        http://trac.webkit.org/changeset/80028
        https://bugs.webkit.org/show_bug.cgi?id=55502

        'caused crashes; rolling out while investigating' (Requested
        by jorlow on #webkit).

        * dom/EventQueue.cpp:
        (WebCore::EventQueue::enqueueEvent):
        (WebCore::EventQueue::pendingEventTimerFired):
        (WebCore::EventQueue::dispatchEvent):
        * dom/EventQueue.h:
        * dom/ExceptionCode.cpp:
        * storage/IDBCursor.cpp:
        (WebCore::IDBCursor::update):
        (WebCore::IDBCursor::deleteFunction):
        * storage/IDBDatabaseException.h:
        * storage/IDBDatabaseException.idl:
        * storage/IDBIndex.cpp:
        (WebCore::IDBIndex::openCursor):
        (WebCore::IDBIndex::openKeyCursor):
        (WebCore::IDBIndex::get):
        (WebCore::IDBIndex::getKey):
        * storage/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::get):
        (WebCore::IDBObjectStore::add):
        (WebCore::IDBObjectStore::put):
        (WebCore::IDBObjectStore::deleteFunction):
        (WebCore::IDBObjectStore::clear):
        (WebCore::IDBObjectStore::openCursor):
        * storage/IDBRequest.cpp:
        (WebCore::IDBRequest::IDBRequest):
        (WebCore::IDBRequest::~IDBRequest):
        (WebCore::IDBRequest::readyState):
        (WebCore::IDBRequest::dispatchEvent):
        (WebCore::IDBRequest::enqueueEvent):
        (WebCore::IDBRequest::source):
        * storage/IDBRequest.h:
        * storage/IDBTransaction.cpp:
        (WebCore::IDBTransaction::onAbort):
        * storage/IDBTransaction.h:

2011-03-01  Carol Szabo  <carol.szabo@nokia.com>

        Reviewed by David Hyatt  <hyatt@apple.com>

        content property doesn't support quotes
        https://bugs.webkit.org/show_bug.cgi?id=6503

        Added full support for quotes as defined by CSS 2.1.

        Tests: fast/css/content/content-quotes-01.html
               fast/css/content/content-quotes-02.html
               fast/css/content/content-quotes-03.html
               fast/css/content/content-quotes-04.html
               fast/css/content/content-quotes-05.html

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        Added RenderQuote.cpp/h and QuotesData.cpp/h to the dependency lists
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseQuotes):
        * css/CSSParser.h:
        Added needed stylesheet parsing support for quotes,
        (no-)open-quote and (no-)close-quote
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        Handled setting of the new quotes RenderStyle property and added
        handling of quotes for the content property.
        * css/html.css:
        (q:before):
        (q:after):
        replaced the '"' workaround with open/close-quote
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::dirtyLineBoxesForRenderer):
        Made RenderQuote behave like RenderCounter.
        Needed to ensure that the Quote text is calculated before layout,
        just as it is for RenderCounter.
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isQuote):
        * rendering/RenderObjectChildList.cpp:
        (WebCore::RenderObjectChildList::removeChildNode):
        (WebCore::RenderObjectChildList::appendChildNode):
        (WebCore::RenderObjectChildList::insertChildNode):
        Handled updating of quote depth when renderers are added and removed
        from the tree.
        (WebCore::RenderObjectChildList::updateBeforeAfterContent):
        * rendering/RenderQuote.cpp: Added.
        (WebCore::adjustDepth):
        (WebCore::RenderQuote::RenderQuote):
        (WebCore::RenderQuote::~RenderQuote):
        (WebCore::RenderQuote::renderName):
        (WebCore::RenderQuote::placeQuote):
        (WebCore::RenderQuote::originalText):
        (WebCore::RenderQuote::computePreferredLogicalWidths):
        (WebCore::RenderQuote::rendererSubtreeAttached):
        (WebCore::RenderQuote::rendererRemovedFromTree):
        (WebCore::RenderQuote::styleDidChange):
        * rendering/RenderQuote.h: Added.
        (WebCore::RenderQuote::isQuote):
        (WebCore::toRenderQuote):
        * rendering/RenderingAllInOne.cpp:
        Included RenderQuote.cpp
        * rendering/style/StyleAllInOne.cpp:
        Included QuotesData.cpp
        * rendering/style/ContentData.cpp:
        (WebCore::ContentData::dataEquivalent):
        Checked for quotetype identity.
        (WebCore::ContentData::deleteContent):
        Accounted for the new QUOTE_TYPE.
        * rendering/style/ContentData.h:
        (WebCore::ContentData::isQuote):
        (WebCore::ContentData::quote):
        (WebCore::ContentData::setQuote):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::setContent):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::quotes):
        (WebCore::InheritedFlags::setQuotes):
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::operator==):
        Included quotes in equality check.
        * rendering/style/StyleRareInheritedData.h:
        Added quotes

2011-03-01  Michael Nordman  <michaeln@google.com>

        Reviewed by Alexey Proskuryakov.

        Alter the relative priorities of network vs fallback namespaces in the appcache.
        If a resource url is in an appcache's network namespace and fallback namespace, the network
        namespace wins (with the exception of the special '*' network namespace which does not take
        priority over the fallback namespace.
        https://bugs.webkit.org/show_bug.cgi?id=49292

        Test: http/tests/appcache/online-fallback-layering.html

        * loader/appcache/ApplicationCache.cpp:
        (WebCore::ApplicationCache::isURLInOnlineWhitelist):
        * loader/appcache/ApplicationCacheHost.cpp:
        (WebCore::ApplicationCacheHost::shouldLoadResourceFromApplicationCache):
        (WebCore::ApplicationCacheHost::getApplicationCacheFallbackResource):
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::fallbackCacheGroupForURL):

2011-03-01  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Roben.

        Add a handler class for Win32 HANDLE
        https://bugs.webkit.org/show_bug.cgi?id=55334

        This class will call CloseHandle in the destructor for valid handles.

        * platform/win/Win32Handle.h: Added.

2011-03-01  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Chris Marrin.

        <audio> and <video> should respect private browsing mode
        https://bugs.webkit.org/show_bug.cgi?id=55287
        <rdar://problem/9057699>

        No new tests, this is just the plumbing.

        * dom/Document.cpp:
        (WebCore::Document::privateBrowsingStateDidChange): New.
        (WebCore::Document::registerForPrivateBrowsingStateChangedCallbacks): Ditto.
        (WebCore::Document::unregisterForPrivateBrowsingStateChangedCallbacks): Ditto.
        * dom/Document.h:

        * dom/Element.h:
        (WebCore::Element::privateBrowsingStateDidChange): New.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): Register for privacy mode changes.
        (WebCore::HTMLMediaElement::~HTMLMediaElement): Unregister for privacy mode changes.
        (WebCore::HTMLMediaElement::loadResource): Tell player current privacy mode.
        (WebCore::HTMLMediaElement::privateBrowsingStateDidChange):  New, call through to MediaPlayer.
        * html/HTMLMediaElement.h:

        * page/Page.cpp:
        (WebCore::Page::privateBrowsingStateChanged): Call document()->privateBrowsingStateDidChange.

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::setPrivateBrowsingMode): New, call through to media engine.
        * platform/graphics/MediaPlayer.h:

        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::setPrivateBrowsingMode):  Declare new interface.

2011-03-01  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Steve Block.

        When an IDBTransaction is aborted, all requests that have not yet fired should fire an ABORT_ERR
        https://bugs.webkit.org/show_bug.cgi?id=54785

        This patch adds in a lot of sanity checks/ASSERTs to make sure we're doing
        the right thing and continue to do the right thing. It also modifies EventQueue
        so that we can cancel an event. To do this efficiently, the vector is now a
        ListHashSet.

        Canelling the event is harder/messier, but the most deterministic thing to do.
        To the user, the work isn't done until we fire the onsuccess/onerror handler.
        So the event (which does fire that) needs to be cancelable.

        transaction-abort.html tests this.

        * dom/EventQueue.cpp:
        (WebCore::EventQueue::enqueueEvent):
        (WebCore::EventQueue::cancelEvent):
        (WebCore::EventQueue::pendingEventTimerFired):
        (WebCore::EventQueue::dispatchEvent):
        * dom/EventQueue.h:
        * dom/ExceptionCode.cpp:
        * storage/IDBCursor.cpp:
        (WebCore::IDBCursor::update):
        (WebCore::IDBCursor::deleteFunction):
        * storage/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::close):
        * storage/IDBDatabaseException.h:
        * storage/IDBIndex.cpp:
        (WebCore::IDBIndex::openCursor):
        (WebCore::IDBIndex::openKeyCursor):
        (WebCore::IDBIndex::get):
        (WebCore::IDBIndex::getKey):
        * storage/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::get):
        (WebCore::IDBObjectStore::add):
        (WebCore::IDBObjectStore::put):
        (WebCore::IDBObjectStore::deleteFunction):
        (WebCore::IDBObjectStore::clear):
        (WebCore::IDBObjectStore::openCursor):
        * storage/IDBRequest.cpp:
        (WebCore::IDBRequest::IDBRequest):
        (WebCore::IDBRequest::~IDBRequest):
        (WebCore::IDBRequest::readyState):
        (WebCore::IDBRequest::markEarlyDeath):
        (WebCore::IDBRequest::source):
        (WebCore::IDBRequest::abort):
        (WebCore::IDBRequest::onSuccess):
        (WebCore::IDBRequest::dispatchEvent):
        (WebCore::IDBRequest::enqueueEvent):
        * storage/IDBRequest.h:
        * storage/IDBTransaction.cpp:
        (WebCore::IDBTransaction::registerRequest):
        (WebCore::IDBTransaction::unregisterRequest):
        (WebCore::IDBTransaction::onAbort):
        * storage/IDBTransaction.h:

2011-03-01  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Steve Block.

        Only IndexedDB's error event should be cancelable
        https://bugs.webkit.org/show_bug.cgi?id=55413

        * storage/IDBRequest.cpp:
        (WebCore::createSuccessEvent):
        * storage/IDBTransaction.cpp:
        (WebCore::IDBTransaction::onAbort):
        (WebCore::IDBTransaction::onComplete):

2011-03-01  Jia Pu  <jpu@apple.com>

        Reviewed by Darin Adler.

        Remove CorrectionIndicator markers sooner.
        https://bugs.webkit.org/show_bug.cgi?id=54893
        <rdar://problem/8997524>

        Test: platform/mac/editing/spelling/removing-underline-after-accepting-autocorrection-using-punctuation.html

        This patch changes the autocorrection behavior on Mac OS X. We want to remove CorrectionIndicator
        marker after any editing command if the command:
        1. is not a SpellingCorrectionCommand itself.
        2. is not the command that triggers the autocorrection.
        This is achieved by adding shouldRetainAutocorrectionIndicator() function to EditCommand. This function returns
        false for all commands derived from EditCommand, except SpellingCorrectionCommand and TypingCommand. This function
        always returns true for SpellingCorrectionCommand. For TypingCommand, the return value is determined by member
        variable m_shouldRetainAutocorrectionIndicator, which can be modified by passing option into the TypingCommand's
        public functions.
        
        To avoid constantly searching marker list, we use variable DocumentMarkerController::m_absentMarkerTypeCache
        to cache whether there is any marker of a particular type.

        This patch also fixes two minor existing bugs.
        
        1. We used to show reversion panel for word with CorrectionIndicator marker. This is incorrect because
        CorrectionIndicator marker can be removed from corrected words. Since all autocorrected words have Replacement
        marker unless the whole word is deleted, the correct behavior is to show reversion panel for word with Replacement
        marker, since all autocorrected words have such marker. However, since we don't want to show the reversion panel
        if an autocorrected word has been edited, we also check to see if the Replacement marker's description is null.
        
        This works as following:
        When we apply an autocorrection, we add Replacement marker to corrected word, and store original word
        as the marker's description. If the user edited the corrected word afterward, we set description to null.
        So when we decide whether to show a reversion panel, we not only check for the existence of Replacement
        marker, but also check if description is null.
        
        2. Fixed an assertion violation in Editor::removeSpellAndCorrectionMarkersFromWordsToBeEdited(), which would
        occur when deleting the first character in an editable area.

        * dom/DocumentMarker.h: Added m_possiblyExistingMarkerTypes to allow quickly checking whether a marker type is
           completely in from the document.

        * dom/DocumentMarkerController.cpp: Most of the functions listed here are optimized for early return by checking
           the return value of possiblyHasMarkers() at beginning.
        (WebCore::DocumentMarkerController::possiblyHasMarkers):
        (WebCore::DocumentMarkerController::DocumentMarkerController):
        (WebCore::DocumentMarkerController::detach):
        (WebCore::DocumentMarkerController::removeMarkers):
        (WebCore::DocumentMarkerController::addMarker):
        (WebCore::DocumentMarkerController::copyMarkers):
        (WebCore::DocumentMarkerController::markerContainingPoint):
        (WebCore::DocumentMarkerController::renderedRectsForMarkers):
        (WebCore::DocumentMarkerController::removeMarkersFromMarkerMapVectorPair):
        (WebCore::DocumentMarkerController::repaintMarkers):
        (WebCore::DocumentMarkerController::shiftMarkers):
        (WebCore::DocumentMarkerController::setMarkersActive):
        (WebCore::DocumentMarkerController::hasMarkers):
        (WebCore::DocumentMarkerController::clearDescriptionOnMarkersIntersectingRange):
        * dom/DocumentMarkerController.h:
        * editing/EditCommand.cpp:
        (WebCore::EditCommand::apply):
        (WebCore::EditCommand::shouldRetainAutocorrectionIndicator):
        (WebCore::EditCommand::setShouldRetainAutocorrectionIndicator):
        * editing/EditCommand.h:
        * editing/Editor.cpp:
        (WebCore::Editor::respondToChangedSelection):
        (WebCore::Editor::appliedEditing):
        (WebCore::Editor::insertTextWithoutSendingTextEvent):
        (WebCore::Editor::insertLineBreak):
        (WebCore::Editor::insertParagraphSeparator):
        (WebCore::Editor::markMisspellingsAfterTypingToWord):
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges):
        (WebCore::Editor::removeSpellAndCorrectionMarkersFromWordsToBeEdited):
        (WebCore::Editor::applyAutocorrectionBeforeTypingIfAppropriate):
        * editing/Editor.h:
        * editing/EditorCommand.cpp:
        (WebCore::executeInsertLineBreak):
        (WebCore::executeInsertParagraph):
        (WebCore::executeInsertText):
        * editing/SpellingCorrectionCommand.cpp:
        (WebCore::SpellingCorrectionCommand::shouldRetainAutocorrectionIndicator):
        * editing/SpellingCorrectionCommand.h:
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::TypingCommand):
        (WebCore::TypingCommand::deleteSelection):
        (WebCore::TypingCommand::deleteKeyPressed):
        (WebCore::TypingCommand::forwardDeleteKeyPressed):
        (WebCore::TypingCommand::updateSelectionIfDifferentFromCurrentSelection):
        (WebCore::TypingCommand::insertText):
        (WebCore::TypingCommand::insertLineBreak):
        (WebCore::TypingCommand::insertParagraphSeparatorInQuotedContent):
        (WebCore::TypingCommand::insertParagraphSeparator):
        * editing/TypingCommand.h:
        (WebCore::TypingCommand::create):
        (WebCore::TypingCommand::shouldRetainAutocorrectionIndicator):
        (WebCore::TypingCommand::setShouldRetainAutocorrectionIndicator):
        * manual-tests/autocorrection/type-whitespace-to-dismiss-reversion.html:

2011-03-01  Renata Hodovan  <reni@webkit.org>

        Reviewed by Andreas Kling.

        FEDisplacementMapElement changes doesn't require relayout
        https://bugs.webkit.org/show_bug.cgi?id=55454

        When the FEDisplacementMapElement receives an update message but the given value remains the same we don't need
        to relayout the filter.

        No new tests are needed because this modification is covered by the dynamic update tests of FEDisplacementMap.

        * platform/graphics/filters/FEDisplacementMap.cpp:
        (WebCore::FEDisplacementMap::setXChannelSelector):
        (WebCore::FEDisplacementMap::setYChannelSelector):
        (WebCore::FEDisplacementMap::setScale):
        * platform/graphics/filters/FEDisplacementMap.h:
        * svg/SVGFEDisplacementMapElement.cpp:
        (WebCore::SVGFEDisplacementMapElement::setFilterEffectAttribute):
        (WebCore::SVGFEDisplacementMapElement::svgAttributeChanged):
        * svg/SVGFEDisplacementMapElement.h:

2011-03-01  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/8902714> Expand ruby text when it is shorter than the ruby base
        https://bugs.webkit.org/show_bug.cgi?id=55487

        * css/html.css:
        (ruby > rt): Changed the default text-align value to -webkit-auto to signal
        the default expansion behavior.
        * rendering/RenderBlock.h:
        (WebCore::RenderRubyText::textAlignmentForLine): Made protected.
        (WebCore::RenderBlock::adjustInlineDirectionLineBounds): Made protected.
        * rendering/RenderRubyText.cpp:
        (WebCore::RenderRubyText::textAlignmentForLine): Added. If text-align is
        -webkit-auto, returns JUSTIFY to allow expansion.
        (WebCore::RenderRubyText::adjustInlineDirectionLineBounds): Added. If
        text-align is -webkit-auto, insets the line such that the inset on each side
        is the half the inter-ideograph expansion, or one ruby character wide,
        whichever is smaller.
        * rendering/RenderRubyText.h:

2011-03-01  Sam Weinig  <sam@webkit.org>

        Reviewed by Timothy Hatcher.

        WebKit2 needs to be made localizable
        https://bugs.webkit.org/show_bug.cgi?id=55483

        * English.lproj/Localizable.strings: Copied from Source/WebKit/English.lproj/Localizable.strings.
        * WebCore.xcodeproj/project.pbxproj:
        Move Localizable.strings to WebCore.

        * WebCore.exp.in:
        Add export for localizedString function.

        * platform/LocalizedStrings.h:
        * platform/mac/LocalizedStringsMac.mm: Added.
        Add function to get localized version of a string from the WebCore bundle.

2011-03-01  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Timothy Hatcher.

        All Console Messages should be passed to ChromeClients.
        https://bugs.webkit.org/show_bug.cgi?id=54926

        Do not filter the message type here, allow clients
        to filter and deal with the different message types.

        * page/Console.cpp:
        (WebCore::Console::addMessage):

2011-02-23  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        Viewport parsing no longer accepts "1.0;" value as valid.
        https://bugs.webkit.org/show_bug.cgi?id=53705

        When parsing numeric values, the "css-viewport" spec says
        to use the number prefix, and the non numeric part of the
        string can be ignored. This matches our behavior before
        r67376. The change was that checking the error out condition
        of String::toFloat doesn't necessarily mean that there
        was a non-numeric prefix. This patch checks if there was
        or wasn't a non-numeric prefix.

        There is a console warning in any case where a numeric
        value is not parsed cleanly. There is an error warning
        when it is not a number at all, and a tip warning when
        it has been truncated.

        Error messages are slightly improved to provide more
        context, both the key and value, when an error happens.

        Test: fast/viewport/viewport-129.html

        * dom/ViewportArguments.cpp:
        (WebCore::numericPrefix):
        (WebCore::findSizeValue):
        (WebCore::findScaleValue):
        (WebCore::findUserScalableValue):
        (WebCore::findTargetDensityDPIValue):
        (WebCore::viewportErrorMessageTemplate):
        (WebCore::viewportErrorMessageLevel):
        (WebCore::reportViewportWarning):
        * dom/ViewportArguments.h:

2011-03-01  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: InjectedScript.setPropertyValue doesn't work.
        https://bugs.webkit.org/show_bug.cgi?id=55475

        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::setPropertyValue):

2011-03-01  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        Remove unused JavaString::uchars()
        https://bugs.webkit.org/show_bug.cgi?id=55465

        No new tests, removing dead code only.

        * bridge/jni/JNIBridge.h:
        * bridge/jni/jsc/JavaStringJSC.h:
        (JSC::Bindings::JavaStringImpl::utf8):
        * bridge/jni/v8/JavaStringV8.h:

2011-03-01  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Extremely slow DOM search in GMail
        https://bugs.webkit.org/show_bug.cgi?id=55456

        The solution comprises three major parts:
        - avoid multiple invocations of highlightSearchResults(), one per each nodeIds chunk.
        - cache highlighted node's innerHTML so that no extra _nodeTitleInfo() calls will be needed.
        - replace hand-written Text nodes iteration with a snapshot-based ".//text()" XPathResult.

        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.searchCanceled):
        (WebInspector.ElementsPanel.prototype.addNodesToSearchResult):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype.highlightSearchResults):
        (WebInspector.ElementsTreeElement.prototype.updateTitle):
        ():
        * inspector/front-end/utilities.js:
        ():

2011-03-01  Adam Roben  <aroben@apple.com>

        Fix multiple-definition linker warnings introduced by r79978 on Windows

        * rendering/RenderingAllInOne.cpp: Removed TextControlInnerElements.cpp, as it is now being
        compiled separately.

2011-03-01  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Csaba Osztrogonác.

        [Qt] Clean up the project files and move common options to WebKit.pri.

        No new tests needed.

        * WebCore.pri: Move common options to WebKit.pri.
        * WebCore.pro: Ditto.

2011-03-01  Steve Block  <steveblock@google.com>

        Reviewed by Pavel Feldman.

        JNI code in Java bridge is not correctly guarded
        https://bugs.webkit.org/show_bug.cgi?id=55459

        No new tests, build fix only.

        * bridge/jni/v8/JNIBridgeV8.cpp:
        * bridge/jni/v8/JNIBridgeV8.h:
        * bridge/jni/v8/JNIUtilityPrivate.cpp:
        * bridge/jni/v8/JNIUtilityPrivate.h:
        * bridge/jni/v8/JavaClassV8.cpp:
        * bridge/jni/v8/JavaClassV8.h:
        * bridge/jni/v8/JavaInstanceV8.cpp:
        * bridge/jni/v8/JavaInstanceV8.h:
        * bridge/jni/v8/JavaNPObjectV8.cpp:
        * bridge/jni/v8/JavaNPObjectV8.h:

2011-03-01  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        Bridge.h should not include BridgeJSC.h
        https://bugs.webkit.org/show_bug.cgi?id=55212

        Instead, BridgeJSC.h should include Bridge.h and code should include
        BridgeJSC.h as appropriate.

        This prevents ports that use V8 from having to include JSC-specific
        files, even if the contents of those files are guarded.

        No new tests, cleanup only.

        * bindings/js/JSPluginElementFunctions.cpp:
        * bindings/js/ScriptControllerBrew.cpp:
        * bindings/js/ScriptControllerGtk.cpp:
        * bindings/js/ScriptControllerHaiku.cpp:
        * bindings/js/ScriptControllerQt.cpp:
        * bindings/js/ScriptControllerMac.mm:
        * bindings/js/ScriptControllerWin.cpp:
        * bindings/js/ScriptControllerWx.cpp:
        * bindings/js/ScriptInstance.h:
        * bindings/objc/WebScriptObject.mm:
        * bridge/Bridge.h:
        * bridge/c/c_class.h:
        * bridge/c/c_instance.h:
        * bridge/c/c_runtime.h:
        * bridge/jni/jsc/JNIBridgeJSC.h:
        * bridge/jni/jsc/JavaInstanceJSC.h:
        * bridge/jsc/BridgeJSC.h:
        * bridge/objc/objc_runtime.h:
        * bridge/qt/qt_class.h:
        * bridge/qt/qt_instance.h:
        * bridge/qt/qt_pixmapruntime.h:
        * bridge/qt/qt_runtime.h:
        * bridge/runtime_array.h:
        * bridge/runtime_method.h:
        * bridge/runtime_object.h:
        * bridge/runtime_root.cpp:
        * bridge/testbindings.cpp:
        * bridge/testbindings.mm:
        * bridge/testqtbindings.cpp:
        * page/win/FrameWin.cpp:
        * platform/graphics/wince/MediaPlayerProxy.cpp:
        * plugins/PluginView.cpp:
        * plugins/PluginViewNone.cpp:
        * plugins/gtk/PluginViewGtk.cpp:
        * plugins/mac/PluginViewMac.mm:
        * plugins/qt/PluginViewQt.cpp:
        * plugins/symbian/PluginViewSymbian.cpp:
        * plugins/win/PluginViewWin.cpp:

2011-03-01  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Antti Koivisto.

        SVG 1.1 2nd Edition color-prop-05-t.svg exposes bug in 'currentColor' handling
        https://bugs.webkit.org/show_bug.cgi?id=54800

        Wrong handling of currentColor on inherit
        https://bugs.webkit.org/show_bug.cgi?id=38102

        Stop storing RefPtr<SVGPaint> objects in the SVGRenderStyle for fill/stroke. These are the last
        two objects that held references to CSSValues, they're all gone now, aligning better with RenderStyle.
        It's also dangerous, as a SVGPaint object can be shared by multiple SVGRenderStyles (MappedAttribute will
        once create a CSSStyleDeclaration for fill="red" and reuse it where possible), and it was easy to
        accidently mutate the object, affecting multiple styles. Instead store a Color, an URI and a paint
        type in SVGRenderStyle, enough to create a SVGPaint object, if needed (eg for computed styles).

        <g color="green"><rect fill="currentColor"/> already worked fine in trunk, but
        <g fill="currentColor" color="green"><rect color="red"/> procuded a red rectangle.

        In order to fix to bug we have to resolve all currentColor values for SVGPaint objects, in SVGCSSStyleSelector,
        as it's already done for SVGColor objects (stop-color, flood-color, etc.) instead of in RenderSVGResource::fill/strokePaintingResource,
        when trying to use the paint server. The correct "color" value that should be used from the RenderStyle, is directly
        available in CSSStyleSelector: in applyProperty m_style->color() gives the desired value. In CSSStyleSelector it's handled
        exactly this way for non-SVG currentColor properties. Also fix computed styles, which did not resolve currentColor for SVGPaint/SVGColor.

        A previous patch implemented the SVGPaint/SVGColor API. SVG demands these CSSValues to be mutable. Introduce
        CSSMutableValue, which extends CSSValue by a Node pointer, and let SVGPaint/SVGColor inherit from it.
        Mutating a SVGPaint/SVGColor object now takes immediate effect, which is reflected in the inline style / computed style.
        (Note that getPresentationAttribute() already takes care of removing the CSSValue from the mapped attribute cache, so that it's no longer shared.)

        Add several new tests covering the patch.

        Tests: svg/W3C-SVG-1.1-SE/color-prop-05-t.svg
               svg/animations/animate-color-fill-currentColor.html
               svg/custom/SVGPaint-mutate-attribute.svg
               svg/custom/SVGPaint-mutate-inline-style.svg

        * GNUMakefile.am: Add CSSMutableValue.h
        * WebCore.gypi: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * css/CSSMutableStyleDeclaration.cpp: Reset the Node pointer in all CSSMutableValues belonging to this style declaration.
        (WebCore::CSSMutableStyleDeclaration::~CSSMutableStyleDeclaration):
        * css/CSSMutableStyleDeclaration.h: Add destructor.
        * css/CSSMutableValue.h: Added.
        (WebCore::CSSMutableValue::CSSMutableValue):
        (WebCore::CSSMutableValue::~CSSMutableValue):
        (WebCore::CSSMutableValue::isMutableValue):
        (WebCore::CSSMutableValue::node):
        (WebCore::CSSMutableValue::setNode):
        (WebCore::CSSMutableValue::setNeedsStyleRecalc):
        * css/CSSStyleDeclaration.cpp:
        (WebCore::CSSStyleDeclaration::getPropertyCSSValue): Set the Node object of a CSSMutableValue to the Node, this style declaration belongs to.
        * css/CSSValue.h:
        (WebCore::CSSValue::isMutableValue): Return false, default.
        * css/SVGCSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::adjustSVGPaintForCurrentColor): Add helper function, resolving currentColor values for SVGPaint objects.
        (WebCore::CSSComputedStyleDeclaration::getSVGPropertyCSSValue): Use currentColorOrValidColor/adjustSVGPaintForCurrentColor to resolve SVGColor/SVGPaint values.
        * css/SVGCSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applySVGProperty): Store fill/stroke uri, color, paint type seperated in SVGRenderStyle, don't store the full SVGPaint object anymore.
        * rendering/style/SVGRenderStyle.cpp:
        (WebCore::SVGRenderStyle::diff): Adapt to SVGPaint changes.
        * rendering/style/SVGRenderStyle.h: Ditto.
        (WebCore::SVGRenderStyle::initialFillOpacity):
        (WebCore::SVGRenderStyle::initialFillPaintType):
        (WebCore::SVGRenderStyle::initialFillPaintColor):
        (WebCore::SVGRenderStyle::initialFillPaintUri):
        (WebCore::SVGRenderStyle::initialStrokeOpacity):
        (WebCore::SVGRenderStyle::initialStrokePaintType):
        (WebCore::SVGRenderStyle::initialStrokePaintColor):
        (WebCore::SVGRenderStyle::initialStrokePaintUri):
        (WebCore::SVGRenderStyle::initialStrokeMiterLimit):
        (WebCore::SVGRenderStyle::initialStopOpacity):
        (WebCore::SVGRenderStyle::initialFloodOpacity):
        (WebCore::SVGRenderStyle::setFillPaint):
        (WebCore::SVGRenderStyle::setStrokePaint):
        (WebCore::SVGRenderStyle::fillPaintType):
        (WebCore::SVGRenderStyle::fillPaintColor):
        (WebCore::SVGRenderStyle::fillPaintUri):
        (WebCore::SVGRenderStyle::strokePaintType):
        (WebCore::SVGRenderStyle::strokePaintColor):
        (WebCore::SVGRenderStyle::strokePaintUri):
        (WebCore::SVGRenderStyle::hasStroke):
        (WebCore::SVGRenderStyle::hasFill):
        * rendering/style/SVGRenderStyleDefs.cpp: Ditto.
        (WebCore::StyleFillData::StyleFillData):
        (WebCore::StyleFillData::operator==):
        (WebCore::StyleStrokeData::StyleStrokeData):
        (WebCore::StyleStrokeData::operator==):
        * rendering/style/SVGRenderStyleDefs.h: Ditto.
        * rendering/svg/RenderSVGResource.cpp: Ditto.
        (WebCore::requestPaintingResource):
        * rendering/svg/RenderSVGResourceClipper.cpp: Ditto.
        (WebCore::RenderSVGResourceClipper::drawContentIntoMaskImage):
        * rendering/svg/SVGResources.cpp: Ditto.
        (WebCore::paintingResourceFromSVGPaint):
        (WebCore::SVGResources::buildCachedResources):
        * svg/SVGColor.cpp: Call setNeedsStyleRecalc() after mutating the object.
        (WebCore::SVGColor::setRGBColor):
        (WebCore::SVGColor::setRGBColorICCColor):
        (WebCore::SVGColor::setColor):
        * svg/SVGColor.h:
        * svg/SVGPaint.cpp: Ditto.
        (WebCore::SVGPaint::setUri):
        (WebCore::SVGPaint::setPaint):
        * svg/SVGPaint.h:

2011-03-01  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Pavel Feldman.

        Web Inspector: [Text editor] Handle decorated lines in the editor
        https://bugs.webkit.org/show_bug.cgi?id=55373

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._startEditing):
        (WebInspector.SourceFrame.prototype._endEditing):
        (WebInspector.SourceFrame.prototype._createTextViewer):
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextEditorGutterPanel.prototype.textChanged):
        (WebInspector.TextEditorGutterChunk.prototype.addDecoration):
        (WebInspector.TextEditorGutterChunk.prototype.removeDecoration):
        (WebInspector.TextEditorMainPanel.prototype.set readOnly):
        (WebInspector.TextEditorMainPanel.prototype._handleDOMUpdates):
        (WebInspector.TextEditorMainPanel.prototype._handleDOMSubtreeModified):
        (WebInspector.TextEditorMainPanel.prototype._markDirtyLines):
        (WebInspector.TextEditorMainPanel.prototype._applyDomUpdates):
        (WebInspector.TextEditorMainPanel.prototype._removeDecorationsInRange):
        (WebInspector.TextEditorMainPanel.prototype._updateChunksForRanges):
        (WebInspector.TextEditorMainPanel.prototype._collectLinesFromDiv):
        (WebInspector.TextEditorMainChunk.prototype.addDecoration):
        (WebInspector.TextEditorMainChunk.prototype.removeDecoration):
        (WebInspector.TextEditorMainChunk.prototype.removeAllDecorations):
        (WebInspector.TextEditorMainChunk.prototype.get decorated):

2011-03-01  Philippe Normand  <pnormand@igalia.com>

        Unreviewed GTK build fix after r79978

        * GNUmakefile.am:

2011-03-01  Andras Becsi  <abecsi@webkit.org>

        Unreviewed build fix.

        [Qt] Fix minimal build.

        No new tests needed.

        * WebCore.pri: Is included in WebKit2.pro, so XP_UNIX can remain here.

2011-03-01  anthony taranto  <anthony.taranto@gmail.com>

        Return undefined value from ScriptController::evaluate(), allowing the
        caller to distinguish between an error and an undefined return value.
        https://bugs.webkit.org/show_bug.cgi?id=51528

        * bindings/v8/ScriptController.cpp: 

2011-03-01  Roland Steiner  <rolandsteiner@chromium.org>

        Reviewed by Kent Tamura.

        Bug 54853 - Move TextControlInnerElements from WebCore/rendering to WebCore/html/shadow
        https://bugs.webkit.org/show_bug.cgi?id=54853
        
        Moving the files from rendering to html/shadow, with the exception of
        the class RenderTextControlInnerBlock, which I moved to RenderTextControlSingleLine
        (this place is not ideal, but only a temporary state during the larger refactoring
        for <input>).

        No new tests. (refactoring)

        * Android.mk:
        * CMakeLists.txt:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * html/shadow/TextControlInnerElements.cpp: Copied from Source/WebCore/rendering/TextControlInnerElements.cpp.
        * html/shadow/TextControlInnerElements.h: Copied from Source/WebCore/rendering/TextControlInnerElements.h.
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlInnerBlock::positionForPoint):
        * rendering/RenderTextControlSingleLine.h:
        (WebCore::RenderTextControlInnerBlock::RenderTextControlInnerBlock):
        (WebCore::RenderTextControlInnerBlock::hasLineIfEmpty):
        * rendering/TextControlInnerElements.cpp: Removed.
        * rendering/TextControlInnerElements.h: Removed.

2011-03-01  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Tony Chang.

        applyInlineStyleToPushDown and removeInlineStyleFromElement should take EditingStyle
        https://bugs.webkit.org/show_bug.cgi?id=55338

        Deployed EditingStyle in applyInlineStyleToPushDown and removeInlineStyleFromElement.

        Also added a convenience function EditingStyle::setProperty, which lazily instantiates
        new CSSMutableStyleDeclaration for m_mutableStyle.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::removeInlineStyleFromElement): Takes EditingStyle*.
        (WebCore::ApplyStyleCommand::removeImplicitlyStyledElement): Ditto.
        (WebCore::ApplyStyleCommand::removeCSSStyle): Ditto.
        (WebCore::ApplyStyleCommand::pushDownInlineStyleAroundNode): Calls the above three functions.
        (WebCore::ApplyStyleCommand::removeInlineStyle): Calls pushDownInlineStyleAroundNode.
        * editing/ApplyStyleCommand.h:
        * editing/EditingStyle.cpp:
        (WebCore::HTMLElementEquivalent::addToStyle): Takes EditingStyle*; calls EditingStyle::setProperty.
        (WebCore::HTMLAttributeEquivalent::addToStyle): Ditto.
        (WebCore::EditingStyle::setProperty): Added.  This member function lazily instantiates
        new CSSMutableStyleDeclaration for m_mutableStyle.
        (WebCore::EditingStyle::conflictsWithInlineStyleOfElement): Takes EditingStyle*.
        (WebCore::EditingStyle::conflictsWithImplicitStyleOfElement): Ditto.
        (WebCore::EditingStyle::extractConflictingImplicitStyleOfAttributes): Ditto.
        * editing/EditingStyle.h: Added HTMLElementEquivalent and HTMLAttributeEquivalent as friends.
        (WebCore::EditingStyle::conflictsWithInlineStyleOfElement): Ditto.
        * editing/InsertTextCommand.cpp: Removed unnecessary includes.
        * editing/RemoveCSSPropertyCommand.h: Ditto.

2011-02-28  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: chromium rebuilds XMLViewer after noop. Fixed gyp file.

        * WebCore.gyp/WebCore.gyp:

2011-02-28  David Levin  <levin@chromium.org>

        Reviewed by Darin Adler.

        KURL should expose a referrer property.
        https://bugs.webkit.org/show_bug.cgi?id=55415

        No change in functionality so no new tests.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::setOutgoingReferrer): Refactor to put the majority
        of functionality in KURL::strippedForUseAsReferrer() so that this code can
        be more easily reused.
        * platform/KURL.cpp:
        (WebCore::KURL::strippedForUseAsReferrer): Converts the url to a string
        which is suitable for use as a referrer.
        * platform/KURL.h:

2011-02-28  Chang Shu  <cshu@webkit.org>

        Reviewed by Ryosuke Niwa.

        Remove the support of Frame::isContentEditable and its dependencies.
        https://bugs.webkit.org/show_bug.cgi?id=54292

        Frame::isContentEditable is currently based on two things: Editor::clientIsEditable and
        Document::inDesignMode. In fact, it should only rely on Document::inDesignMode. As a result,
        Editor::clientIsEditable and its client-side implementation can be removed.

        * WebCore.exp.in:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isReadOnly):
        * editing/Editor.cpp:
        * editing/Editor.h:
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::setSelectionFromNone):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::isContentEditable):
        (WebCore::HTMLElement::isContentRichlyEditable):
        * page/DragController.cpp:
        (WebCore::DragController::operationForLoad):
        * page/EditorClient.h:
        * page/Frame.cpp:
        * page/Frame.h:

2011-02-28  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        Number type input cannot be set to empty string if it has an initial value
        https://bugs.webkit.org/show_bug.cgi?id=53744

        We need to distinguish null strings and empty strings for
        InputElementData::value. So InputType::sanitizeValue() also needs to
        take care of it.

        * dom/InputElement.h: Add a comment to InputElementData::value and
          setValue about null strings.
        * html/InputType.h: Add a comment to sanitizeValue about null strings.
        * html/NumberInputType.cpp:
        (WebCore::NumberInputType::sanitizeValue): Returns a null string if the
          proposed value is a null string. Returning an empty string if the
          proposed value is not a number.

2011-02-28  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        Number type input should not handle mouse wheel events if it has no focus.
        https://bugs.webkit.org/show_bug.cgi?id=53638

        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::handleWheelEventForSpinButton): Check focused().

2011-02-28  Noel Gordon  <noel.gordon@gmail.com>
        Reviewed by James Robinson.

        [chromium] GradientSkia: use the common Gradient stop sorting methods.
        https://bugs.webkit.org/show_bug.cgi?id=54625

        Remove a FIXME: call the Gradient.cpp stop storting routines, no need
        to duplicate that code herein.

        No change in behavior, so no new tests.

        * platform/graphics/skia/GradientSkia.cpp:
        (WebCore::Gradient::platformGradient):

2011-02-28  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        JNI code should include <jni.h> on non-OSX platforms.
        https://bugs.webkit.org/show_bug.cgi?id=55219

        On Mac we need to include <JavaVM/jni.h> as this is a framework
        include. We include jni.h through JNIUtility.h to minimize the
        number of ifdefs.

        No new tests, build fix only.

        * WebCore.xcodeproj/project.pbxproj
        * bridge/jni/JNIUtility.h:
        * bridge/jni/jni_jsobject.h:
        * bridge/jni/jsc/JNIBridgeJSC.h:
        * bridge/jni/jsc/JavaInstanceJSC.h:
        * bridge/jni/v8/JavaInstanceV8.h:

2011-02-28  Nebojsa Sabovic  <neb@chromium.org>

        Reviewed by James Robinson.

        [chromium] Pepper plugins render upside down
        https://bugs.webkit.org/show_bug.cgi?id=55101

        No layout tests for pepper plugins (yet).

        * platform/graphics/chromium/PluginLayerChromium.h:

2011-02-28  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Adam Barth.

        Follow HTML5 spec for document.open() a little more closely
        https://bugs.webkit.org/show_bug.cgi?id=55392

        See: 3.5.1.4 at http://www.whatwg.org/specs/web-apps/current-work/#dom-document-open.

        The second return check matches the spec. The first return check (isExecutingScript())
        was left in place because without it, fast/tokenizer/write-external-script-open.html
        would fail. It also possible there is a spec bug because FF4 crashes on that test and
        IE9 prints "FAILURE." The isLoadingMainResource() check was removed because the main
        resource is always loading while parser->isParsing().

        Test: fast/parser/double-write-from-closed-iframe.html

        * dom/Document.cpp:
        (WebCore::Document::open):

2011-02-28  Avi Drissman  <avi@google.com>

        Reviewed by James Robinson.

        WebCursorInfo needs to match enums in platform/Cursor.h
        https://bugs.webkit.org/show_bug.cgi?id=55094

        * platform/chromium/CursorChromium.cpp:
        (WebCore::grabCursor):
        (WebCore::grabbingCursor):
        * platform/chromium/PlatformCursor.h:

2011-02-28  Jia Pu  <jpu@apple.com>

        Reviewed by Darin Adler.

        [Mac] Make "Change back to …" contextual menu item work with new autocorrection.
        https://bugs.webkit.org/show_bug.cgi?id=55396
        <rdar://problem/8836093>

        The change in InlineTextBox.cpp fixes a bug, where the rectangle of Replacement marker isn't
        calculated. We need this to do hit test when deciding whether to show "Change back to ..." on
        contextual menu.

        The change in Editor.cpp is for notifying spellchecker about the reversion whenever "Change
        back to ..." is clicked.

        * editing/Editor.cpp:
        (WebCore::Editor::changeBackToReplacedString):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintDocumentMarkers):

2011-02-28  Victoria Kirst  <vrk@google.com>

        Reviewed by Kenneth Russell.

        [chromium] Fall back to texSubImage2D when mapTexSubImage2D fails in VideoLayerChromium
        https://bugs.webkit.org/show_bug.cgi?id=55269

        Mesa does not support mapTexSubImage2D, so this change lets
        GPU-accelerated video work with DRT layout tests.

        * platform/graphics/chromium/VideoLayerChromium.cpp:
        (WebCore::VideoLayerChromium::updateTexture):

2011-02-28  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=46500, make positioned elements work with vertical text.  Change staticX and staticY
        to be staticInlinePosition and staticBlockPosition.  Patch all of the computations involving these variables to be writing
        mode aware.  Mixed writing modes are not yet supported.

        Added new tests in fast/block/positioning/auto.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::adjustPositionedBlock):
        (WebCore::RenderBlock::layoutPositionedObjects):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::startOffsetForLine):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::appendRunsForObject):
        (WebCore::setStaticPositions):
        (WebCore::RenderBlock::skipTrailingWhitespace):
        (WebCore::RenderBlock::skipLeadingWhitespace):
        (WebCore::RenderBlock::findNextLineBreak):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::positionLineBox):
        (WebCore::computeInlineStaticDistance):
        (WebCore::RenderBox::computePositionedLogicalWidth):
        (WebCore::computeBlockStaticDistance):
        (WebCore::RenderBox::computePositionedLogicalHeight):
        (WebCore::RenderBox::computePositionedLogicalWidthReplaced):
        (WebCore::RenderBox::computePositionedLogicalHeightReplaced):
        * rendering/RenderBoxModelObject.h:
        (WebCore::RenderBoxModelObject::borderAndPaddingLogicalLeft):
        (WebCore::RenderBoxModelObject::borderAndPaddingStart):
        (WebCore::RenderBoxModelObject::borderLogicalLeft):
        (WebCore::RenderBoxModelObject::borderLogicalRight):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutHorizontalBox):
        (WebCore::RenderFlexibleBox::layoutVerticalBox):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::relativePositionedInlineOffset):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::staticInlinePosition):
        (WebCore::RenderLayer::staticBlockPosition):
        (WebCore::RenderLayer::setStaticInlinePosition):
        (WebCore::RenderLayer::setStaticBlockPosition):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::hasAutoLeftAndRight):
        (WebCore::InheritedFlags::hasAutoTopAndBottom):
        (WebCore::InheritedFlags::hasStaticInlinePosition):
        (WebCore::InheritedFlags::hasStaticBlockPosition):

2011-02-28  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Anders Carlsson.

        [Qt][WK2] Plugin initialization
        https://bugs.webkit.org/show_bug.cgi?id=48127

        No function change so no new tests.

        * WebCore.pri: Lift the definition of the XP_UNIX macro
        from WebCore.pri to WebKit.pri to apply it to WebKit2 as well.

2011-02-28  Dean Jackson  <dino@apple.com>

        Reviewed by Eric Carlson.

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

        Allow webkitEnterFullScreen to be called from outside
        a user gesture, but only when the correct restrictions
        have been lifted in WebCore. Add a new restriction type
        for this situation. Meanwhile, expose the current
        restrictions externally from HTMLMediaElement, so that
        clients can easily set restrictions on their port.

        No new tests. This doesn't change existing behavior. Some
        WebKit clients may lift the restriction.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        - ensure restrictions initialize with fullscreen restricted
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::requireUserGestureForLoad):
        (WebCore::HTMLMediaElement::requireUserGestureForRateChange):
        (WebCore::HTMLMediaElement::requireUserGestureForFullScreen):
        (WebCore::HTMLMediaElement::setBehaviorRestrictions):
        - new methods to expose the current restrictions
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::webkitEnterFullscreen):

2011-02-28  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r78789.
        http://trac.webkit.org/changeset/78789
        https://bugs.webkit.org/show_bug.cgi?id=55409

        Incorrect canvas fallback implementation (Requested by
        inferno-sec on #webkit).

        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):
        (WebCore::AccessibilityRenderObject::canHaveChildren):
        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (atkRole):
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::isFocusable):
        * rendering/RenderHTMLCanvas.cpp:
        * rendering/RenderHTMLCanvas.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::repaint):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::write):

2011-02-28  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r79425.
        http://trac.webkit.org/changeset/79425
        https://bugs.webkit.org/show_bug.cgi?id=55406

        Incorrect canvas fallback implementation. (Requested by
        inferno-sec on #webkit).

        * rendering/RenderHTMLCanvas.cpp:
        (WebCore::RenderHTMLCanvas::nodeAtPoint):

2011-02-28  Adam Klein  <adamk@chromium.org>

        Reviewed by Adam Barth.

        [fileapi] Implement LocalFileSystem.resolveLocalFileSystemURI
        https://bugs.webkit.org/show_bug.cgi?id=54774

        See http://dev.w3.org/2009/dap/file-system/file-dir-sys.html#methods
        for the spec implemented by this patch.

        Test: fast/filesystem/resolve-uri.html

        * fileapi/DOMFileSystemBase.cpp:
        (WebCore::DOMFileSystemBase::crackFileSystemURL):
        * fileapi/DOMFileSystemBase.h:
        Added constants for "temporary" and "persistent".
        * fileapi/EntryBase.cpp:
        Replace hardcoded strings with aforementioned constants.
        * fileapi/FileSystemCallbacks.cpp:
        (WebCore::ResolveURICallbacks::create):
        (WebCore::ResolveURICallbacks::ResolveURICallbacks):
        (WebCore::ResolveURICallbacks::didOpenFileSystem):
        Chains a call of openFileSystem to calls to getDirectory/getFile.
        * fileapi/FileSystemCallbacks.h:
        * fileapi/LocalFileSystem.cpp:
        (WebCore::LocalFileSystem::readFileSystem):
        * fileapi/LocalFileSystem.h:
        Remove size argument from readFileSystem()
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::resolveLocalFileSystemURI):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:

2011-02-28  Alexis Menard  <alexis.menard@openbossa.org>

        Reviewed by Oliver Hunt.

        Build fix for Qt port after API changes of http://trac.webkit.org/changeset/79904.

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

2011-02-25  David Levin  <levin@chromium.org>

        Reviewed by Darin Adler.

        Remove some duplicate code from KURLGoogle.cpp
        https://bugs.webkit.org/show_bug.cgi?id=55266

        No change in functionality so no new tests.

        * WebCore.gyp/WebCore.gyp: Make KURL.cpp get built by Chromium.
        * platform/KURL.cpp:
        Simply moved #include's and some code that was identical (i.e.
        had been copied) to KURLGoogle.cpp outside of ifdef !USE(GOOGLEURL)
        to reduce duplication.
        * platform/KURLGoogle.cpp:
        Removed the duplicate code.

2011-02-28  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Make ScopeChainNode GC allocated
        https://bugs.webkit.org/show_bug.cgi?id=55283

        Update WebCore to deal with the absence of the ScopeChain
        class.

        * ForwardingHeaders/runtime/ScopeChain.h: Added.
        * bindings/js/JSHTMLElementCustom.cpp:
        (WebCore::JSHTMLElement::pushEventHandlerScope):
        * bindings/js/JSJavaScriptCallFrameCustom.cpp:
        (WebCore::JSJavaScriptCallFrame::scopeChain):
        (WebCore::JSJavaScriptCallFrame::scopeType):
        * bindings/js/JSLazyEventListener.cpp:
        (WebCore::JSLazyEventListener::initializeJSFunction):
        * bindings/js/JSMainThreadExecState.h:
        (WebCore::JSMainThreadExecState::evaluate):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNode::pushEventHandlerScope):
        * bindings/js/JavaScriptCallFrame.cpp:
        (WebCore::JavaScriptCallFrame::scopeChain):
        * bindings/js/JavaScriptCallFrame.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/c/c_class.cpp:
        * bridge/c/c_runtime.cpp:
        * bridge/jni/JNIBridge.cpp:
        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::QtConnectionObject::execute):
        * plugins/PluginViewNone.cpp:

2011-02-28  Chang Shu  <cshu@webkit.org>

        Reviewed by Adele Peterson.

        REGRESSION (r79762): Items in <select multiple> have focus rings, but shouldn't
        https://bugs.webkit.org/show_bug.cgi?id=55323

        Draw focus ring on selected items only if spatial navigation is enabled.

        Test: fast/forms/select-listbox-multiple-no-focusring.html

        * rendering/RenderBlock.h:
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::addFocusRingRects):

2011-02-28  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Anders Carlsson.

        We can cancel the plugin load and fail with error before m_manualStream
        got a chance to initialize in PluginView::didReceiveResponse. This can
        happen when we run pending document onload events during plugin load that
        remove the frame from underneath. So, change the assert into a null check. 
        https://bugs.webkit.org/show_bug.cgi?id=55307

        * plugins/PluginView.cpp:
        (WebCore::PluginView::didFail):

2011-02-28  Alexis Menard  <alexis.menard@openbossa.org>

        Reviewed by Alexey Proskuryakov.

        Build fix for Intel ICC Compiler.
        https://bugs.webkit.org/show_bug.cgi?id=55221

        The virtual inheritance seems to confuse ICC.
        Anything that links with webkit has an undefined reference otherwise.

        * svg/SVGTransformable.cpp:
        (WebCore::SVGTransformable::~SVGTransformable):
        * svg/SVGTransformable.h:

2011-02-28  Sergio Villar Senin  <svillar@igalia.com>

        Reviewed by Martin Robinson.

        [Gtk] Resource size is incorrectly reported to WebCore
        https://bugs.webkit.org/show_bug.cgi?id=53228

        When calling didReceiveData we are sending an invalid value for
        lengthReceived. Sometimes we were even passing a boolean value instead of the
        expected integer. We should pass the size of the received data instead of the
        total amount of data received.

        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::gotChunkCallback):
        (WebCore::sendRequestCallback):
        (WebCore::readCallback):

2011-02-28  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Dan Bernstein.

        Cleanup the include guard form an Objective-C files
        https://bugs.webkit.org/show_bug.cgi?id=55379

        Normally Objective-C files do not need include guard.
        r76916 introduced an include guard in EmptyProtocolDefinitions.h.
        The guard is no longer needed after r76991.

        No new tests as there is no new functionality. 

        * platform/mac/EmptyProtocolDefinitions.h:

2011-02-28  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [REGRESSION] no resources in scripts panel because debugger is enabled too early.
        https://bugs.webkit.org/show_bug.cgi?id=55389

        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::populateScriptObjects):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::setFrontend):
        (WebCore::InspectorDebuggerAgent::enableDebuggerAfterShown):
        * inspector/InspectorDebuggerAgent.h:

2011-02-28  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r79877.
        http://trac.webkit.org/changeset/79877
        https://bugs.webkit.org/show_bug.cgi?id=55388

        Breaks chromium build (Requested by antonm_ on #webkit).

        * WebCore.gypi:
        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::updateContentsIfDirty):
        (WebCore::ContentLayerChromium::resizeUploadBufferForImage):
        (WebCore::ContentLayerChromium::resizeUploadBuffer):
        (WebCore::SkBitmapConditionalAutoLockerPixels::SkBitmapConditionalAutoLockerPixels):
        (WebCore::SkBitmapConditionalAutoLockerPixels::~SkBitmapConditionalAutoLockerPixels):
        (WebCore::SkBitmapConditionalAutoLockerPixels::lockPixels):
        (WebCore::ContentLayerChromium::updateTextureIfNeeded):
        (WebCore::ContentLayerChromium::draw):
        * platform/graphics/chromium/ContentLayerChromium.h:
        * platform/graphics/chromium/ImageLayerChromium.cpp:
        (WebCore::ImageLayerChromium::updateContentsIfDirty):
        * platform/graphics/chromium/ImageLayerChromium.h:
        * platform/graphics/chromium/LayerTilerChromium.cpp:
        (WebCore::LayerTilerChromium::contentRectToTileIndices):
        (WebCore::LayerTilerChromium::update):
        * platform/graphics/chromium/LayerTilerChromium.h:
        * platform/graphics/chromium/PlatformCanvas.cpp: Removed.
        * platform/graphics/chromium/PlatformCanvas.h: Removed.
        * platform/graphics/chromium/PlatformImage.cpp: Removed.
        * platform/graphics/chromium/PlatformImage.h: Removed.

2011-02-28  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: add live edit test.
        https://bugs.webkit.org/show_bug.cgi?id=55360

        Test: inspector/debugger/live-edit.html

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._doubleClick):
        (WebInspector.SourceFrame.prototype._didEditLine):

2011-02-28  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed. Follow up to r79858, removing optimistic assertion that fails on debug bot.

        * inspector/InspectorBrowserDebuggerAgent.cpp:
        (WebCore::InspectorBrowserDebuggerAgent::inspectedURLChanged):

2011-02-25  Adrienne Walker  <enne@google.com>

        Reviewed by James Robinson.

        [chromium] Abstract "pixels with a graphics context" into its own class
        https://bugs.webkit.org/show_bug.cgi?id=55259

        This creates new PlatformCanvas/PlatformImage classes which wrap
        all of the #ifdef Skia/Cg warts from the compositor.  All classes
        (LayerTilerChromium, ContentLayerChromium, and ImageLayerChromium) are
        modified to use these abstractions.

        Tests: LayoutTests/compositing

        * WebCore.gypi:
        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::updateContentsIfDirty):
        (WebCore::ContentLayerChromium::resizeUploadBuffer):
        (WebCore::ContentLayerChromium::updateTextureIfNeeded):
        (WebCore::ContentLayerChromium::updateTexture):
        (WebCore::ContentLayerChromium::draw):
        * platform/graphics/chromium/ContentLayerChromium.h:
        * platform/graphics/chromium/ImageLayerChromium.cpp:
        (WebCore::ImageLayerChromium::updateContentsIfDirty):
        (WebCore::ImageLayerChromium::updateTextureIfNeeded):
        * platform/graphics/chromium/ImageLayerChromium.h:
        * platform/graphics/chromium/LayerTilerChromium.cpp:
        (WebCore::LayerTilerChromium::contentRectToTileIndices):
        (WebCore::LayerTilerChromium::update):
        (WebCore::LayerTilerChromium::updateFromPixels):
        * platform/graphics/chromium/LayerTilerChromium.h:
        * platform/graphics/chromium/PlatformCanvas.cpp: Added.
        (WebCore::PlatformCanvas::PlatformCanvas):
        (WebCore::PlatformCanvas::~PlatformCanvas):
        (WebCore::PlatformCanvas::resize):
        (WebCore::PlatformCanvas::AutoLocker::AutoLocker):
        (WebCore::PlatformCanvas::AutoLocker::~AutoLocker):
        (WebCore::PlatformCanvas::Painter::Painter):
        (WebCore::PlatformCanvas::Painter::~Painter):
        * platform/graphics/chromium/PlatformCanvas.h: Added.
        (WebCore::PlatformCanvas::AutoLocker::pixels):
        (WebCore::PlatformCanvas::Painter::context):
        (WebCore::PlatformCanvas::size):
        * platform/graphics/chromium/PlatformImage.cpp: Copied from Source/WebCore/platform/graphics/chromium/ImageLayerChromium.cpp.
        (WebCore::PlatformImage::PlatformImage):
        (WebCore::PlatformImage::updateFromImage):
        * platform/graphics/chromium/PlatformImage.h: Added.
        (WebCore::PlatformImage::pixels):
        (WebCore::PlatformImage::size):

2011-02-28  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r79784.
        http://trac.webkit.org/changeset/79784
        https://bugs.webkit.org/show_bug.cgi?id=55386

        This change causes lots of assertion failures in Debug builds
        (Requested by aroben on #webkit).

        * css/CSSStyleSelector.cpp:
        (WebCore::convertToLength):
        (WebCore::CSSStyleSelector::applyProperty):
        (WebCore::CSSStyleSelector::createTransformOperations):
        * platform/Length.h:
        (WebCore::Length::Length):
        (WebCore::Length::operator==):
        (WebCore::Length::operator!=):
        (WebCore::Length::rawValue):
        (WebCore::Length::type):
        (WebCore::Length::quirk):
        (WebCore::Length::setValue):
        (WebCore::Length::setRawValue):
        (WebCore::Length::calcFloatValue):
        (WebCore::Length::isZero):
        (WebCore::Length::blend):
        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::recalcColumn):
        (WebCore::AutoTableLayout::calcEffectiveLogicalWidth):
        * rendering/FixedTableLayout.cpp:
        (WebCore::FixedTableLayout::calcWidthArray):

2011-02-28  Andreas Kling  <kling@webkit.org>

        Reviewed by Darin Adler.

        Use Frame::ownerElement() directly where appropriate.
        https://bugs.webkit.org/show_bug.cgi?id=55385

        Don't take the roundabout way through frame->document->ownerElement
        which just checks that the document->frame is non-null.

        No new test, refactoring only.

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::selectFrameElementInParentIfFullySelected):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadWithDocumentLoader):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::dispatchLoadEvent):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::scrollRecursively):
        (WebCore::EventHandler::logicalScrollRecursively):
        * page/FrameView.cpp:
        (WebCore::FrameView::init):
        (WebCore::FrameView::layout):
        (WebCore::FrameView::repaintContentRectangle):
        (WebCore::FrameView::windowClipRect):
        (WebCore::FrameView::paintContents):

2011-02-28  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [REGRESSION] source frame is recreated for each inlined script in document.
        https://bugs.webkit.org/show_bug.cgi?id=55377

        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._resourceLoadingFinished):
        (WebInspector.ScriptsPanel.prototype._sourceFrameForSourceName):
        (WebInspector.ScriptsPanel.prototype._createSourceFrame):
        (WebInspector.ScriptsPanel.prototype._recreateSourceFrame):

2011-02-28  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed build fix for !ENABLE(SVG_ANIMATION) after r79569.

        * svg/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::removeAllAnimationElementsFromTarget):

2011-02-28  Renata Hodovan  <reni@webkit.org>

        Reviewed by Andreas Kling.

        Optimize parameter transmissions in FEConvolveMatrix.
        https://bugs.webkit.org/show_bug.cgi?id=55381

        Parameter transmission via reference is more efficient than with copy. So they are substituted.

        No new tests are needed since this is a refactoring.

        * platform/graphics/filters/FEConvolveMatrix.cpp:
        (WebCore::FEConvolveMatrix::setKernelSize):
        (WebCore::FEConvolveMatrix::setTargetOffset):
        (WebCore::FEConvolveMatrix::setKernelUnitLength):
        * platform/graphics/filters/FEConvolveMatrix.h:

2011-02-28  Yury Semikhatsky  <yurys@chromium.org>

        Unreviewed. Fix Chromium tests failures due to r79858.

        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::inspectedPageDestroyed):

2011-02-28  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Pavel Feldman.

        XML without style should render as syntax-highlighted source.
        https://bugs.webkit.org/show_bug.cgi?id=13807

        XML tree view mode implemented. If XML does not have any style
        information, it is rendered as highlighted source with collapsable
        elements.

        Tests: fast/css/dumpAsText/xml-stylesheet-pi-not-in-prolog.xml
               fast/encoding/dumpAsText/utf-16-no-bom.xml
               http/tests/xmlviewer/dumpAsText/css-stylesheet.xml
               http/tests/xmlviewer/dumpAsText/frames.html
               http/tests/xmlviewer/dumpAsText/mathml.xml
               http/tests/xmlviewer/dumpAsText/svg.xml
               http/tests/xmlviewer/dumpAsText/wml.xml
               http/tests/xmlviewer/dumpAsText/xhtml-tag.xml
               http/tests/xmlviewer/dumpAsText/xlink.xml
               http/tests/xmlviewer/dumpAsText/xmlviewer-charset-cp1251.xml
               http/tests/xmlviewer/dumpAsText/xmlviewer-charset-utf8.xml
               http/tests/xmlviewer/dumpAsText/xmlviewer.xml
               http/tests/xmlviewer/dumpAsText/xsl-stylesheet.xml
               http/tests/xmlviewer/dumpAsText/xul.xml
               svg/hixie/error/dumpAsText/004.xml
               svg/hixie/error/dumpAsText/005.xml

        * CMakeLists.txt:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::matchUARules):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::createElement):
        * dom/Document.h:
        (WebCore::Document::usesViewSourceStyles):
        (WebCore::Document::setUsesViewSourceStyles):
        (WebCore::Document::sawElementsInKnownNamespaces):
        * dom/XMLDocumentParser.h:
        * dom/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::XMLDocumentParser):
        (WebCore::XMLDocumentParser::processingInstruction):
        (WebCore::XMLDocumentParser::initializeParserContext):
        (WebCore::XMLDocumentParser::doEnd):
        * dom/XMLDocumentParserQt.cpp:
        (WebCore::XMLDocumentParser::XMLDocumentParser):
        (WebCore::XMLDocumentParser::initializeParserContext):
        (WebCore::XMLDocumentParser::parseProcessingInstruction):
        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::HTMLViewSourceDocument):
        * xml/XMLTreeViewer.cpp: Added.
        (WebCore::XMLTreeViewer::XMLTreeViewer):
        (WebCore::XMLTreeViewer::hasNoStyleInformation):
        (WebCore::XMLTreeViewer::transformDocumentToTreeView):
        * xml/XMLTreeViewer.h: Added.
        (WebCore::XMLTreeViewer::~XMLTreeViewer):
        * xml/XMLViewer.xsl: Added.
        * xml/XSLStyleSheet.h:
        (WebCore::XSLStyleSheet::createForXMLTreeViewer):

2011-02-28  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: debugger agents should have same livetime as InspectorAgent
        https://bugs.webkit.org/show_bug.cgi?id=55369

        DOM and JS debugger agents are now created in InspectorAgent's constructor and owned
        by the agent. Debugger state is cleared on frontend disconnect.

        * inspector/Inspector.idl:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        (WebCore::InspectorAgent::restoreInspectorStateFromCookie):
        (WebCore::InspectorAgent::setFrontend):
        (WebCore::InspectorAgent::disconnectFrontend):
        (WebCore::InspectorAgent::populateScriptObjects):
        (WebCore::InspectorAgent::didCommitLoad):
        (WebCore::InspectorAgent::showScriptsPanel):
        * inspector/InspectorAgent.h:
        * inspector/InspectorBrowserDebuggerAgent.cpp:
        (WebCore::InspectorBrowserDebuggerAgent::create):
        (WebCore::InspectorBrowserDebuggerAgent::InspectorBrowserDebuggerAgent):
        (WebCore::InspectorBrowserDebuggerAgent::~InspectorBrowserDebuggerAgent):
        (WebCore::InspectorBrowserDebuggerAgent::debuggerWasEnabled):
        (WebCore::InspectorBrowserDebuggerAgent::debuggerWasDisabled):
        (WebCore::InspectorBrowserDebuggerAgent::disable):
        (WebCore::InspectorBrowserDebuggerAgent::setFrontend):
        (WebCore::InspectorBrowserDebuggerAgent::clearFrontend):
        (WebCore::InspectorBrowserDebuggerAgent::setAllBrowserBreakpoints):
        (WebCore::InspectorBrowserDebuggerAgent::inspectedURLChanged):
        (WebCore::InspectorBrowserDebuggerAgent::setDOMBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::removeDOMBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::willInsertDOMNode):
        (WebCore::InspectorBrowserDebuggerAgent::willRemoveDOMNode):
        (WebCore::InspectorBrowserDebuggerAgent::willModifyDOMAttr):
        (WebCore::InspectorBrowserDebuggerAgent::descriptionForDOMEvent):
        (WebCore::InspectorBrowserDebuggerAgent::pauseOnNativeEventIfNeeded):
        (WebCore::InspectorBrowserDebuggerAgent::willSendXMLHttpRequest):
        (WebCore::InspectorBrowserDebuggerAgent::clear):
        * inspector/InspectorBrowserDebuggerAgent.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::debuggerEnabled):
        (WebCore::InspectorController::showAndEnableDebugger):
        (WebCore::InspectorController::disableDebugger):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::create):
        (WebCore::InspectorDebuggerAgent::InspectorDebuggerAgent):
        (WebCore::InspectorDebuggerAgent::~InspectorDebuggerAgent):
        (WebCore::InspectorDebuggerAgent::startUserInitiatedDebugging):
        (WebCore::InspectorDebuggerAgent::enable):
        (WebCore::InspectorDebuggerAgent::disable):
        (WebCore::InspectorDebuggerAgent::enabled):
        (WebCore::InspectorDebuggerAgent::restore):
        (WebCore::InspectorDebuggerAgent::setFrontend):
        (WebCore::InspectorDebuggerAgent::clearFrontend):
        (WebCore::InspectorDebuggerAgent::setJavaScriptBreakpoint):
        (WebCore::InspectorDebuggerAgent::removeJavaScriptBreakpoint):
        (WebCore::InspectorDebuggerAgent::evaluateOnCallFrame):
        (WebCore::InspectorDebuggerAgent::getCompletionsOnCallFrame):
        (WebCore::InspectorDebuggerAgent::currentCallFrames):
        (WebCore::InspectorDebuggerAgent::didParseSource):
        (WebCore::InspectorDebuggerAgent::clear):
        * inspector/InspectorDebuggerAgent.h:
        (WebCore::InspectorDebuggerAgent::enable):
        (WebCore::InspectorDebuggerAgent::disable):
        (WebCore::InspectorDebuggerAgent::Listener::~Listener):
        (WebCore::InspectorDebuggerAgent::setListener):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::willInsertDOMNodeImpl):
        (WebCore::InspectorInstrumentation::didInsertDOMNodeImpl):
        (WebCore::InspectorInstrumentation::willRemoveDOMNodeImpl):
        (WebCore::InspectorInstrumentation::didRemoveDOMNodeImpl):
        (WebCore::InspectorInstrumentation::willModifyDOMAttrImpl):
        (WebCore::InspectorInstrumentation::willSendXMLHttpRequestImpl):
        (WebCore::InspectorInstrumentation::pauseOnNativeEventIfNeeded):
        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel.prototype.enableDebugger):
        (WebInspector.DebuggerModel.prototype.disableDebugger):

2011-02-28  Renata Hodovan  <reni@webkit.org>

        Reviewed by Andreas Kling.

        FECompositeElement changes doesn't require relayout.
        https://bugs.webkit.org/show_bug.cgi?id=55367

        When the FECompositeElement receives an update message but the given value remains the same we don't need
        to relayout the filter.

        No new tests are needed because this modification is covered by the dynamic update tests of FEComposite.

        * platform/graphics/filters/FEComposite.cpp:
        (WebCore::FEComposite::setOperation):
        (WebCore::FEComposite::setK1):
        (WebCore::FEComposite::setK2):
        (WebCore::FEComposite::setK3):
        (WebCore::FEComposite::setK4):
        * platform/graphics/filters/FEComposite.h:
        * svg/SVGFECompositeElement.cpp:
        (WebCore::SVGFECompositeElement::setFilterEffectAttribute):
        (WebCore::SVGFECompositeElement::svgAttributeChanged):
        * svg/SVGFECompositeElement.h:

2011-02-28  Andreas Kling  <kling@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        FrameLoader: Reorder early-returns in checkCompleted()
        https://bugs.webkit.org/show_bug.cgi?id=55366

        Check allChildrenAreComplete() last, since it's the most expensive.

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

2011-02-28  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Kent Tamura.

        Range::processContents needs cleanup
        https://bugs.webkit.org/show_bug.cgi?id=51006

        Refactored Range::processContents.  Extracted childOfCommonRootBeforeOffset from processContents
        which is used to find processStart and processEnd respectively.  In the case of processStart,
        we use the next sibling of the node returned by childOfCommonRootBeforeOffset when m_start is not
        the common root because copying m_start's ancestors will result in processing too much contents.

        Also extracted processNodes and deleteCharacterData from processContents and processContentsBetweenOffsets.

        In addition, lengthOfContentsInNode was modified to return the correct length instead of
        numeric_limits<unsigned>::max() because the convention that processContentsBetweenOffsets automatically
        corrects the length when endOffset is numeric_limits<unsigned>::max() seemed more confusing than
        having two switch statements that need to be consistent.

        Historically, lengthOfContentsInNode was introduced in r78413 as a build fix because unsigned const
        LengthOfContentsInNode added in r78409 violated WebKit C++ rules and caused build failures on Mac and
        other ports.

        * dom/Range.cpp:
        (WebCore::childOfCommonRootBeforeOffset): Extracted from processContents.
        (WebCore::lengthOfContentsInNode): Added.
        (WebCore::Range::processContents): Calls childOfCommonRootBeforeOffset, lengthOfContentsInNode,
        and processNodes.
        (WebCore::deleteCharacterData): Added.
        (WebCore::Range::processContentsBetweenOffsets): Calls deleteCharacterData and processNodes.
        (WebCore::Range::processNodes): Extracted from processContents and processContentsBetweenOffsets.
        (WebCore::Range::processAncestorsAndTheirSiblings):
        * dom/Range.h:

2011-02-28  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed. Test harness change follow up.
        Consider missing localized string a warning, not an error in the front-end.

        * inspector/front-end/inspector.js:
        (WebInspector.UIString):

2011-02-28  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        getJNIEnv() passes wrong type to AttachCurrentThread() for JNIEnv argument on Android
        https://bugs.webkit.org/show_bug.cgi?id=55218

        AttachCurrentThread() in Android's JVM takes a JINEnv**
        argument.

        No new tests, build fix only.

        * bridge/jni/JNIUtility.cpp:
        (JSC::Bindings::getJNIEnv):

2011-02-28  Renata Hodovan  <reni@webkit.org>

        Reviewed by Andreas Kling.

        FETurbulenceElement changes doesn't require relayout
        https://bugs.webkit.org/show_bug.cgi?id=55141

        When the FETurbulenceElement receives an update message but the given value remains the same we don't need
        to relayout the filter.
        Besides fix a typo in FETurbulence and change the paramterer type of FETurbulence::setNumOctaves from bool
        to int according to the spec.

        No new tests are needed because this modification is covered by the dynamic update tests of FETurbulence.

        * platform/graphics/filters/FETurbulence.cpp:
        (WebCore::FETurbulence::FETurbulence):
        (WebCore::FETurbulence::create):
        (WebCore::FETurbulence::type):
        (WebCore::FETurbulence::setType):
        (WebCore::FETurbulence::setBaseFrequencyY):
        (WebCore::FETurbulence::setBaseFrequencyX):
        (WebCore::FETurbulence::setSeed):
        (WebCore::FETurbulence::setNumOctaves):
        (WebCore::FETurbulence::setStitchTiles):
        (WebCore::operator<<):
        * platform/graphics/filters/FETurbulence.h:
        * svg/SVGFETurbulenceElement.cpp:
        (WebCore::SVGFETurbulenceElement::setFilterEffectAttribute):
        (WebCore::SVGFETurbulenceElement::svgAttributeChanged):
        (WebCore::SVGFETurbulenceElement::build):
        * svg/SVGFETurbulenceElement.h:

2011-02-28  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        WebInspector: InspectorAgent calls offsetWidth in the middle of painting
        https://bugs.webkit.org/show_bug.cgi?id=54597

        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::drawElementTitle):

2011-02-28  Roland Steiner  <rolandsteiner@chromium.org>

        Reviewed by Kent Tamura.

        Bug 55355 - TextIterator should not be a friend of RenderTextControl
        https://bugs.webkit.org/show_bug.cgi?id=55355

        Remove need for 'friend' clause by making innerTextElement() public.

        No new tests. (simple refactoring)

        * rendering/RenderTextControl.h:

2011-02-27  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Darin Adler.

        Remove registerBaseEncodingNames and registerBaseCodecs from TextCodecWinCE
        https://bugs.webkit.org/show_bug.cgi?id=55317

        This functions are obsolete, since r78499 added TextCodecUTF8.
        Also remove the "fast path" for UTF-8 data, because we now have a separate TextCodec.

        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::buildBaseTextCodecMaps):
        * platform/text/wince/TextCodecWinCE.cpp:
        * platform/text/wince/TextCodecWinCE.h:

2011-02-27  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Sam Weinig.

        Use OwnPtr to handle the memory of RenderBlock::m_floatingObjects and RenderBlock::m_positionedObjects
        https://bugs.webkit.org/show_bug.cgi?id=55327

        Refactor RenderBlock to use OwnPtr for m_floatingObjects and m_positionedObjects so we do not have
        to release the memory manually.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::~RenderBlock):
        (WebCore::RenderBlock::selectionGaps):
        (WebCore::RenderBlock::insertPositionedObject):
        (WebCore::RenderBlock::insertFloatingObject):
        (WebCore::RenderBlock::addOverhangingFloats):
        (WebCore::RenderBlock::addIntrudingFloats):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::positionedObjects):

2011-02-27  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Andreas Kling.

        Eliminate DeprecatedPtrList
        https://bugs.webkit.org/show_bug.cgi?id=17425

        Remove the implementation of DeprecatedPtrList and all its references
        from the build systems.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.order:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/DeprecatedPtrList.h: Removed.
        * platform/DeprecatedPtrListImpl.cpp: Removed.
        * platform/DeprecatedPtrListImpl.h: Removed.

2011-02-27  Andreas Kling  <kling@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Use WTF ref counting for FontPlatformDataPrivate
        https://bugs.webkit.org/show_bug.cgi?id=55303

        Make FontPlatformDataPrivate a RefCounted<FPDP>.
        Incidentally fixes an uninitialized member bug in FontPlatformData().

        * platform/graphics/qt/FontPlatformData.h:
        (WebCore::FontPlatformDataPrivate::FontPlatformDataPrivate):
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::isHashTableDeletedValue):
        (WebCore::FontPlatformData::font):
        (WebCore::FontPlatformData::size):
        (WebCore::FontPlatformData::family):
        (WebCore::FontPlatformData::bold):
        (WebCore::FontPlatformData::italic):
        (WebCore::FontPlatformData::smallCaps):
        (WebCore::FontPlatformData::pixelSize):
        * platform/graphics/qt/FontPlatformDataQt.cpp:
        (WebCore::toQFontWeight):
        (WebCore::FontPlatformData::operator==):
        (WebCore::FontPlatformData::hash):

2011-02-27  Benjamin Poulain  <ikipou@gmail.com>

        Reviewed by Darin Adler.

        Eliminate DeprecatedPtrList from RenderBlock
        https://bugs.webkit.org/show_bug.cgi?id=54972

        Refactor RenderBlock to get rid of the DeprecatedPtrList.
        The floating objects are stored in a ListHashSet.

        Refactoring covered by existing test.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::~RenderBlock):
        (WebCore::RenderBlock::addOverflowFromFloats):
        (WebCore::RenderBlock::repaintOverhangingFloats):
        (WebCore::RenderBlock::paintFloats):
        (WebCore::RenderBlock::selectionGaps):
        (WebCore::RenderBlock::insertFloatingObject):
        (WebCore::RenderBlock::removeFloatingObject):
        (WebCore::RenderBlock::removeFloatingObjectsBelow):
        (WebCore::RenderBlock::positionNewFloats):
        (WebCore::RenderBlock::positionNewFloatOnLine):
        (WebCore::RenderBlock::logicalLeftOffsetForLine):
        (WebCore::RenderBlock::logicalRightOffsetForLine):
        (WebCore::RenderBlock::nextFloatLogicalBottomBelow):
        (WebCore::RenderBlock::lowestFloatLogicalBottom):
        (WebCore::RenderBlock::clearFloats):
        (WebCore::RenderBlock::addOverhangingFloats):
        (WebCore::RenderBlock::addIntrudingFloats):
        (WebCore::RenderBlock::containsFloat):
        (WebCore::RenderBlock::hitTestFloats):
        (WebCore::RenderBlock::adjustForBorderFit):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::FloatingObjectHashFunctions::hash):
        (WebCore::RenderBlock::FloatingObjectHashFunctions::equal):
        (WebCore::RenderBlock::FloatingObjectHashTranslator::hash):
        (WebCore::RenderBlock::FloatingObjectHashTranslator::equal):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::layoutInlineChildren):
        (WebCore::RenderBlock::matchedEndLine):

2011-02-26  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        <input value="type=submit"> throws a warning (“HTML parse error”)
        https://bugs.webkit.org/show_bug.cgi?id=55120

        This patch removes parse error messages from the HTML parser.  These
        messages are displayed at the wrong times, aren't tested, and aren't
        helpful.  We'll try again with some more informative messages and
        better testing.

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::parseError):

2011-02-26  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Alexey Proskuryakov.

        Remove registerBaseEncodingNames and registerBaseCodecs from TextCodecBrew
        https://bugs.webkit.org/show_bug.cgi?id=55309

        This functions are obsolete, since r78499 added TextCodecUTF8.

        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::buildBaseTextCodecMaps):
        * platform/text/brew/TextCodecBrew.cpp:
        * platform/text/brew/TextCodecBrew.h:

2011-02-26  Justin Schuh  <jschuh@chromium.org>

        Reviewed by Darin Adler.

        Delay firing of mutation events while setting attribute values
        https://bugs.webkit.org/show_bug.cgi?id=55199

        Test: fast/dom/attribute-change-on-mutate.html

        * dom/Attr.cpp:
        (WebCore::Attr::setValue):

2011-02-26  Yi Shen  <yi.4.shen@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Notify HTMLMediaElement when MediaPlayerPrivateQt's playback state gets changed
        https://bugs.webkit.org/show_bug.cgi?id=55252

        Need to invoke a callback function to notify the HTMLMediaElement
        when MediaPlayerPrivateQt's playback state gets changed.

        * platform/graphics/qt/MediaPlayerPrivateQt.cpp:
        (WebCore::MediaPlayerPrivateQt::MediaPlayerPrivateQt): Set a flag to ignore the playback state change for pre-roll
        (WebCore::MediaPlayerPrivateQt::commitLoad): Call playbackStateChanged() to notify HTMLMediaElement
        (WebCore::MediaPlayerPrivateQt::stateChanged):
        * platform/graphics/qt/MediaPlayerPrivateQt.h:

2011-02-25  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Adam Barth.

        When plugin document parser finishes parsing, it runs the raw
        document's parser finish functions which call the pending document
        onload events that removes the frame from underneath. So, we protect
        frame (and hence frameloader) in DocumentLoader::commitLoad.
        https://bugs.webkit.org/show_bug.cgi?id=55289

        Test: fast/frames/iframe-plugin-load-remove-document-crash.html

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::commitLoad):

2011-02-26  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: rolling out 79799 and 79804 for breaking xml tests on mac.

2011-02-26  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: follow up to r79799. Fixing WinCE+Efl, mute new tests on Qt.
        https://bugs.webkit.org/show_bug.cgi?id=55302

        * CMakeLists.txt:

2011-02-25  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Pavel Feldman.

        XML without style should render as syntax-highlighted source.
        https://bugs.webkit.org/show_bug.cgi?id=13807

        XML tree view mode implemented. If XML does not have any style
        information, it is rendered as highlighted source with collapsable
        elements.

        Tests: http/tests/xmlviewer/dumpAsText/css-stylesheet.xml
               http/tests/xmlviewer/dumpAsText/frames.html
               http/tests/xmlviewer/dumpAsText/mathml.xml
               http/tests/xmlviewer/dumpAsText/svg.xml
               http/tests/xmlviewer/dumpAsText/wml.xml
               http/tests/xmlviewer/dumpAsText/xhtml-tag.xml
               http/tests/xmlviewer/dumpAsText/xlink.xml
               http/tests/xmlviewer/dumpAsText/xmlviewer-charset-cp1251.xml
               http/tests/xmlviewer/dumpAsText/xmlviewer-charset-utf8.xml
               http/tests/xmlviewer/dumpAsText/xmlviewer.xml
               http/tests/xmlviewer/dumpAsText/xsl-stylesheet.xml
               http/tests/xmlviewer/dumpAsText/xul.xml

        * CMakeLists.txt:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::matchUARules):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::createElement):
        * dom/Document.h:
        (WebCore::Document::usesViewSourceStyles):
        (WebCore::Document::setUsesViewSourceStyles):
        (WebCore::Document::sawElementsInKnownNamespaces):
        * dom/XMLDocumentParser.h:
        * dom/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::XMLDocumentParser):
        (WebCore::XMLDocumentParser::processingInstruction):
        (WebCore::XMLDocumentParser::initializeParserContext):
        (WebCore::XMLDocumentParser::doEnd):
        * dom/XMLDocumentParserQt.cpp:
        (WebCore::XMLDocumentParser::XMLDocumentParser):
        (WebCore::XMLDocumentParser::initializeParserContext):
        (WebCore::XMLDocumentParser::parseProcessingInstruction):
        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::HTMLViewSourceDocument):
        * xml/XMLTreeViewer.cpp: Added.
        (WebCore::XMLTreeViewer::XMLTreeViewer):
        (WebCore::XMLTreeViewer::hasNoStyleInformation):
        (WebCore::XMLTreeViewer::transformDocumentToTreeView):
        * xml/XMLTreeViewer.h: Added.
        (WebCore::XMLTreeViewer::~XMLTreeViewer):
        * xml/XMLViewer.xsl: Added.
        * xml/XSLStyleSheet.h:
        (WebCore::XSLStyleSheet::createFromString):

2011-02-26  Andreas Kling  <kling@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Enable usage of synchronous HTTP feature in Qt
        https://bugs.webkit.org/show_bug.cgi?id=37191

        Currently, we spin an event loop when doing synchronous calls to
        wait for completion. This patch uses synchronous requests in Qt,
        if available, and spins the event loop as a fallback solution.

        Based on work by Simon Hausmann and Peter Hartmann.

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::QNetworkReplyHandler):
        (WebCore::QNetworkReplyHandler::start):
        * platform/network/qt/QNetworkReplyHandler.h:
        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::WebCoreSynchronousLoader::setReplyFinished):
        (WebCore::WebCoreSynchronousLoader::WebCoreSynchronousLoader):
        (WebCore::WebCoreSynchronousLoader::didFinishLoading):
        (WebCore::WebCoreSynchronousLoader::didFail):
        (WebCore::ResourceHandle::loadResourceSynchronously):

2011-02-26  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Kent Tamura.

        REGRESSION(r79398): Webkit crash on dojo theme tester page
        https://bugs.webkit.org/show_bug.cgi?id=55290

        The bug was caused by selectionStartCSSPropertyValue's not considering the possibility
        of selectionStartStyle() returning a null pointer. Fixed it by adding a null check.

        Test: editing/execCommand/value-without-selection-crash.html

        * editing/Editor.cpp:
        (WebCore::Editor::selectionStartCSSPropertyValue):

2011-02-26  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Pavel Feldman.

        DumpRenderTree should reset frame opener between tests.
        https://bugs.webkit.org/show_bug.cgi?id=54874

        No new tests. (no code affected, just exporting a method for DumpRenderTree use)

        * WebCore.exp.in:

2011-02-26  Jia Pu  <jpu@apple.com>

        Reviewed by Dan Bernstein.

        On Mac, need to remove misspell underline in Editor::learnSpelling().
        https://bugs.webkit.org/show_bug.cgi?id=55251

        This change makes sure that the misspelling markers are removed after the word is learned.

        * editing/Editor.cpp:
        (WebCore::Editor::learnSpelling):

2011-02-26  Rik Cabanier  <cabanier@adobe.com>

        Reviewed by David Hyatt.

        Fix that allows fixed length values to be floating point
        https://bugs.webkit.org/show_bug.cgi?id=52699

        Transitions now return matrices in floating point. 2 of the transition tests were failing
        because they expected integer values.

        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSStyleSelector.cpp:
        (WebCore::convertToLength):
        (WebCore::convertToIntLength):
        (WebCore::convertToFloatLength):
        (WebCore::CSSStyleSelector::applyProperty):
        (WebCore::CSSStyleSelector::createTransformOperations):
        * platform/Length.h:
        (WebCore::Length::Length):
        (WebCore::Length::operator==):
        (WebCore::Length::operator!=):
        (WebCore::Length::rawValue):
        (WebCore::Length::type):
        (WebCore::Length::quirk):
        (WebCore::Length::setValue):
        (WebCore::Length::calcFloatValue):
        (WebCore::Length::isZero):
        (WebCore::Length::blend):
        (WebCore::Length::getIntValue):
        (WebCore::Length::getFloatValue):
        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::recalcColumn):
        (WebCore::AutoTableLayout::calcEffectiveLogicalWidth):
        * rendering/FixedTableLayout.cpp:
        (WebCore::FixedTableLayout::calcWidthArray):

2011-02-26  Eric Seidel  <eric@webkit.org>

        Reviewed by Maciej Stachowiak.

        malloc in removeChildren shows up on profile of peacekeeper domDynamicCreationCreateElement
        https://bugs.webkit.org/show_bug.cgi?id=55204

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::removeChildren):
         - Using an inlineCapacity of 10 for now. We may want to tweak it later.
         - This removes yet another malloc from code which removes nodes (which is rather common).

2011-02-26  Eric Seidel  <eric@webkit.org>

        Reviewed by Maciej Stachowiak.

        HashSet<T>::end() creation is expensive and should be avoided
        https://bugs.webkit.org/show_bug.cgi?id=55205

        In the common case, m_ranges is an empty set.  When that's
        the case, we spend all our time in skipEmptyBuckets, walking
        the hash storage skipping over empty buckets.
        
        This looks to be at least a 5% speedup on (my local version of) peacekeeper's domDynamicCreationCreateElement.

        Before:
        avg 383.6666666666667
        median 386
        stdev 7.152311203768722
        min 360
        max 391

        After:
        avg 366.3333333333333
        median 366
        stdev 2.712112747574399
        min 362
        max 377

        * dom/Document.cpp:
        (WebCore::Document::nodeChildrenChanged):
        (WebCore::Document::nodeChildrenWillBeRemoved):
        (WebCore::Document::nodeWillBeRemoved):
        (WebCore::Document::textInserted):
        (WebCore::Document::textRemoved):
        (WebCore::Document::textNodesMerged):
        (WebCore::Document::textNodeSplit):

2011-02-26  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r79764.
        http://trac.webkit.org/changeset/79764
        https://bugs.webkit.org/show_bug.cgi?id=55295

        "broke Chromium builds" (Requested by rniwa on #webkit).

        * WebCore.exp.in:

2011-02-26  Adam Klein  <adamk@chromium.org>

        Reviewed by Adam Barth.

        [fileapi] Implement EntrySync.toURI by moving Entry::toURI to EntryBase
        https://bugs.webkit.org/show_bug.cgi?id=54585

        In order to move toURI to EntryBase, it needed access to
        SecurityOrigin. Most of the changes below were to pass a
        ScriptExecutionContext to DOMFileSystemBase to enable this.

        Test: fast/filesystem/workers/file-entry-to-uri-sync.html

        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * fileapi/DOMFileSystem.cpp:
        (WebCore::DOMFileSystem::DOMFileSystem):
        * fileapi/DOMFileSystemBase.cpp:
        (WebCore::DOMFileSystemBase::DOMFileSystemBase):
        (WebCore::DOMFileSystemBase::securityOrigin):
        * fileapi/DOMFileSystemBase.h:
        (WebCore::DOMFileSystemBase::create):
        * fileapi/DOMFileSystemSync.cpp:
        (WebCore::DOMFileSystemSync::create):
        (WebCore::DOMFileSystemSync::DOMFileSystemSync):
        * fileapi/DOMFileSystemSync.h:
        (WebCore::DOMFileSystemSync::create):
        * fileapi/Entry.cpp:
        * fileapi/Entry.h:
        * fileapi/EntryBase.cpp: Added.
        (WebCore::EntryBase::EntryBase):
        (WebCore::EntryBase::~EntryBase):
        (WebCore::EntryBase::toURI):
        * fileapi/EntryBase.h:
        * fileapi/EntrySync.idl:

2011-02-26  Alice Boxhall  <aboxhall@chromium.org>

        Reviewed by Ojan Vafai.

        typing enter in the input element should not fire textInput
        https://bugs.webkit.org/show_bug.cgi?id=54152

        Stop textInput event propagation in HTMLInputElement::preDispatchEventHandler if the event target should submit implicitly.

        Test: fast/forms/textinput-not-fired-on-enter-in-input.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::preDispatchEventHandler): Check m_inputType->shouldSubmitImplicitly for textInputEvents and stop propagation if true.

2011-02-26  James Simonsen  <simonjam@chromium.org>

        Reviewed by Tony Gentilcore.

        [Web Timing] loadEvent timing should refer to first load event if there are many
        https://bugs.webkit.org/show_bug.cgi?id=55201

        Test: fast/dom/webtiming-document-open.html

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::dispatchLoadEvent):

2011-02-26  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Adam Barth.

        Fix isLayoutTimerActive for ports that set a minimumLayoutDelay
        https://bugs.webkit.org/show_bug.cgi?id=54810

        No new tests because no new functionality.

        * dom/Document.cpp:
        (WebCore::Document::isLayoutTimerActive): Moved from HTMLParserScheduler per FIXME. Compare
        minimumLayoutDelay() to m_extraLayoutDelay instead of 0. This spirit of this comparison was
        broken by r52919. The effect would be that ports that set an extra layout delay can't yield
        between tokens. Note: can't be const because minimumLayoutDelay sets a member.
        * dom/Document.h:
        * html/parser/HTMLParserScheduler.cpp:
        (WebCore::HTMLParserScheduler::continueNextChunkTimerFired):
        (WebCore::HTMLParserScheduler::checkForYieldBeforeScript):

2011-02-26  David Dorwin  <ddorwin@chromium.org>

        Reviewed by Darin Fisher.

        Enable WebKit Full Screen API in Chromium. The element becomes the full size of the window, but the window is not yet full screen. Support is disabled by default.

        fullscreen javascript bindings not implemented for v8
        https://bugs.webkit.org/show_bug.cgi?id=44797

        Tested by the existing fullscreen Layout Tests.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:

2011-02-26  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Adam Barth.

        Prevent parser yields from triggering early dumpAsText()
        https://bugs.webkit.org/show_bug.cgi?id=55187

        DRT's dumpAsText() takes a snapshot when DocumentLoader::isLoadingInAPISense()
        indicates the page is done. isLoadingInAPISense depends on
        HTMLDocumentParser::isProcessingData(), which just checks if the parser is in an
        insert() or append().

        This means that if the parser is pumping in a resumeParsingAfterScriptExecution() or
        resumeParsingAfterYield(), isLoadingInAPISense() may not be blocked. This patch
        fixes that by repurposing m_writeNestingLevel as m_pumpSessionNestingLevel and
        incrementing it in pumpTokenizer().

        When I locally cause the parser to yield after every token, a lot of tests fail
        because DRT snapshots too early. This patch fixes those tests, however I'm having
        trouble writing a test case that reliably reproduces the problem without this patch
        and passes with it (without changing yield constants). This is because it requires
        4,096 tokens in a single pump session to yield and (len('<b>' * 4096 = 12k, which
        doesn't always happen).

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::HTMLDocumentParser):
        (WebCore::HTMLDocumentParser::~HTMLDocumentParser):
        (WebCore::HTMLDocumentParser::processingData):
        (WebCore::HTMLDocumentParser::pumpTokenizer):
        (WebCore::HTMLDocumentParser::insert):
        (WebCore::HTMLDocumentParser::append):
        * html/parser/HTMLDocumentParser.h:
        (WebCore::HTMLDocumentParser::inPumpSession):
        (WebCore::HTMLDocumentParser::shouldDelayEnd):
        * html/parser/HTMLParserScheduler.h:
        (WebCore::PumpSession::PumpSession):
        * html/parser/NestingLevelIncrementer.h:

2011-02-26  Yongjun Zhang  <yongjun_zhang@apple.com>

        Reviewed by David Kilzer.

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

        Add a resource load delegate method to query if WebCore should paint the default broken image for failed images.

        Add a new resource load client method (shouldPaintBrokenImage).  WebKit client can decide if WebCore
        should paint the default broken image when an image fails to load or decode.  The method also passes the
        URL of the failed image.

        Test: fast/images/support-broken-image-delegate.html

        * loader/FrameLoaderClient.h:
        (WebCore::FrameLoaderClient::shouldPaintBrokenImage):
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::CachedImage):
        (WebCore::CachedImage::image):
        (WebCore::CachedImage::checkShouldPaintBrokenImage):
        (WebCore::CachedImage::error):
        * loader/cache/CachedImage.h:

2011-02-26  Chris Evans  <cevans@chromium.org>

        Reviewed by Adam Barth.

        Database: Data race: should only touch the transaction queue inside the
        lock.
        https://bugs.webkit.org/show_bug.cgi?id=55031

        * storage/Database.cpp:
        (WebCore::Database::changeVersion): only touch queue inside lock.
        (WebCore::Database::runTransaction): only touch queue inside lock.

2011-02-26  Yi Shen  <yi.4.shen@nokia.com>

        Reviewed by Eric Carlson.

        Missing volumechangeEvent in case of mediaPlayerVolumeChanged gets callback
        https://bugs.webkit.org/show_bug.cgi?id=55147

        When HTMLMediaElement::mediaPlayerVolumeChanged() gets callback, 
        a volumechangeEvent event should be fired if the volume gets changed.

        Test: media/event-attributes.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setMuted): Remove updateVolume() since it does nothing when m_player is 0.
        (WebCore::HTMLMediaElement::mediaPlayerVolumeChanged): Fire a volumechangeEvent when the volume is changed.

2011-02-26  Eric Seidel  <eric@webkit.org>

        Reviewed by Maciej Stachowiak.

        disableRangeMutation quirk for mail slows down peacekeeper domDynamicCreationCreateElement
        https://bugs.webkit.org/show_bug.cgi?id=55127

        Before:
        avg 513.4
        median 515
        stdev 7.234638899074368
        min 490
        max 528

        After:
        avg 508.15
        median 510
        stdev 6.966168243733426
        min 485
        max 515

        Yes, the stdev is a bit high to actually support my conclusions.  But looking
        at the profile, this change makes a lot of sense.  I'll up the iterations
        for future testing.

        * dom/Document.cpp:
        (WebCore::disableRangeMutation):
         - This check should only be compiled in if we're planning to run on Tiger or Leopard.

2011-02-26  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Pavel Feldman.

        DumpRenderTree should reset frame opener between tests.
        https://bugs.webkit.org/show_bug.cgi?id=54874

        No new tests. (no code affected, just exporting a method for DumpRenderTree use)

        * WebCore.exp.in:

2011-02-26  Chang Shu  <chang.shu@nokia.com>

        Reviewed by Antonio Gomes.

        Based on patch by Carlos Garcia Campos  <cgarcia@igalia.com>.

        Spatial Navigation: Add support for <select> element in multiple selection mode
        https://bugs.webkit.org/show_bug.cgi?id=49261

        When spatial navigation is enabled, use space key to toggle select
        items. And the up and down keys should not affect selection but just
        navigate through items, which is indicated visually by a focus ring.

        New Test: fast/spatial-navigation/snav-single-select-list.html
        Enhanced Test: fast/spatial-navigation/snav-multiple-select.html

        * dom/SelectElement.cpp:
        (WebCore::SelectElement::listBoxDefaultEventHandler):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::addFocusRingRects):
        * rendering/RenderListBox.h:

2011-02-25  Ryosuke Niwa  <rniwa@webkit.org>

        Unreviewed Qt build fix; included CSSValueList.h in EditingStyle.cpp.

        * editing/EditingStyle.cpp:

2011-02-25  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        Move HTMLEquivalent and its subclasses to EditingStyle
        https://bugs.webkit.org/show_bug.cgi?id=55207

        Moved HTMLEquivalent and its subclasses from ApplyStyleCommand to EditingStyle,
        and renamed HTMLEquivalent, HTMLEquivalentValueList, HTMLAttributeEquivalent,
        and HTMLEquivalentFontSizeAttribute to HTMLElementEquivalent, HTMLTextDecorationEquivalent,
        HTMLAttributeEquivalent, and HTMLFontSizeEquivalent respectively.

        Also extracted the logic to determine which element and attribute are removed
        as conflictsWithImplicitStyleOfElement, conflictsWithImplicitStyleOfAttributes,
        and extractConflictingImplicitStyleOfAttributes.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::removeInlineStyleFromElement):
        (WebCore::ApplyStyleCommand::removeImplicitlyStyledElement):
        * editing/ApplyStyleCommand.h:
        * editing/EditingStyle.cpp:
        (WebCore::HTMLElementEquivalent::create): Moved from ApplyStyleCommand.cpp.
        (WebCore::HTMLElementEquivalent::~HTMLElementEquivalent): Ditto.
        (WebCore::HTMLElementEquivalent::matches): Ditto.
        (WebCore::HTMLElementEquivalent::hasAttribute): Ditto.
        (WebCore::HTMLElementEquivalent::propertyExistsInStyle): Ditto.
        (WebCore::HTMLElementEquivalent::HTMLElementEquivalent): Ditto.
        (WebCore::HTMLElementEquivalent::valueIsPresentInStyle): Ditto.
        (WebCore::HTMLElementEquivalent::addToStyle): Ditto.
        (WebCore::HTMLTextDecorationEquivalent::create): Ditto.
        (WebCore::HTMLTextDecorationEquivalent::HTMLTextDecorationEquivalent): Ditto.
        (WebCore::HTMLTextDecorationEquivalent::valueIsPresentInStyle): Ditto.
        (WebCore::HTMLAttributeEquivalent::create): Ditto.
        (WebCore::HTMLAttributeEquivalent::matches): Ditto.
        (WebCore::HTMLAttributeEquivalent::hasAttribute): Ditto.
        (WebCore::HTMLAttributeEquivalent::attributeName): Ditto.
        (WebCore::HTMLAttributeEquivalent::HTMLAttributeEquivalent): Ditto.
        (WebCore::HTMLAttributeEquivalent::valueIsPresentInStyle): Ditto.
        (WebCore::HTMLAttributeEquivalent::addToStyle): Ditto.
        (WebCore::HTMLAttributeEquivalent::attributeValueAsCSSValue): Ditto.
        (WebCore::HTMLFontSizeEquivalent::create): Ditto.
        (WebCore::HTMLFontSizeEquivalent::HTMLFontSizeEquivalent): Ditto.
        (WebCore::HTMLFontSizeEquivalent::attributeValueAsCSSValue): Ditto.
        (WebCore::EditingStyle::conflictsWithImplicitStyleOfElement): Added.
        (WebCore::htmlAttributeEquivalents): Added.
        (WebCore::EditingStyle::conflictsWithImplicitStyleOfAttributes): Added.
        (WebCore::EditingStyle::extractConflictingImplicitStyleOfAttributes): Added.
        * editing/EditingStyle.h:

2011-02-25  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Anders Carlsson.

        AX: Add Xcode entries back to the navigator list for Accessibility cpp files
        https://bugs.webkit.org/show_bug.cgi?id=55280

        * WebCore.xcodeproj/project.pbxproj:

2011-02-25  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Adam Barth.

        WebSocket uses insecure random numbers
        https://bugs.webkit.org/show_bug.cgi?id=54714

        * websockets/WebSocketHandshake.cpp:
        (WebCore::randomNumberLessThan):
        (WebCore::generateSecWebSocketKey):
        (WebCore::generateKey3):

2011-02-25  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Darin Adler.

        Add API to enumerate/delete files downloaded for <audio> and <video>
        https://bugs.webkit.org/show_bug.cgi?id=55267

        Add review changes missed in r79737.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::clearMediaCacheForSite): Pass string by reference.
        * html/HTMLMediaElement.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::clearMediaCacheForSite): Ditto.
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::clearMediaCacheForSite): Ditto.

2011-02-25  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Darin Adler.

        Add API to enumerate/delete files downloaded for <audio> and <video>
        https://bugs.webkit.org/show_bug.cgi?id=55267
        <rdar://problem/9049280>

        No new tests, this is just the plumbing.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::getSitesInMediaCache): New, call through to MediaPlayer.
        (WebCore::HTMLMediaElement::clearMediaCache): Ditto.
        (WebCore::HTMLMediaElement::clearMediaCacheForSite): Ditto.
        * html/HTMLMediaElement.h:

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::getSitesInMediaCache): New, call through to media engine.
        (WebCore::MediaPlayer::clearMediaCache): Ditto.
        (WebCore::MediaPlayer::clearMediaCacheForSite): Ditto.
        * platform/graphics/MediaPlayer.h:

        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::getSitesInMediaCache): Declare new interface.
        (WebCore::MediaPlayerPrivateInterface::clearMediaCache): Ditto.
        (WebCore::MediaPlayerPrivateInterface::clearMediaCacheForSite): Ditto.

2011-02-25  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Dave Hyatt.

        Don't add inline continuation outline to the containing block's
        continuationOutlineTable list if it is not enclosed by an anonymous block.
        https://bugs.webkit.org/show_bug.cgi?id=54690

        We currently don't reconnect inline continuations after a child removal.
        As a result, those merged inlines do not get seperated and hence not get enclosed
        by anonymous blocks. In this case, it is better to bail out and paint it ourself.

        Test: fast/table/table-continuation-outline-paint-crash.html

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paint): 
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintsContinuationOutline): helper function to tell
        if this containing block has the continuation flow in its continuations list.
        * rendering/RenderBlock.h: helper function definition.
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::destroy): debug only code that asserts if we leave
        behind a continuation in the containing block's continuation list when it is
        getting destroyed.

2011-02-25  David Hyatt  <hyatt@apple.com>

        Reviewed by Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=55265, remove the unused "Static" type
        from Length.

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        * platform/Length.h:
        (WebCore::Length::isFixed):
        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::layout):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::isLogicalWidthSpecified):
        (WebCore::RenderImage::isLogicalHeightSpecified):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::markContainingBlocksForLayout):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::hasStaticX):
        (WebCore::InheritedFlags::hasStaticY):

2011-02-25  Brian Weinstein  <bweinstein@apple.com>

        Windows build fix.

        * platform/network/cf/CookieJarCFNet.cpp:
        (WebCore::getHostnamesWithCookies): Add a const_cast.
        (WebCore::deleteCookiesForHostname): Ditto.

2011-02-25  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Empty Elements panel after closing and reopening Inspector
        https://bugs.webkit.org/show_bug.cgi?id=55248

        Fixing regression real quick. Test to follow.

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::reset):

2011-02-25  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: added missing handle scope into V8InjectedScriptHostCustom.
        https://bugs.webkit.org/show_bug.cgi?id=55256

        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::InjectedScriptHost::nodeAsScriptValue):
        (WebCore::V8InjectedScriptHost::currentCallFrameCallback):

2011-02-25  David Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=46500, make positioned elements work with vertical text.
        
        Make positioned objects work with all possible crazy combinations of mixed writing modes.  Added new helper
        functions that flip around the padding box of the containing block and then add in the appropriate border
        side to ensure that the offset of the positioned object is actually correctly placed in the containing block's
        local coordinate space.

        Added two new tests of both replaced and non-replaced positioned elements in mixed writing mode environments.

        * rendering/RenderBox.cpp:
        (WebCore::computeLogicalLeftPositionedOffset):
        (WebCore::RenderBox::computePositionedLogicalWidthUsing):
        (WebCore::computeLogicalTopPositionedOffset):
        (WebCore::RenderBox::computePositionedLogicalHeightUsing):
        (WebCore::RenderBox::computePositionedLogicalWidthReplaced):
        (WebCore::RenderBox::computePositionedLogicalHeightReplaced):

2011-02-25  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Brady Eidson and looked over by Jessie Berlin.

        WebKit2: Need a way to manage cookies from the web process
        https://bugs.webkit.org/show_bug.cgi?id=55086
        
        Implement the functions needed to manage cookies in CookieJar (getHostnamesWithCookies,
        deleteCookiesWithHostname, and deleteAllCookies) for Mac and CFNetwork (stub out the rest),
        and call them from WebKit2's WebCookieManager.

        No change in behavior needing tests.

        * WebCore.exp.in: Added needed functions to export.
        * platform/CookieJar.h:

        * platform/mac/CookieJar.mm:
        (WebCore::getHostnamesWithCookies): Gets all hostnames with cookies from NSHTTPCookieStorage.
        (WebCore::deleteCookiesForHostname): Deletes all cookies with a given hostname from
            NSHTTPCookieStorage.
        (WebCore::deleteAllCookies): Deletes all cookies from NSHTTPCookieStorage.
        
        * platform/network/cf/CookieJarCFNet.cpp:
        (WebCore::getHostnamesWithCookies): Implement using CFNetwork cookie APIs.
        (WebCore::deleteCookiesForHostname): Ditto.
        (WebCore::deleteAllCookies): Ditto.

        * platform/efl/CookieJarEfl.cpp: Added stub functions.
        * platform/haiku/CookieJarHaiku.cpp: Ditto.
        * platform/network/android/CookieJarAndroid.cpp: Ditto.
        * platform/network/chromium/CookieJarChromium.cpp: Ditto.
        * platform/network/curl/CookieJarCurl.cpp: Ditto.
        * platform/network/soup/CookieJarSoup.cpp: Ditto.
        * platform/network/win/CookieJarWin.cpp: Ditto.
        * platform/qt/CookieJarQt.cpp: Ditto.

2011-02-25  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Eric Seidel.

        'load' and 'error' events fired for @poster
        https://bugs.webkit.org/show_bug.cgi?id=54908

        * html/HTMLImageLoader.cpp:
        (WebCore::HTMLImageLoader::dispatchLoadEvent): Don't fire events when being used
        by a video element.

2011-02-25  David Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=46500, make positioned elements work with vertical text.
        
        Patch computePositionedLogicalHeightReplaced to be writing-mode aware.
        
        Added six new tests in fast/replaced.

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

2011-02-25  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed build fix.

        * platform/text/brew/TextBreakIteratorBrew.cpp:
        (WebCore::acquireLineBreakIterator):
        * platform/text/wince/TextBreakIteratorWinCE.cpp:
        (WebCore::acquireLineBreakIterator):

2011-02-25  Vangelis Kokkevis  <vangelis@chromium.org>

        Reviewed by Simon Fraser.

        Update the clip layer size whenever the root layer's size and position
        is updated. This only affects the accelerated compositing path.
        https://bugs.webkit.org/show_bug.cgi?id=55103

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateRootLayerPosition):

        Test: platform/chromium/compositing/layout-width-change.html

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateRootLayerPosition):

2011-02-25  Ned Holbrook  <nholbrook@apple.com>

        Reviewed by Dan Bernstein.

        Minimize calls to ubrk_setText()
        https://bugs.webkit.org/show_bug.cgi?id=54912
        <rdar://problem/9032774>

        Avoid calling ubrk_setText() once per call to isBreakable() by using a LazyLineBreakIterator, which defers
        break iterator creation until needed. This requires replacing the global line break iterator primitive with a
        version that can be nested, since in some cases two iterators may need to be outstanding. In particular,
        layoutInlineChildren() may indirectly call computePreferredLogicalWidths() and each may need an iterator.
        In a test with a paragraph of Japanese text, this reduced the number of ubrk_setText() calls from 164 to 1.

        * platform/text/TextBreakIterator.h: Add LazyLineBreakIterator.
        (WebCore::LazyLineBreakIterator::LazyLineBreakIterator):
        (WebCore::LazyLineBreakIterator::~LazyLineBreakIterator):
        (WebCore::LazyLineBreakIterator::string):
        (WebCore::LazyLineBreakIterator::length):
        (WebCore::LazyLineBreakIterator::get):
        (WebCore::LazyLineBreakIterator::reset):
        * platform/text/TextBreakIteratorICU.cpp: Replace lineBreakIterator() primitive with acquireLineBreakIterator()/releaseLineBreakIterator().
        (WebCore::acquireLineBreakIterator):
        (WebCore::releaseLineBreakIterator):
        * platform/text/brew/TextBreakIteratorBrew.cpp: Ditto.
        (WebCore::acquireLineBreakIterator):
        (WebCore::releaseLineBreakIterator):
        * platform/text/gtk/TextBreakIteratorGtk.cpp: Ditto.
        (WebCore::acquireLineBreakIterator):
        (WebCore::releaseLineBreakIterator):
        * platform/text/qt/TextBreakIteratorQt.cpp: Ditto.
        (WebCore::acquireLineBreakIterator):
        (WebCore::releaseLineBreakIterator):
        * platform/text/wince/TextBreakIteratorWinCE.cpp: Ditto.
        (WebCore::acquireLineBreakIterator):
        (WebCore::releaseLineBreakIterator):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::layoutInlineChildren): Pass a mapping of RenderText to LazyLineBreakIterator from one call of findNextLineBreak() to the next.
        (WebCore::RenderBlock::findNextLineBreak): Use said mapping, resetting LazyLineBreakIterator for any newly-encountered RenderText.
        * rendering/RenderText.cpp: Use a local LazyLineBreakIterator.
        (WebCore::RenderText::computePreferredLogicalWidths):
        * rendering/break_lines.cpp: Accept LazyLineBreakIterator rather than UniChar buffer.
        (WebCore::nextBreakablePosition):
        * rendering/break_lines.h: Accept LazyLineBreakIterator rather than UniChar buffer.
        (WebCore::isBreakable):

2011-02-25  David Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=46500, make positioned elements work with vertical text.
        
        Patch computePositionedLogicalWidthReplaced to be writing-mode aware.  Not testable yet, since the height function overwrites the values
        in a vertical text environment.

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

2011-02-25  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Dave Hyatt.

        When trying to find which lines to dirty for a changed child, make sure
        that we do test if the adjacent next linebox contains that changed child
        and if yes, dirty it. This can happen in cases when we have a word break
        between text nodes.
        https://bugs.webkit.org/show_bug.cgi?id=55206

        Test: fast/text/word-break-next-linebox-not-dirty-crash-main.html

        * rendering/RenderLineBoxList.cpp:
        (WebCore::RenderLineBoxList::dirtyLinesFromChangedChild):

2011-02-25  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Pavel Feldman.

        Web Inspector: [Text editor] Add basic layout tests for the highlighter
        https://bugs.webkit.org/show_bug.cgi?id=54751

        Test: inspector/editor/highlighter-basics.html

        * inspector/front-end/TextEditorHighlighter.js:
        (WebInspector.TextEditorHighlighter.prototype.highlight):

2011-02-24  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Huge fonts in font preview
        https://bugs.webkit.org/show_bug.cgi?id=55143

        * inspector/front-end/FontView.js:
        (WebInspector.FontView.prototype._createContentIfNeeded):
        (WebInspector.FontView.prototype.show):
        (WebInspector.FontView.prototype.resize):
        (WebInspector.FontView.prototype._measureElement):
        (WebInspector.FontView.prototype.updateFontPreviewSize):

2011-02-25  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Implement SVGColor/SVGPaint API
        https://bugs.webkit.org/show_bug.cgi?id=55119

        SVGColor::cssText() shouldn't return #RRGGBBAA colors
        https://bugs.webkit.org/show_bug.cgi?id=48120

        Rewrite SVGColor/SVGPaint to actually implement their desired setPaint/setColor/setURI APIs.
        SVGPaint is a CSSValue, and its setPaint() function allows to switch to an arbitary paint type.
        That means, unlike all other CSSValues, SVGColor/SVGPaint are mutable. That means changes to
        their CSSValues should be reflected in the elements style as well as in the computed style.
        This patch doesn't yet implement that, the stubbed-out method valueChanged() is what
        needs to be implemented. For now you can grab a SVGColor/SVGPaint object through getCSSPropertyValue
        and manipulate it, in every possible way (SVPaint.uri/paintType/colorType/color attributes are all sync'ed).
        Switch to strict JS bindings (RequiresAllArguments=Raise, StrictTypeChecking) for both objects.

        Enable proper serialization of colors through Color::serialized(), affects some testcases (#FF.. -> #ff..)
        Add extensive tests of all SVGColor/SVGPaint API, currently shows some FAIL messages, as element style
        <-> computed style is not live, after mutating SVGColor/SVGPaint. That will be implemented in a follow-up patch.

        Tests: svg/dom/SVGColor.html
               svg/dom/SVGPaint.html

        * bindings/scripts/CodeGenerator.pm: Remove obsolete handling of "SVGPaintType", take ushort for paintType, as specified in the SVG 1.1 IDLs.
        * bindings/scripts/CodeGeneratorJS.pm: Ditto.
        * bindings/scripts/CodeGeneratorObjC.pm: Ditto.
        * bindings/scripts/CodeGeneratorV8.pm: Ditto.
        * css/SVGCSSParser.cpp: Adapt to SVGPaint/SVGColor create() naming convention changes.
        (WebCore::CSSParser::parseSVGValue):
        (WebCore::CSSParser::parseSVGPaint):
        (WebCore::CSSParser::parseSVGColor):
        * svg/SVGColor.cpp: Rewrite to fully implement the SVGColor API, merge all constructors into one, use more descriptable create() naming convention.
        (WebCore::valueChanged): Stub implementation, will land in a follow-up patch.
        (WebCore::SVGColor::SVGColor):
        (WebCore::SVGColor::setRGBColor):
        (WebCore::SVGColor::colorFromRGBColorString):
        (WebCore::SVGColor::setRGBColorICCColor):
        (WebCore::SVGColor::setColor):
        (WebCore::SVGColor::cssText):
        * svg/SVGColor.h:
        (WebCore::SVGColor::createFromString):
        (WebCore::SVGColor::createFromColor):
        (WebCore::SVGColor::color):
        (WebCore::SVGColor::colorType):
        (WebCore::SVGColor::~SVGColor):
        (WebCore::SVGColor::setColor):
        (WebCore::SVGColor::setColorType):
        * svg/SVGColor.idl: Enable strict type checking.
        * svg/SVGPaint.cpp: Rewrite to fully implement the SVGPaint API, merge all constructors into one, use more descriptable create() naming convention.
        (WebCore::valueChanged): Stub implementation, will land in a follow-up patch.
        (WebCore::colorTypeForPaintType):
        (WebCore::SVGPaint::SVGPaint):
        (WebCore::SVGPaint::setUri):
        (WebCore::SVGPaint::defaultFill):
        (WebCore::SVGPaint::defaultStroke):
        (WebCore::SVGPaint::setPaint):
        (WebCore::SVGPaint::cssText):
        (WebCore::SVGPaint::matchesTargetURI):
        * svg/SVGPaint.h:
        (WebCore::SVGPaint::createUnknown):
        (WebCore::SVGPaint::createNone):
        (WebCore::SVGPaint::createCurrentColor):
        (WebCore::SVGPaint::createColor):
        (WebCore::SVGPaint::createURI):
        (WebCore::SVGPaint::createURIAndColor):
        (WebCore::SVGPaint::paintType):
        (WebCore::SVGPaint::uri):
        (WebCore::SVGPaint::create):
        (WebCore::SVGPaint::isSVGPaint):
        * svg/SVGPaint.idl: Enable strict type checking.

2011-02-25  Renata Hodovan  <reni@webkit.org>

        Reviewed by Nikolas Zimmermann.

        FESpecularLightingElement changes doesn't require relayout.
        https://bugs.webkit.org/show_bug.cgi?id=54451

        When the FESpecularLightingElement receives an update message but the given value remains the same we don't need
        to relayout the filter. Otherwise, the light source requests a repaint on the specular lighting filter.
        Besides add ASSERTs to DiffuseLightElement::setFilterEffectAttribute as well to avoid lightSources being null.

        No new tests are needed to check the repaint because it is covered by the dynamic update tests of FESpecularLighting.
        We only test what happens if we remove the light source of specularLight.

        Test: svg/dynamic-updates/SVGFESpecularLightingElement-remove-lightSource.html

        * platform/graphics/filters/FESpecularLighting.cpp:
        (WebCore::FESpecularLighting::setSurfaceScale):
        (WebCore::FESpecularLighting::setSpecularConstant):
        (WebCore::FESpecularLighting::setSpecularExponent):
        (WebCore::FESpecularLighting::setKernelUnitLengthX):
        (WebCore::FESpecularLighting::setKernelUnitLengthY):
        * platform/graphics/filters/FESpecularLighting.h:
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::postApplyResource):
        * svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::setFilterEffectAttribute):
        (WebCore::SVGFEDiffuseLightingElement::lightElementAttributeChanged):
        (WebCore::SVGFEDiffuseLightingElement::build):
        * svg/SVGFEDiffuseLightingElement.h:
        * svg/SVGFELightElement.cpp:
        (WebCore::SVGFELightElement::findLightElement):
        (WebCore::SVGFELightElement::findLight):
        (WebCore::SVGFELightElement::svgAttributeChanged):
        * svg/SVGFELightElement.h:
        * svg/SVGFESpecularLightingElement.cpp:
        (WebCore::SVGFESpecularLightingElement::setFilterEffectAttribute):
        (WebCore::SVGFESpecularLightingElement::svgAttributeChanged):
        (WebCore::SVGFESpecularLightingElement::lightElementAttributeChanged):
        (WebCore::SVGFESpecularLightingElement::build):
        * svg/SVGFESpecularLightingElement.h:

2011-02-24  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Revert the support for QNAM affined to a different thread.
        https://bugs.webkit.org/show_bug.cgi?id=55149

        Qt 4.8 will have QNAM use its own thread internally by default,
        no need to keep this complexity in WebKit.

        This mainly reverts:
        http://trac.webkit.org/changeset/73710
        http://trac.webkit.org/changeset/73712

        * WebCore.pro:
        * platform/graphics/qt/MediaPlayerPrivateQt.cpp:
        (WebCore::MediaPlayerPrivateQt::commitLoad):
        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::FormDataIODevice::FormDataIODevice):
        (WebCore::QNetworkReplyHandler::QNetworkReplyHandler):
        (WebCore::QNetworkReplyHandler::setLoadMode):
        (WebCore::QNetworkReplyHandler::abort):
        (WebCore::QNetworkReplyHandler::release):
        (WebCore::ignoreHttpError):
        (WebCore::QNetworkReplyHandler::finish):
        (WebCore::QNetworkReplyHandler::sendResponseIfNeeded):
        (WebCore::QNetworkReplyHandler::forwardData):
        (WebCore::QNetworkReplyHandler::start):
        (WebCore::QNetworkReplyHandler::sendQueuedItems):
        * platform/network/qt/QNetworkReplyHandler.h:
        (WebCore::QNetworkReplyHandler::reply):
        * platform/network/qt/QtNAMThreadSafeProxy.cpp: Removed.
        * platform/network/qt/QtNAMThreadSafeProxy.h: Removed.
        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::ResourceHandle::willLoadFromCache):
        * platform/qt/CookieJarQt.cpp:
        (WebCore::cookieJar):
        (WebCore::setCookies):
        (WebCore::cookies):
        (WebCore::cookieRequestHeaderFieldValue):
        (WebCore::cookiesEnabled):

2011-02-25  Renata Hodovan  <reni@webkit.org>

        Reviewed by Andreas Kling.

        FEBlendElement changes doesn't require relayout
        https://bugs.webkit.org/show_bug.cgi?id=55138

        When the FEBlendElement receives an update message but the given value remains the same we don't need
        to relayout the filter.

        No new tests are needed because this modificiation is covered by the dynamic update tests of FEBlend.

        * platform/graphics/filters/FEBlend.cpp:
        (WebCore::FEBlend::setBlendMode):
        * platform/graphics/filters/FEBlend.h:
        * svg/SVGFEBlendElement.cpp:
        (WebCore::SVGFEBlendElement::setFilterEffectAttribute):
        (WebCore::SVGFEBlendElement::svgAttributeChanged):
        (WebCore::SVGFEBlendElement::synchronizeProperty):
        * svg/SVGFEBlendElement.h:

2011-02-24  Daniel Bates  <dbates@rim.com>

        Reviewed by Antonio Gomes.

        Clean up: Extract table height adjustment for <caption> into common function
        https://bugs.webkit.org/show_bug.cgi?id=54936

        We use similar logic for adjusting the height of a table with respect
        to a top- and bottom-positioned <caption>. Instead, we should extract
        the common code into a shared function.

        No functionality changed. So no new tests.

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::adjustLogicalHeightForCaption): Added.
        (WebCore::RenderTable::layout): Extracted common code to adjust table height
        with respect to the <caption> into RenderTable::adjustLogicalHeightForCaption().
        * rendering/RenderTable.h:

2011-02-24  James Robinson  <jamesr@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] Move draw time properties out of *LayerChromium to CCLayerImpl
        https://bugs.webkit.org/show_bug.cgi?id=55013

        This adds a new type (tentatively named CCLayerImpl) responsible for drawing/compositing layers.
        Currently LayerChromiums know about their CCLayerImpls and CCLayerImpls rely on the LayerChromium
        tree for structure.  In theory updates are a LayerChromium-only concept and draw is a CCLayerImpl-only
        concept, but this patch doesn't go all there yet in the interest of keeping the patch small-ish.

        RenderSurfaces are a CCLayerImpl-only concepts and no longer have any direct LayerChromium dependencies.

        Note: I've put CCLayerImpl into a new 'cc' directory under platform/graphics/chromium/ and intentionally
        not added it to the include path.  We plan to add more compositor implementation details to this directory
        and we want to keep accidental dependencies on these files to a minimum.

        See https://bugs.webkit.org/show_bug.cgi?id=54047 for the big picture.

        Refactor only, compositing/ tests cover these codepaths.

        * WebCore.gypi:
        * platform/graphics/chromium/CanvasLayerChromium.cpp:
        (WebCore::CanvasLayerChromium::draw):
        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::requiresClippedUpdateRect):
        (WebCore::ContentLayerChromium::updateContentsIfDirty):
        (WebCore::ContentLayerChromium::draw):
        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::LayerChromium):
        (WebCore::LayerChromium::cleanupResources):
        (WebCore::LayerChromium::setLayerRenderer):
        (WebCore::LayerChromium::setBounds):
        (WebCore::LayerChromium::setFrame):
        (WebCore::LayerChromium::setNeedsDisplay):
        (WebCore::LayerChromium::setBorderColor):
        (WebCore::LayerChromium::borderColor):
        (WebCore::LayerChromium::setBorderWidth):
        (WebCore::LayerChromium::borderWidth):
        (WebCore::LayerChromium::layerRenderer):
        (WebCore::LayerChromium::setDoubleSided):
        (WebCore::LayerChromium::bounds):
        * platform/graphics/chromium/LayerChromium.h:
        (WebCore::LayerChromium::maskDrawLayer):
        (WebCore::LayerChromium::ccLayerImpl):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::compareLayerZ):
        (WebCore::LayerRendererChromium::drawLayers):
        (WebCore::LayerRendererChromium::updateLayersRecursive):
        (WebCore::LayerRendererChromium::setCompositeOffscreen):
        (WebCore::LayerRendererChromium::getOffscreenLayerTexture):
        (WebCore::LayerRendererChromium::drawLayer):
        * platform/graphics/chromium/LayerRendererChromium.h:
        * platform/graphics/chromium/PluginLayerChromium.cpp:
        (WebCore::PluginLayerChromium::draw):
        * platform/graphics/chromium/RenderSurfaceChromium.cpp:
        (WebCore::RenderSurfaceChromium::RenderSurfaceChromium):
        (WebCore::RenderSurfaceChromium::drawSurface):
        (WebCore::RenderSurfaceChromium::draw):
        * platform/graphics/chromium/RenderSurfaceChromium.h:
        * platform/graphics/chromium/VideoLayerChromium.cpp:
        (WebCore::VideoLayerChromium::drawYUV):
        (WebCore::VideoLayerChromium::drawRGBA):
        * platform/graphics/chromium/cc/CCLayerImpl.cpp: Added.
        (WebCore::CCLayerImpl::CCLayerImpl):
        (WebCore::CCLayerImpl::~CCLayerImpl):
        (WebCore::CCLayerImpl::superlayer):
        (WebCore::CCLayerImpl::maskLayer):
        (WebCore::CCLayerImpl::replicaLayer):
        (WebCore::CCLayerImpl::setLayerRenderer):
        (WebCore::CCLayerImpl::createRenderSurface):
        (WebCore::CCLayerImpl::updateContentsIfDirty):
        (WebCore::CCLayerImpl::drawsContent):
        (WebCore::CCLayerImpl::draw):
        (WebCore::CCLayerImpl::unreserveContentsTexture):
        (WebCore::CCLayerImpl::bindContentsTexture):
        (WebCore::CCLayerImpl::cleanupResources):
        (WebCore::CCLayerImpl::getDrawRect):
        (WebCore::CCLayerImpl::drawDebugBorder):
        * platform/graphics/chromium/cc/CCLayerImpl.h: Added.
        (WebCore::CCLayerImpl::create):
        (WebCore::CCLayerImpl::setDebugBorderColor):
        (WebCore::CCLayerImpl::debugBorderColor):
        (WebCore::CCLayerImpl::setDebugBorderWidth):
        (WebCore::CCLayerImpl::debugBorderWidth):
        (WebCore::CCLayerImpl::layerRenderer):
        (WebCore::CCLayerImpl::renderSurface):
        (WebCore::CCLayerImpl::clearRenderSurface):
        (WebCore::CCLayerImpl::drawDepth):
        (WebCore::CCLayerImpl::setDrawDepth):
        (WebCore::CCLayerImpl::drawOpacity):
        (WebCore::CCLayerImpl::setDrawOpacity):
        (WebCore::CCLayerImpl::scissorRect):
        (WebCore::CCLayerImpl::setScissorRect):
        (WebCore::CCLayerImpl::targetRenderSurface):
        (WebCore::CCLayerImpl::setTargetRenderSurface):
        (WebCore::CCLayerImpl::doubleSided):
        (WebCore::CCLayerImpl::setDoubleSided):
        (WebCore::CCLayerImpl::bounds):
        (WebCore::CCLayerImpl::setBounds):
        (WebCore::CCLayerImpl::drawTransform):
        (WebCore::CCLayerImpl::setDrawTransform):
        (WebCore::CCLayerImpl::drawableContentRect):
        (WebCore::CCLayerImpl::setDrawableContentRect):

2011-02-24  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        REGRESSION (r79629): Non-expanding ruby base is start-aligned rather than centered
        https://bugs.webkit.org/show_bug.cgi?id=55197

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::computeInlineDirectionPositionsForLine): Adjust the line boundaries even
        if there are no expansion opportunities. This allows RenderRubyBase to center itself.

2011-02-24  Darin Adler  <darin@apple.com>

        Reviewed by Alexey Proskuryakov.

        REGRESSION (r79466): http/tests/incremental/slow-utf8-html.pl flaky due to incorrect assertions
        https://bugs.webkit.org/show_bug.cgi?id=55135

        * platform/text/TextCodecUTF8.cpp:
        (WebCore::TextCodecUTF8::decode): Removed incorrect assertions.

2011-02-24  Darin Adler  <darin@apple.com>

        Reviewed by Anders Carlsson.

        WebKit2: Image-based cursors do not work
        https://bugs.webkit.org/show_bug.cgi?id=55184

        * WebCore.exp.in: Exported new entry points now used by WebKit2.

2011-02-24  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Simon Fraser.

        ImageBuffer::clip creates an image of the incorrect context in IOSurface case
        https://bugs.webkit.org/show_bug.cgi?id=55170

        Test: fast/canvas/2d.fillText.gradient.html

        * platform/graphics/cg/ImageBufferCG.cpp: Clipping against ImageBuffer's context
        instead of ourself (the passed in context).

2011-02-24  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        RenderBoxModelObject::paintBoxShadow should bail earlier
        https://bugs.webkit.org/show_bug.cgi?id=55186

        Make paintBoxShadow() bail early if there is no shadow, and make
        callers consistent in not checking for box-shadow before calling it.

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paintBoxDecorations):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintBoxShadow):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::paintBoxDecorations):

2011-02-24  James Robinson  <jamesr@chromium.org>

        Reviewed by Darin Fisher.

        Add a USE() macro to control use of the built-in UTF8 codec
        https://bugs.webkit.org/show_bug.cgi?id=55189

        Guards the built in UTF8 codec registration with USE(BUILTIN_UTF8_CODEC). ICU is used if the USE() is not set.

        * platform/text/TextCodecICU.cpp:
        (WebCore::TextCodecICU::registerEncodingNames):
        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::buildBaseTextCodecMaps):

2011-02-24  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        <rdar://problem/8902740> Expand ruby base when it is shorter than the ruby text
        https://bugs.webkit.org/show_bug.cgi?id=55183

        Test: fast/ruby/base-shorter-than-text.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::availableLogicalWidthForLine):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::adjustInlineDirectionLineBounds): Added. The base clase implementation does nothing.
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::textAlignmentForLine): Added. Implements the logic that changes "justify" to "auto" for
        the last line or a line that ends with a hard break.
        (WebCore::RenderBlock::computeInlineDirectionPositionsForLine): Use textAlignmentForLine(), compute the available
        width more efficiently, and call adjustInlineDirectionLineBounds() for justified lines.
        * rendering/RenderRubyBase.cpp:
        (WebCore::RenderRubyBase::rubyRun): Added.
        (WebCore::RenderRubyBase::textAlignmentForLine): Added. Alwyas returns "justify".
        (WebCore::RenderRubyBase::adjustInlineDirectionLineBounds): Added. Insets the line such that the inset is
        half the width of a single intra-line expansion.
        * rendering/RenderRubyBase.h:
        * rendering/RenderRubyRun.cpp:
        (WebCore::RenderRubyRun::addChild): 

2011-02-24  James Robinson  <jamesr@chromium.org>

        Unreviewed, rolling out r79604.
        http://trac.webkit.org/changeset/79604
        https://bugs.webkit.org/show_bug.cgi?id=55017

        Causes assertions to fail on some SVG tests

        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged):

2011-02-24  Oliver Hunt  <oliver@apple.com>

        Build fix

        * bindings/js/JSBindingsAllInOne.cpp:

2011-02-24  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=46500, make positioned elements work with vertical text.

        Rework the logical height computation for positioned elements to work in terms of before and after.  That way the offset is determined from
        the correct container side in flipped block writing modes (e.g., vertical-rl).
        
        Patch locationOffsetIncludingFlipping to use the containing block to flip so that it will behave correctly with absolute/fixed positioned
        elements.
        
        Patch offsetFromContainer to use the flipped location offset for absolute/fixed positioned elements so that localToAbsolute works properly.

        Added twelve tests in fast/block/positioning/vertical-rl and fast/block/positioning/vertical-lr.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::offsetFromContainer):
        (WebCore::RenderBox::computePositionedLogicalHeight):
        (WebCore::RenderBox::computePositionedLogicalHeightUsing):
        (WebCore::RenderBox::locationOffsetIncludingFlipping):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::logicalTop):
        (WebCore::InheritedFlags::logicalBottom):

2011-02-23  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        Make WeakGCMap use new handle infrastructure
        https://bugs.webkit.org/show_bug.cgi?id=55100

        Update to new WeakGCMap APIs, this requires threading global
        data to a few functions that did not need it in the past, but
        also gets rid of a large number of destructors, as well as the
        forgetDOMNode, etc APIs.

        We can also drop the JSDebugWrapperSet as its only purpose was
        to ensure that we retained correct semantics in the old WeakGCMap,
        but happilly these semantics are now guaranteed by the map itself.

        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::hasCachedDOMObjectWrapperUnchecked):
        (WebCore::cacheDOMObjectWrapper):
        (WebCore::hasCachedDOMNodeWrapperUnchecked):
        (WebCore::cacheDOMNodeWrapper):
        (WebCore::isObservableThroughDOM):
        (WebCore::markDOMNodesForDocument):
        (WebCore::takeWrappers):
        (WebCore::updateDOMNodeDocument):
        (WebCore::markDOMObjectWrapper):
        (WebCore::markDOMNodeWrapper):
        (WebCore::stringWrapperDestroyed):
        (WebCore::jsStringSlowCase):
        * bindings/js/JSDOMBinding.h:
        * bindings/js/JSDOMWrapper.cpp:
        (WebCore::DOMObject::~DOMObject):
        * bindings/js/JSDebugWrapperSet.cpp: Removed.
        * bindings/js/JSDebugWrapperSet.h: Removed.
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/jsc/BridgeJSC.cpp:
        (JSC::Bindings::Instance::createRuntimeObject):
        * bridge/jsc/BridgeJSC.h:
        * bridge/runtime_object.cpp:
        (JSC::Bindings::RuntimeObject::~RuntimeObject):
        * bridge/runtime_root.cpp:
        (JSC::Bindings::RootObject::invalidate):
        (JSC::Bindings::RootObject::addRuntimeObject):
        (JSC::Bindings::RootObject::removeRuntimeObject):
        * bridge/runtime_root.h:

2011-02-24  James Robinson  <jamesr@chromium.org>

        Fix chromium compile.

        * bindings/v8/custom/V8LocationCustom.cpp:
        (WebCore::V8Location::toStringCallback):

2011-02-24  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, rolling out r79607.
        http://trac.webkit.org/changeset/79607
        https://bugs.webkit.org/show_bug.cgi?id=55157

        Broke Chromium layout tests.

        * html/shadow/MediaControls.cpp:
        (WebCore::MediaControls::updateVolumeSliderContainer):
        * rendering/RenderMediaControls.cpp:
        (WebCore::RenderMediaControls::volumeSliderOffsetFromMuteButton):
        * rendering/RenderMediaControls.h:
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::volumeSliderOffsetFromMuteButton):
        * rendering/RenderTheme.h:
        * rendering/RenderThemeChromiumMac.h:
        * rendering/RenderThemeChromiumMac.mm:
        (WebCore::RenderThemeChromiumMac::volumeSliderOffsetFromMuteButton):
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::volumeSliderOffsetFromMuteButton):
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::volumeSliderOffsetFromMuteButton):
        * rendering/RenderThemeWin.h:

2011-02-24  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Fix the clang -Woverloaded-virtual build.

        JSLocation has a toString function which conflicts with the virtual JSObject::toString  member function.
        Fix this by renaming the implementation function from JSLocation::toString to JSLocation::toStringFunction.

        * bindings/js/JSLocationCustom.cpp:
        (WebCore::JSLocation::toStringFunction):
        * bindings/v8/custom/V8LocationCustom.cpp:
        (WebCore::V8Location::toStringFunctionCallback):
        * page/Location.idl:

2011-02-24  Anders Carlsson  <andersca@apple.com>

        Fix clang build.

        * bindings/objc/WebScriptObject.mm:
        (-[WebUndefined release]):
        Release should be "oneway void".

        (-[WebUndefined retainCount]):
        Return NSUIntegerMax instead of UINT_MAX.

2011-02-24  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        Simplify RenderTheme::volumeSliderOffsetFromMuteButton, unduplicate code.
        https://bugs.webkit.org/show_bug.cgi?id=55157

        Refactoring, no functional changes. Covered by existing tests.

        RenderTheme::volumeSliderOffsetFromMuteButton has the same duplicated
        logic for all platforms. This patch:
        a) moves the common logic of determining absolute positioning to a
           platform-agnostic place;
        b) simplifies the method to return constant offset.

        * html/shadow/MediaControls.cpp:
        (WebCore::volumeSliderOffset): Added new helper function,
            capturing common logic of finding the absolute position of the volume slider.
        (WebCore::MediaControls::updateVolumeSliderContainer): Changed to use the
            new helper.
        * rendering/RenderMediaControls.cpp:
        (WebCore::RenderMediaControls::volumeSliderOffsetRelativeToMuteButton): Simplified.
        * rendering/RenderMediaControls.h: Ditto.
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::volumeSliderOffsetRelativeToMuteButton): Ditto.
        * rendering/RenderTheme.h: Ditto.
        * rendering/RenderThemeChromiumMac.h: Ditto.
        * rendering/RenderThemeChromiumMac.mm: Ditto.
        (WebCore::RenderThemeChromiumMac::volumeSliderOffsetRelativeToMuteButton): Ditto.
        * rendering/RenderThemeMac.h: Ditto.
        * rendering/RenderThemeMac.mm: Ditto.
        (WebCore::RenderThemeMac::volumeSliderOffsetRelativeToMuteButton): Ditto.
        * rendering/RenderThemeWin.cpp: Ditto.
        (WebCore::RenderThemeWin::volumeSliderOffsetRelativeToMuteButton): Ditto.
        * rendering/RenderThemeWin.h: Ditto.

2011-02-24  Tom Sepez  <tsepez@chromium.org>

        Reviewed by Darin Fisher.

        Make frameview resized event dispatch async so that it occurs
        after layout has completed.
        
        https://bugs.webkit.org/show_bug.cgi?id=54467
        Test: fast/replaced/frame-removed-during-resize-smaller.html

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

2011-02-24  Xianzhu Wang  <wangxianzhu@google.com>

        Reviewed by Adam Barth.

        Use loader->init() instead of loader->load() to avoid complex fake
        request loading and cleanup logic, and also avoid ResourceLoader leaks.

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

        Test: svg/misc/SVGImage-leak-ResourceLoader.html

        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged):

2011-02-24  Dimitri Glazkov  <dglazkov@chromium.org>

        Chromium Mac build fix after r79591.

        * WebCore.gypi: Added RenderMediaControls to WebCore.gypi.

2011-02-24  Misha Tyutyunik  <michael.tyutyunik@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Dont use QPixmapCache if QPixmapCache::cacheLimit() is too small 
        (2048Kb for now).
        https://bugs.webkit.org/show_bug.cgi?id=54887

        No new tests required.

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

2011-02-20  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Nikolas Zimmermann.

        [CAIRO] Support ImageBuffers clip operation on all Cairo ports
        https://bugs.webkit.org/show_bug.cgi?id=23526

        Add support for ImageBuffer clipping on Cairo by emulating them with image
        masks. Since masking is immediate on Cairo, we must store the mask surfaces
        on a stack and apply them during restorePlatformState.

        * platform/graphics/GraphicsContext.h: Add pushImageMask.
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::savePlatformState): Push an empty mask onto the
        stack, so we can keep track of when to actually apply the image mask.
        (WebCore::GraphicsContext::restorePlatformState): When we are ready to apply
        an image mask, use cairo_mask_surface to mask the group that we pushed onto
        our surface.
        (WebCore::GraphicsContext::pushImageMask): Added. This method will push a surface
        onto the image mask stack and push a group onto the Cairo state, so that the masking
        only affects what we paint after this point.
        * platform/graphics/cairo/GraphicsContextPlatformPrivateCairo.h: Added a class to keep
        track of image masking information after calls to pushImageMask.
        (WebCore::ImageMaskInformation::update): Added
        (WebCore::ImageMaskInformation::valid): Added
        (WebCore::ImageMaskInformation::maskSurface): Added
        (WebCore::ImageMaskInformation::maskRect): Added
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::clip): Call GraphicsContext::pushImageMask.

2011-02-24  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Carlson.

        Add RenderMediaControls to Mac build, unduplicate one method.
        https://bugs.webkit.org/show_bug.cgi?id=55152

        Refactoring, no functional changes.

        * WebCore.xcodeproj/project.pbxproj: Added RenderMediaControls to project,
            ran sort-XCode-project-file.
        * rendering/RenderMediaControls.cpp: Moved ENABLE(VIDEO) and PLATFORM(WIN)
            defines to allow building on Mac.
        * rendering/RenderMediaControls.h: Ditto.
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::volumeSliderOffsetFromMuteButton): Replaced guts
            with a call to RenderMediaControls function.

2011-02-24  James Robinson  <jamesr@chromium.org>

        Unreviewed, rolling out r79584.
        http://trac.webkit.org/changeset/79584
        https://bugs.webkit.org/show_bug.cgi?id=44797

        [chromium] Patch does not compile if ENABLE_FULLSCREEN_API is
        not set

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:

2011-02-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        Do not cache the default cairo font options using a static
        variable. It fixes a memory leak reported by valgrind.

        * platform/graphics/freetype/FontPlatformDataFreeType.cpp:
        (WebCore::getDefaultFontOptions):
        (WebCore::FontPlatformData::initializeWithFontFace):

2011-02-24  Andrew Wilson  <atwilson@chromium.org>

        Unreviewed, rolling out r79570.
        http://trac.webkit.org/changeset/79570
        https://bugs.webkit.org/show_bug.cgi?id=54874

        Breaks chromium build because glue/mocks/mock_web_frame.h/cc
        was not updated

        * WebCore.exp.in:

2011-02-24  David Dorwin  <ddorwin@chromium.org>

        Reviewed by Eric Seidel.

        Enable WebKit Full Screen API in Chromium. The element becomes the full size of the window, but the window is not yet full screen. Support is disabled by default.

        fullscreen javascript bindings not implemented for v8
        https://bugs.webkit.org/show_bug.cgi?id=44797

        Tested by the existing fullscreen Layout Tests.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:

2011-02-24  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: move querySelectorAll from CSS agent to DOM agent where it belongs.
        https://bugs.webkit.org/show_bug.cgi?id=55131

        Test: inspector/elements/dom-agent-query-selector.html

        * inspector/Inspector.idl:
        * inspector/InspectorCSSAgent.cpp:
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::nodeToSelectOn):
        (WebCore::InspectorDOMAgent::querySelector):
        (WebCore::InspectorDOMAgent::querySelectorAll):
        * inspector/InspectorDOMAgent.h:
        * inspector/front-end/AuditRules.js:
        (WebInspector.AuditRules.ImageDimensionsRule.prototype.doRun):
        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleModel.prototype.setRuleSelector.callback):
        (WebInspector.CSSStyleModel.prototype.setRuleSelector):
        (WebInspector.CSSStyleModel.prototype.addRule.callback):
        (WebInspector.CSSStyleModel.prototype.addRule):

2011-02-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Fragment parsing does not need to use HTMLSourceTracker
        https://bugs.webkit.org/show_bug.cgi?id=55011

        Any performance gains from this patch are likely
        the result of working around:
        https://bugs.webkit.org/show_bug.cgi?id=55005
        (Which suggests that fixing bug 55005 will speed
        up normal HTML parsing substantially.)

        Assuming I ran the numbers correct, here is the
        change from PerformanceTests/Parser/tiny-innerHTML:
        Before patch:
        avg 5586.1
        median 5594
        stdev 41.295157101045135
        min 5425
        max 5633

        After Patch:
        avg 2603.9
        median 2609.5
        stdev 32.500615378789355
        min 2475
        max 2649

        Removing just the HTMLSourceTracker calls brought our
        score from 5500 to 5200, removing the XSSFilter as well
        brought it to 2600 on my machine.

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::HTMLDocumentParser):
        (WebCore::HTMLDocumentParser::pumpTokenizer):
        * html/parser/HTMLDocumentParser.h:

2011-02-24   Amruth Raj  <amruthraj@motorola.com> and Ravi Phaneendra Kasibhatla  <ravi.kasibhatla@motorola.com> and Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Implement WebEventFactory, WebErrors classes for WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=48510

        Exported static functions for GTK, we need them to create events
        in WebKit2.

        * platform/PlatformKeyboardEvent.h:
        * platform/gtk/KeyEventGtk.cpp:
        (WebCore::PlatformKeyboardEvent::keyIdentifierForGdkKeyCode):
        (WebCore::PlatformKeyboardEvent::windowsKeyCodeForGdkKeyCode):
        (WebCore::PlatformKeyboardEvent::singleCharacterString):

2011-02-24  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Remove the GFile GOwnPtr specialization
        https://bugs.webkit.org/show_bug.cgi?id=55154

        Convert uses of GOwnPtr<GFile> to GRefPtr<GFile>.

        No new tests. This should not change behavior.

        * plugins/gtk/PluginPackageGtk.cpp: Fix include order and remove unnecessary include.
        (WebCore::PluginPackage::load): Use GRefPtr for GFile instead of GOwnPtr.

2011-02-24  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Eric Seidel.

        Rename PLATFORM(SKIA) to USE(SKIA)
        https://bugs.webkit.org/show_bug.cgi?id=55090

        * config.h: Removed second define of PLATFORM(SKIA).
        * html/HTMLCanvasElement.cpp:
        * platform/graphics/FloatPoint.h:
        * platform/graphics/FloatRect.h:
        * platform/graphics/Gradient.cpp:
        * platform/graphics/Gradient.h:
        * platform/graphics/GraphicsContext.cpp:
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/ImageSource.h:
        * platform/graphics/IntPoint.h:
        * platform/graphics/IntRect.h:
        * platform/graphics/Path.h:
        * platform/graphics/Pattern.cpp:
        * platform/graphics/Pattern.h:
        * platform/graphics/chromium/ContentLayerChromium.cpp:
        * platform/graphics/chromium/ContentLayerChromium.h:
        * platform/graphics/chromium/GLES2Canvas.cpp:
        * platform/graphics/chromium/ImageLayerChromium.cpp:
        * platform/graphics/chromium/LayerChromium.cpp:
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        * platform/graphics/chromium/LayerRendererChromium.h:
        * platform/graphics/chromium/LayerTilerChromium.cpp:
        * platform/graphics/chromium/ShaderChromium.h:
        * platform/graphics/gpu/LoopBlinnPathProcessor.cpp:
        * platform/graphics/transforms/AffineTransform.h:
        * platform/graphics/transforms/TransformationMatrix.h:
        * platform/image-decoders/ImageDecoder.cpp:
        * platform/image-decoders/ImageDecoder.h:
        * rendering/svg/RenderSVGResourceSolidColor.cpp:

2011-02-24  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: follow up to 79566. USE_PARAM not declared
        https://bugs.webkit.org/show_bug.cgi?id=55155

        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::JSInjectedScriptHost::currentCallFrame):
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::V8InjectedScriptHost::currentCallFrameCallback):

2011-02-24  Emil A Eklund  <eae@chromium.org>

        Reviewed by Simon Fraser.

        Add support for missing properties to getComputedStyle
        https://bugs.webkit.org/show_bug.cgi?id=23668

        Implement getComputedStyle for the content, counter and outline-offset
        properties.

        Test: fast/css/getComputedStyle/computed-style-properties.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::contentToCSSValue):
        (WebCore::counterToCSSValue):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::cssText):
        * css/CSSPrimitiveValue.h:

2011-02-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        SegmentedString does not need an m_composite member
        https://bugs.webkit.org/show_bug.cgi?id=55083

        Storing m_composite as distinct from m_substrings.isEmpty()
        was just error prone and eventually going to get us in trouble.

        I also cleaned up some of the style in SegementedString.*
        since this file long predates check-webkit-style.

        * platform/text/SegmentedString.cpp:
        (WebCore::SegmentedString::SegmentedString):
        (WebCore::SegmentedString::operator=):
        (WebCore::SegmentedString::length):
        (WebCore::SegmentedString::setExcludeLineNumbers):
        (WebCore::SegmentedString::clear):
        (WebCore::SegmentedString::append):
        (WebCore::SegmentedString::prepend):
        (WebCore::SegmentedString::advanceSubstring):
        (WebCore::SegmentedString::toString):
        * platform/text/SegmentedString.h:
        (WebCore::SegmentedSubstring::SegmentedSubstring):
        (WebCore::SegmentedSubstring::appendTo):
        (WebCore::SegmentedString::SegmentedString):
        (WebCore::SegmentedString::isComposite):

2011-02-24  David Kilzer  <ddkilzer@apple.com>

        BUILD FIX: Add missing include for UnusedParam.h

        Not reviewed.

        * platform/mac/FileSystemMac.mm: Add include.  It should have
        originally been added with r76614.

2011-02-24  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Alexey Proskuryakov.

        DumpRenderTree should reset frame opener between tests.
        https://bugs.webkit.org/show_bug.cgi?id=54874

        No new tests. (no code affected, just exporting a method for DumpRenderTree use)

        * WebCore.exp.in:

2011-02-24  Dirk Schulze  <krit@webkit.org>

        Reviewed by Darin Adler.

        Removing a SVG animation target during animation crashes WebKit
        https://bugs.webkit.org/show_bug.cgi?id=12065

        SVGAnimations with IRI references via 'xlink:href' are slow
        https://bugs.webkit.org/show_bug.cgi?id=49437

        Store reference to target element for SVG animation elements. This is important if the
        target gets referenced via 'xlink:href'. At the moment we would call getElementById() multiple
        times on every animation step. A very expensive operation. This will be avoided with this patch.
        On the other hand, we need to be sure that the target element is always valid. The reference is
        reset, if the target was removed from document or its destructor was called. A HashMap in
        SVGDocumentExtensions stores all mappings from target element to all current animation elements.

        Tests: svg/custom/animate-target-id-changed.svg
               svg/custom/animate-target-removed-from-document.svg

        * svg/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::~SVGDocumentExtensions):
        (WebCore::SVGDocumentExtensions::addAnimationElementToTarget): New animation gets applied to target.
        (WebCore::SVGDocumentExtensions::removeAnimationElementFromTarget): Animation stoped, remove it from HashMap.
        (WebCore::SVGDocumentExtensions::removeAllAnimationElementsFromTarget): Target no longer in document, reset all
        references in SVG animation elements. 
        * svg/SVGDocumentExtensions.h:
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::~SVGElement):
        (WebCore::SVGElement::removedFromDocument):
        (WebCore::SVGElement::attributeChanged):
        * svg/SVGElement.h:
        * svg/SVGHKernElement.cpp:
        (WebCore::SVGHKernElement::removedFromDocument):
        * svg/SVGVKernElement.cpp:
        (WebCore::SVGVKernElement::removedFromDocument):
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::SVGSMILElement):
        (WebCore::SVGSMILElement::removedFromDocument):
        (WebCore::SVGSMILElement::eventBaseFor):
        (WebCore::SVGSMILElement::targetElement):
        * svg/animation/SVGSMILElement.h:
        (WebCore::SVGSMILElement::resetTargetElement):

2011-02-24  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Eric Seidel.

        REGRESSION: Accelerated transitions are jumpy
        https://bugs.webkit.org/show_bug.cgi?id=55022
        
        When an accelerated transition used the default timing function,
        a typo in toCAMediaTimingFunction() resulting in the incorrect
        timing function being used.

        Test: transitions/default-timing-function.html

        * platform/graphics/ca/mac/PlatformCAAnimationMac.mm:
        (toCAMediaTimingFunction):

2011-02-24  Andreas Kling  <kling@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Remove bogus optimizations in TextBreakIteratorQt
        https://bugs.webkit.org/show_bug.cgi?id=55139

        Let QTextBoundaryFinder hold a deep copy of the string data it's
        operating on, and don't use the same working buffer for all iterators.

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

2011-02-24  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Pavel Feldman.

        Web Inspector: [Text editor] Bug in the highlighter
        https://bugs.webkit.org/show_bug.cgi?id=54876

        Tests: inspector/editor/highlighter-long-line.html
               inspector/editor/highlighter-paste-in-comment.html

        * inspector/front-end/TextEditorHighlighter.js:
        (WebInspector.TextEditorHighlighter):
        (WebInspector.TextEditorHighlighter.prototype.set highlightChunkLimit):
        (WebInspector.TextEditorHighlighter.prototype.updateHighlight):
        (WebInspector.TextEditorHighlighter.prototype._highlightLines):

2011-02-24  James Simonsen  <simonjam@chromium.org>

        Reviewed by Tony Gentilcore.

        [Web Timing] Zero out navigationStart and unloadEvent on cross-origin redirect
        https://bugs.webkit.org/show_bug.cgi?id=55068

        Test: http/tests/misc/webtiming-origins.html

        * page/PerformanceTiming.cpp:
        (WebCore::PerformanceTiming::navigationStart): Zero out on cross origin redirect.
        (WebCore::PerformanceTiming::unloadEventStart): Ditto.
        (WebCore::PerformanceTiming::unloadEventEnd): Ditto.

2011-02-24  Adam Klein  <adamk@chromium.org>

        Reviewed by Darin Fisher.

        [chromium] Add code to WebKit Chromium to allow access to NetworkStateNotifier
        https://bugs.webkit.org/show_bug.cgi?id=54516

        Give Chromium's NetworkStateNotifier the ability to change the value
        of m_isOnLine, rather than making it always true.

        No new tests, not sure how to test this. No other LayoutTests seem
        to exercise navigator.onLine.

        * WebCore.gypi:
        * platform/network/NetworkStateNotifier.cpp:
        (WebCore::NetworkStateNotifier::setOnLine): Moved and renamed from NetworkStateNotifierAndroid.
        * platform/network/NetworkStateNotifier.h:
        (WebCore::NetworkStateNotifier::networkStateChange): Forward to setOnLine.
        * platform/network/android/NetworkStateNotifierAndroid.cpp: Removed.
        * platform/network/chromium/NetworkStateNotifierChromium.cpp: Removed.
        * platform/network/chromium/NetworkStateNotifierPrivate.h: Removed.

2011-02-24  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Eric Seidel.

        Support building WebKit with Python 3
        https://bugs.webkit.org/show_bug.cgi?id=55038

        Add support for Python 3 without breaking support for Python 2.

        Main issues:
        -print is a function in Python 3
        -list.sort() no longer have the cmp parameter
        -string.uppercase and string.lowercase have been removed

        * html/parser/create-html-entity-table:

2011-02-24  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Eric Seidel.

        AX: WebKit should expose MathML at least as well as it exposes ARIA role="math"
        https://bugs.webkit.org/show_bug.cgi?id=55049

        Make <math> elements behave as ARIA math roles and use MathML::alttext as a
        possible accessible label.
 
        Test: platform/mac/accessibility/math-alttext.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::accessibilityDescription):
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):
        * mathml/mathattrs.in:

2011-02-24  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: adjust protocol message format according to spec.
        https://bugs.webkit.org/show_bug.cgi?id=55140

        * inspector/CodeGeneratorInspector.pm:

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

        Windows Production build fix

        * platform/network/cf/AuthenticationCF.cpp: Add an extra #include as a workaround for
        <rdar://problem/9042114>.

2011-02-23  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: refactor inspect() workflow so that it did not push dom nodes.
        https://bugs.webkit.org/show_bug.cgi?id=55057

        Test: inspector/console/command-line-api-inspect.html

        I am working on getting rid of DOM agent pushes - everything should happen upon
        front-end request. This patch changes the way we handle inspect() command line
        api: instead of pushing nodes, we are telling front-end that inspect(object) has
        been requested. It is then up to front-end to request dom nodes and focus them in
        the tree. I also made inspect() work in a generic manner, using same routines for
        nodes, databases, storages and potentially new elements.

        As a side-effect, we don't do console.log from within inspect() anymore, but dump
        inspected value as inspect's result.

        Also, I added individual object release method and made object groups optional.

        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::InjectedScriptHost::scriptValueAsNode):
        (WebCore::InjectedScriptHost::nodeAsScriptValue):
        (WebCore::JSInjectedScriptHost::inspect):
        (WebCore::JSInjectedScriptHost::databaseId):
        (WebCore::JSInjectedScriptHost::storageId):
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::InjectedScriptHost::scriptValueAsNode):
        (WebCore::InjectedScriptHost::nodeAsScriptValue):
        (WebCore::V8InjectedScriptHost::inspectCallback):
        (WebCore::V8InjectedScriptHost::databaseIdCallback):
        (WebCore::V8InjectedScriptHost::storageIdCallback):
        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::nodeForObjectId):
        (WebCore::InjectedScript::releaseObject):
        (WebCore::InjectedScript::wrapForConsole):
        (WebCore::InjectedScript::inspectNode):
        * inspector/InjectedScript.h:
        * inspector/InjectedScriptHost.cpp:
        (WebCore::InjectedScriptHost::inspectImpl):
        (WebCore::InjectedScriptHost::databaseIdImpl):
        (WebCore::InjectedScriptHost::storageIdImpl):
        * inspector/InjectedScriptHost.h:
        * inspector/InjectedScriptHost.idl:
        * inspector/InjectedScriptSource.js:
        * inspector/Inspector.idl:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::focusNode):
        * inspector/InspectorDOMAgent.cpp:
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::storageId):
        (WebCore::InspectorDOMStorageAgent::didUseDOMStorage):
        * inspector/InspectorDOMStorageAgent.h:
        * inspector/InspectorDOMStorageResource.cpp:
        * inspector/InspectorDOMStorageResource.h:
        * inspector/InspectorDatabaseAgent.cpp:
        (WebCore::InspectorDatabaseAgent::databaseId):
        * inspector/InspectorDatabaseAgent.h:
        * inspector/InspectorDatabaseResource.cpp:
        * inspector/InspectorDatabaseResource.h:
        * inspector/InspectorRuntimeAgent.cpp:
        (WebCore::InspectorRuntimeAgent::releaseObject):
        * inspector/InspectorRuntimeAgent.h:
        * inspector/front-end/AuditRules.js:
        (WebInspector.AuditRules.evaluateInTargetWindow):
        (WebInspector.AuditRules.ImageDimensionsRule.prototype.doRun):
        * inspector/front-end/DOMStorage.js:
        * inspector/front-end/Database.js:
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype._onEvaluateOnInspectedPage):
        * inspector/front-end/inspector.js:
        (WebInspector.inspect):

2011-02-22  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: refactor "script or resource" mess in scripts panel.
        https://bugs.webkit.org/show_bug.cgi?id=54961

        - Use sourceName instead of scriptOrResource
        - Replace two huge functions _addScriptToFilesMenu and _showScriptOrResource that are
          calling each other recursively with small one-purpose non-recursive functions

        Test: inspector/debugger/scripts-panel.html

        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype.get defaultFocusedElement):
        (WebInspector.ScriptsPanel.prototype._scriptSourceChanged):
        (WebInspector.ScriptsPanel.prototype._addScript):
        (WebInspector.ScriptsPanel.prototype._resourceLoadingFinished):
        (WebInspector.ScriptsPanel.prototype._addOptionToFilesSelectAndShowSourceFrameIfNeeded):
        (WebInspector.ScriptsPanel.prototype._addOptionToFilesSelect.optionCompare):
        (WebInspector.ScriptsPanel.prototype._addOptionToFilesSelect):
        (WebInspector.ScriptsPanel.prototype.reset):
        (WebInspector.ScriptsPanel.prototype.canShowSourceLine):
        (WebInspector.ScriptsPanel.prototype.showSourceLine):
        (WebInspector.ScriptsPanel.prototype._showSourceFrame):
        (WebInspector.ScriptsPanel.prototype._sourceFrameForSourceName):
        (WebInspector.ScriptsPanel.prototype._recreateSourceFrame):
        (WebInspector.ScriptsPanel.prototype._sourceFrameLoaded):
        (WebInspector.ScriptsPanel.prototype._addItemToBackForwardList):
        (WebInspector.ScriptsPanel.prototype._sourceNameForScript):
        (WebInspector.ScriptsPanel.prototype._scriptForSourceName):
        (WebInspector.ScriptsPanel.prototype._callFrameSelected):
        (WebInspector.ScriptsPanel.prototype._filesSelectChanged):
        (WebInspector.ScriptsPanel.prototype._goBack):
        (WebInspector.ScriptsPanel.prototype._goForward):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.setExecutionLine):

2011-02-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Fragment parsing does not need to use HTMLSourceTracker
        https://bugs.webkit.org/show_bug.cgi?id=55011

        Any performance gains from this patch are likely
        the result of working around:
        https://bugs.webkit.org/show_bug.cgi?id=55005
        (Which suggests that fixing bug 55005 will speed
        up normal HTML parsing substantially.)

        Assuming I ran the numbers correct, here is the
        change from PerformanceTests/Parser/tiny-innerHTML:
        Before patch:
        avg 5586.1
        median 5594
        stdev 41.295157101045135
        min 5425
        max 5633

        After Patch:
        avg 2603.9
        median 2609.5
        stdev 32.500615378789355
        min 2475
        max 2649

        Removing just the HTMLSourceTracker calls brought our
        score from 5500 to 5200, removing the XSSFilter as well
        brought it to 2600 on my machine.

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::HTMLDocumentParser):
        (WebCore::HTMLDocumentParser::pumpTokenizer):
        * html/parser/HTMLDocumentParser.h:

2011-02-24  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Laszlo Gombos.

        [Qt] MinGW build fails to link
        https://bugs.webkit.org/show_bug.cgi?id=55050

        Prepend the libraries of subcomponents instead of appending them
        to fix the library order according to the dependency of the libraries

        No new tests needed.

        * WebCore.pri:

2011-02-24  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        CSP's script-src should block JavaScript URLs
        https://bugs.webkit.org/show_bug.cgi?id=54787

        Blocking JavaScript URLs required some re-architecting of the lifetime
        of the ContentSecurityPolicy object.  We now manage the lifetime the
        same way we manage the lifetime of the SecurityOrigin object.  In
        particular, when SecurityOrigin inherits into an about:blank iframe, we
        inherit the CSP object as well.  (This is covered by the test added in
        this patch.) In the future, we might consider making
        ContentSecurityPolicy a component of SecurityOrigin instead of a
        component of Document.

        I noted the trickiness in
        http://www.w3.org/Security/wiki/Content_Security_Policies so that we'll
        make sure it gets defined properly in the spec.

        Test: http/tests/security/contentSecurityPolicy/javascript-url.html

        * bindings/ScriptControllerBase.cpp:
        (WebCore::ScriptController::executeIfJavaScriptURL):
        * dom/Document.cpp:
        (WebCore::Document::initSecurityContext):
        * dom/Document.h:
        (WebCore::Document::contentSecurityPolicy):
        * page/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::allowJavaScriptURLs):
        * page/ContentSecurityPolicy.h:
        (WebCore::ContentSecurityPolicy::create):

2011-02-21  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Martin Robinson.

        [GStreamer] GRefPtr support for GstElement
        https://bugs.webkit.org/show_bug.cgi?id=54870

        * CMakeListsEfl.txt:
        * GNUmakefile.am:
        * platform/graphics/gstreamer/GRefPtrGStreamer.cpp: Added.
        (WTF::GstElement):
        * platform/graphics/gstreamer/GRefPtrGStreamer.h: Added.
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webKitWebSrcQuery):

2011-02-24  Emil A Eklund  <eae@chromium.org>

        Reviewed by Eric Seidel.

        Share code between elementFromPoint and caretRangeFromPoint in Document.
        https://bugs.webkit.org/show_bug.cgi?id=54610

        Eliminate duplicate code by moving shared logic from elementFromPoint and
        caretRangeFromPoint into helper function.

        * dom/Document.cpp:
        (WebCore::nodeFromPoint):
        (WebCore::Document::elementFromPoint):
        (WebCore::Document::caretRangeFromPoint):

2011-02-24  Ilya Tikhonovsky  <loislo@chromium.org>

        Unreviewed build fix.

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::removeAttribute):
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::cachedResources):
        * inspector/InspectorRuntimeAgent.cpp:
        (WebCore::InspectorRuntimeAgent::evaluate):

2011-02-24  Zan Dobersek  <zandobersek@gmail.com>

        Reviewed by Eric Seidel.

        [gtk] Failing collinear arcTo canvas tests
        https://bugs.webkit.org/show_bug.cgi?id=54658

        Check for collinearity of the three points that affect how arcTo call
        results. This behavior is in accordance with the HTML standard.

        No new tests added as this is already covered by at least two tests.

        * platform/graphics/cairo/PathCairo.cpp:
        (WebCore::areaOfTriangleFormedByPoints):
        (WebCore::Path::addArcTo):

2011-02-24  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: There is a validator of the protocol message format.

        It has two parts. InspectorBackendStub.js is the frontend part.
        InspectorBackendDispatcher.cpp is the backend part.
        Both parts are checking protocol message format and report the error if
        the message has not enough fields or the types of fields do not match with
        Inspector.idl specification. These validators are generated automatically.

        In addition, we have a number of places at the backend where we check the
        function arguments and do nothing if the arguments are invalid
        from the business logic point of view.

        This patch bring us an ability to report a custom error from such function to the frontend.

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

        * inspector/CodeGeneratorInspector.pm:
        * inspector/InjectedScriptHost.cpp:
        * inspector/InspectorAgent.cpp:
        * inspector/InspectorAgent.h:
        * inspector/InspectorApplicationCacheAgent.cpp:
        * inspector/InspectorApplicationCacheAgent.h:
        * inspector/InspectorBrowserDebuggerAgent.cpp:
        * inspector/InspectorBrowserDebuggerAgent.h:
        * inspector/InspectorCSSAgent.cpp:
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorConsoleAgent.cpp:
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorController.cpp:
        * inspector/InspectorDOMAgent.cpp:
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMStorageAgent.cpp:
        * inspector/InspectorDOMStorageAgent.h:
        * inspector/InspectorDatabaseAgent.cpp:
        * inspector/InspectorDatabaseAgent.h:
        * inspector/InspectorDebuggerAgent.cpp:
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorProfilerAgent.cpp:
        * inspector/InspectorProfilerAgent.h:
        * inspector/InspectorResourceAgent.cpp:
        * inspector/InspectorResourceAgent.h:
        * inspector/InspectorRuntimeAgent.cpp:
        * inspector/InspectorRuntimeAgent.h:
        * inspector/InspectorTimelineAgent.cpp:
        * inspector/InspectorTimelineAgent.h:

2011-02-24  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Ojan Vafai.

        Crash when deleting inside a blockquote with a large offset
        https://bugs.webkit.org/show_bug.cgi?id=55098

        The bug was caused by inconsistency in lineBreakExistsAtPosition and breakOutOfEmptyMailBlockquotedParagraph.
        While lineBreakExistsAtPosition was checking that a line break exists at the downstream of the given position,
        breakOutOfEmptyMailBlockquotedParagraph wasn't using the downstream for caretPos. Fixed the bug by using
        the downstream position to instantiate caretPos.

        Co-author: Abhishek Arya <inferno@chromium.org>.

        Test: editing/deleting/delete-blockquote-large-offsets.html

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::breakOutOfEmptyMailBlockquotedParagraph):

2011-02-24  Robert Kroeger  <rjkroege@chromium.org>

        Reviewed by Darin Fisher.

        Added timestamps to PlatformTouchEvent etc.

        PlatformTouchEvent doesn't have a timestamp and so
        eventSender.leapForward cannot be used for touchevent based tests.
        This change adds a timestamp to PlatformTouchEvent and initializes
        it in a reasonable manner on Android and Qt platforms.

        [chromium] [WebCore] [android] Touch events are missing time stamps
        https://bugs.webkit.org/show_bug.cgi?id=53510

        * platform/PlatformTouchEvent.h:
        (WebCore::PlatformTouchEvent::PlatformTouchEvent):
        (WebCore::PlatformTouchEvent::timestamp):
        * platform/android/PlatformTouchEventAndroid.cpp:
        (WebCore::PlatformTouchEvent::PlatformTouchEvent):
        * platform/qt/PlatformTouchEventQt.cpp:
        (WebCore::PlatformTouchEvent::PlatformTouchEvent):

2011-02-24  Renata Hodovan  <reni@webkit.org>

        Unreviewed GTK, Snow Leopard build fix for r79474.

        * platform/graphics/filters/FEConvolveMatrix.cpp:
        (WebCore::FEConvolveMatrix::setKernelUnitLength):
        * platform/graphics/filters/FEConvolveMatrix.h:

2011-02-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Xan Lopez.

        Use IntRect instead of a pointer to a GtkAllocation struct to avoid
        unnecessary memory allocations.

        * plugins/PluginView.h:
        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::setNPWindowIfNeeded):
        (WebCore::PluginView::plugAddedCallback):

2011-02-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix the build with GTK+ 3.

        * plugins/PluginView.h:

2011-02-23  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        Refactor HTMLEquivalent into a hierachy of classes
        https://bugs.webkit.org/show_bug.cgi?id=55025

        Converted HTMLEquivalent into a class.  Some logic in removeImplicitlyStyledElement is
        extracted as member functions of HTMLEquivalent and its subclasses.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::HTMLEquivalent::create): Added.
        (WebCore::HTMLEquivalent::~HTMLEquivalent): Added.
        (WebCore::HTMLEquivalent::matches): Returns true if the element is an equivalent, meaning that
        the element's implicit style affects the property of this equivalence.
        (WebCore::HTMLEquivalent::hasAttribute): Returns true if this equivalence requires attributes;
        e.g. color, size, dir.
        (WebCore::HTMLEquivalent::propertyExistsInStyle): Returns true if the property of this equivalence
        exists in the specified style. e.g. if this equivalence is for size attribute and font-size property,
        this function returns true if the specified style has font-size property set.
        (WebCore::HTMLEquivalent::HTMLEquivalent): Added.
        (WebCore::HTMLEquivalent::valueIsPresentInStyle): Returns true if the specified style has the
        implicit style of the specified element of this equivalence.
        (WebCore::HTMLEquivalent::addToStyle): Adds the implicit style of the element of this equivalence
        to the specified mutable style.
        (WebCore::HTMLEquivalentValueList::create): Added.
        (WebCore::HTMLEquivalentValueList::HTMLEquivalentValueList): Added.
        (WebCore::HTMLEquivalentValueList::valueIsPresentInStyle): Added.
        (WebCore::HTMLEquivalentAttribute::create): Added.
        (WebCore::HTMLEquivalentAttribute::matches): Added.
        (WebCore::HTMLEquivalentAttribute::hasAttribute): Added.
        (WebCore::HTMLEquivalentAttribute::attributeName): Added.
        (WebCore::HTMLEquivalentAttribute::HTMLEquivalentAttribute): Added.
        (WebCore::HTMLEquivalentAttribute::valueIsPresentInStyle): Added.
        (WebCore::HTMLEquivalentAttribute::addToStyle): Added.
        (WebCore::HTMLEquivalentAttribute::attributeValueAsCSSValue): Added.
        (WebCore::HTMLEquivalentFontSizeAttribute::create): Added.
        (WebCore::HTMLEquivalentFontSizeAttribute::HTMLEquivalentFontSizeAttribute): Added.
        (WebCore::HTMLEquivalentFontSizeAttribute::attributeValueAsCSSValue): Added.
        (WebCore::ApplyStyleCommand::removeImplicitlyStyledElement): Uses new classes.

2011-02-23  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r79510.
        http://trac.webkit.org/changeset/79510
        https://bugs.webkit.org/show_bug.cgi?id=55114

        It made ~200 tests crash on Qt bot (Requested by Ossy_ on
        #webkit).

        * platform/text/TextBreakIterator.h:
        * platform/text/TextBreakIteratorICU.cpp:
        (WebCore::lineBreakIterator):
        * platform/text/qt/TextBreakIteratorQt.cpp:
        (WebCore::lineBreakIterator):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::layoutInlineChildren):
        (WebCore::RenderBlock::findNextLineBreak):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::computePreferredLogicalWidths):
        * rendering/break_lines.cpp:
        (WebCore::nextBreakablePosition):
        * rendering/break_lines.h:
        (WebCore::isBreakable):

2011-02-23  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Mark Rowe.
        
        Used svn merge -r79502:79501 to roll out r79502 because it broke the
        SnowLeopard and Leopard builds.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/mac/HTMLConverter.h: Removed.
        * platform/mac/HTMLConverter.mm: Removed.
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::writeSelection):

2011-02-23  Beth Dakin  <bdakin@apple.com>

        Reviewed by Dan Bernstein.

        Fix for <rdar://problem/9002157> Garbage in the bottom right corner of the window 
        when scrolling

        When there is both a horizontal and a vertical scrollbar, it is necessary to 
        include the space between them in the invalidation.
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::setScrollOffsetFromAnimation):

2011-02-23  Ned Holbrook  <nholbrook@apple.com>

        Reviewed by Dan Bernstein.

        Minimize calls to ubrk_setText()
        https://bugs.webkit.org/show_bug.cgi?id=54912
        <rdar://problem/9032774>

        Avoid calling ubrk_setText() once per call to isBreakable() by using a LazyLineBreakIterator, which defers
        break iterator creation until needed. This requires replacing the global line break iterator primitive with a
        version that can be nested, since in some cases two iterators may need to be outstanding. In particular,
        layoutInlineChildren() may indirectly call computePreferredLogicalWidths() and each may need an iterator.
        In a test with a paragraph of Japanese text, this reduced the number of ubrk_setText() calls from 164 to 1.

        * platform/text/TextBreakIterator.h: Add LazyLineBreakIterator.
        (WebCore::LazyLineBreakIterator::LazyLineBreakIterator):
        (WebCore::LazyLineBreakIterator::~LazyLineBreakIterator):
        (WebCore::LazyLineBreakIterator::string):
        (WebCore::LazyLineBreakIterator::length):
        (WebCore::LazyLineBreakIterator::get):
        (WebCore::LazyLineBreakIterator::reset):
        * platform/text/TextBreakIteratorICU.cpp: Replace lineBreakIterator() primitive with acquireLineBreakIterator()/releaseLineBreakIterator().
        (WebCore::acquireLineBreakIterator):
        (WebCore::releaseLineBreakIterator):
        * platform/text/qt/TextBreakIteratorQt.cpp: Ditto TextBreakIteratorICU.cpp.
        (WebCore::acquireLineBreakIterator):
        (WebCore::releaseLineBreakIterator):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::layoutInlineChildren): Pass a mapping of RenderText to LazyLineBreakIterator from one call of findNextLineBreak() to the next.
        (WebCore::RenderBlock::findNextLineBreak): Use said mapping, resetting LazyLineBreakIterator for any newly-encountered RenderText.
        * rendering/RenderText.cpp: Use a local LazyLineBreakIterator.
        (WebCore::RenderText::computePreferredLogicalWidths):
        * rendering/break_lines.cpp: Accept LazyLineBreakIterator rather than TextBreakIterator.
        (WebCore::nextBreakablePosition):
        * rendering/break_lines.h: Accept LazyLineBreakIterator rather than TextBreakIterator.
        (WebCore::isBreakable):

2011-02-23  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * platform/mac/HTMLConverter.h:

2011-02-17  Enrica Casucci  <enrica@apple.com>

        Reviewed by Darin Adler.

        REGRESSION: Copied content loses formatting on paste to external apps.
        https://bugs.webkit.org/show_bug.cgi?id=47615
        <rdar://problem/9001214>

        This patch adds a way for WebKit2 to create NSAttributedStrings from
        a DOM range without using the AppKit api initWithDOMRange that internally
        needs to access the WebView. The NSAttributedString is needed to create
        RTF formats in the pasteboard.
        This is to be considered a first step, since in the future we want to have
        an implementation based on the TextIterator.
        
        * WebCore.xcodeproj/project.pbxproj: Added new file.
        * platform/mac/HTMLConverter.h: Added.
        * platform/mac/HTMLConverter.mm: Added.
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::writeSelection): We now use WebHTMLConverter
        class for WebKit2 to create the NSAttributedString from the DOM range.

2011-02-23  David Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=46500, make positioned elements work with vertical text.

        Patch computePositionedLogicalHeightUsing to be writing-mode-aware. 

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computePositionedLogicalWidthUsing):
        (WebCore::RenderBox::computePositionedLogicalHeightUsing):
        * rendering/RenderBox.h:

2011-02-23  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [Gtk] Flash item placed on wrong location right after load
        https://bugs.webkit.org/show_bug.cgi?id=37769

        If a plugin is GtkSocket based, do not set the widget allocation until the
        window is actually embedded in the parent. When the window is embedded, use
        any pending allocation for the call to gtk_widget_size_allocate. This bug
        seems to only appear with Flash movies loaded as the src of an iframe.

        * manual-tests/plugins/windowed-in-iframe.html: Added.
        * plugins/PluginView.h: Add a few new members to track window embedding state.
        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::setNPWindowIfNeeded): If this is a GtkSocket-based plugin
        wait until the plug-added signal fires to set the widget allocation.
        (WebCore::PluginView::plugAddedCallback): Updated to be a static method, so that
        we can access private members. If there is a pending allocation, call gtk_widget_size_allocate
        with it.
        (WebCore::PluginView::platformStart): Update the plugin state, so that we do not
        call gtk_widget_size_allocate if the window isn't embedded.

2011-02-18  Enrica Casucci  <enrica@apple.com>

        Reviewed by Adam Roben.

        Mac OS X Services are not available for selected text in WebKit2 windows.
        https://bugs.webkit.org/show_bug.cgi?id=54777
        <rdar://problem/8666428>

        The changes to WebCore for this bug are limited to exposing a new
        entry point in the Editor class to write to the pasteboard and
        changes to the Pasteboard class to write the selection with
        a given set of pasteboard types. The majority of the work
        is done in WebKit2.
        
        * WebCore.exp.in:
        * editing/Editor.h:
        * editing/mac/EditorMac.mm: Added entrypoint to write the
        selection to the pasteboard.
        (WebCore::Editor::writeSelectionToPasteboard):
        * platform/Pasteboard.h:
        * platform/mac/ClipboardMac.mm:
        (WebCore::ClipboardMac::writeRange):
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::writeSelection):

2011-02-23  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=46500, make positioned elements work with vertical text.

        Patch computePositionedLogicalHeight to be writing-mode-aware.  Functions it calls have not been
        patched yet, so still not testable in a vertical text environment.

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

2011-02-23  David Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=46500, make positioned elements work with vertical text.

        Patch computePositionedLogicalWidthUsing to be writing-mode-aware. Still not testable in a vertical text
        environment, since height computations will overwrite all values computed here until they are patched as well.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computePositionedLogicalWidthUsing):
        * rendering/RenderBox.h:

2011-02-23  Renata Hodovan  <reni@webkit.org>

        Reviewed by Nikolas Zimmermann.

        FEColorMatrixElement changes doesn't require relayout
        https://bugs.webkit.org/show_bug.cgi?id=54880

        When the FEColorMatrixElement receives an update message but the given value remains the same we don't need
        to relayout the filter.

        No new tests are needed because this modificiation is covered by the dynamic update tests of FEColorMatrix.

        * platform/graphics/filters/FEColorMatrix.cpp:
        (WebCore::FEColorMatrix::setType):
        (WebCore::FEColorMatrix::setValues):
        * platform/graphics/filters/FEColorMatrix.h:
        * svg/SVGFEColorMatrixElement.cpp:
        (WebCore::SVGFEColorMatrixElement::setFilterEffectAttribute):
        (WebCore::SVGFEColorMatrixElement::svgAttributeChanged):
        * svg/SVGFEColorMatrixElement.h:

2011-02-23  James Robinson  <jamesr@chromium.org>

        REGRESSION(79466): fast/parser/test-unicode-characters-in-attribute-name.html fails

        Reverts TextCodecUTF16.cpp back to pre-79466 state.  The crash fix in 79466 was for UTF-8 only, it also caused the UTF16 path to fail.

        * platform/text/TextCodecUTF16.cpp:
        (WebCore::newStreamingTextDecoderUTF16LE):
        (WebCore::newStreamingTextDecoderUTF16BE):
        (WebCore::TextCodecUTF16::decode):
        (WebCore::TextCodecUTF16::encode):

2011-02-23  David Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=46500, make positioned elements work with vertical text.

        Patch computePositionedLogicalWidth to be writing-mode-aware.  Functions it calls have not been
        patched yet, so still not testable in a vertical text environment.

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

2011-02-23  James Robinson  <jamesr@chromium.org>

        Unreviewed, rolling out r79428.
        http://trac.webkit.org/changeset/79428
        https://bugs.webkit.org/show_bug.cgi?id=54714

        Does not work in the Chromium sandbox

        * websockets/WebSocketHandshake.cpp:
        (WebCore::generateSecWebSocketKey):
        (WebCore::generateKey3):

2011-02-23  David Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=46500, make positioned elements work with vertical text.
        
        Add logical accessors for the left()/right()/top()/bottom() properties on the RenderStyle.

        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::logicalLeft):
        (WebCore::InheritedFlags::logicalRight):
        (WebCore::InheritedFlags::logicalTop):
        (WebCore::InheritedFlags::logicalBottom):

2011-02-23  Darin Adler  <darin@apple.com>

        Reviewed by Alexey Proskuryakov.

        Fix crash seen in one of the regression tests.

        * platform/text/TextCodecUTF16.cpp:
        (WebCore::TextCodecUTF16::decode): Handle case where we did not decode any new data,
        we were not told to flush, and we had a buffered byte. The assertion here was incorrect,
        and the correct thing to do is nothing.

2011-02-23  Sergey Glazunov  <serg.glazunov@gmail.com>

        Reviewed by James Robinson.

        SVGCursorElement::removeClient() should verify that its argument is connected with
        the proper cursor element.
        https://bugs.webkit.org/show_bug.cgi?id=54979

        Test: svg/css/multiple-cursors-crash.html

        * svg/SVGCursorElement.cpp:
        (WebCore::SVGCursorElement::removeClient):

2011-02-23  Renata Hodovan  <reni@webkit.org>

        Reviewed by Darin Adler.

        FEConvolveMatrixElement changes doesn't require relayout
        https://bugs.webkit.org/show_bug.cgi?id=55067

        When the FEConvolveMatrixElement receives an update message but the
        given value remains the same we don't need to relayout the filter.

        No new tests are needed because this modificiation is covered by the
        dynamic update tests of FEConvolveMatrix.

        * platform/graphics/filters/FEConvolveMatrix.cpp:
        (WebCore::FEConvolveMatrix::setDivisor):
        (WebCore::FEConvolveMatrix::setBias):
        (WebCore::FEConvolveMatrix::setTargetOffset):
        (WebCore::FEConvolveMatrix::edgeMode):
        (WebCore::FEConvolveMatrix::setEdgeMode):
        (WebCore::FEConvolveMatrix::setPreserveAlpha):
        * platform/graphics/filters/FEConvolveMatrix.h:
        * svg/SVGFEConvolveMatrixElement.cpp:
        (WebCore::SVGFEConvolveMatrixElement::setFilterEffectAttribute):
        (WebCore::SVGFEConvolveMatrixElement::svgAttributeChanged):
        * svg/SVGFEConvolveMatrixElement.h:

2011-02-23  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        Rolled back in r79367 with SnowLeopard Release bot crash fixed.
        https://bugs.webkit.org/show_bug.cgi?id=54999

        * ForwardingHeaders/wtf/DoublyLinkedList.h: Added.

2011-02-23  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        Add more thorough manual test coverage for media controls
        https://bugs.webkit.org/show_bug.cgi?id=55006

        * manual-tests/media-controls.html: Added.

2011-02-23  Darin Adler  <darin@apple.com>

        Fix build.

        * platform/text/TextCodecUTF16.cpp:
        (WebCore::TextCodecUTF16::decode): Removed stray unused local variable.

2011-02-23  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        Setting shadow host should also attach and set inDocument, just like
        appending/inserting a child.
        https://bugs.webkit.org/show_bug.cgi?id=55065

        No new tests, because functionality is not yet used.

        * dom/Element.cpp:
        (WebCore::Element::setShadowRoot): Add attaching and setting inDocument
            for the shadow DOM subtree, like the host.

2011-02-23  David Hyatt  <hyatt@apple.com>

        Reviewed by Darin Adler and Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=46500, make positioned elements work with vertical text.
        
        - Add clientLogicalWidth and clientLogicalHeight that call the correct clientWidth or clientHeight based off
        writing-mode.
        - Patch clientLogicalBottom to use clientLogicalHeight.
        - Convert containingBlockWidthForPositioned and containingBlockHeightForPositioned to be logical and to make use of
        clientLogicalHeight/Width.  Also make them able to handle perpendicular writing mode containining blocks.
        - Refine containingBlockLogicalHeightForPositioned to match containingBlockLogicalWidthForPositioned more closely.
        
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeReplacedLogicalWidthUsing):
        (WebCore::RenderBox::computeReplacedLogicalHeightUsing):
        (WebCore::RenderBox::containingBlockLogicalWidthForPositioned):
        (WebCore::RenderBox::containingBlockLogicalHeightForPositioned):
        (WebCore::RenderBox::computePositionedLogicalWidth):
        (WebCore::RenderBox::computePositionedLogicalHeight):
        (WebCore::RenderBox::computePositionedLogicalWidthReplaced):
        (WebCore::RenderBox::computePositionedLogicalHeightReplaced):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::clientLogicalWidth):
        (WebCore::RenderBox::clientLogicalHeight):
        (WebCore::RenderBox::clientLogicalBottom):

2011-02-23  Darin Adler  <darin@apple.com>

        Reviewed by Alexey Proskuryakov.

        REGRESSION (new UTF-8 decoder): Reproducible crash on alltommac.se
        https://bugs.webkit.org/show_bug.cgi?id=54862

        Correct handling of end of buffer partial sequence in UTF-8 and UTF-16 decoders when flushing with zero length
        https://bugs.webkit.org/show_bug.cgi?id=54444

        No new tests at this time. I will add some tests later, but since multiple
        people are hitting this I wanted to get it in as quickly as possible.

        * platform/text/TextCodecUTF16.cpp:
        (WebCore::TextCodecUTF16::decode): Tweaked coding style quite a bit.
        Removed special case for zero length now that main code handles it
        correctly. Used words instead of abbreviations for local variable names.
        Added error handling for a trailing byte.

        * platform/text/TextCodecUTF8.cpp:
        (WebCore::TextCodecUTF8::consumePartialSequenceByte): Added. Helper function
        to make the handleError and handlePartialSequence functions clearer.
        (WebCore::TextCodecUTF8::handleError): Added. Helper function to make the
        handlePartialSequence clearer.
        (WebCore::TextCodecUTF8::handlePartialSequence): Added. Factored out code for
        the partial sequence case. Making this a separate function probably helps make
        the fast case a little faster. This new version handles more cases correctly,
        which is what fixes the crashes we were seeing. In particular, it no longer
        assumes that the partial sequence is truly partial, because there are cases
        where we end up handling complete sequences here, such as when a complete
        sequence is inside a malformed partial sequence.
        (WebCore::TextCodecUTF8::decode): Removed partial sequence code and made this
        call handlePartialSequence instead. Could be streamlined if we double checked
        that passing a reference to "destination" and "source" doesn't harm code
        generation too much, so perhaps someone can do that research on a few compilers
        later and clean this up. Removed special case for zero length now that the
        main code handles that correctly.

        * platform/text/TextCodecUTF8.h: Added declarations for new functions.
        Made partial sequence buffer large enough to hold a whole sequence so we can
        use it to complete and decode a sequence in place.

2011-02-23  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Dave Hyatt.

        Make clear float lineboxes resilient against overflows.        
        https://bugs.webkit.org/show_bug.cgi?id=54995

        We try to dirty everthing in block range if we have a negative
        logical bottom, or if our logical bottom is less than our logical
        top, or if our logical top is equal to INT_MAX. Plus, we also dirty
        a linebox if its block logical height is less than zero.
        Tests: fast/overflow/overflow-height-float-not-removed-crash2.html
               fast/overflow/overflow-height-float-not-removed-crash3.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::removeFloatingObject):
        (WebCore::RenderBlock::markLinesDirtyInBlockRange):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::alignBoxesInBlockDirection): remove the hack
        added in r69735. we don't need this anymore since we are making the
        underlying float dirty logic resilient.

2011-02-22  Kenneth Russell  <kbr@google.com>

        Reviewed by Darin Fisher.

        Per-page minimum DOMTimer interval broken for repeating timers
        https://bugs.webkit.org/show_bug.cgi?id=55014

        When the minimum timer interval is adjusted, if the timer is
        repeating, cause its repeat interval to be set to its original
        timeout clamped to the new minimum interval.

        Tests: fast/dom/timer-increase-min-interval-repeating.html
               fast/dom/timer-increase-then-decrease-min-interval-repeating.html

        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::adjustMinimumTimerInterval):

2011-02-23  Dan Bernstein  <mitz@apple.com>

        Reviewed by Maciej Stachowiak.

        Fix two issues seen in WebKit2 views on Mac:
        - <rdar://problem/8867831> WebKit2: Insertion points in form fields no longer blink
        - <rdar://problem/8950362> REGRESSION (WebKit2): Cannot deselect text

        * page/EventHandler.cpp:
        (WebCore::EventHandler::EventHandler): Initialize m_activationEventNumber
        to -1. Since WebKit2 doesn�t support non-activating clicks yet (<http://webkit.org/b/55053>
        <rdar://problem/9042197>) and doesn�t send event numbers, all events were considered to be
        window-activating events. This in turn prevented them from clearing the selection and resuming
        caret blinking on mouse up.

2011-02-23  Jacob Dinu  <dinu.jacob@nokia.com>

        Reviewed by Pavel Feldman.

        Web Inspector: Linking error for some InspectorController symbols
        https://bugs.webkit.org/show_bug.cgi?id=54953

        Moved out hideHighlight definition from under JAVASCRIPT_DEBUGGER flag 

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::hideHighlight):
        (WebCore::InspectorController::resume):

2011-02-23  Hans Wennborg  <hans@chromium.org>

        IndexedDB: Move some SQL code into IDBBackingStore
        https://bugs.webkit.org/show_bug.cgi?id=54889

        The idea is to gather all the SQL logic into IDBBackingStore.

        No new functionality, so no new tests.

        * storage/IDBBackingStore.cpp:
        (WebCore::IDBBackingStore::IDBBackingStore):
        (WebCore::runCommands):
        (WebCore::createTables):
        (WebCore::createMetaDataTable):
        (WebCore::getDatabaseSchemaVersion):
        (WebCore::migrateDatabase):
        (WebCore::IDBBackingStore::open):
        (WebCore::IDBBackingStore::extractIDBDatabaseMetaData):
        (WebCore::IDBBackingStore::setIDBDatabaseMetaData):
        (WebCore::IDBBackingStore::getObjectStores):
        (WebCore::IDBBackingStore::createObjectStore):
        (WebCore::doDelete):
        (WebCore::IDBBackingStore::deleteObjectStore):
        (WebCore::whereSyntaxForKey):
        (WebCore::bindKeyToQuery):
        (WebCore::IDBBackingStore::getObjectStoreRecord):
        (WebCore::bindKeyToQueryWithNulls):
        (WebCore::IDBBackingStore::putObjectStoreRecord):
        (WebCore::IDBBackingStore::deleteIndexDataForRecord):
        (WebCore::IDBBackingStore::putIndexDataForRecord):
        (WebCore::IDBBackingStore::createIndex):
        (WebCore::IDBBackingStore::deleteIndex):
        (WebCore::IDBBackingStore::clearObjectStore):
        * storage/IDBBackingStore.h:
        * storage/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::IDBDatabaseBackendImpl):
        (WebCore::IDBDatabaseBackendImpl::createObjectStoreInternal):
        (WebCore::IDBDatabaseBackendImpl::deleteObjectStoreInternal):
        (WebCore::IDBDatabaseBackendImpl::setVersionInternal):
        (WebCore::IDBDatabaseBackendImpl::loadObjectStores):
        * storage/IDBFactoryBackendImpl.cpp:
        (WebCore::IDBFactoryBackendImpl::IDBFactoryBackendImpl):
        (WebCore::IDBFactoryBackendImpl::addIDBBackingStore):
        (WebCore::IDBFactoryBackendImpl::removeIDBBackingStore):
        (WebCore::IDBFactoryBackendImpl::open):
        * storage/IDBFactoryBackendImpl.h:
        * storage/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::getInternal):
        (WebCore::IDBObjectStoreBackendImpl::putInternal):
        (WebCore::IDBObjectStoreBackendImpl::clearInternal):
        (WebCore::populateIndex):
        (WebCore::IDBObjectStoreBackendImpl::createIndexInternal):
        (WebCore::IDBObjectStoreBackendImpl::deleteIndexInternal):

2011-02-23  Siddharth Mathur  <siddharth.mathur@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] Fix the Symbian build after r79334
        https://bugs.webkit.org/show_bug.cgi?id=55044

        No new tests as there is no new functionality.

        * WebCore.pri: Reorder symbian blocks to make sure that
        system-sqlite is set before it is tested.

        Copy the rules from JavaScriptCore.pri for defineTest().

2011-02-23  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Alexey Proskuryakov.

        Use AtomicString::fromUTF8 instead of String::fromUTF8 for AtomicStrings
        https://bugs.webkit.org/show_bug.cgi?id=54992

        * websockets/WebSocketHandshake.cpp:
        (WebCore::WebSocketHandshake::readHTTPHeaders):

2011-02-23  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Andreas Kling.

        [CMake] Move platform dependent files out of main CMakeLists.txt
        https://bugs.webkit.org/show_bug.cgi?id=53891

        Apple Windows port does not use the image decoders,
        so move them into the platform specific CMake files.

        * CMakeLists.txt:
        * CMakeListsEfl.txt:
        * CMakeListsWinCE.txt:

2011-02-21  Stephen White  <senorblanco@chromium.org>

        Reviewed by Kenneth Russell.

        Jittering when animating a rotated image
        https://bugs.webkit.org/show_bug.cgi?id=50775

        Since Skia does not seem to suffer from pixel cracks when scaling to
        non-integral sizes the way CG does, no-op roundToDevicePixels on the
        Skia implementation.

        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::roundToDevicePixels):

2011-02-23  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Andreas Kling.

        [WINCE] Get rid of TemporaryLinkStubs.cpp
        https://bugs.webkit.org/show_bug.cgi?id=54825

        * CMakeListsWinCE.txt:
        * platform/network/win/CookieStorageWin.cpp: Copied from platform/wince/TemporaryLinkStubs.cpp.
        * platform/wince/TemporaryLinkStubs.cpp: Removed.

2011-02-23  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Darin Adler.

        Rename PLATFORM(CF) to USE(CF)
        https://bugs.webkit.org/show_bug.cgi?id=53540

        * WebCore.gyp/WebCore.gyp:
        * editing/SmartReplace.cpp:
        * editing/SmartReplaceICU.cpp:
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::didReceiveResponse):
        (WebCore::MainResourceLoader::didReceiveData):
        (WebCore::MainResourceLoader::didFinishLoading):
        (WebCore::MainResourceLoader::didFail):
        * loader/archive/ArchiveFactory.cpp:
        (WebCore::archiveMIMETypes):
        * platform/FileSystem.h:
        * platform/KURL.h:
        * platform/KURLGoogle.cpp:
        * platform/RunLoopTimer.h:
        * platform/SharedBuffer.cpp:
        * platform/SharedBuffer.h:
        * platform/UUID.cpp:
        (WebCore::createCanonicalUUIDString):
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceRequestBase.h:
        * platform/network/curl/ResourceHandleCurl.cpp:
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::certificatePath):
        * platform/text/cf/StringCF.cpp:
        * platform/text/cf/StringImplCF.cpp:
        * platform/win/BString.cpp:
        * platform/win/BString.h:
        * platform/win/ClipboardUtilitiesWin.cpp:
        (WebCore::getWebLocData):
        (WebCore::getURL):
        (WebCore::getClipboardData):
        * platform/win/ClipboardWin.cpp:
        (WebCore::writeFileToDataObject):
        * platform/win/SearchPopupMenuWin.cpp:
        (WebCore::SearchPopupMenuWin::enabled):
        (WebCore::SearchPopupMenuWin::saveRecentSearches):
        (WebCore::SearchPopupMenuWin::loadRecentSearches):

2011-02-23  Benjamin Kalman  <kalman@chromium.org>

        Reviewed by Ojan Vafai.

        Moving or selecting backwards by words jumps to start of contenteditable region if contenteditable=false span is encountered
        https://bugs.webkit.org/show_bug.cgi?id=51001

        Test: editing/selection/extend-backward-by-word-over-non-editable.html

        Revert some previous changes (the TextIteratorEndsAtEditingBoundary text iteration behaviour) which caused this
        bug in the first place, and fix SimplifiedBackwardsTextIterator's iteration range check as an alternative fix.

        The original bug was that double-clicking on an inline editable span at the start of a paragraph would clear the
        selection (webkit.org/b/36360).  This was caused by upstream/downstream VisbiblePosition complications.  To fix,
        refuse to iterate beyond the start node (rather than refusing to iterate across editable boundaries, which
        causes this bug).

        To see why this is correct, and to make it clearer that is indeed what is happening, the text iterator code has
        been slightly restructured to express the invariant that the iterator will never advance past the start node.

        * editing/TextIterator.cpp:
        (WebCore::TextIterator::TextIterator): Remove references to TextIterationEndsAtEditing boundary.
        (WebCore::SimplifiedBackwardsTextIterator::SimplifiedBackwardsTextIterator): Remove m_pastStartNode as the
        mechanism for iteration range checking, and use a flag m_havePassedStartNode instead.
        (WebCore::SimplifiedBackwardsTextIterator::advance): Clean up, use advanceRespectingRange and
        m_havePassedStartNode for iteration range checking rather than m_pastStartNode.
        (WebCore::SimplifiedBackwardsTextIterator::advanceRespectingRange): The new way of modifying m_node
        which updates m_havePassedStartNode and refuses to continue when it becomes true.
        * editing/TextIterator.h: Remove TextIteratorEndsAtEditingBoundary, update for new/removed prototypes and
        member variables.
        * editing/visible_units.cpp:
        (WebCore::previousBoundary): Remove references to TextIteratorEndsAtEditingBoundary.

2011-02-23  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Adam Barth.

        WebSocket uses insecure random numbers
        https://bugs.webkit.org/show_bug.cgi?id=54714

        * websockets/WebSocketHandshake.cpp:
        (WebCore::randomNumberLessThan):
        (WebCore::generateSecWebSocketKey):
        (WebCore::generateKey3):

2011-02-21  Hans Wennborg  <hans@chromium.org>

        Reviewed by Jeremy Orlow.

        IndexedDB: Rename IDBSQLiteDatabase to IDBBackingStore
        https://bugs.webkit.org/show_bug.cgi?id=54864

        No new functionality, so no new tests.

        * GNUmakefile.am:
        * WebCore.gypi:
        * storage/IDBBackingStore.cpp:
        (WebCore::IDBBackingStore::IDBBackingStore):
        (WebCore::IDBBackingStore::~IDBBackingStore):
        * storage/IDBBackingStore.h:
        (WebCore::IDBBackingStore::create):
        (WebCore::IDBBackingStore::db):
        * storage/IDBCursorBackendImpl.cpp:
        (WebCore::IDBCursorBackendImpl::IDBCursorBackendImpl):
        (WebCore::IDBCursorBackendImpl::currentRowExists):
        (WebCore::IDBCursorBackendImpl::database):
        * storage/IDBCursorBackendImpl.h:
        (WebCore::IDBCursorBackendImpl::create):
        * storage/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::IDBDatabaseBackendImpl):
        (WebCore::IDBDatabaseBackendImpl::sqliteDatabase):
        (WebCore::IDBDatabaseBackendImpl::createObjectStore):
        (WebCore::IDBDatabaseBackendImpl::setVersionInternal):
        (WebCore::IDBDatabaseBackendImpl::loadObjectStores):
        * storage/IDBDatabaseBackendImpl.h:
        (WebCore::IDBDatabaseBackendImpl::create):
        * storage/IDBFactoryBackendImpl.cpp:
        (WebCore::IDBFactoryBackendImpl::removeIDBBackingStore):
        (WebCore::openSQLiteDatabase):
        (WebCore::IDBFactoryBackendImpl::open):
        * storage/IDBFactoryBackendImpl.h:
        * storage/IDBIndexBackendImpl.cpp:
        (WebCore::IDBIndexBackendImpl::IDBIndexBackendImpl):
        (WebCore::IDBIndexBackendImpl::openCursorInternal):
        (WebCore::IDBIndexBackendImpl::sqliteDatabase):
        * storage/IDBIndexBackendImpl.h:
        (WebCore::IDBIndexBackendImpl::create):
        * storage/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::IDBObjectStoreBackendImpl):
        (WebCore::IDBObjectStoreBackendImpl::createIndex):
        (WebCore::IDBObjectStoreBackendImpl::openCursorInternal):
        (WebCore::IDBObjectStoreBackendImpl::loadIndexes):
        (WebCore::IDBObjectStoreBackendImpl::sqliteDatabase):
        * storage/IDBObjectStoreBackendImpl.h:
        (WebCore::IDBObjectStoreBackendImpl::create):

2011-02-23  Dominic Mazzoni  <dmazzoni@google.com>

        Reviewed by Kenneth Russell.

        Add a hit test handler for canvas elements that handles clicks on the canvas but ignores children.
        https://bugs.webkit.org/show_bug.cgi?id=54697

        New test to prevent this from regressing in the future: canvas/canvas-mouse-events.html

        * rendering/RenderHTMLCanvas.cpp:
        (WebCore::RenderHTMLCanvas::nodeAtPoint):

2011-02-23  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Darin Adler.

        Remove obsolete focusRingColor functions
        https://bugs.webkit.org/show_bug.cgi?id=54824

        * CMakeListsWinCE.txt:
        * platform/graphics/haiku/ColorHaiku.cpp:
        * platform/graphics/wince/ColorWinCE.cpp: Removed.

2011-02-22  Jia Pu  <jpu@apple.com>

        Reviewed by Dan Bernstein.

        On Mac OS X, English contractions are marked misspelled with certain user preference setting.
        https://bugs.webkit.org/show_bug.cgi?id=54975

        manual test: manual-tests/autocorrection/spellcheck-on-contraction-when-autocorrection-is-off.html

        Without this patch, we check for contraction only when autocorrection or other type of auto-
        substituation is on. And we failed to check for contraction if only spellchecking is turned on.
        This patch implements the desired behavior, checking for contraction when either correction/substitution,
        or spellchecking, is on.

        * editing/Editor.cpp:
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges):
        * manual-tests/autocorrection/spellcheck-on-contraction-when-autocorrection-is-off.html: Added.

2011-02-22  Charlie Reis  <creis@chromium.org>

        Reviewed by Darin Fisher.

        Remove DatabasePolicy from FrameLoaderTypes
        https://bugs.webkit.org/show_bug.cgi?id=54968

        The DatabasePolicy enum is no longer needed now that we avoid stopping
        loaders on same-document navigations.

        Existing test: storage/hash-change-with-xhr.html

        * WebCore.exp.in:
        * loader/DocumentLoader.cpp:
        * loader/DocumentLoader.h:
        * loader/FrameLoader.cpp:
        * loader/FrameLoader.h:
        * loader/FrameLoaderTypes.h:
        * workers/WorkerThread.cpp:

2011-02-22  Alexis Menard  <alexis.menard@openbossa.org>

        Reviewed by Andreas Kling.

        [Qt] QWebView ignores a palette set with QWebView::setPalette()
        https://bugs.webkit.org/show_bug.cgi?id=31742

        Use custom QWebView palette if the view provides one.
        Modified version of a patch made by Fabrizio Machado.

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::platformActiveSelectionBackgroundColor):
        (WebCore::RenderThemeQt::platformInactiveSelectionBackgroundColor):
        (WebCore::RenderThemeQt::platformActiveSelectionForegroundColor):
        (WebCore::RenderThemeQt::platformInactiveSelectionForegroundColor):
        (WebCore::RenderThemeQt::platformFocusRingColor):

2011-02-22  Brian Salomon  <bsalomon@google.com>

        Reviewed by Kenneth Russell.

        Don't disable accelerated canvas when using the skia gpu backend.

        No new tests are required.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setGlobalCompositeOperation):

2011-02-22  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] <select>s on http://www.ryanair.com render wrong
        https://bugs.webkit.org/show_bug.cgi?id=29647

        Reducing padding in <select> elements to improve its rendering and introducing a
        rendering adjustment specific to QMacStyle.

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::setPopupPadding):
        (WebCore::RenderThemeQt::paintMenuList):

2011-02-22  Andreas Kling  <kling@webkit.org>

        Reviewed by Dan Bernstein.

        FontCache: Make cTargetInactiveFontData an int instead of float.
        https://bugs.webkit.org/show_bug.cgi?id=54963

        * platform/graphics/FontCache.cpp:

2011-02-22  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        Make Editor::selectionComputedStyle return EditingStyle
        https://bugs.webkit.org/show_bug.cgi?id=54933

        Renamed selectionComputedStyle to selectionStartStyle and changed the return type to EditingStyle.
        It also no longer takes a boolean shouldUseFixedFontDefaultSize.

        Also added EditingStyle::mergeTypingStyle which replaced old editingStyleIncludingTypingStyle. This function
        doesn't extract inheritable properties prior to merge because this turned out be a bug, which was revealed
        by an existing layout test only after the code was shared with selectionStartStyle.

        No tests are added since this is a refactoring.

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::moveParagraphs): Calls EditingStyle::create and EditingStyle::mergeTypingStyle.
        (WebCore::CompositeEditCommand::breakOutOfEmptyListItem): Ditto.
        * editing/EditingStyle.cpp: Removed editingStyleIncludingTypingStyle.
        (WebCore::EditingStyle::mergeTypingStyle): Added.
        * editing/EditingStyle.h:
        (WebCore::EditingStyle::shouldUseFixedDefaultFontSize): Added.
        * editing/Editor.cpp:
        (WebCore::Editor::selectionStartHasStyle): Calls selectionStartStyle.
        (WebCore::Editor::selectionHasStyle): Ditto.
        (WebCore::Editor::selectionStartCSSPropertyValue): Ditto.
        (WebCore::Editor::selectionStartStyle): Renamed from selectionComputedStyle; returns EditingStyle.
        * editing/Editor.h:
        * editing/EditorCommand.cpp:
        (WebCore::executeToggleStyleInList): Calls selectionStartStyle.
        * editing/InsertLineBreakCommand.cpp:
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::calculateStyleBeforeInsertion): Calls EditingStyle::create and
        EditingStyle::mergeTypingStyle.
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply): Ditto.

2011-02-22  Robert Hogan  <robert@webkit.org>

        Reviewed by Andreas Kling.

        [Qt] painting of windowed plugins faulty on certain scroll events

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

        Invalidate the pluginview's relative rect rather then the frameRect(). This is because QWebFrame::renderRelativeCoords()
        imitates ScrollView and adds the scroll offset back on to the rect we damage here (making the co-ordinates absolute
        to the frame again) before passing it to FrameView.

        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::updatePluginWidget):

2011-02-22  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Martin Robinson.

        Minimal build broken
        https://bugs.webkit.org/show_bug.cgi?id=54743

        Moved the code of setInspectorExtensionAPI and
        dispatchMessageFromFrontend out of #if
        ENABLE(JAVASCRIPT_DEBUGGER) to fix link error of the minimal build.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::setInspectorExtensionAPI):
        (WebCore::InspectorController::dispatchMessageFromFrontend):

2011-02-22  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r79367.
        http://trac.webkit.org/changeset/79367
        https://bugs.webkit.org/show_bug.cgi?id=55012

        all layout tests are crashing on Snow Leopard (Requested by
        rniwa on #webkit).

        * ForwardingHeaders/wtf/DoublyLinkedList.h: Removed.

2011-02-22  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        Deploy EditingStyle in removeInlineStyleFromElement and removeCSSStyle
        https://bugs.webkit.org/show_bug.cgi?id=54944

        Deployed EditingStyle in removeInlineStyleFromElement and removeCSSStyle.

        Also extracted EditingStyle::conflictsWithInlineStyleOfElement from ApplyStyleCommand::removeCSSStyle,
        which returns true iff the specified element has inline style that conflicts or matches the editing style.
        It also appends conflicting property IDs to the vector of property IDs if one is specified.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyBlockStyle): Calls removeCSSStyle.
        (WebCore::ApplyStyleCommand::applyInlineStyle): Calls shouldSplitTextElement.
        (WebCore::ApplyStyleCommand::removeStyleFromRunBeforeApplyingStyle): Calls removeInlineStyleFromElement.
        (WebCore::ApplyStyleCommand::removeInlineStyleFromElement): Takes EditingStyle* instead of CSSMutableStyleDeclaration*.
        (WebCore::ApplyStyleCommand::removeCSSStyle): Ditto; extracted the logic to decide properties to remove as
        conflictsWithInlineStyleOfElement.
        (WebCore::ApplyStyleCommand::highestAncestorWithConflictingInlineStyle): Calls shouldRemoveInlineStyleFromElement.
        (WebCore::ApplyStyleCommand::pushDownInlineStyleAroundNode): Calls removeInlineStyleFromElement.
        (WebCore::ApplyStyleCommand::removeInlineStyle): Ditto.
        (WebCore::ApplyStyleCommand::shouldSplitTextElement): Takes EditingStyle* instead of CSSMutableStyleDeclaration*.
        * editing/ApplyStyleCommand.h:
        (WebCore::ApplyStyleCommand::shouldRemoveInlineStyleFromElement): Ditto.
        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::conflictsWithInlineStyleOfElement): Extracted from ApplyStyleCommand::removeCSSStyle.
        * editing/EditingStyle.h:
        (WebCore::EditingStyle::conflictsWithInlineStyleOfElement): Added.

2011-02-22  Chang Shu  <cshu@webkit.org>

        Reviewed by Csaba Osztrogonác.

        [Qt] editing/deleting/5408255.html fails
        https://bugs.webkit.org/show_bug.cgi?id=54964

        Move WebCore resource file to QtWebKit since they are referred in WebKit.

        * WebCore.pro:

2011-02-22  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders Carlsson.

        <rdar://problem/8762042> and https://bugs.webkit.org/show_bug.cgi?id=54514
        API to view and delete Application Cache data by origin.

        Implement these to be used by WK2 API:
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::getOriginsWithCache):
        (WebCore::ApplicationCacheStorage::deleteEntriesForOrigin):

2011-02-22  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Manage MarkedBlocks in a linked list instead of a vector, so arbitrary removal is O(1)
        https://bugs.webkit.org/show_bug.cgi?id=54999
        
        New WTF header.

        * ForwardingHeaders/wtf/DoublyLinkedList.h: Copied from ForwardingHeaders/wtf/FixedArray.h.

2011-02-22  Beth Dakin  <bdakin@apple.com>

        Reviewed by Sam Weinig.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=54991 
        Scrollbar::nativeTheme()->usesOverlayScrollbars() should not be consulted for CSS 
        Scrollbars
        -and corresponding-
        <rdar://problem/9034318>

        Instead of consulting the theme directly, callers should ask the Scrollbar or 
        ScrollableArea if the scrollbars are overlay or not. 

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::visibleContentRect):
        (WebCore::ScrollView::scrollContents):
        (WebCore::ScrollView::wheelEvent):
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::setScrollOffsetFromAnimation):
        (WebCore::ScrollableArea::hasOverlayScrollbars):
        * platform/ScrollableArea.h:
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::isOverlayScrollbar):
        * platform/Scrollbar.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::includeVerticalScrollbarSize):
        (WebCore::RenderBox::includeHorizontalScrollbarSize):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::verticalScrollbarWidth):
        (WebCore::RenderLayer::horizontalScrollbarHeight):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::verticalScrollbarWidth):
        * rendering/RenderScrollbar.h:
        (WebCore::RenderScrollbar::isOverlayScrollbar):

2011-02-22  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Csaba Osztrogonác.

        [Qt] Redesign the build system
        https://bugs.webkit.org/show_bug.cgi?id=51339

        Move inspector's resource files into the final build step to fix the layout test regression.

        No new tests needed.

        * WebCore.pro: Move inspector's resource files into QtWebKit.pro.

2011-02-22  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] fast/frames/iframe-scale-applied-twice.html fails after r79167
        https://bugs.webkit.org/show_bug.cgi?id=54990

        No new tests. This will cause fast/events/scroll-after-click-on-tab-index.html
        to start passing again.

        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::visibleContentRect): Update this method to match the original
        in the parent class.

2011-01-17  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] fast/events/scroll-after-click-on-tab-index has been failing on the bots
        https://bugs.webkit.org/show_bug.cgi?id=49177

        * platform/ScrollView.cpp: Remove the GTK+ guards around the implementation
        of platformAddChild and platformRemoveChild. This code can be shared.
        * platform/gtk/MainFrameScrollbarGtk.cpp:
        (MainFrameScrollbarGtk::attachAdjustment): Prevent re-attaching an already attached
        adjustment. Connect the adjustment value-changed signal handler after resetting the
        adjustment. This prevents the rest from stomping on pre-existing WebCore values.
        (MainFrameScrollbarGtk::gtkValueChanged): If the scrollbar is no longer attached to
        a scrollview do not listing for value changes. These scrollbars are defunct.
        * platform/gtk/ScrollViewGtk.cpp: Remove duplicated empty methods.

2011-02-22  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: refactor InjectedScript : InspectorDOMAgent interaction.
        https://bugs.webkit.org/show_bug.cgi?id=54954

        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::InjectedScriptHost::toNode):
        (WebCore::JSInjectedScriptHost::inspect):
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::InjectedScriptHost::toNode):
        (WebCore::V8InjectedScriptHost::inspectCallback):
        * inspector/CodeGeneratorInspector.pm:
        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::nodeForObjectId):
        * inspector/InjectedScript.h:
        * inspector/InjectedScriptHost.cpp:
        (WebCore::InjectedScriptHost::inspect):
        * inspector/InjectedScriptHost.h:
        * inspector/InjectedScriptHost.idl:
        * inspector/InjectedScriptSource.js:
        (.):
        * inspector/Inspector.idl:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::focusNode):
        * inspector/InspectorAgent.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::inspect):
        (WebCore::InspectorDOMAgent::pushNodeToFrontend):
        * inspector/InspectorDOMAgent.h:
        * inspector/front-end/AuditRules.js:
        (WebInspector.AuditRules.evaluateInTargetWindow):
        (WebInspector.AuditRules.ImageDimensionsRule.prototype.doRun):
        (WebInspector.AuditRules.ImageDimensionsRule.prototype.doRun.getStyles):
        (WebInspector.AuditRules.ImageDimensionsRule.prototype.doRun.receivedImages):
        (WebInspector.AuditRules.ImageDimensionsRule.prototype.doRun.pushImageNodes):
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.completions):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMDispatcher.prototype.childNodeRemoved):
        (WebInspector.DOMDispatcher.prototype.inspectElementRequested):
        * inspector/front-end/RemoteObject.js:
        (WebInspector.RemoteObject.prototype.pushNodeToFrontend):

2011-02-22  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders Carlsson.

        Part of <rdar://problem/8762042> and https://bugs.webkit.org/show_bug.cgi?id=54514
        API to view and delete Application Cache data by origin.

        Stub these out for now:
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::getOriginsWithCache):
        (WebCore::ApplicationCacheStorage::deleteEntriesForOrigin):
        (WebCore::ApplicationCacheStorage::deleteAllEntries): Moved implementation here from WebKit/Mac
        * loader/appcache/ApplicationCacheStorage.h:

        Export the new symbols:
        * WebCore.exp.in:

2011-02-22  Anders Carlsson  <andersca@apple.com>

        Fix debug build.

        * WebCore.exp.in:

2011-02-22  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Anders Carlsson.

        notImplemented() should behave identical in WebCore and WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=54449

        No functional change so no new tests.

        * WebCore.xcodeproj/project.pbxproj: Add NotImplemented.h as private header
        to be able to use it in WebKit2.

2011-02-22  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Laszlo Gombos.
        Rubber-stamped by Csaba Osztrogonác.

        [Qt] Redesign the build system
        https://bugs.webkit.org/show_bug.cgi?id=51339

        The patch landed in r79320 didn't contain the cleanup
        which was already addressed in the last attachment.

        No new tests needed.

        * WebCore.pri: Add common LIB and CONFIG options.
        * WebCore.pro: Add accidentally moved sections.

2011-02-22  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, rolling out r79321.
        http://trac.webkit.org/changeset/79321
        https://bugs.webkit.org/show_bug.cgi?id=53146

        Regresses  fast/forms/listbox-typeahead-cyrillic.html and fast
        /spatial-navigation/snav-single-select.html on GTK

        * accessibility/gtk/AXObjectCacheAtk.cpp:
        (WebCore::notifyChildrenSelectionChange):
        (WebCore::AXObjectCache::postPlatformNotification):

2011-02-22  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Inspector.IDL change. rename attribute notify -> event.
        https://bugs.webkit.org/show_bug.cgi?id=54958

        * inspector/CodeGeneratorInspector.pm:
        * inspector/Inspector.idl:

2011-02-22  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Timeline agent should have same lifetime as InspectorAgent
        https://bugs.webkit.org/show_bug.cgi?id=54951

        * inspector/CodeGeneratorInspector.pm:
        * inspector/Inspector.idl:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        (WebCore::InspectorAgent::restoreInspectorStateFromCookie):
        (WebCore::InspectorAgent::setFrontend):
        (WebCore::InspectorAgent::disconnectFrontend):
        (WebCore::InspectorAgent::releaseFrontendLifetimeAgents):
        (WebCore::InspectorAgent::didCommitLoad):
        (WebCore::InspectorAgent::domContentLoadedEventFired):
        (WebCore::InspectorAgent::loadEventFired):
        * inspector/InspectorAgent.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::startTimelineProfiler):
        (WebCore::InspectorController::stopTimelineProfiler):
        (WebCore::InspectorController::timelineProfilerEnabled):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::retrieveTimelineAgent):
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::~InspectorTimelineAgent):
        (WebCore::InspectorTimelineAgent::setFrontend):
        (WebCore::InspectorTimelineAgent::clearFrontend):
        (WebCore::InspectorTimelineAgent::restore):
        (WebCore::InspectorTimelineAgent::startTimelineProfiler):
        (WebCore::InspectorTimelineAgent::stopTimelineProfiler):
        (WebCore::InspectorTimelineAgent::timelineProfilerStarted):
        (WebCore::InspectorTimelineAgent::didCommitLoad):
        (WebCore::InspectorTimelineAgent::InspectorTimelineAgent):
        (WebCore::InspectorTimelineAgent::clearRecordStack):
        * inspector/InspectorTimelineAgent.h:
        (WebCore::InspectorTimelineAgent::create):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype._toggleTimelineButtonClicked):

2011-02-22  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: flakyness of inspector tests.
        https://bugs.webkit.org/show_bug.cgi?id=54729

        As far as we have the protocol with sequence numbers we can simplify test harness support
        and drop out chomium specific methods.

        * inspector/CodeGeneratorInspector.pm:
        * inspector/front-end/TestController.js:
        (WebInspector.TestController):
        (WebInspector.TestController.prototype.notifyDone):
        (WebInspector.TestController.prototype.runAfterPendingDispatches):
        (WebInspector.TestController.prototype._evaluateForTestInFrontend):
        * inspector/front-end/inspector.js:
        (WebInspector.dispatch):

2011-02-22  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Combo boxes should emit object:selection-changed even when collapsed
        https://bugs.webkit.org/show_bug.cgi?id=53146

        Emit the selection-changed signals when the menu list value has changed

        Test: platform/gtk/accessibility/combo-box-collapsed-selection-changed.html

        * accessibility/gtk/AXObjectCacheAtk.cpp:
        (WebCore::getListObject): New, return the right list object for
        menu lists and list boxes.
        (WebCore::notifyChildrenSelectionChange): Support menu lists.
        (WebCore::AXObjectCache::postPlatformNotification): Call function
        notifyChildrenSelectionChange for AXMenuListValueChanged.

2011-02-22  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Laszlo Gombos.

        [Qt] Redesign the build system
        https://bugs.webkit.org/show_bug.cgi?id=51339

        Part 2.

        Build WebCore as a static library, compile the WebKit API and WebKit2 API
        in a final step and link to WebKit2, WebCore and JSC libraries to fix
        linking issues resulting from stripped away symbols.

        No new tests needed.

        * WebCore.pri: Add needed rules for handling the static library.
        * WebCore.pro: Reorganize API and linker options to QtWebKit.pro.

2011-02-22  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [REGRESSION] navigation does not work when inspector is opened.
        https://bugs.webkit.org/show_bug.cgi?id=54947

        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::restoreInspectorStateFromCookie):
        * inspector/InspectorState.cpp:
        (WebCore::InspectorState::loadFromCookie):
        * inspector/InspectorState.h:

2011-02-15  Jer Noble  <jer.noble@apple.com>

        Reviewed by Darin Adler.

        Built-in HTML5 <audio> (and sometimes <video>) UI doesn't update playhead location or time displays
        https://bugs.webkit.org/show_bug.cgi?id=46142

        Push a LayoutStateMaintainer in RenderMedia::layout() before calling layout() on the
        container elements.  This is necessary because, during layout(), the child renderers
        query the current LayoutState to determine where they will be repainting.  If a new
        LayoutState is not pushed here, child renderers will attempt to repaint relative to
        their grandparent's origin instead of their parents', and repaint operations will fail.

        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::layout):

2011-02-22  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Cleaning: remove a overzealous check for the pointer "files" from Chrome::setToolTip()
        https://bugs.webkit.org/show_bug.cgi?id=54952

        Remove the unnecessary condition from the if(), HTMLInputElement::files() always return
        a valid reference for the input type FileInputType. 

        * page/Chrome.cpp:
        (WebCore::Chrome::setToolTip):

2011-02-21  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: extract source mapping from SourceFrame to DebuggerPresentationModel.
        https://bugs.webkit.org/show_bug.cgi?id=54645

        This is needed to map one script to several source files.

        Test: inspector/debugger/source-frame.html

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/DebuggerPresentationModel.js: Added.
        (WebInspector.DebuggerPresentationModel):
        (WebInspector.DebuggerPresentationModel.prototype.breakpointsForSourceName):
        (WebInspector.DebuggerPresentationModel.prototype._breakpointAdded):
        (WebInspector.DebuggerPresentationModel.prototype._breakpointRemoved):
        (WebInspector.DebuggerPresentationModel.prototype._breakpointResolved):
        (WebInspector.DebuggerPresentationModel.prototype._encodeSourceLocation):
        (WebInspector.DebuggerPresentationModel.prototype._actualLocationToSourceLocation):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype._breakpointAdded):
        (WebInspector.ScriptsPanel.prototype._breakpointRemoved):
        (WebInspector.ScriptsPanel.prototype._sourceFrameForResource):
        (WebInspector.ScriptsPanel.prototype._sourceFrameForScript):
        (WebInspector.ScriptsPanel.prototype._addSourceFrame):
        (WebInspector.ScriptsPanel.prototype._removeSourceFrame):
        (WebInspector.ScriptsPanel.prototype._sourceFrameLoaded):
        (WebInspector.ScriptsPanel.prototype._clearCurrentExecutionLine):
        (WebInspector.ScriptsPanel.prototype._callFrameSelected):
        (WebInspector.SourceFrameContentProviderForScript.prototype._buildSource):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.get loaded):
        (WebInspector.SourceFrame.prototype._createTextViewer):
        (WebInspector.SourceFrame.prototype._setTextViewerDecorations):
        (WebInspector.SourceFrame.prototype.setExecutionLine):
        (WebInspector.SourceFrame.prototype.clearExecutionLine):
        (WebInspector.SourceFrame.prototype.addBreakpoint):
        (WebInspector.SourceFrame.prototype.removeBreakpoint):
        (WebInspector.SourceFrame.prototype._contextMenu.addConditionalBreakpoint.didEditBreakpointCondition):
        (WebInspector.SourceFrame.prototype._contextMenu.addConditionalBreakpoint):
        (WebInspector.SourceFrame.prototype._findBreakpoint.filter):
        (WebInspector.SourceFrame.prototype._findBreakpoint):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:

2011-02-22  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: provide a button to expand inspector toolbar when not all panel buttons fit
        https://bugs.webkit.org/show_bug.cgi?id=54671

        - factored toolbar handling out of inspector.js
        - added toolbar dropdown

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype._onCreatePanel):
        * inspector/front-end/Panel.js:
        (WebInspector.Panel.prototype.get toolbarItem):
        * inspector/front-end/Toolbar.js: Added.
        (WebInspector.Toolbar):
        (WebInspector.Toolbar.prototype.resize):
        (WebInspector.Toolbar.prototype.addPanel):
        (WebInspector.Toolbar.prototype._toolbarDragStart):
        (WebInspector.Toolbar.prototype._toolbarDragEnd):
        (WebInspector.Toolbar.prototype._toolbarDrag):
        (WebInspector.Toolbar.prototype._onClose):
        (WebInspector.Toolbar.prototype._setDropdownVisible):
        (WebInspector.Toolbar.prototype._toggleDropdown):
        (WebInspector.Toolbar.prototype._updateDropdownButtonAndHideDropdown):
        (WebInspector.Toolbar.createPanelToolbarItem.onToolbarItemClicked):
        (WebInspector.Toolbar.createPanelToolbarItem):
        (WebInspector.ToolbarDropdown):
        (WebInspector.ToolbarDropdown.prototype.show):
        (WebInspector.ToolbarDropdown.prototype.hide):
        (WebInspector.ToolbarDropdown.prototype.get visible):
        (WebInspector.ToolbarDropdown.prototype._populate):
        (WebInspector.ToolbarDropdown.prototype._onKeyDown):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.css:
        (#toolbar):
        (.toolbar-item):
        (.toolbar-item.toggleable):
        (.toolbar-item.toggleable.toggled-on):
        (#toolbar-dropdown .toolbar-icon):
        (#toolbar-dropdown .toolbar-label):
        (#toolbar-controls):
        (#toolbar-dropdown-arrow):
        (body.attached #toolbar-dropdown-arrow):
        (#toolbar-dropdown-arrow.dropdown-visible):
        (#toolbar-dropdown-arrow:hover):
        (#toolbar-dropdown-arrow:active):
        (#toolbar-dropdown):
        (body.detached.platform-mac-snowleopard #toolbar-dropdown):
        (#toolbar-dropdown .scrollable-content):
        (#toolbar-dropdown .toolbar-item):
        (#toolbar-dropdown .toolbar-item.toggleable.toggled-on):
        (#toolbar-dropdown .toolbar-item:hover):
        (#toolbar-dropdown .toolbar-item.toggleable.toggled-on:hover):
        (#toolbar-dropdown .toolbar-item:active .toolbar-icon):
        (.scrollable-content):
        (.scrollable-content::-webkit-scrollbar):
        (.scrollable-content::-webkit-resizer):
        (.scrollable-content::-webkit-scrollbar-thumb:vertical):
        (.scrollable-content::-webkit-scrollbar-thumb:vertical:active):
        (.scrollable-content::-webkit-scrollbar-track:vertical):
        (.toolbar-search-item):
        (#search):
        (body.attached #search):
        (#search-results-matches):
        (#close-button-left, #close-button-right):
        (.close-left):
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:
        (WebInspector.set attached):
        (WebInspector.addPanel):
        (WebInspector.windowResize):

2011-02-22  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] make distcheck fails
        https://bugs.webkit.org/show_bug.cgi?id=54943

        Added new headers and removed references to deleted files.

        * GNUmakefile.am:

2011-02-21  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: make DOM storage and Database agents have the same lifetime as InspectorAgent
        https://bugs.webkit.org/show_bug.cgi?id=54891

        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        (WebCore::InspectorAgent::setFrontend):
        (WebCore::InspectorAgent::disconnectFrontend):
        (WebCore::InspectorAgent::createFrontendLifetimeAgents):
        (WebCore::InspectorAgent::releaseFrontendLifetimeAgents):
        (WebCore::InspectorAgent::didCommitLoad):
        * inspector/InspectorAgent.h:
        (WebCore::InspectorAgent::instrumentingAgents):
        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::InspectorDOMStorageAgent):
        (WebCore::InspectorDOMStorageAgent::~InspectorDOMStorageAgent):
        (WebCore::InspectorDOMStorageAgent::setFrontend):
        (WebCore::InspectorDOMStorageAgent::clearFrontend):
        (WebCore::InspectorDOMStorageAgent::selectDOMStorage):
        (WebCore::InspectorDOMStorageAgent::getDOMStorageResourceForId):
        (WebCore::InspectorDOMStorageAgent::didUseDOMStorage):
        (WebCore::InspectorDOMStorageAgent::clearResources):
        * inspector/InspectorDOMStorageAgent.h:
        (WebCore::InspectorDOMStorageAgent::create):
        * inspector/InspectorDatabaseAgent.cpp:
        (WebCore::InspectorDatabaseAgent::didOpenDatabase):
        (WebCore::InspectorDatabaseAgent::clearResources):
        (WebCore::InspectorDatabaseAgent::InspectorDatabaseAgent):
        (WebCore::InspectorDatabaseAgent::~InspectorDatabaseAgent):
        (WebCore::InspectorDatabaseAgent::setFrontend):
        (WebCore::InspectorDatabaseAgent::clearFrontend):
        (WebCore::InspectorDatabaseAgent::databaseForId):
        (WebCore::InspectorDatabaseAgent::selectDatabase):
        * inspector/InspectorDatabaseAgent.h:
        (WebCore::InspectorDatabaseAgent::create):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didOpenDatabaseImpl):
        (WebCore::InspectorInstrumentation::didUseDOMStorageImpl):

2011-02-22  Steve Lacey  <sjl@chromium.org>

        Reviewed by Darin Fisher.

        Rename new media statistics apis to better names

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

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::webkitAudioDecodedByteCount):
        (WebCore::HTMLMediaElement::webkitVideoDecodedByteCount):
        * html/HTMLMediaElement.h:
        * html/HTMLMediaElement.idl:
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::webkitDecodedFrameCount):
        (WebCore::HTMLVideoElement::webkitDroppedFrameCount):
        * html/HTMLVideoElement.h:
        * html/HTMLVideoElement.idl:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::decodedFrameCount):
        (WebCore::MediaPlayer::droppedFrameCount):
        (WebCore::MediaPlayer::audioDecodedByteCount):
        (WebCore::MediaPlayer::videoDecodedByteCount):
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::decodedFrameCount):
        (WebCore::MediaPlayerPrivateInterface::droppedFrameCount):
        (WebCore::MediaPlayerPrivateInterface::audioDecodedByteCount):
        (WebCore::MediaPlayerPrivateInterface::videoDecodedByteCount):

2011-02-21  Roland Steiner  <rolandsteiner@chromium.org>

        Reviewed by Kent Tamura.

        Bug 54435 - Simplify CSSStyleSelector::canShareStyleWithElement
        https://bugs.webkit.org/show_bug.cgi?id=54435

        Changed the function to a series of early-exit 'if's,
        removed most temporary variables.

        No new tests. (refactoring)

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::canShareStyleWithElement):

2011-02-21  Nico Weber  <thakis@chromium.org>

        Reviewed by James Robinson.

        [chromium] PopupContainer::show() confuses clang's -Woverloaded-virtual
        https://bugs.webkit.org/show_bug.cgi?id=54923

        Rename PopupContainer::show() to showInRect(), to make it obvious it's
        not an override of ScrollView::show().

        No intended functionality change.

        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupContainer::showInRect):
        (WebCore::PopupMenuChromium::show):
        * platform/chromium/PopupMenuChromium.h:

2011-02-21  Julien Chaffraix  <jchaffraix@codeaurora.org>

        Reviewed by Antti Koivisto.

        Improve the local{SharedStyle,CousinList} algorithm
        https://bugs.webkit.org/show_bug.cgi?id=45507

        This change improves the algorithm to find shared styles: the old
        algorithm would stop the search after the first cousin, even if
        the search threshold is not met. As such, the algorithm would
        systematically miss sharings across second cousins and beyond.
        The new algorithm continues the search, as long as threshold is
        not met. It also separates the threshold for sibling/cousins
        search, from that on the levels of search, which is easier to
        optimize.
        The new algorithm finds up to 30% more sharings on some sites
        (e.g. amazon.com and rakuten.co.jp) with no noticeable slowdown.

        No new test, refactoring only.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::locateCousinList):
        (WebCore::CSSStyleSelector::locateSharedStyle):
        While changing the algorithm, cleaned up the style of those 2 methods
        (use early return, renamed some variables).

        * css/CSSStyleSelector.h:

2011-02-21  Nico Weber  <thakis@chromium.org>

        Reviewed by Adam Barth.

        RenderTableCell::baselinePosition() confuses clang's -Woverloaded-virtual
        https://bugs.webkit.org/show_bug.cgi?id=54922

        RenderTableCell::baselinePosition() has the same name as a virtual
        method in superclass RenderBlock. Rename the subclass method to make
        it clear it's not an attempted override.

        No intended functionality change.

        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::cellBaselinePosition):
        * rendering/RenderTableCell.h:
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::calcRowLogicalHeight):
        (WebCore::RenderTableSection::layoutRows):

2011-02-21  Benjamin Kalman  <kalman@chromium.org>

        Reviewed by Ryosuke Niwa.

        Extending selection by a boundary granularity (LineBoundary/ParagraphBoundary/DocumentBoundary) sets incorrect
        start/end of selection for RTL
        https://bugs.webkit.org/show_bug.cgi?id=54724

        On mac, the selection should always grow when extending by a boundary granularity (line/paragraph/document).
        This is achieved by extending from the start for the "left" direction (e.g. pressing left arrow key), or
        extending from the end when for the "right" direction (e.g. pressing right arrow key).

        However, this has a bug for RTL text, which should actually extend from the *end* when extending left (since
        direction is obviously reversed) and likewise extend from the start when extending right.

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::modify):

2011-02-21  Nico Weber  <thakis@chromium.org>

        Reviewed by Adam Barth.

        ImageDocument::imageChanged() confuses clang's -Woverride-virtual
        https://bugs.webkit.org/show_bug.cgi?id=54924

        Rename ImageDocument::imageChanged() to imageUpdated() to make clear
        that it's not an override of CachedResourceClient::imageChanged().

        * html/ImageDocument.cpp:
        (WebCore::ImageDocumentParser::appendBytes):
        (WebCore::ImageDocumentParser::finish):
        (WebCore::ImageDocument::imageUpdated):
        * html/ImageDocument.h:

2011-02-21  Roland Steiner  <rolandsteiner@chromium.org>

        Reviewed by Kent Tamura.

        Bug 54934 - Sort the WebCore project file(s)
        https://bugs.webkit.org/show_bug.cgi?id=54934

        No new tests. (no code affected)

        * GNUmakefile.am:
        * WebCore.xcodeproj/project.pbxproj:

2011-02-21  Nico Weber  <thakis@chromium.org>

        Reviewed by Adam Barth.

        canAccommodateEllipsis() confuses clang's -Woverloaded-virtual
        https://bugs.webkit.org/show_bug.cgi?id=54909

        Rename the overload in RootInlineBox to lineCanAccomodateEllipsis() to
        unconfuse clang. No intended functionality change.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::checkLinesForTextOverflow):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::applyLineClamp):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::lineCanAccommodateEllipsis):
        * rendering/RootInlineBox.h:

2011-02-21  Adele Peterson  <adele@apple.com>

        Reviewed by Dan Bernstein.

        Fix for for https://bugs.webkit.org/show_bug.cgi?id=54402
        REGRESSION (r72052): Placeholder text doesn't have the right padding for search fields on Windows

        Test: updated fast/forms/placeholder-position.html and tested manually

        Consider padding and margin for the results and cancel buttons.  This is important for the Windows 
        theme which uses padding to correctly position those buttons.  This change fixes the placeholder 
        position, and also better aligns the results popup list with the actual text you type.

        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::clientPaddingLeft):
        (WebCore::RenderTextControlSingleLine::clientPaddingRight):

2011-02-21  Nico Weber  <thakis@chromium.org>

        Reviewed by Kent Tamura.

        GIFImageDecoder::setSize() tries to override the superclass method but fails
        https://bugs.webkit.org/show_bug.cgi?id=54305

        The superclass uses unsigned instead of int for its parameters, so
        GIFImageDecoder::setSize() was an overload, not an override.

        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::setSize):
        * platform/image-decoders/gif/GIFImageDecoder.h:

2011-02-21  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        Deploy EditingStyle more in ApplyStyleCommand and do some cleanup
        https://bugs.webkit.org/show_bug.cgi?id=54528

        * editing/ApplyStyleCommand.cpp:
        (WebCore::StyleChange::init): Allows style to be a null pointer.
        (WebCore::ApplyStyleCommand::applyInlineStyle): Overrides the value of text-decoration property by that of
        -webkit-text-decorations-in-effect and remove the latter property when present. This allows removeImplicitlyStyledElement
        to ignore -webkit-text-decorations-in-effect. Also uses the return value of EditingStyle::textDirection to determine
        whether or not we need to apply unicode-bidi / direction instead of directly checking the value of unicode-bidi property.
        (WebCore::ApplyStyleCommand::fixRangeAndApplyInlineStyle): Takes EditingStyle* instead of CSSMutableStyleDeclaration*.
        (WebCore::ApplyStyleCommand::applyInlineStyleToNodeRange): Ditto.
        (WebCore::ApplyStyleCommand::removeStyleFromRunBeforeApplyingStyle): Ditto.
        (WebCore::ApplyStyleCommand::removeCSSStyle): Ditto.
        (WebCore::ApplyStyleCommand::highestAncestorWithConflictingInlineStyle): Ditto.
        (WebCore::ApplyStyleCommand::pushDownInlineStyleAroundNode): Ditto.
        (WebCore::ApplyStyleCommand::removeInlineStyle): Ditto; no longer collapse text decoration properties because
        ApplyStyleCommand::applyInlineStyle already does it.
        * editing/ApplyStyleCommand.h:
        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::textDirection): Exits early when m_mutableStyle is null.
        (WebCore::EditingStyle::collapseTextDecorationProperties): Extracted from ApplyStyleCommand::removeInlineStyle.
        * editing/EditingStyle.h:

2011-02-21  Mark Rowe  <mrowe@apple.com>

        Reviewed by Darin Adler and Alexey Proskuryakov.

        <http://webkit.org/b/54919> / <rdar://problem/7689300> WebCore should retrieve unclamped frame delays from ImageIO

        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::frameDurationAtIndex): Look for the unclamped frame delay in the
        frame properties dictionary and use that if it exists. If it does not exist in the
        dictionary then fall back to using the clamped frame delay.

2011-02-21  James Kozianski  <koz@chromium.org>

        Reviewed by Kent Tamura.

        Causes elements to be unfocusable after tabindex property is removed.
        https://bugs.webkit.org/show_bug.cgi?id=54727

        Test: fast/html/tabindex-removal.html

        * dom/Node.cpp:
        (WebCore::Node::clearTabIndexExplicitly):
        * dom/Node.h:
        * dom/NodeRareData.h:
        (WebCore::NodeRareData::clearTabIndexExplicitly):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::parseMappedAttribute):

2011-02-21  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Mark Rowe.

        <rdar://problem/8995483> Remove stubs of unneeded NSURLAuthenticationChallengeSender methods

        * platform/network/mac/AuthenticationMac.mm: Remove the stubs that are no longer needed.

2011-02-21  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Overhang areas need to be invalidated on scroll
        <rdar://problem/9032194>
        https://bugs.webkit.org/show_bug.cgi?id=54917

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::scrollContents):
        We need to explicitly invalidate the overhang areas when we scroll the contents
        of a ScrollView, since they could contain arbitrary content that cannot be blitted.

2011-02-21  Lucas Forschler  <lforschler@apple.com>

        Reviewed by Stephanie Lewis.

        Fix the Leopard Debug build by incorporating the RenderSVGAllInOne.cpp

        No new tests required.

        * WebCore.xcodeproj/project.pbxproj:

2011-02-21  Pratik Solanki  <psolanki@apple.com>

        Reviewed by Darin Adler.

        Remove global initializer in CookieStorageCFNet.cpp
        https://bugs.webkit.org/show_bug.cgi?id=54905

        * platform/network/cf/CookieStorageCFNet.cpp:
        (WebCore::currentCookieStorage):
        (WebCore::setCurrentCookieStorage):
        (WebCore::setCookieStoragePrivateBrowsingEnabled):

2011-02-18  Jer Noble  <jer.noble@apple.com>

        Reviewed by Sam Weinig.

        WebKit2: Media document videos play only sound, no video (affects trailers.apple.com)
        https://bugs.webkit.org/show_bug.cgi?id=54771

        Now that video is accelerated, we no longer need to special case
        video playing within a media document.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::preferredRenderingMode):
        (WebCore::MediaPlayerPrivateQTKit::supportsAcceleratedRendering):

2011-02-21  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Adam Roben.

        REGRESSION (WebKit2): HTTP requests time out after 60 seconds
        https://bugs.webkit.org/show_bug.cgi?id=54755
        <rdar://problem/9006592>

        No new tests - it won't be great to have a test that runs for a minute.

        It's now possible to set a default timeout to be used at ResourceRequest creation. If one
        hasn't been set, ResourceRequest will behave as before (use NSURLRequest default on Mac,
        or use INT_MAX on other platforms).

        * WebCore.exp.in:
        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::defaultTimeoutInterval): Get the ResourceRequest notion of
        default timeout interval (may be 0 if using NSURLRequest default).
        (WebCore::ResourceRequestBase::setDefaultTimeoutInterval): Set the static member variable.
        (WebCore::ResourceRequestBase::updatePlatformRequest): Added an assertion that resource
        request is updated. Plaform code often calls updateResourceRequest() indirectly from this
        function, and that must obviously be a no-op.
        (WebCore::ResourceRequestBase::updateResourceRequest): Added an assertion in the opposite
        direction.
        * platform/network/ResourceRequestBase.h: Changed "unspecifiedTimeoutInterval" to
        "defaultTimeoutInterval". It has been used as default by most platforms anyway.
        (WebCore::ResourceRequestBase::ResourceRequestBase):

        * platform/network/mac/ResourceRequestMac.mm: (WebCore::ResourceRequest::doUpdatePlatformRequest):
        Now zero is the magic value, not INT_MAX. We'll use NSURLRequest default if neither
        setTimeoutInterval() nor setDefaultTimeoutInterval() has been called.

2011-02-21  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] editing/pasteboard/dataTransfer-setData-getData.html fails
        https://bugs.webkit.org/show_bug.cgi?id=54895

        Correct the GTK+ clipboard implementation to know that "text" is an alias
        for "text/html" data. This corrects the failing test.

        * platform/gtk/ClipboardGtk.cpp:
        (WebCore::dataObjectTypeFromHTMLClipboardType): Accept "text" as well as "Text".
        (WebCore::ClipboardGtk::types): Advertise "text" as well as "Text".

2011-02-21  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Pavel Feldman.

        ProcessingInstruction should provide a way to know if it is of CSS type.
        https://bugs.webkit.org/show_bug.cgi?id=54868

        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::ProcessingInstruction):
        (WebCore::ProcessingInstruction::checkStyleSheet):
        (WebCore::ProcessingInstruction::setCSSStyleSheet):
        * dom/ProcessingInstruction.h:
        (WebCore::ProcessingInstruction::isCSS):

2011-02-21  Simon Fraser  <simon.fraser@apple.com>

        Put JSDOMImplementationCustom.cpp where it belongs in the project.

        * WebCore.xcodeproj/project.pbxproj:

2011-02-21  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        Bug 54894 - Make inheritance structure described by ClassInfo match C++ class hierarchy.

        The ClassInfo objects describe an inheritance hierarchy, with each ClassInfo instance
        containing a pointer to its parent class. These links should reflect the inheritance
        hierarchy of C++ classes below JSObject. For the large part it does, but in some cases
        entries in the C++ hierarchy are skipped over. This presently likely doesn't matter,
        since intervening C++ classes may not have ClassInfo - but would be a potential bug
        were ClassInfo were to be added.

        * bindings/js/JSAudioConstructor.cpp:
        * bindings/js/JSDOMGlobalObject.cpp:
        * bindings/js/JSImageConstructor.cpp:
        * bindings/js/JSOptionConstructor.cpp:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/objc/objc_runtime.mm:
        * bridge/runtime_object.cpp:

2011-02-21  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: navigation does not work after reopening frontend.
        https://bugs.webkit.org/show_bug.cgi?id=54879

        Test: http/tests/inspector-enabled/open-close-open.html

        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::setFrontend):
        * inspector/InspectorState.cpp:
        (WebCore::InspectorState::unmute):
        * inspector/InspectorState.h:

2011-02-21  Adam Roben  <aroben@apple.com>

        Protect the PluginView when evaluating javascript: URLs

        Fixes <http://webkit.org/b/54884> <rdar://problem/9030864>
        plugins/get-url-with-javascript-destroying-plugin.html crashing on Windows since it was
        added

        Reviewed by Sam Weinig.

        * plugins/PluginView.cpp:
        (WebCore::PluginView::performRequest): Protect the PluginView, not just its parent frame,
        when evaluating javascript: URLs.

2011-02-21  Martin Robinson  <mrobinson@igalia.com>

        Fix GTK+ build after r79223.

        * GNUmakefile.am: Add file missing from the source list.

2011-02-14  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: audits should not warn about gzip compression for 304s
        https://bugs.webkit.org/show_bug.cgi?id=54343

        Do not run compression-related audits on 304 resources.
        Drive-by: handle multi-encoding resources (Content-Encoding: sdhc,gzip) correctly.

        * inspector/front-end/AuditRules.js:
        (WebInspector.AuditRules.GzipRule.prototype.doRun):
        (WebInspector.AuditRules.GzipRule.prototype._isCompressed):

2011-02-08  Anton Muhin  <antonm@chromium.org>

       Reviewed by Adam Barth and Alexey Proskuryakov.

       Propagate security origin of parent document into HTML documents created with DOMImplementation
       https://bugs.webkit.org/show_bug.cgi?id=53611

       This restores invariant that JS wrappers residing in the same JS context should come
       from the same security origin.

       Absence of regressions is covered by the current tests.  Different security origin of
       DOMImplementation is difficult to check with layout tests as DOMImplementation
       resides in the same JS context as parent document and therefore there are no security origin checks.
       This is observable however in C++.

       * Android.jscbindings.mk:
       * CMakeLists.txt:
       * WebCore.gypi:
       * WebCore.pro:
       * WebCore.vcproj/WebCore.vcproj:
       * WebCore.xcodeproj/project.pbxproj:
       * bindings/v8/V8GCController.cpp:
       (WebCore::NodeGrouperVisitor::visitDOMWrapper):
       * dom/DOMImplementation.cpp:
       (WebCore::DOMImplementation::DOMImplementation):
       (WebCore::DOMImplementation::createDocument):
       * dom/DOMImplementation.h:
       (WebCore::DOMImplementation::create):
       (WebCore::DOMImplementation::documentDestroyed):
       (WebCore::DOMImplementation::parentDocument):
       * dom/DOMImplementation.idl:
       * dom/Document.cpp:
       (WebCore::Document::~Document):
       (WebCore::Document::implementation):
       * dom/Document.h:

2011-02-21  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Pavel Feldman.

        Web Inspector: [Text editor] Optimize editing updates in gutter panel
        https://bugs.webkit.org/show_bug.cgi?id=54866

        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer.prototype.set startEditingListener):
        (WebInspector.TextViewer.prototype.set endEditingListener):
        (WebInspector.TextViewer.prototype.endUpdates):
        (WebInspector.TextViewer.prototype._enterInternalTextChangeMode):
        (WebInspector.TextViewer.prototype._exitInternalTextChangeMode):
        (WebInspector.TextEditorChunkedPanel.prototype._chunkNumberForLine):
        (WebInspector.TextEditorGutterPanel.prototype._expandChunks):
        (WebInspector.TextEditorGutterPanel.prototype.textChanged):
        (WebInspector.TextEditorMainPanel.prototype._updateChunksForRanges):

2011-02-21  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: [Audits] Image dimensions in inline style not checked
        https://bugs.webkit.org/show_bug.cgi?id=54738

        * inspector/front-end/AuditRules.js:
        (WebInspector.AuditRules.ImageDimensionsRule.prototype.doRun):

2011-02-21  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: create and destroy DOM agent along with InspectorAgent
        https://bugs.webkit.org/show_bug.cgi?id=54875

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/InstrumentingAgents.h: Added. Agents that want to instrument WebCore should register themselve
        on this object.
        (WebCore::InstrumentingAgents::InstrumentingAgents):
        (WebCore::InstrumentingAgents::~InstrumentingAgents):
        (WebCore::InstrumentingAgents::inspectorBrowserDebuggerAgent):
        (WebCore::InstrumentingAgents::setInspectorBrowserDebuggerAgent):
        (WebCore::InstrumentingAgents::inspectorConsoleAgent):
        (WebCore::InstrumentingAgents::setInspectorConsoleAgent):
        (WebCore::InstrumentingAgents::inspectorDOMAgent):
        (WebCore::InstrumentingAgents::setInspectorDOMAgent):
        (WebCore::InstrumentingAgents::inspectorDOMStorageAgent):
        (WebCore::InstrumentingAgents::setInspectorDOMStorageAgent):
        (WebCore::InstrumentingAgents::inspectorDatabaseAgent):
        (WebCore::InstrumentingAgents::setInspectorDatabaseAgent):
        (WebCore::InstrumentingAgents::inspectorDebuggerAgent):
        (WebCore::InstrumentingAgents::setInspectorDebuggerAgent):
        (WebCore::InstrumentingAgents::inspectorProfilerAgent):
        (WebCore::InstrumentingAgents::setInspectorProfilerAgent):
        (WebCore::InstrumentingAgents::inspectorResourceAgent):
        (WebCore::InstrumentingAgents::setInspectorResourceAgent):
        (WebCore::InstrumentingAgents::inspectorRuntimeAgent):
        (WebCore::InstrumentingAgents::setInspectorRuntimeAgent):
        (WebCore::InstrumentingAgents::inspectorStorageAgent):
        (WebCore::InstrumentingAgents::setInspectorStorageAgent):
        (WebCore::InstrumentingAgents::inspectorTimelineAgent):
        (WebCore::InstrumentingAgents::setInspectorTimelineAgent):
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        (WebCore::InspectorAgent::setFrontend):
        (WebCore::InspectorAgent::disconnectFrontend):
        (WebCore::InspectorAgent::createFrontendLifetimeAgents):
        (WebCore::InspectorAgent::releaseFrontendLifetimeAgents):
        (WebCore::InspectorAgent::didCommitLoad):
        (WebCore::InspectorAgent::domContentLoadedEventFired):
        (WebCore::InspectorAgent::loadEventFired):
        * inspector/InspectorAgent.h:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::InspectorCSSAgent):
        (WebCore::InspectorCSSAgent::~InspectorCSSAgent):
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::InspectorConsoleAgent):
        (WebCore::InspectorConsoleAgent::~InspectorConsoleAgent):
        (WebCore::InspectorConsoleAgent::clearConsoleMessages):
        (WebCore::InspectorConsoleAgent::clearFrontend):
        (WebCore::InspectorConsoleAgent::resourceRetrievedByXMLHttpRequest):
        (WebCore::InspectorConsoleAgent::setMonitoringXHREnabled):
        (WebCore::InspectorConsoleAgent::setConsoleMessagesEnabled):
        (WebCore::InspectorConsoleAgent::addConsoleMessage):
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorDOMAgent.cpp: DOM agent now lives even when the front-end is not attached.
        (WebCore::InspectorDOMAgent::InspectorDOMAgent):
        (WebCore::InspectorDOMAgent::setFrontend): Add DOM agent to the set of active agents when the front-end
        is attached.
        (WebCore::InspectorDOMAgent::clearFrontend):
        * inspector/InspectorDOMAgent.h:
        (WebCore::InspectorDOMAgent::create):

2011-02-21  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Andreas Kling.

        [Qt][V8]REGRESSION(r79157): Fix build
        https://bugs.webkit.org/show_bug.cgi?id=54871

        * bridge/npruntime_internal.h: Add one more undef because of evil X11 macro.

2011-02-16  Vitaly Repeshko  <vitalyr@chromium.org>

        Reviewed by Mihai Parparita.

        [V8] SerializedScriptValue: fix JS exception handling.
        https://bugs.webkit.org/show_bug.cgi?id=54555

        Added checks for exceptions and empty handles:
        * bindings/v8/SerializedScriptValue.cpp:
        (WebCore::Serializer::Serializer):
        (WebCore::Serializer::serialize):
        (WebCore::Serializer::checkException):
        (WebCore::Serializer::reportFailure):
        (WebCore::Serializer::ArrayState::advance):
        (WebCore::Serializer::AbstractObjectState::AbstractObjectState):
        (WebCore::Serializer::AbstractObjectState::advance):
        (WebCore::Serializer::push):
        (WebCore::Serializer::handleError):
        (WebCore::Serializer::newObjectState):
        (WebCore::Serializer::doSerialize):
        (WebCore::SerializedScriptValue::SerializedScriptValue):

2011-02-21  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Kent Tamura.

        Add selectionchange event
        https://bugs.webkit.org/show_bug.cgi?id=45712

        Added the support for asynchronous selectionchange event, which is fired whenever selection is changed.
        This event is not cancelable and does not bubble. An event listener can be attached to a document by
        body element's onselectionchange attribute or via document's onselectionchange property.

        Note that WebKit's implementation fires the event asynchronously whereas Internet Explorer's implementation
        fires it synchronously. This implies that a script that modify selection (e.g. via selection's addRange)
        will not observe the event before the control returns to JavaScript.

        See also: http://msdn.microsoft.com/en-us/library/ms536968(VS.85).aspx

        Tests: fast/events/selectionchange-iframe.html
               fast/events/selectionchange-user-initiated.html

        * dom/Document.cpp:
        (WebCore::Document::enqueueDocumentEvent): Added.
        * dom/Document.h: Added selectionchange event listener.
        * dom/Document.idl: Added onselectionchagne attribute.
        * dom/EventNames.h: Added selectionchange
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::setSelection): Fires selectionchange event.
        * html/HTMLAttributeNames.in: Added onselectionchange.
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::parseMappedAttribute): Handles onselectionchange attribute.

2011-02-21  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: protocol error messages are dumping incorrectly in Layout tests.
        https://bugs.webkit.org/show_bug.cgi?id=54859

        * inspector/CodeGeneratorInspector.pm:

2011-02-21  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: generate protocol documentation based on IDL.
        https://bugs.webkit.org/show_bug.cgi?id=54822

        * inspector/CodeGeneratorInspector.pm:

2011-02-21  Andoni Morales Alastruey  <amorales@flumotion.com>

        Reviewed by Martin Robinson.

        [GStreamer] Add URI queries support in webkitwebsrc
        https://bugs.webkit.org/show_bug.cgi?id=54627

        This allow replying to URI queries from downstream elements
        with the uri currently set in the source element.

        No new tests, this feature is dedicated to internal GStreamer use,
        such as the upcoming HTTP Live Streaming element.

        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webKitWebSrcQuery):

2011-02-21  Andoni Morales Alastruey  <amorales@flumotion.com>

        Reviewed by Martin Robinson.

        [GStreamer] Add 'location' property in webkitwebsrc
        https://bugs.webkit.org/show_bug.cgi?id=54628

        No new tests, this feature is dedicated to internal GStreamer use,
        such as the upcoming HTTP Live Streaming element.

        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webkit_web_src_class_init):
        (webKitWebSrcSetProperty):
        (webKitWebSrcGetProperty):

2011-02-17  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Kent Tamura.

        Rename Position::node() to Position::deprecatedNode()
        https://bugs.webkit.org/show_bug.cgi?id=54622

        Done the rename. All calls to node() are replaced by calls to deprecatedNode() except when
        calls were of the form node()->document() and node()->inDocument() in which case they were
        replaced by anchorNode()->document() and anchorNode()->inDocument() respectively.

        * WebCore.exp.in: Added Position::containerNode.

        The rest abbreviated for simplicity. Please see svn log.

2011-02-20  Gavin Barraclough  <barraclough@apple.com>

        Build fix (remove includes).

        * bindings/js/JSDOMBinding.cpp:
        * bindings/js/JSDOMWindowCustom.cpp:
        * bindings/js/JSHistoryCustom.cpp:
        * bindings/js/JSLocationCustom.cpp:

2011-02-20  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=54839
        Remove PrototypeFunction, NativeFunctionWrapper, and GlobalEvalFunction.

        Historically, Native functions used to be represented by PrototypeFunctions, however
        since introducing call optimizations to the JIT this has used JSFunctions for host
        calls too. At the point this change was made, the interpreter continued to use
        PrototypeFunctions, however since fallback from the JIT to interpreter was introduced
        the interpreter has had to be able to run using host functions represented using
        JSFunctions - leading to an unnecessary and redundant divergence in behaviour between 
        interpreter only builds, and situations where the JIT has fallen back to interpreting.

        NativeFunctionWrapper only existed to select between PrototypeFunction and JSFunction
        for wrappers for host functions, and as such can also be removed.

        GlobalEvalFunction is a redundant wrapper that happens to be derived from
        PrototypeFunction. It existed to hold a reference to the global object - but since all
        functions how derive from JSObjectWithGlobalObject, this no longer requires an
        additional class to provide this functionality.

        * bindings/js/JSDOMBinding.cpp:
        * bindings/js/JSDOMWindowCustom.cpp:
        * bindings/js/JSHistoryCustom.cpp:
        * bindings/js/JSLocationCustom.cpp:
            Removed use of redundant classes.

2011-02-20  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r79169.
        http://trac.webkit.org/changeset/79169
        https://bugs.webkit.org/show_bug.cgi?id=54846

        Made unexpected results for tests without CJK characters
        (Requested by tkent on #webkit).

        * platform/graphics/chromium/FontCacheChromiumWin.cpp:
        (WebCore::FontCache::createFontPlatformData):
        * platform/graphics/chromium/FontPlatformDataChromiumWin.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::operator=):
        * platform/graphics/chromium/FontPlatformDataChromiumWin.h:
        (WebCore::FontPlatformData::orientation):
        * platform/graphics/skia/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):

2011-02-20  Chun-Lung Huang  <alvincl.huang@gmail.com>

        Reviewed by Kent Tamura.

        On Chromium Windows, glyphs in vertical text tests are rotated 90
        degrees clockwise. https://bugs.webkit.org/show_bug.cgi?id=51450

        This platform dependent patch makes Chromium Windows show the
        vertical writing text correctly. Job was done by adding a prefix '@'
        in front of the font family name (Windows Only). No new tests added.

        * platform/graphics/chromium/FontCacheChromiumWin.cpp:
        (WebCore::FontCache::createFontPlatformData):
        * platform/graphics/chromium/FontPlatformDataChromiumWin.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::operator=):
        * platform/graphics/chromium/FontPlatformDataChromiumWin.h:
        (WebCore::FontPlatformData::orientation):
        * platform/graphics/skia/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):

2011-02-20  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dirk Schulze.

        REGRESSION (r73369-r73405): transform animation interpolates incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=54793
        
        After the refactoring in r73380, the ending state for some types of
        accelerated animations was computed incorrectly, because the TransformationMatrix
        wasn't reset to identity before the ending value transformations were applied.
        
        Fix by cleaning up the code to use explicit, separate values for
        starting and ending values. Only matrix-type animations had this
        issue, but cleaned up other clauses similarly.

        Test: animations/3d/matrix-transform-type-animation.html

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::setTransformAnimationEndpoints):

2011-02-20  Dan Bernstein  <mitz@apple.com>

        Reviewed by Maciej Stachowiak.

        <rdar://problem/9028929> REGRESSION (r75897): Scaling applied twice to an iframe with a transformed ancestor

        Test: fast/frames/iframe-scale-applied-twice.html

        * page/FrameView.cpp:
        (WebCore::FrameView::create): Set the initial bounds of the view to match the
        frame size.
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::visibleContentRect): Based on bounds, not frame size.
        (WebCore::ScrollView::updateScrollbars): Ditto.
        (WebCore::ScrollView::setFrameRect): Moved code that really handles bounds size
        change to setBoundsSize().
        (WebCore::ScrollView::setBoundsSize): Added.
        (WebCore::ScrollView::setInitialBoundsSize): Added. Sets the bounds size but does
        not update anything.
        (WebCore::ScrollView::frameRectsChanged): Based on bounds, not frame size.
        (WebCore::ScrollView::scrollbarCornerPresent): Ditto.
        * platform/ScrollView.h:
        (WebCore::ScrollView::boundsSize): Added this getter.
        * platform/Widget.h:
        (WebCore::Widget::resize): Set the bounds size to the frame size.
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::paint): Fixed an error in the indirect drawing code
        path where the buffer rect was resized to capture only the damaged part, but was
        still drawn in the original location.

2011-02-20  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Eric Seidel.

        Tighten up access permissions by using libxslt API
        https://bugs.webkit.org/show_bug.cgi?id=52688
        <rdar://problem/8909191> 

        * xml/XSLTProcessorLibxslt.cpp: (WebCore::XSLTProcessor::transformToString): We are only
        interested in a string result, so let libxslt know about that.

2011-02-20  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r79104.
        http://trac.webkit.org/changeset/79104
        https://bugs.webkit.org/show_bug.cgi?id=54835

        Might have caused flaky canaries (Requested by tonyg-cr on
        #webkit).

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::canTakeNextToken):
        (WebCore::HTMLDocumentParser::pumpTokenizer):
        * html/parser/HTMLParserScheduler.cpp:
        (WebCore::isLayoutTimerActive):
        * html/parser/HTMLParserScheduler.h:
        (WebCore::HTMLParserScheduler::checkForYieldBeforeToken):
        * page/FrameView.h:

2011-02-20  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        SVG animation - analyze attribute type for animation
        https://bugs.webkit.org/show_bug.cgi?id=54542

        Analyze animated attribute type to determine the kind of animation. Removed enum PropertyType and replace it
        with AnimatedAttributeType instead. More cleanup of the animation code.
        Added missing fillAttributeToPropertyTypeMap() for SVGGElement.

        Use QualifiedName instead of AtomicStrings for attribute names. This makes it easier to handle animated attributes
        from a different namespace like xlink:href. The rest of the SVG code is using QualifiedNames as well.

        No change of functionality on the animation code. The changes for the <g>-element affect animateTransform. Sadly
        animateTransform is not supported by our SVG animation test script at the moment. Can still be tested manually
        with the W3C test suite in trunk.

        The change on SVGUseElement gets covered by animate-elem-39-t.svg

        Test: svg/animations/animate-dynamic-update-attributeName.html

        * svg/SVGAnimateElement.cpp:
        (WebCore::SVGAnimateElement::SVGAnimateElement):
        (WebCore::SVGAnimateElement::hasValidAttributeType):
        (WebCore::SVGAnimateElement::determineAnimatedAttributeType):
        (WebCore::SVGAnimateElement::calculateAnimatedValue):
        (WebCore::inheritsFromProperty):
        (WebCore::SVGAnimateElement::calculateFromAndToValues):
        (WebCore::SVGAnimateElement::calculateFromAndByValues):
        (WebCore::SVGAnimateElement::resetToBaseValue):
        (WebCore::SVGAnimateElement::applyResultsToTarget):
        (WebCore::SVGAnimateElement::calculateDistance):
        * svg/SVGAnimateElement.h:
        * svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::hasValidAttributeType):
        (WebCore::parsePoint):
        (WebCore::SVGAnimateMotionElement::resetToBaseValue):
        (WebCore::SVGAnimateMotionElement::calculateAnimatedValue):
        (WebCore::SVGAnimateMotionElement::calculateDistance):
        * svg/SVGAnimateMotionElement.h:
        * svg/SVGAnimateTransformElement.cpp:
        (WebCore::SVGAnimateTransformElement::hasValidAttributeType):
        (WebCore::SVGAnimateTransformElement::determineAnimatedAttributeType):
        (WebCore::SVGAnimateTransformElement::resetToBaseValue):
        (WebCore::SVGAnimateTransformElement::calculateAnimatedValue):
        (WebCore::SVGAnimateTransformElement::calculateFromAndByValues):
        (WebCore::SVGAnimateTransformElement::applyResultsToTarget):
        (WebCore::SVGAnimateTransformElement::calculateDistance):
        * svg/SVGAnimateTransformElement.h:
        * svg/SVGAnimationElement.cpp:
        (WebCore::parseKeyTimes):
        (WebCore::parseKeySplines):
        (WebCore::SVGAnimationElement::isTargetAttributeCSSProperty):
        (WebCore::SVGAnimationElement::setTargetAttributeAnimatedValue):
        (WebCore::SVGAnimationElement::calculateKeyTimesForCalcModePaced):
        (WebCore::solveEpsilon):
        (WebCore::SVGAnimationElement::calculatePercentFromKeyPoints):
        (WebCore::SVGAnimationElement::currentValuesFromKeyPoints):
        (WebCore::SVGAnimationElement::currentValuesForValuesAnimation):
        (WebCore::SVGAnimationElement::startedActiveInterval):
        * svg/SVGAnimationElement.h:
        * svg/SVGFilterElement.cpp:
        (WebCore::SVGFilterElement::fillAttributeToPropertyTypeMap):
        * svg/SVGGElement.cpp:
        (WebCore::SVGGElement::attributeToPropertyTypeMap):
        (WebCore::SVGGElement::fillAttributeToPropertyTypeMap): Added to fill the animated attribute map for this element.
        * svg/SVGGElement.h:
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::fillAttributeToPropertyTypeMap): Changed attribute type to AnimatedString for xlink:href.
        * svg/animation/SMILTimeContainer.cpp:
        (WebCore::SMILTimeContainer::baseValueFor):
        (WebCore::SMILTimeContainer::updateAnimations):
        * svg/animation/SMILTimeContainer.h:
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::SVGSMILElement):
        (WebCore::constructQualifiedName): Create a QualifiedName from a attribute name.
        (WebCore::SVGSMILElement::insertedIntoDocument): Update local varaible of attribute name.
        (WebCore::SVGSMILElement::removedFromDocument): Ditto.
        (WebCore::SVGSMILElement::attributeChanged): Ditto.
        * svg/animation/SVGSMILElement.h:
        (WebCore::SVGSMILElement::attributeName):

2011-02-20  David Kilzer  <ddkilzer@apple.com>

        BUILD FIX: Add missing UNUSED_PARAM() when !ENABLE(FULLSCREEN_API)

        Not reviewed.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingForFullScreen):

2011-02-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Implement PlatformKeyboardEvent::getCurrentModifierState()
        https://bugs.webkit.org/show_bug.cgi?id=52880

        * platform/gtk/KeyEventGtk.cpp:
        (WebCore::PlatformKeyboardEvent::getCurrentModifierState):

2011-02-19  Andreas Kling  <kling@webkit.org>

        Reviewed by Oliver Hunt.

        DragController should use Color::serialized() when passing colors to CSSStyleDeclaration
        https://bugs.webkit.org/show_bug.cgi?id=54545

        * page/DragController.cpp:
        (WebCore::DragController::concludeEditDrag):

2011-02-19  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add phase in addition to momentumPhase to platform wheel events
        Part of <rdar://problem/8945362>

        Rename existing phase to momentumPhase.

        * platform/PlatformWheelEvent.h:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):
        (WebCore::PlatformWheelEvent::momentumPhase):
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::handleWheelEvent):
        (WebCore::ScrollAnimatorMac::smoothScrollWithEvent):
        * platform/mac/WheelEventMac.mm:
        (WebCore::momentumPhaseForEvent):
        (WebCore::phaseForEvent):
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):

2011-02-19  Gavin Barraclough  <barraclough@apple.com>

        Qt build fix.

        * bridge/runtime_method.h:
        (JSC::RuntimeMethod::createStructure):

2011-02-19  Gavin Barraclough  <barraclough@apple.com>

        Qt build fix.

        * bridge/qt/qt_instance.cpp:
        * bridge/qt/qt_pixmapruntime.cpp:

2011-02-19  Gavin Barraclough  <barraclough@apple.com>

        Qt build fix.

        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtInstance::getMethod):
        * bridge/qt/qt_pixmapruntime.cpp:
        (JSC::Bindings::QtPixmapInstance::getMethod):

2011-02-18  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        Bug 54786 - Devirtualize JSCell::classInfo()

        Instead of making a virtual function call, add a pointer to the ClassInfo
        onto Structure.

        This removes a virtual function call, and paves the way towards removing all
        the createStructure methods, and StructureFlags/AnonymousSlotCount properties
        (these should be able to move onto ClassInfo).

        Calls to Structure::create must now pass a pointer to the ClassInfo for the
        structure. All objects now have a ClassInfo pointer, non-object cell types
        still do not.

        Changes are most mechanical, involving three steps:
            * Remove virtual classInfo() methods.
            * Add &s_info parameter to calls to Structure::create.
            * Rename ClassInfo static members on classes from 'info' to 's_info',
              for consistency.

        * WebCore.exp.in:
        * bindings/js/JSAudioConstructor.cpp:
        * bindings/js/JSAudioConstructor.h:
        * bindings/js/JSDOMBinding.cpp:
        * bindings/js/JSDOMBinding.h:
        * bindings/js/JSDOMGlobalObject.cpp:
        * bindings/js/JSDOMGlobalObject.h:
        * bindings/js/JSDOMWindowBase.cpp:
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSDOMWindowShell.cpp:
        * bindings/js/JSDOMWindowShell.h:
        * bindings/js/JSGeolocationCustom.cpp:
        * bindings/js/JSImageConstructor.cpp:
        * bindings/js/JSImageConstructor.h:
        * bindings/js/JSImageDataCustom.cpp:
        * bindings/js/JSOptionConstructor.cpp:
        * bindings/js/JSOptionConstructor.h:
        * bindings/js/JSWorkerContextBase.cpp:
        * bindings/js/JSWorkerContextBase.h:
        * bindings/js/SerializedScriptValue.cpp:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/c/CRuntimeObject.cpp:
        * bridge/c/CRuntimeObject.h:
        * bridge/c/c_instance.cpp:
        * bridge/jni/jsc/JNIUtilityPrivate.cpp:
        * bridge/jni/jsc/JavaInstanceJSC.cpp:
        * bridge/jni/jsc/JavaRuntimeObject.cpp:
        * bridge/jni/jsc/JavaRuntimeObject.h:
        * bridge/jsc/BridgeJSC.cpp:
        * bridge/objc/ObjCRuntimeObject.h:
        * bridge/objc/ObjCRuntimeObject.mm:
        * bridge/objc/objc_instance.mm:
        * bridge/objc/objc_runtime.h:
        * bridge/objc/objc_runtime.mm:
        * bridge/runtime_array.cpp:
        * bridge/runtime_array.h:
        * bridge/runtime_method.cpp:
        * bridge/runtime_method.h:
        * bridge/runtime_object.cpp:
        * bridge/runtime_object.h:

2011-02-19  Zan Dobersek  <zandobersek@gmail.com>

        Reviewed by Martin Robinson.

        [cairo][canvas] Drawing from/into float rectangles with width or height in range 0 to 1 fails
        https://bugs.webkit.org/show_bug.cgi?id=54491

        When width or height in float rectangle are in range (0, 0.5) or (-0.5, 0)
        and would round to 0, alter the behaviour to ensure that width or height are
        at least 1 pixel in size in these cases.

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::roundToDevicePixels):

2011-02-19  Dan Bernstein  <mitz@apple.com>

        LLVM Compiler build fix.

        * platform/graphics/ShadowBlur.cpp:
        (WebCore::ShadowBlur::blurLayerImage): Eliminated a file static that generated
        a global initializer since the compiler does not evaluate sqrtf at compile time.

2011-02-19  Brian Ryner  <bryner@chromium.org>

        Reviewed by Adam Barth.

        Replace the #include of DocumentLoader.h in Document.h with a
        forward declaration, and add a missing #include now that this
        transitive include is gone.
        https://bugs.webkit.org/show_bug.cgi?id=50489

        No new tests required.

        * bindings/ScriptControllerBase.cpp:
        * dom/Document.h:

2011-02-19  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Antonio Gomes.

        [EFL] Remove WebCore::currentTime()
        https://bugs.webkit.org/show_bug.cgi?id=53886

        There is no declaration for it and we use WTF::currentTime() everywhere.

        * platform/efl/SystemTimeEfl.cpp:

2011-02-19  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Andreas Kling.

        Move KeygenWinCE from wince into win directory
        https://bugs.webkit.org/show_bug.cgi?id=54804

        Move this file into the win directory, since it can be used on all windows platforms.

        * CMakeListsWinCE.txt:
        * platform/win/SSLKeyGeneratorWin.cpp: Renamed from platform/wince/KeygenWinCE.cpp.

2011-02-19  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Andreas Kling.

        Make FileChooserWin.cpp more portable and use it on WinCE
        https://bugs.webkit.org/show_bug.cgi?id=54803

        * CMakeListsWinCE.txt:
        * platform/win/FileChooserWin.cpp:
        (WebCore::FileChooser::basenameForWidth):
        * platform/wince/FileChooserWinCE.cpp: Removed.

2011-02-19  James Simonsen  <simonjam@chromium.org>

        Reviewed by Adam Barth.

        Make ScriptElement match the HTML5 spec
        https://bugs.webkit.org/show_bug.cgi?id=54676

        This implements the "prepare a script" section of the HTML5 spec in ScriptElement::prepareScript().
        http://www.whatwg.org/specs/web-apps/current-work/multipage/scripting-1.html#prepare-a-script

        There are a couple of things missing from the spec that would be new functionality. These will be added later.
        - Support for async=false
        - Empty src attribute should dispatch an error.

        There are a couple of slight behavioral changes to match the spec.
        - An XHTML script that is loaded then copied will not fire load on the copy.
        - If onbeforeload moves the script to a different document, then it will not try to execute again because wasAlreadyStarted is true.

        The parsers were updated to use the new API, but not rewritten to look like the spec. That will be done separately.

        Test: All existing tests.

        * dom/ScriptElement.cpp: Rewritten to match HTML5 spec.
        (WebCore::ScriptElement::ScriptElement):
        (WebCore::ScriptElement::insertedIntoDocument): Logic moved to prepareScript.
        (WebCore::ScriptElement::childrenChanged): Logic moved to prepareScript.
        (WebCore::ScriptElement::handleSourceAttribute): Logic moved to prepareScript.
        (WebCore::isLegacySupportedJavaScriptLanguage): Added to support old script types in layout tests.
        (WebCore::ScriptElement::isScriptTypeSupported): Derived from old shouldExecuteAsJavaScript().
        (WebCore::ScriptElement::prepareScript): START HERE. Main change. Should read exactly like HTML5's "prepare a script." Legacy type support needed for layout tests using XML parser.
        (WebCore::ScriptElement::requestScript): Most logic moved to prepareScript. Check security settings here.
        (WebCore::ScriptElement::executeScript): Combined evaluateScript() and executeScript() from old code. Logic moved to prepareScript.
        (WebCore::ScriptElement::stopLoadRequest): Ignore parser executed scripts.
        (WebCore::ScriptElement::execute): Renamed executeScript.
        (WebCore::ScriptElement::notifyFinished): We should only listen for non-parser executed scripts.
        (WebCore::ScriptElement::ignoresLoadRequest): New variable names.
        (WebCore::ScriptElement::childrenAreCommentsOrEmptyText): Added for HTML5 compliance.
        (WebCore::ScriptElement::scriptCharset): Use HTML5 variables.
        * dom/ScriptElement.h:
        (WebCore::ScriptElement::willBeParserExecuted): Added.
        (WebCore::ScriptElement::readyToBeParserExecuted): Added.
        (WebCore::ScriptElement::willExecuteWhenDocumentFinishedParsing): Added.
        (WebCore::ScriptElement::cachedScript): prepareScript() is the only place that should load scripts. This accessor lets the parsers listen for when loads finish.
        (WebCore::ScriptElement::isParserInserted): Added.
        * dom/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::endElementNs): Should behave the same. Offloads much of its work to prepareScript().
        * dom/XMLDocumentParserQt.cpp:
        (WebCore::XMLDocumentParser::parseEndElement): Identical to libxml2 changes.
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::insertedIntoDocument): No longer needs url.
        (WebCore::HTMLScriptElement::hasSourceAttribute): Added.
        * html/HTMLScriptElement.h:
        * html/parser/HTMLScriptRunner.cpp:
        (WebCore::HTMLScriptRunner::requestPendingScript): Requesting scripts offloaded to ScriptElement.
        (WebCore::HTMLScriptRunner::runScript): Should behave the same. Offloads much of its work to prepareScript().
        * svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::svgAttributeChanged): New ScriptElement function names.
        (WebCore::SVGScriptElement::insertedIntoDocument): No longer needs url.
        (WebCore::SVGScriptElement::finishParsingChildren): ScriptElement::finishParsingChildren is gone.
        (WebCore::SVGScriptElement::hasSourceAttribute): Added.
        (WebCore::SVGScriptElement::dispatchLoadEvent): New ScriptElement function names.
        * svg/SVGScriptElement.h:

2011-02-19  Marc-Antoine Ruel  <maruel@chromium.org>

        Reviewed by James Robinson.

        Split webcore_rendering off webcore_remaining to reduce its size for WPO builds
        https://bugs.webkit.org/show_bug.cgi?id=54789

        * WebCore.gyp/WebCore.gyp:

2011-02-19  Bill Budge  <bbudge@chromium.org>

        Reviewed by David Levin.

        ThreadableLoaderClient needs willSendRequest method
        https://bugs.webkit.org/show_bug.cgi?id=54688

        No new tests. Exposes no new functionality

        * WebCore.gypi:
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::willSendRequest):
        (WebCore::DocumentThreadableLoader::didReceiveData):
        (WebCore::DocumentThreadableLoader::didReceiveCachedMetadata):
        * loader/DocumentThreadableLoaderClient.h: Added.
        (WebCore::DocumentThreadableLoaderClient::isDocumentThreadableLoaderClient):
        (WebCore::DocumentThreadableLoaderClient::willSendRequest):
        * loader/ThreadableLoaderClient.h:
        (WebCore::ThreadableLoaderClient::isDocumentThreadableLoaderClient):

2011-02-19  Charlie Reis  <creis@chromium.org>

        Reviewed by Mihai Parparita.

        Ensure loading has stopped in HistoryController::goToItem
        https://bugs.webkit.org/show_bug.cgi?id=54517

        Avoid stopping all loaders in goToItem for same document navigations
        or pseudo-back-forward URLs.  Make HistoryController::goToItem private
        to force callers to go through Page::goToItem.  Also add a callback to
        FrameLoaderClient to let clients decide whether to stop loading first.

        Test: http/tests/navigation/forward-to-fragment-fires-onload.html

        * loader/EmptyClients.h:
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:
        * loader/HistoryController.cpp:
        * loader/HistoryController.h:
        * page/Page.cpp:

2011-02-19  Adam Barth  <abarth@webkit.org>

        Reviewed by Daniel Bates.

        Fix xssAuditor/iframe-injection.html
        https://bugs.webkit.org/show_bug.cgi?id=54591

        We should block the iframe src attribute.  Although this technically
        can't be used to run script, it's a pretty easy vector for stealing
        passwords.

        * html/parser/XSSFilter.cpp:
        (WebCore::XSSFilter::filterTokenInitial):
        (WebCore::XSSFilter::filterIframeToken):
        * html/parser/XSSFilter.h:

2011-02-18  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Eric Seidel.

        Let the parser yield for layout before running scripts
        https://bugs.webkit.org/show_bug.cgi?id=54355

        Prior to this patch, the parser would yield to perform a layout/paint before running a
        script only if the script or a stylesheet blocking the script is not loaded yet. Since we
        don't preload scan into the body while parsing the head, typically we'll block on a script
        early in the body that causes us to yield to do the first paint within a reasonable time.

        However, I'm planning to change the PreloadScanner to scan into the body from the head.
        That significantly improves overall load time, but would hurt first paint time because
        fewer scripts would be blocked during parsing and thus wouldn't yield.

        This change causes us to yield before running scripts if we haven't painted yet (regardless
        of whether or not the script is loaded). In addition to allowing the above mentioned
        PreloadScanner change to be implemented without regressing first paint time, this also
        improves first paint time by itself.

        I tested Alexa's top 45 websites using Web Page Replay to control the content and simulate
        bandwidth. This patch improved average first paint time by 1% over an unlimited connection,
        6% over a 1Mbps connection and 11% over a 5Mbps connection. There was no statistically
        signifcant change in page load time.

        Within the pages tested, 33 had no statistically significant change in time to first paint,
        12 improved, and none regressed. Of the improved, some of the standouts from the 1Mbps set
        are: 20% on youtube, 37% on wiki, 27% on ebay, 13% on cnn, 16% on espn, 74% on sohu.

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::canTakeNextToken): This is the new yield point.
        (WebCore::HTMLDocumentParser::pumpTokenizer): Remove ASSERT that we are not paused. isPaused
        means that we are waiting for a script. Bug 54574 changed pumpTokenizer() so that it does
        the right thing whether we are just before a token or waiting for a script. Now that we may
        yield before a token or before a script, this may be called while paused.
        * html/parser/HTMLParserScheduler.cpp:
        (WebCore::isLayoutTimerActive): Added a FIXME because r52919 changed minimumLayoutDelay()
        to return m_extraLayoutDelay instead of 0 as a minimum. So checking !minimumLayoutDelay()
        no longer works. The fix is to change it to check minimumLayoutDelay() ==
        m_extraLayoutDelay. But this is all the more reason to move this method onto Document. I'll
        do this in a follow up.
        (WebCore::HTMLParserScheduler::checkForYieldBeforeScript): Added.
        * page/FrameView.h:
        (WebCore::FrameView::hasEverPainted): Added.

2011-02-18  Dawit Alemayehu  <adawit@kde.org>

        Reviewed by Andreas Kling.

        [Qt]  Button Element is rendered w/ text off-center.
        https://bugs.webkit.org/show_bug.cgi?id=53373

        Test: LayoutTests/fast/forms/button-white-space.html 

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

2011-02-18  Jonathan Backer  <backer@chromium.org>

        Reviewed by Eric Seidel.

        [chromium] Fix leak of texture IDs in compositor.
        https://bugs.webkit.org/show_bug.cgi?id=54750

        No new tests. It is extremely unlikely that this leak would have
        any user visible impact because only a few bytes of space are wasted
        (we're leaking texture IDs, not actual textures) and the space of
        texture IDs is large (32 bits).

       * platform/graphics/chromium/TextureManager.cpp:
        (WebCore::TextureManager::requestTexture):

2011-02-18  Yi Shen  <yi.4.shen@nokia.com>

        Reviewed by Tor Arne Vestbø.

        Always display the media controls when requiresFullscreenForVideoPlayback() is true
        https://bugs.webkit.org/show_bug.cgi?id=54308

        For video element, it should have controls when 
        Chrome::requiresFullscreenForVideoPlayback() is true.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::controls):

2011-02-18  Adrienne Walker  <enne@google.com>

        Reviewed by Kenneth Russell.

        [chromium] Use nearest-neighbor filtering for root layer.
        https://bugs.webkit.org/show_bug.cgi?id=54409
        https://bugs.webkit.org/show_bug.cgi?id=54509

        This setting creates more consistent images for LayoutTests and
        prevents small floating point errors in texture coordinates from
        creating off-by-one pixel color differences.

        * platform/graphics/chromium/LayerTilerChromium.cpp:
        (WebCore::LayerTilerChromium::update):

2011-02-18  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Reviewed by Kent Tamura.

        [EFL] Fix coding style errors in RenderThemeEfl.h
        https://bugs.webkit.org/show_bug.cgi?id=54693

        Fix style errors in RenderThemeEfl.h

        * platform/efl/RenderThemeEfl.h:

2011-02-18  Ademar de Souza Reis Jr  <ademar.reis@openbossa.org>

        Reviewed by Andreas Kling.

        [Qt] The localized vendor name for Qt SIS packages should be "Nokia"
        https://bugs.webkit.org/show_bug.cgi?id=54742

        This change was applied in the Qt repository (qt/src/3rdparty/webkit),
        so we should do the same here in QtWebKit.

        Patch by Eckhart Koppen <eckhart.koppen@nokia.com>
        a8a84f1667966acfa093c4be0b7d4b0900ddd3d9:

        The previously used name "Nokia, Qt" was not usable for Nokia
        Content Signing, which only allows "Nokia" as the visible vendor
        name. The unique vendor ID remains as "Nokia, Qt"

        * WebCore.pro:

2011-02-18  Alexis Menard  <alexis.menard@openbossa.org>

        Reviewed by Andreas Kling.

        [Qt] REGRESSION(r67516) : on www.gmail.com a strange rendering issue appears on the
        menu bar due to flash.
        https://bugs.webkit.org/show_bug.cgi?id=54741

        Only show plugins with a valid size. We then don't involve X11 if there is
        nothing to see anyway.

        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::updatePluginWidget):
        (WebCore::PluginView::platformStart):

2011-02-18  Ryuan Choi  <ryuan.choi@samsung.com>

        Reviewed by Kent Tamura.

        [EFL] Remove GDK dependency.
        https://bugs.webkit.org/show_bug.cgi?id=53978

        Remove GLIB_SUPPORT macro in GDK related code.
        Regardless of GLIB_SUPPORT, getDefaultFontOptions() will works same way.

        * CMakeListsEfl.txt:
        * platform/graphics/freetype/FontPlatformDataFreeType.cpp:
        (WebCore::getDefaultFontOptions):

2011-02-18  Noel Gordon  <noel.gordon@gmail.com>

        Reviewed by James Robinson.

        [Chromium] Add elliptical gradient support to GradientSkia
        https://bugs.webkit.org/show_bug.cgi?id=51841

        Covered by existing tests, these need new rebaselines once this patch
        lands for chrome linux, win32

        fast/gradients/css3-color-stop-units.html
        fast/gradients/css3-color-stops.html
        fast/gradients/css3-linear-angle-gradients.html
        fast/gradients/css3-radial-gradients.html
        fast/gradients/css3-radial-gradients2.html
        fast/gradients/css3-radial-gradients3.html
        fast/gradients/css3-repeating-radial-gradients.html

        * platform/graphics/skia/GradientSkia.cpp:
        (WebCore::Gradient::platformGradient):

2011-02-18  James Robinson  <jamesr@chromium.org>

        Fix typo in boundary test in ASSERT() - test is for an inclusive range, not exclusive.

        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::updateTextureIfNeeded):

2011-02-18  Viatcheslav Ostapenko  <ostapenko.viatcheslav@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Tiled backing store area is too big.
        Error in area calculcation causes size of backing store
        up to 6 times bigger than viewport with default multipliers.
        https://bugs.webkit.org/show_bug.cgi?id=54587

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

2011-02-18  Beth Dakin  <bdakin@apple.com>

        Reviewed by Sam Weinig.

        Fix for <rdar://problem/9018729> Horizontal scroller doesn't 
        appear when loading a page with a Horizontal scrollbar from 
        the back/forward cache.

        This patch adds a new  bool member variable to FrameView to 
        keep track of whether we are loading a page from the back/
        forward cache. If we are, don't suppress scrollbars on 
        first layout.
        * history/CachedFrame.cpp:
        (WebCore::CachedFrameBase::restore):
        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::reset):
        (WebCore::FrameView::layout):
        * page/FrameView.h:
        (WebCore::FrameView::setIsRestoringFromBackForward):
        (WebCore::FrameView::isRestoringFromBackForward):

2011-02-18  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed WinCE build fix for r78846.

        * platform/graphics/wince/FontWinCE.cpp:
        (WebCore::TextRunComponent::TextRunComponent):
        * platform/graphics/wince/GraphicsContextWinCE.cpp:
        (WebCore::GraphicsContext::drawLineForText):
        (WebCore::GraphicsContext::drawLineForTextChecking):
        (WebCore::GraphicsContext::drawText):
        * platform/wince/FileChooserWinCE.cpp:
        (WebCore::FileChooser::basenameForWidth):

2011-02-18  Emil A Eklund  <eae@chromium.org>

        Reviewed by Darin Adler.

        Crash in EventHandler::sendContextMenuEventForKey
        https://bugs.webkit.org/show_bug.cgi?id=54495

        Test: fast/events/menu-keydown-on-hidden-element.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::sendContextMenuEventForKey): Add null check.

2011-02-15  Adrienne Walker  <enne@google.com>

        Reviewed by James Robinson.

        [chromium] Clean up shader code from LayerChromium classes
        https://bugs.webkit.org/show_bug.cgi?id=54484

        This is a refactoring and there should be no change in functionality.
        All shader code is pulled out into classes in ShaderChromium.
        The SharedValues classes are now turned into ProgramBinding, one per
        shader program.  These contain shader classes that know about what
        variables they can bind.

        * WebCore.gypi:
        * platform/graphics/chromium/CanvasLayerChromium.cpp:
        (WebCore::CanvasLayerChromium::draw):
        * platform/graphics/chromium/CanvasLayerChromium.h:
        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::draw):
        * platform/graphics/chromium/ContentLayerChromium.h:
        * platform/graphics/chromium/GeometryBinding.cpp: Added.
        (WebCore::GeometryBinding::GeometryBinding):
        (WebCore::GeometryBinding::~GeometryBinding):
        (WebCore::GeometryBinding::prepareForDraw):
        * platform/graphics/chromium/GeometryBinding.h: Copied from Source/WebCore/platform/graphics/chromium/PluginLayerChromium.h.
        (WebCore::GeometryBinding::initialized):
        (WebCore::GeometryBinding::context):
        (WebCore::GeometryBinding::quadVerticesVbo):
        (WebCore::GeometryBinding::quadElementsVbo):
        (WebCore::GeometryBinding::positionAttribLocation):
        (WebCore::GeometryBinding::texCoordAttribLocation):
        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::drawDebugBorder):
        * platform/graphics/chromium/LayerChromium.h:
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::drawLayers):
        (WebCore::LayerRendererChromium::initializeSharedObjects):
        (WebCore::LayerRendererChromium::cleanupSharedObjects):
        * platform/graphics/chromium/LayerRendererChromium.h:
        (WebCore::LayerRendererChromium::sharedGeometry):
        (WebCore::LayerRendererChromium::borderProgram):
        (WebCore::LayerRendererChromium::contentLayerProgram):
        (WebCore::LayerRendererChromium::canvasLayerProgram):
        (WebCore::LayerRendererChromium::videoLayerRGBAProgram):
        (WebCore::LayerRendererChromium::videoLayerYUVProgram):
        (WebCore::LayerRendererChromium::pluginLayerProgram):
        (WebCore::LayerRendererChromium::renderSurfaceProgram):
        (WebCore::LayerRendererChromium::renderSurfaceMaskProgram):
        (WebCore::LayerRendererChromium::tilerProgram):
        * platform/graphics/chromium/LayerTilerChromium.cpp:
        (WebCore::LayerTilerChromium::draw):
        (WebCore::LayerTilerChromium::drawTexturedQuad):
        * platform/graphics/chromium/LayerTilerChromium.h:
        * platform/graphics/chromium/PluginLayerChromium.cpp:
        (WebCore::PluginLayerChromium::draw):
        * platform/graphics/chromium/PluginLayerChromium.h:
        * platform/graphics/chromium/ProgramBinding.cpp: Added.
        (WebCore::ProgramBindingBase::ProgramBindingBase):
        (WebCore::ProgramBindingBase::~ProgramBindingBase):
        (WebCore::ProgramBindingBase::init):
        (WebCore::ProgramBindingBase::loadShader):
        (WebCore::ProgramBindingBase::createShaderProgram):
        * platform/graphics/chromium/ProgramBinding.h: Added.
        (WebCore::ProgramBindingBase::program):
        (WebCore::ProgramBindingBase::initialized):
        (WebCore::ProgramBinding::ProgramBinding):
        (WebCore::ProgramBinding::vertexShader):
        (WebCore::ProgramBinding::fragmentShader):
        * platform/graphics/chromium/RenderSurfaceChromium.cpp:
        (WebCore::RenderSurfaceChromium::drawSurface):
        * platform/graphics/chromium/RenderSurfaceChromium.h:
        * platform/graphics/chromium/ShaderChromium.cpp: Added.
        (WebCore::VertexShaderPosTex::VertexShaderPosTex):
        (WebCore::VertexShaderPosTex::init):
        (WebCore::VertexShaderPosTex::getShaderString):
        (WebCore::VertexShaderPosTexYUVStretch::VertexShaderPosTexYUVStretch):
        (WebCore::VertexShaderPosTexYUVStretch::init):
        (WebCore::VertexShaderPosTexYUVStretch::getShaderString):
        (WebCore::VertexShaderPos::VertexShaderPos):
        (WebCore::VertexShaderPos::init):
        (WebCore::VertexShaderPos::getShaderString):
        (WebCore::VertexShaderPosTexTransform::VertexShaderPosTexTransform):
        (WebCore::VertexShaderPosTexTransform::init):
        (WebCore::VertexShaderPosTexTransform::getShaderString):
        (WebCore::FragmentTexAlphaBinding::FragmentTexAlphaBinding):
        (WebCore::FragmentTexAlphaBinding::init):
        (WebCore::FragmentShaderRGBATexFlipAlpha::getShaderString):
        (WebCore::FragmentShaderRGBATexAlpha::getShaderString):
        (WebCore::FragmentShaderBGRATexAlpha::getShaderString):
        (WebCore::FragmentShaderRGBATexAlphaMask::FragmentShaderRGBATexAlphaMask):
        (WebCore::FragmentShaderRGBATexAlphaMask::init):
        (WebCore::FragmentShaderRGBATexAlphaMask::getShaderString):
        (WebCore::FragmentShaderYUVVideo::FragmentShaderYUVVideo):
        (WebCore::FragmentShaderYUVVideo::init):
        (WebCore::FragmentShaderYUVVideo::getShaderString):
        (WebCore::FragmentShaderColor::FragmentShaderColor):
        (WebCore::FragmentShaderColor::init):
        (WebCore::FragmentShaderColor::getShaderString):
        * platform/graphics/chromium/ShaderChromium.h: Added.
        (WebCore::VertexShaderPosTex::matrixLocation):
        (WebCore::VertexShaderPosTexYUVStretch::matrixLocation):
        (WebCore::VertexShaderPosTexYUVStretch::yWidthScaleFactorLocation):
        (WebCore::VertexShaderPosTexYUVStretch::uvWidthScaleFactorLocation):
        (WebCore::VertexShaderPos::matrixLocation):
        (WebCore::VertexShaderPosTexTransform::matrixLocation):
        (WebCore::VertexShaderPosTexTransform::texTransformLocation):
        (WebCore::FragmentTexAlphaBinding::alphaLocation):
        (WebCore::FragmentTexAlphaBinding::samplerLocation):
        (WebCore::FragmentShaderRGBATexAlphaMask::alphaLocation):
        (WebCore::FragmentShaderRGBATexAlphaMask::samplerLocation):
        (WebCore::FragmentShaderRGBATexAlphaMask::maskSamplerLocation):
        (WebCore::FragmentShaderYUVVideo::yTextureLocation):
        (WebCore::FragmentShaderYUVVideo::uTextureLocation):
        (WebCore::FragmentShaderYUVVideo::vTextureLocation):
        (WebCore::FragmentShaderYUVVideo::alphaLocation):
        (WebCore::FragmentShaderYUVVideo::ccMatrixLocation):
        (WebCore::FragmentShaderYUVVideo::signAdjLocation):
        (WebCore::FragmentShaderColor::colorLocation):
        * platform/graphics/chromium/VideoLayerChromium.cpp:
        (WebCore::VideoLayerChromium::draw):
        (WebCore::VideoLayerChromium::drawYUV):
        (WebCore::VideoLayerChromium::drawRGBA):
        * platform/graphics/chromium/VideoLayerChromium.h:

2011-02-18  James Robinson  <jamesr@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] Update texture for ContentLayerChromiums in draw() call instead of updateContents..() call
        https://bugs.webkit.org/show_bug.cgi?id=54315

        This defers all operations on the compositor's GL context until the
        draw() call which is a prerequisite for moving the draw() off-thread.
        Also cleans up the update cycle a bit - there were some unused local
        variables and whatnot.

        One consequence of this change is that the upload buffer is retained
        across updates now instead of allocated by each paint.  This is
        necessary so that the full layer contents can be uploaded if the
        texture manager evicts the layer's backing texture.  This costs more
        persistent memory but avoids lots of allocator churn on updates.
        Another nonobvious detail is that I have to update the texture for
        ContentLayerChromiums in bindContentsTexture() because mask layers
        never draw(), they are instead bound to the secondary texture unit.

        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::requiresClippedUpdateRect):
        (WebCore::ContentLayerChromium::updateContentsIfDirty):
        (WebCore::ContentLayerChromium::resizeUploadBufferForImage):
        (WebCore::ContentLayerChromium::resizeUploadBuffer):
        (WebCore::SkBitmapConditionalAutoLockerPixels::SkBitmapConditionalAutoLockerPixels):
        (WebCore::SkBitmapConditionalAutoLockerPixels::~SkBitmapConditionalAutoLockerPixels):
        (WebCore::SkBitmapConditionalAutoLockerPixels::lockPixels):
        (WebCore::ContentLayerChromium::updateTextureIfNeeded):
        (WebCore::ContentLayerChromium::draw):
        (WebCore::ContentLayerChromium::unreserveContentsTexture):
        (WebCore::ContentLayerChromium::bindContentsTexture):
        * platform/graphics/chromium/ContentLayerChromium.h:
        * platform/graphics/chromium/ImageLayerChromium.cpp:
        (WebCore::ImageLayerChromium::updateContentsIfDirty):
        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::setBounds):
        * platform/graphics/chromium/LayerChromium.h:

2011-02-18  Kenneth Russell  <kbr@google.com>

        Unreviewed, Chromium build fix on certain Linux platforms.

        * platform/graphics/gpu/LoopBlinnSolidFillShader.cpp:

2011-02-18  Mahesh Kulkarni  <mahesh.kulkarni@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Implement client based geolocation for qtport
        https://bugs.webkit.org/show_bug.cgi?id=42629

        Implements client based geolocation for qtwebkit. Removed old code related to non-client based geolocation

        No tests as yet. This will be raised as different bug as new mock client implementation need to be done.

        * WebCore.pro:
        * features.pri:
        * platform/qt/GeolocationServiceQt.cpp: Removed.
        * platform/qt/GeolocationServiceQt.h: Removed.

2011-02-18  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Dave Hyatt.

        Add support for dir=auto
        https://bugs.webkit.org/show_bug.cgi?id=50916

        When an element has dir attribute with value "auto", call defaultWritingMode
        to find its directionality.
        Added a flag SelfOrAncestorHasDirAutoFlag, and added hooks in the DOM to set
        and check this flag. This flag is set on every node between an element with
        dir=auto attribute and its first text node. Changes in the DOM between those
        elements will trigger re-evaluating the directionality, but changes not
        between those element do not need to be concerned.
        The DOM hooks were added to childrenChanged, and to parseMappedAttribute.
        The directionality is evaluated when children are added, and cleared when they are
        removed. Directionality flag is also cleared on a child that is no longer determining
        the directionality due to a sibling being added before that child.

        Added 2 static CSSMutableStyleDeclarations to be used for elements with dir=auto.
        We cannot used the mapped declaration, because it can take only one value.

        Tests: fast/dom/HTMLElement/attr-dir-auto-change-before-text-node.html
               fast/dom/HTMLElement/attr-dir-auto-change-child-node.html
               fast/dom/HTMLElement/attr-dir-auto-change-text.html
               fast/dom/HTMLElement/attr-dir-auto-children.html
               fast/dom/HTMLElement/attr-dir-auto-remove-add-children.html
               fast/dom/HTMLElement/attr-dir-auto.html
               fast/dom/HTMLElement/attr-dir-value-change.html

        * css/CSSStyleSelector.cpp:
        (WebCore::leftToRightDeclaration):
        (WebCore::rightToLeftDeclaration):
        (WebCore::CSSStyleSelector::canShareStyleWithElement):
        (WebCore::CSSStyleSelector::styleForElement):
        * dom/Node.h:
        (WebCore::Node::selfOrAncestorHasDirAutoAttribute):
        (WebCore::Node::setSelfOrAncestorHasDirAutoAttribute):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::mapToEntry):
        (WebCore::HTMLElement::parseMappedAttribute):
        (WebCore::setHasDirAutoFlagRecursively):
        (WebCore::HTMLElement::childrenChanged):
        (WebCore::HTMLElement::directionalityIfhasDirAutoAttribute):
        (WebCore::HTMLElement::directionality):
        (WebCore::HTMLElement::dirAttributeChanged):
        (WebCore::HTMLElement::adjustDirectionalityIfNeededAfterChildAttributeChanged):
        (WebCore::HTMLElement::calculateAndAdjustDirectionality):
        (WebCore::HTMLElement::adjustDirectionalityIfNeededAfterChildrenChanged):
        * html/HTMLElement.h:

2011-02-18  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Antonio Gomes.

        Navigating downwards / upwards does not focus on the links spread across more than one line.
        https://bugs.webkit.org/show_bug.cgi?id=54639

        When 2 anchor elements span more than one line each, and one ends on the same line that the
        second starts on, the rects reported by their renderers are overlapping. When handling
        2 overlapping nodes, check for this case, and don't assume that one of the nodes is on a higher layer.   

        Test: fast/spatial-navigation/snav-two-elements-one-line.html

        * page/FocusController.cpp:
        (WebCore::updateFocusCandidateIfNeeded):
        (WebCore::FocusController::findFocusCandidateInContainer):
        * page/SpatialNavigation.cpp:
        (WebCore::areElementsOnSameLine):
        (WebCore::distanceDataForNode):
        * page/SpatialNavigation.h:

2011-02-18  Ben Vanik  <benvanik@google.com>

        Reviewed by Kenneth Russell.

        Bug 53940: Implement the OES_vertex_array_object WebGL extension
        https://bugs.webkit.org/show_bug.cgi?id=53940

        Initial implementation of the OES_vertex_array_object extension adding the OESVertexArrayObject
        extension container and WebGLVertexArrayObjectOES VAO object. The extension is plumbed through
        the Extensions3D interface and implemented in the Extensions3DOpenGL (WebKit/OSX) version when
        it is available.
        Two big changes touching code outside of the extension files:
        * Moved the typedefs at the top of GraphicsContext3D.h to GraphicsTypes3D.h (modeled after
          GraphicsTypes.h). They are not namespaced as they weren't before.
        * To make the code cleaner/clearer all vertex attribute state has been moved to the
          WebGLVertexArrayObjectOES type (struct VertexAttribState) except for values which are still
          on the WebGLRenderingContext. A default VAO is now used to store the existing attribute
          states for when no other VAO is used. Code in WebGLRenderingContext dealing with buffers and
          vertex attributes now defers to or stores values in the bound array object.

        Tested against the WebGL conformance suite and the new
        oes-vertex-array-object test:
        https://cvs.khronos.org/svn/repos/registry/trunk/public/webgl/sdk/tests/conformance/oes-vertex-array-object.html

        * CMakeLists.txt:
        * CodeGenerators.pri:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gyp: Modified property svn:ignore.
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::toJS):
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        (WebCore::toV8Object):
        * html/canvas/OESVertexArrayObject.cpp: Added.
        (WebCore::OESVertexArrayObject::OESVertexArrayObject):
        (WebCore::OESVertexArrayObject::~OESVertexArrayObject):
        (WebCore::OESVertexArrayObject::getName):
        (WebCore::OESVertexArrayObject::create):
        (WebCore::OESVertexArrayObject::createVertexArrayOES):
        (WebCore::OESVertexArrayObject::deleteVertexArrayOES):
        (WebCore::OESVertexArrayObject::isVertexArrayOES):
        (WebCore::OESVertexArrayObject::bindVertexArrayOES):
        * html/canvas/OESVertexArrayObject.h: Added.
        * html/canvas/OESVertexArrayObject.idl: Added.
        * html/canvas/WebGLExtension.h:
        * html/canvas/WebGLGetInfo.cpp:
        (WebCore::WebGLGetInfo::WebGLGetInfo):
        (WebCore::WebGLGetInfo::getWebGLVertexArrayObjectOES):
        * html/canvas/WebGLGetInfo.h:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::initializeNewContext):
        (WebCore::WebGLRenderingContext::bindBuffer):
        (WebCore::WebGLRenderingContext::deleteBuffer):
        (WebCore::WebGLRenderingContext::disableVertexAttribArray):
        (WebCore::WebGLRenderingContext::validateElementArraySize):
        (WebCore::WebGLRenderingContext::validateIndexArrayConservative):
        (WebCore::WebGLRenderingContext::validateIndexArrayPrecise):
        (WebCore::WebGLRenderingContext::validateRenderingState):
        (WebCore::WebGLRenderingContext::drawElements):
        (WebCore::WebGLRenderingContext::enableVertexAttribArray):
        (WebCore::WebGLRenderingContext::getExtension):
        (WebCore::WebGLRenderingContext::getParameter):
        (WebCore::WebGLRenderingContext::getSupportedExtensions):
        (WebCore::WebGLRenderingContext::getVertexAttrib):
        (WebCore::WebGLRenderingContext::vertexAttribPointer):
        (WebCore::WebGLRenderingContext::validateBufferDataParameters):
        (WebCore::WebGLRenderingContext::vertexAttribfImpl):
        (WebCore::WebGLRenderingContext::vertexAttribfvImpl):
        (WebCore::WebGLRenderingContext::initVertexAttrib0):
        (WebCore::WebGLRenderingContext::simulateVertexAttrib0):
        (WebCore::WebGLRenderingContext::restoreStatesAfterVertexAttrib0Simulation):
        (WebCore::WebGLRenderingContext::getNumberOfExtensions):
        (WebCore::WebGLRenderingContext::getExtensionNumber):
        * html/canvas/WebGLRenderingContext.h:
        (WebCore::WebGLRenderingContext::getMaxVertexAttribs):
        (WebCore::WebGLRenderingContext::setBoundVertexArrayObject):
        (WebCore::WebGLRenderingContext::VertexAttribValue::VertexAttribValue):
        * html/canvas/WebGLVertexArrayObjectOES.cpp: Added.
        (WebCore::WebGLVertexArrayObjectOES::create):
        (WebCore::WebGLVertexArrayObjectOES::WebGLVertexArrayObjectOES):
        (WebCore::WebGLVertexArrayObjectOES::deleteObjectImpl):
        * html/canvas/WebGLVertexArrayObjectOES.h: Added.
        (WebCore::WebGLVertexArrayObjectOES::~WebGLVertexArrayObjectOES):
        (WebCore::WebGLVertexArrayObjectOES::VertexAttribState::VertexAttribState):
        (WebCore::WebGLVertexArrayObjectOES::isDefaultObject):
        (WebCore::WebGLVertexArrayObjectOES::hasEverBeenBound):
        (WebCore::WebGLVertexArrayObjectOES::setHasEverBeenBound):
        (WebCore::WebGLVertexArrayObjectOES::getElementArrayBuffer):
        (WebCore::WebGLVertexArrayObjectOES::setElementArrayBuffer):
        (WebCore::WebGLVertexArrayObjectOES::getVertexAttribState):
        (WebCore::WebGLVertexArrayObjectOES::isVertexArray):
        * html/canvas/WebGLVertexArrayObjectOES.idl: Added.
        * platform/graphics/Extensions3D.h:
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/GraphicsTypes3D.h: Added.
        * platform/graphics/chromium/Extensions3DChromium.h:
        * platform/graphics/opengl/Extensions3DOpenGL.cpp:
        (WebCore::Extensions3DOpenGL::supports):
        (WebCore::Extensions3DOpenGL::createVertexArrayOES):
        (WebCore::Extensions3DOpenGL::deleteVertexArrayOES):
        (WebCore::Extensions3DOpenGL::isVertexArrayOES):
        (WebCore::Extensions3DOpenGL::bindVertexArrayOES):
        * platform/graphics/opengl/Extensions3DOpenGL.h:
        * platform/graphics/qt/Extensions3DQt.cpp:
        (WebCore::Extensions3DQt::createVertexArrayOES):
        (WebCore::Extensions3DQt::deleteVertexArrayOES):
        (WebCore::Extensions3DQt::isVertexArrayOES):
        (WebCore::Extensions3DQt::bindVertexArrayOES):
        * platform/graphics/qt/Extensions3DQt.h:

2011-02-17  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: reflect changes to styles when they happen outside inspector.
        https://bugs.webkit.org/show_bug.cgi?id=44620

        Notify InspectorInstrumentation of inline style changes from CSSMutableStyleDeclaration
        whenever the style change does not come from a direct "style" attribute modification.
        The performance regression occurs only with the Web Inspector opened, when inline styles
        are modified through setting style.cssText or style.<styleAttribute>: according to the Web Inspector protocol,
        an attribute change requires that all attributes for the node in question be pushed into the frontend.

        Test: inspector/styles/styles-update-from-js.html

        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::setNeedsStyleRecalc):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::RevalidateStyleAttributeTask::reset):
        (WebCore::RevalidateStyleAttributeTask::RevalidateStyleAttributeTask):
        (WebCore::RevalidateStyleAttributeTask::scheduleFor):
        (WebCore::RevalidateStyleAttributeTask::onTimer):
        (WebCore::InspectorDOMAgent::reset):
        (WebCore::InspectorDOMAgent::didInvalidateStyleAttr):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didInvalidateStyleAttrImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didInvalidateStyleAttr):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheetForInlineStyle::didModifyElementAttribute):
        (WebCore::InspectorStyleSheetForInlineStyle::ensureParsedDataReady):
        (WebCore::InspectorStyleSheetForInlineStyle::elementStyleText):
        * inspector/InspectorStyleSheet.h:
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype._attributesUpdated):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.prototype._rebuildSectionsForStyleRules):
        (WebInspector.StylesSidebarPane.prototype.addBlankSection):
        (WebInspector.StylePropertiesSection.prototype.onpopulate):
        (WebInspector.StylePropertiesSection.prototype.addNewBlankProperty):
        (WebInspector.ComputedStylePropertiesSection.prototype.onpopulate):
        (WebInspector.BlankStylePropertiesSection):
        (WebInspector.StylePropertyTreeElement):
        (WebInspector.StylePropertyTreeElement.prototype):
        (WebInspector.StylePropertyTreeElement.prototype.element.userInput.previousContent.context.moveDirection):

2011-02-16  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Eric Seidel.

        Refactor pumpTokenizer loop
        https://bugs.webkit.org/show_bug.cgi?id=54574

        1. This makes pumpTokenizer() safe to call when waiting for a script or when about to get
           the next token, although ASSERTs still enforce that we aren't waiting for a script. This
           enables resumeParsingAfterYield() to call pumpTokenizer with no modifications even if we
           yield before running a script rather than before taking a token (see bug 54355).
        2. This also picks up the refCount >= 1 assert when stopped.

        Tested PerformanceTests/Parser to verify no regression. If anything it got faster.
        Before:
          avg 985.05
          median 985.5
          stdev 3.007906248539007
          min 980
          max 990
        After:
          avg 980.05
          median 981
          stdev 3.122098653149833
          min 974
          max 985

        No new tests because no new functionality.

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::canTakeNextToken): Added.
        (WebCore::HTMLDocumentParser::pumpTokenizer):
        * html/parser/HTMLDocumentParser.h:

2011-02-18  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r79003.
        http://trac.webkit.org/changeset/79003
        https://bugs.webkit.org/show_bug.cgi?id=54753

        It broke tests on GTK bots (Requested by Ossy on #webkit).

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::lastChildConsideringContinuation):
        * dom/Node.cpp:
        (WebCore::Node::removeEventListener):
        * html/DateComponents.cpp:
        (WebCore::DateComponents::parseTime):

2011-02-18  Csaba Osztrogonác  <ossy@webkit.org>

        Rubber-stamped by Andreas Kling.

        Warning fix. Use ASSERT_UNUSED() instead of ASSERT().

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::lastChildConsideringContinuation):
        * dom/Node.cpp:
        (WebCore::Node::removeEventListener):
        * html/DateComponents.cpp:
        (WebCore::DateComponents::parseTime):

2011-02-18  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Pavel Feldman.

        Web Inspector: [Text editor] Optimize editing updates in main panel
        https://bugs.webkit.org/show_bug.cgi?id=54661

        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer):
        (WebInspector.TextViewer.prototype._textChanged):
        (WebInspector.TextViewer.prototype._enterInternalTextChangeMode):
        (WebInspector.TextViewer.prototype._exitInternalTextChangeMode):
        (WebInspector.TextViewer.prototype._syncDecorationsForLine):
        (WebInspector.TextEditorChunkedPanel.prototype.textChanged):
        (WebInspector.TextEditorChunkedPanel.prototype._scroll):
        (WebInspector.TextEditorChunkedPanel.prototype.chunkForLine):
        (WebInspector.TextEditorChunkedPanel.prototype._totalHeight):
        (WebInspector.TextEditorGutterPanel.prototype._expandChunks):
        (WebInspector.TextEditorGutterChunk):
        (WebInspector.TextEditorGutterChunk.prototype.addDecoration):
        (WebInspector.TextEditorGutterChunk.prototype.removeDecoration):
        (WebInspector.TextEditorMainPanel):
        (WebInspector.TextEditorMainPanel.prototype._expandChunks):
        (WebInspector.TextEditorMainPanel.prototype._highlightDataReady):
        (WebInspector.TextEditorMainPanel.prototype._markSkippedPaintLines):
        (WebInspector.TextEditorMainPanel.prototype._paintSkippedLines):
        (WebInspector.TextEditorMainPanel.prototype._paintLines):
        (WebInspector.TextEditorMainPanel.prototype._paintLine):
        (WebInspector.TextEditorMainPanel.prototype._positionToSelection):
        (WebInspector.TextEditorMainPanel.prototype._applyDomUpdates):
        (WebInspector.TextEditorMainPanel.prototype._updateChunksForRanges):
        (WebInspector.TextEditorMainPanel.prototype._updateHighlightsForRange):
        (WebInspector.TextEditorMainPanel.prototype._collectLinesFromDiv):
        (WebInspector.TextEditorMainChunk):
        (WebInspector.TextEditorMainChunk.prototype.get startLine):
        (WebInspector.TextEditorMainChunk.prototype.set startLine):
        (WebInspector.TextEditorMainChunk.prototype.getExpandedLineRow):
        (WebInspector.TextEditorMainChunk.prototype.updateCollapsedLineRow):

2011-02-18  Steve Block  <steveblock@google.com>

        Reviewed by Andreas Kling

        Memory allocation error in convertV8ObjectToNPVariant() for strings
        https://bugs.webkit.org/show_bug.cgi?id=54737

        Include the termination character in the length when allocating memory
        and copying the string. This fixes a crashing bug on Android.

        This should be tested by the java/ tests on Chromium, but these
        tests are currently skipped.

        * bindings/v8/V8NPUtils.cpp:
        (WebCore::convertV8ObjectToNPVariant):

2011-02-18  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, rolling out r78979.
        http://trac.webkit.org/changeset/78979
        https://bugs.webkit.org/show_bug.cgi?id=53146

        causes multiple crashes on GTK

        * accessibility/gtk/AXObjectCacheAtk.cpp:
        (WebCore::notifyChildrenSelectionChange):
        (WebCore::AXObjectCache::postPlatformNotification):

2011-02-18  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] minimal build unrecognized options
        https://bugs.webkit.org/show_bug.cgi?id=50890

        * GNUmakefile.am: new feature defines for optional features build.

2011-02-17  Hans Wennborg  <hans@chromium.org>

        Reviewed by Jeremy Orlow.

        IndexedDB: Populate indexes created for object stores with data
        https://bugs.webkit.org/show_bug.cgi?id=54669

        Make sure that indices for object stores that already hold data get
        populated.

        * storage/IDBIndexBackendImpl.h:
        (WebCore::IDBIndexBackendImpl::hasValidId):
        * storage/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::putInternal):
        (WebCore::populateIndex):
        (WebCore::IDBObjectStoreBackendImpl::createIndexInternal):

2011-02-18  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Combo boxes should emit object:selection-changed even when collapsed
        https://bugs.webkit.org/show_bug.cgi?id=53146

        Emit the selection-changed signals when the menu list value has changed

        Test: platform/gtk/accessibility/combo-box-collapsed-selection-changed.html

        * accessibility/gtk/AXObjectCacheAtk.cpp:
        (WebCore::getListObject): New, return the right list object for
        menu lists and list boxes.
        (WebCore::notifyChildrenSelectionChange): Support menu lists.
        (WebCore::AXObjectCache::postPlatformNotification): Call function
        notifyChildrenSelectionChange for AXMenuListValueChanged.

2011-02-18  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Martin Robinson.

        [Gtk] atk_text_get_selection/atk_text_set_selection fails for list items
        https://bugs.webkit.org/show_bug.cgi?id=53453

        Ensure that atk_text_{get|set}_selection() work with list items.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (webkit_accessible_text_get_text): Properly handle list item
        markers when returning the text for an object for a given interval
        specified through the startOffset and endOffset parameters.
        (getSelectionOffsetsForObject): Bear in mind list item markers
        when returning the offsets for a selection over a list item.
        (webkit_accessible_text_set_selection): Adjust offsets if needed
        for list items with item markers. Ensure that it returns TRUE only
        when everything went fine setting the text selection.

2011-02-18  Antti Koivisto  <antti@apple.com>

        Reviewed by Maciej Stachowiak.

        https://bugs.webkit.org/show_bug.cgi?id=54728
        checkSelector*Value functions used in fastCheckSelector fail to inline
        
        Wrap the functions used as template arguments to classes.

        * css/CSSStyleSelector.cpp:
        (WebCore::fastCheckSingleSelector):
        (WebCore::ClassCheck::checkValue):
        (WebCore::IdCheck::checkValue):
        (WebCore::TagCheck::checkValue):
        (WebCore::CSSStyleSelector::SelectorChecker::fastCheckSelector):

2011-02-17  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Sam Weinig.

        Composited iframe content is missing from snapshots in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=54696

        We need to propagate the 'flattening' paint behavior flag
        down to subviews while painting. WebKit1 does this via
        code in WebFrameView, but this is a more general fix
        that works in WebKit2 as well.
        
        Made a utility method, parentFrameView(), which I changed
        some other methods to use as well.
        
        * page/FrameView.cpp:
        (WebCore::FrameView::isEnclosedInCompositingLayer):
        (WebCore::FrameView::useSlowRepaints):
        (WebCore::FrameView::useSlowRepaintsIfNotOverlapped):
        (WebCore::FrameView::isOverlappedIncludingAncestors):
        (WebCore::FrameView::parentFrameView):
        (WebCore::FrameView::paintContents):
        * page/FrameView.h:

2011-02-17  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/8898595> Pages that use fixed positioning display poorly when scaled

        * html/HTMLBodyElement.cpp:
        (WebCore::adjustForZoom): Account for page scale.
        (WebCore::HTMLBodyElement::setScrollLeft): Ditto.
        (WebCore::HTMLBodyElement::setScrollTop): Ditto.
        * page/FrameView.cpp:
        (WebCore::FrameView::scrollXForFixedPosition): Moved from ScrollView here and changed to
        account for page scale: when the page is scaled, the “viewport” with respect to which fixed
        objects are positioned is scaled as well. Since it’s now bigger than the real viewport (that is,
        the frame view), we move it around in proportion to the document scroll, so that when the document
        is fully scrolled to the bottom-right, the bottom right of the scaled viewport is visible.
        (WebCore::FrameView::scrollYForFixedPosition): Ditto.
        (WebCore::FrameView::scrollOffsetForFixedPosition): Moved from ScrollView here.
        * page/FrameView.h:
        * platform/ScrollView.cpp: Moved functions to FrameView.
        * platform/ScrollView.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateRepaintRectsAfterScroll): Account for the RenderView being transformed.
        (WebCore::RenderLayer::calculateClipRects): Used scrollOffsetForFixedPosition().
        (WebCore::RenderLayer::backgroundClipRect): Ditto.

2011-02-17  Kenneth Russell  <kbr@google.com>

        Reviewed by James Robinson.

        Add support for GPU accelerated path rendering
        https://bugs.webkit.org/show_bug.cgi?id=44729

        Incorporates the Loop and Blinn path rendering algorithm as an
        option to the GPU-accelerated canvas code, currently only compiled
        in to the Chromium port. Currently it's toggled by changing a
        hardcoded constant in
        SharedGraphicsContext3D::useLoopBlinnForPathRendering() and is
        disabled by default. This mechanism can be improved once we've
        gained more confidence in the implementation. There are some known
        bugs that need to be fixed first.

        No new tests; ran some 2D Canvas tests manually with the new flag
        both enabled and disabled.

        * WebCore.gypi:
        * platform/graphics/chromium/GLES2Canvas.cpp:
        (WebCore::GLES2Canvas::GLES2Canvas):
        (WebCore::GLES2Canvas::fillPath):
        * platform/graphics/chromium/GLES2Canvas.h:
        * platform/graphics/gpu/LoopBlinnClassifier.h:
        * platform/graphics/gpu/LoopBlinnLocalTriangulator.h:
        * platform/graphics/gpu/SharedGraphicsContext3D.cpp:
        (WebCore::SharedGraphicsContext3D::create):
        (WebCore::SharedGraphicsContext3D::SharedGraphicsContext3D):
        (WebCore::SharedGraphicsContext3D::createBuffer):
        (WebCore::SharedGraphicsContext3D::bindBuffer):
        (WebCore::SharedGraphicsContext3D::bufferData):
        (WebCore::SharedGraphicsContext3D::bufferSubData):
        (WebCore::SharedGraphicsContext3D::useLoopBlinnForPathRendering):
        (WebCore::SharedGraphicsContext3D::useLoopBlinnInteriorProgram):
        (WebCore::SharedGraphicsContext3D::useLoopBlinnExteriorProgram):
        * platform/graphics/gpu/SharedGraphicsContext3D.h:
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::fillPath):

2011-02-16  Stephen White  <senorblanco@chromium.org>

        Reviewed by James Robinson.

        Layout Test fast/canvas/setWidthResetAfterForcedRender.html fails on
        accelerated 2D canvas w/compositor enabled.
        https://bugs.webkit.org/show_bug.cgi?id=54561

        When resetting the CanvasRenderingContext2D, we also need to send a
        contentChanged() to the relevant RenderLayer.  This is similar to what
        is done in didDraw().

        Covered by fast/canvas/setWidthResetAfterForcedRender.html, but note 
        that this test will still fail pixel tests because the compositor
        is not compatible with repaint tests (the green square is now white,
        but the half-transparent grey repaint rect does not appear).

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::reset):

2011-02-17  Sergey Glazunov  <serg.glazunov@gmail.com>

        Reviewed by Kenneth Russell.

        Null out the WEBKIT_lose_context WebGL extension's context pointer when
        the WebGL rendering context is removed.
        https://bugs.webkit.org/show_bug.cgi?id=54679

        Test: fast/canvas/webgl/context-destroyed-crash.html

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::~WebGLRenderingContext):
        * html/canvas/WebKitLoseContext.cpp:
        (WebCore::WebKitLoseContext::loseContext): Add null-check for m_context.
        * html/canvas/WebKitLoseContext.h:
        (WebCore::WebKitLoseContext::contextDestroyed):

2011-02-17  Kenneth Russell  <kbr@google.com>

        Reviewed by Chris Marrin.

        Construction of Uint8Array from JS Array (and possibly others) incorrectly clamps values
        https://bugs.webkit.org/show_bug.cgi?id=52768

        Removed incorrect clamping code from IntegralTypedArrayBase. Fixed
        code which casts from incoming double to the destination type.
        Changed the JSC bindings to use this code, rather than a copy of
        the casting code and a different constructor, in order to reuse
        the fix.

        * bindings/js/JSArrayBufferViewHelper.h:
        (WebCore::constructArrayBufferView):
        * html/canvas/Int32Array.h:
        (WebCore::Int32Array::set):
        * html/canvas/Int8Array.h:
        (WebCore::Int8Array::set):
        * html/canvas/IntegralTypedArrayBase.h:
        (WebCore::IntegralTypedArrayBase::set):
        * html/canvas/Uint16Array.h:
        (WebCore::Uint16Array::set):
        * html/canvas/Uint32Array.h:
        (WebCore::Uint32Array::set):
        * html/canvas/Uint8Array.h:
        (WebCore::Uint8Array::set):

2011-02-17  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Knob proportion not quite right during rubber-band.
        <rdar://problem/9015201>

        Change knob proportion algorithm to treat overhang as making the view smaller,
        rather than document bigger.

        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::paint):

2011-02-16  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Andreas Kling.

        Summary: HTML5 <details> and <summary>: HTMLSummaryElement
        https://bugs.webkit.org/show_bug.cgi?id=54584

        Adding class HTMLSummaryElement to build systems. This class will be used in
        the implementation of new HTML5 tag <summary>.

        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLElementsAllInOne.cpp:
        * html/HTMLSummaryElement.cpp: Added.
        (WebCore::HTMLSummaryElement::create):
        (WebCore::HTMLSummaryElement::HTMLSummaryElement):
        * html/HTMLSummaryElement.h: Added.
        * html/HTMLTagNames.in:

2011-02-17  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Nate Chapin.

        Throwing in an IndexedDB error or success event should lead to the transaction aborting
        https://bugs.webkit.org/show_bug.cgi?id=54249

        When an exception is thrown but not handled  within an IDBRequests success/error event,
        we should abort the transaction.

        Test: storage/indexeddb/exception-in-event-aborts.html

        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent):
        * bindings/js/JSEventTarget.cpp:
        (WebCore::toJS):
        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::invokeEventHandler):
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::uncaughtExceptionInEventHandler):
        * dom/EventTarget.h:
        * storage/IDBRequest.cpp:
        (WebCore::IDBRequest::uncaughtExceptionInEventHandler):
        * storage/IDBRequest.h:

2011-02-17  Sam Weinig  <sam@webkit.org>

        Reviewed by Maciej Stachowiak.

        WebKit2: Support Dictionary popup
        <rdar://problem/7660670>

        Add some necessary exports.

        * WebCore.exp.in:

2011-02-17  W. James MacLean  <wjmaclean@chromium.org>

        Reviewed by James Robinson.

        [chromium] Add command-line flag to enable composite to offscreen texture.
        https://bugs.webkit.org/show_bug.cgi?id=52311

        Add plumbing to allow command-line switch to enable offscreen compositing. Function
        LayerRendererChromium::copyOffscreenTextureToDisplay used for now to mimic
        normal renderer operation.

        Existing functionality not changed; offscreen compositing will be tested via GPU test framework.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::setRootLayer):
        (WebCore::LayerRendererChromium::setCompositeOffscreen):
        (WebCore::LayerRendererChromium::copyOffscreenTextureToDisplay):
        (WebCore::LayerRendererChromium::useRenderSurface):
        (WebCore::LayerRendererChromium::setScissorToRect):
        * platform/graphics/chromium/LayerRendererChromium.h:
        (WebCore::LayerRendererChromium::isCompositingOffscreen):

2011-02-17  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fixes after recent changes.

        * dom/ScriptedAnimationController.h:
        * platform/graphics/wx/FontWx.cpp:
        (WebCore::Font::drawComplexText):
        * platform/graphics/wx/GraphicsContextWx.cpp:
        (WebCore::GraphicsContext::drawLineForText):
        (WebCore::GraphicsContext::drawLineForTextChecking):
        * platform/wx/WidgetWx.cpp:
        (WebCore::Widget::setFrameRect):

2011-02-16  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Brady Eidson.

        WebKit2: Need a way to manage the WebCore Cache
        https://bugs.webkit.org/show_bug.cgi?id=54501
        
        Add a way to get a set of all of the origins that have entries in the
        WebCore memory cache, and a method to remove all resources from the memory
        cache from a given security origin.

        No change in behavior.

        * WebCore.exp.in: Add functions that need to be exported.
        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::removeResourcesWithOrigin):
        (WebCore::MemoryCache::getOriginsWithCache):
        * loader/cache/MemoryCache.h:

2011-02-16  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=54244
        
        Convert the line box tree to floating point and eliminate font rounding hacks.  This patch removes all of the rounding
        hacks from the Font code and makes sure all Font APIs involving width measurement and width offsets use floats.
        
        The line box tree's x, y and logicalWidth members have all been converted to floats and all of the line box APIs have
        been changed as well.
        
        In terms of pixel adjustments, overflow is using an enclosing model (so it will be enclosingIntRect of a line box's x/y/width/height).
        
        Background and border painting is using a rounding model, so borders and backgrounds will round to the nearest pixel when painting.
        
        Replaced elements still snap to integer positions on lines, and they use a rounding model as well, although their underlying line boxes
        still have a precise floating point position.

        Justification will now allow subpixel positioning to occur as well.  Platforms that don't support subpixel positioning should already
        be rounding justification spacing in their font code.

        Many layout test results change on Mac, since rounding hacks were used there and are now gone.

        * WebCore.exp.in:
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawTextInternal):
        * platform/chromium/FileChooserChromium.cpp:
        (WebCore::FileChooser::basenameForWidth):
        * platform/graphics/Font.cpp:
        (WebCore::Font::width):
        * platform/graphics/Font.h:
        (WebCore::Font::spaceWidth):
        (WebCore::Font::tabWidth):
        * platform/graphics/FontFastPath.cpp:
        (WebCore::Font::getGlyphsAndAdvancesForSimpleText):
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawText):
        (WebCore::GraphicsContext::drawEmphasisMarks):
        (WebCore::GraphicsContext::drawBidiText):
        (WebCore::GraphicsContext::drawHighlightForText):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/SimpleFontData.cpp:
        (WebCore::SimpleFontData::SimpleFontData):
        (WebCore::SimpleFontData::platformGlyphInit):
        * platform/graphics/SimpleFontData.h:
        (WebCore::SimpleFontData::spaceWidth):
        * platform/graphics/StringTruncator.cpp:
        (WebCore::stringWidth):
        (WebCore::truncateString):
        (WebCore::StringTruncator::centerTruncate):
        (WebCore::StringTruncator::rightTruncate):
        (WebCore::StringTruncator::width):
        * platform/graphics/StringTruncator.h:
        * platform/graphics/TextRun.h:
        (WebCore::TextRun::TextRun):
        (WebCore::TextRun::xPos):
        (WebCore::TextRun::expansion):
        (WebCore::TextRun::directionalOverride):
        (WebCore::TextRun::disableSpacing):
        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::WidthIterator):
        (WebCore::WidthIterator::advance):
        * platform/graphics/WidthIterator.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawLineForText):
        (WebCore::GraphicsContext::drawLineForTextChecking):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawLineForText):
        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::ComplexTextController::ComplexTextController):
        (WebCore::ComplexTextController::advance):
        (WebCore::ComplexTextController::adjustGlyphsAndAdvances):
        * platform/graphics/mac/ComplexTextController.h:
        * platform/graphics/mac/FontComplexTextMac.cpp:
        (WebCore::Font::getGlyphsAndAdvancesForComplexText):
        * platform/graphics/mac/GraphicsContextMac.mm:
        (WebCore::GraphicsContext::drawLineForTextChecking):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::drawLineForText):
        (WebCore::GraphicsContext::drawLineForTextChecking):
        * platform/graphics/qt/SimpleFontDataQt.cpp:
        (WebCore::SimpleFontData::platformGlyphInit):
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::drawLineForTextChecking):
        (WebCore::GraphicsContext::drawLineForText):
        * platform/graphics/win/GraphicsContextCGWin.cpp:
        (WebCore::GraphicsContext::drawLineForTextChecking):
        * platform/graphics/win/UniscribeController.cpp:
        (WebCore::UniscribeController::shapeAndPlaceItem):
        * platform/gtk/FileChooserGtk.cpp:
        (WebCore::FileChooser::basenameForWidth):
        * platform/mac/DragImageMac.mm:
        (WebCore::widthWithFont):
        (WebCore::drawAtPoint):
        * platform/mac/FileChooserMac.mm:
        (WebCore::FileChooser::basenameForWidth):
        * platform/win/DragImageWin.cpp:
        (WebCore::createDragImageForLink):
        * platform/win/FileChooserWin.cpp:
        (WebCore::FileChooser::basenameForWidth):
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenuWin::calculatePositionAndSize):
        * platform/win/WebCoreTextRenderer.cpp:
        (WebCore::WebCoreTextFloatWidth):
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::addNodeToRectBasedTestResult):
        * rendering/HitTestResult.h:
        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::adjustPosition):
        (WebCore::InlineBox::placeEllipsisBox):
        (WebCore::InlineBox::locationIncludingFlipping):
        (WebCore::InlineBox::flipForWritingMode):
        * rendering/InlineBox.h:
        (WebCore::InlineBox::InlineBox):
        (WebCore::InlineBox::adjustLineDirectionPosition):
        (WebCore::InlineBox::adjustBlockDirectionPosition):
        (WebCore::InlineBox::setX):
        (WebCore::InlineBox::x):
        (WebCore::InlineBox::setY):
        (WebCore::InlineBox::y):
        (WebCore::InlineBox::width):
        (WebCore::InlineBox::height):
        (WebCore::InlineBox::logicalLeft):
        (WebCore::InlineBox::logicalRight):
        (WebCore::InlineBox::setLogicalLeft):
        (WebCore::InlineBox::pixelSnappedLogicalLeft):
        (WebCore::InlineBox::pixelSnappedLogicalRight):
        (WebCore::InlineBox::setLogicalWidth):
        (WebCore::InlineBox::logicalWidth):
        (WebCore::InlineBox::verticalAlign):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::roundedFrameRect):
        (WebCore::InlineFlowBox::adjustPosition):
        (WebCore::InlineFlowBox::placeBoxesInInlineDirection):
        (WebCore::InlineFlowBox::adjustMaxAscentAndDescent):
        (WebCore::verticalPositionForBox):
        (WebCore::InlineFlowBox::computeLogicalBoxHeights):
        (WebCore::InlineFlowBox::placeBoxesInBlockDirection):
        (WebCore::InlineFlowBox::addBoxShadowVisualOverflow):
        (WebCore::InlineFlowBox::addTextBoxVisualOverflow):
        (WebCore::InlineFlowBox::computeOverflow):
        (WebCore::InlineFlowBox::setLayoutOverflow):
        (WebCore::InlineFlowBox::setVisualOverflow):
        (WebCore::InlineFlowBox::nodeAtPoint):
        (WebCore::InlineFlowBox::paintBoxDecorations):
        (WebCore::InlineFlowBox::paintMask):
        (WebCore::InlineFlowBox::placeEllipsisBox):
        * rendering/InlineFlowBox.h:
        (WebCore::InlineFlowBox::maxYLayoutOverflow):
        (WebCore::InlineFlowBox::maxXLayoutOverflow):
        (WebCore::InlineFlowBox::layoutOverflowRect):
        (WebCore::InlineFlowBox::maxYVisualOverflow):
        (WebCore::InlineFlowBox::maxXVisualOverflow):
        (WebCore::InlineFlowBox::visualOverflowRect):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::placeEllipsisBox):
        (WebCore::InlineTextBox::nodeAtPoint):
        (WebCore::paintTextWithShadows):
        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::paintSelection):
        (WebCore::InlineTextBox::paintCompositionBackground):
        (WebCore::InlineTextBox::paintDecoration):
        (WebCore::InlineTextBox::paintSpellingOrGrammarMarker):
        (WebCore::InlineTextBox::paintTextMatchMarker):
        (WebCore::InlineTextBox::paintDocumentMarkers):
        (WebCore::InlineTextBox::paintCompositionUnderline):
        (WebCore::InlineTextBox::textPos):
        (WebCore::InlineTextBox::offsetForPosition):
        (WebCore::InlineTextBox::positionForOffset):
        * rendering/InlineTextBox.h:
        (WebCore::InlineTextBox::setExpansion):
        * rendering/RenderBR.h:
        (WebCore::RenderBR::width):
        * rendering/RenderBlock.cpp:
        (WebCore::stripTrailingSpace):
        (WebCore::updatePreferredWidth):
        (WebCore::RenderBlock::computeInlinePreferredLogicalWidths):
        (WebCore::RenderBlock::adjustForBorderFit):
        (WebCore::RenderBlock::addFocusRingRects):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::computeInlineDirectionPositionsForLine):
        (WebCore::RenderBlock::fitBelowFloats):
        (WebCore::textWidth):
        (WebCore::tryHyphenating):
        (WebCore::RenderBlock::findNextLineBreak):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::positionLineBox):
        (WebCore::RenderBox::flipForWritingMode):
        * rendering/RenderBox.h:
        * rendering/RenderCombineText.cpp:
        (WebCore::RenderCombineText::width):
        (WebCore::RenderCombineText::adjustTextOrigin):
        (WebCore::RenderCombineText::combineText):
        * rendering/RenderCombineText.h:
        (WebCore::RenderCombineText::combinedTextWidth):
        * rendering/RenderCounter.cpp:
        (WebCore::RenderCounter::computePreferredLogicalWidths):
        * rendering/RenderCounter.h:
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::getReplacementTextGeometry):
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::computePreferredLogicalWidths):
        * rendering/RenderImage.cpp:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::linesBoundingBox):
        (WebCore::RenderInline::linesVisualOverflowBoundingBox):
        (WebCore::RenderInline::addFocusRingRects):
        (WebCore::RenderInline::paintOutline):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::updateFromElement):
        (WebCore::RenderListBox::paintItemForeground):
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::updateOptionsWidth):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::localCaretRect):
        (WebCore::RenderText::widthFromCache):
        (WebCore::RenderText::trimmedPrefWidths):
        (WebCore::RenderText::minLogicalWidth):
        (WebCore::RenderText::maxLogicalWidth):
        (WebCore::RenderText::computePreferredLogicalWidths):
        (WebCore::RenderText::firstRunOrigin):
        (WebCore::RenderText::firstRunX):
        (WebCore::RenderText::firstRunY):
        (WebCore::RenderText::width):
        (WebCore::RenderText::linesBoundingBox):
        * rendering/RenderText.h:
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::getAvgCharWidth):
        (WebCore::RenderTextControl::paintPlaceholder):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::writeTextRun):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::placeEllipsis):
        (WebCore::RootInlineBox::placeEllipsisBox):
        (WebCore::RootInlineBox::adjustPosition):
        (WebCore::RootInlineBox::beforeAnnotationsAdjustment):
        (WebCore::RootInlineBox::paddedLayoutOverflowRect):
        * rendering/RootInlineBox.h:
        * rendering/VerticalPositionCache.h:
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::offsetForPosition):
        (WebCore::SVGInlineTextBox::positionForOffset):
        (WebCore::SVGInlineTextBox::constructTextRun):
        * rendering/svg/SVGInlineTextBox.h:
        * rendering/svg/SVGRenderTreeAsText.cpp:
        (WebCore::writeRenderSVGTextBox):
        * rendering/svg/SVGTextMetrics.cpp:
        (WebCore::SVGTextMetrics::SVGTextMetrics):
        (WebCore::constructTextRun):
        * svg/SVGFont.cpp:
        (WebCore::floatWidthMissingGlyphCallback):
        (WebCore::Font::drawTextUsingSVGFont):

2011-02-17  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        'ex' coordinates fail, when SVGFont doesn't provide an explicit xHeight attribute
        https://bugs.webkit.org/show_bug.cgi?id=54672

        Measure the xHeight from the 'x' glyph of a SVGFont, if the font itself doesn't explicitely specify an x-height attribute.
        Fixes the modern version of SVG 1.1 2nd Edition coords-units-03-b.svg.

        Test: svg/W3C-SVG-1.1-SE/coords-units-03-b.svg

        * platform/graphics/SimpleFontData.cpp:
        (WebCore::SimpleFontData::SimpleFontData):

2011-02-10  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Adam Roben.

        HTML5 <details> and <summary>: localized text
        https://bugs.webkit.org/show_bug.cgi?id=54260

        The method defaultDetailsSummaryText was added to LocalizationStrategy class and to
        platform/LocalizedStrings. It is used to provide the default label to be used by a
        <details> tag that has no <summary> child.

        * platform/LocalizationStrategy.h:
        * platform/LocalizedStrings.cpp:
        (WebCore::fileButtonNoFileSelectedLabel):
        (WebCore::defaultDetailsSummaryText):
        * platform/LocalizedStrings.h:
        * platform/android/LocalizedStringsAndroid.cpp:
        (WebCore::defaultDetailsSummaryText):
        * platform/brew/LocalizedStringsBrew.cpp:
        (WebCore::defaultDetailsSummaryText):
        * platform/efl/LocalizedStringsEfl.cpp:
        (WebCore::defaultDetailsSummaryText):
        * platform/gtk/LocalizedStringsGtk.cpp:
        (WebCore::defaultDetailsSummaryText):
        * platform/haiku/LocalizedStringsHaiku.cpp:
        (WebCore::defaultDetailsSummaryText):
        * platform/wx/LocalizedStringsWx.cpp:
        (WebCore::defaultDetailsSummaryText):

2011-02-17  Kristian Amlie  <kristian.amlie@nokia.com>

        Reviewed by Laszlo Gombos.

        Updated include paths for phonon.

        [Qt] WebKit patches required to work with a modularized version of Qt
        https://bugs.webkit.org/show_bug.cgi?id=53916

        Build fix. No tests.

        * WebCore.pro:

2011-02-17  Hui Huang  <hui.2.huang@nokia.com>

        Reviewed by Laszlo Gombos.

        The URL of HTML5 Video Element is percent encoded at websites such as youtube.
        It is percent encoded again by QUrl constructor QUrl::QUrl(QString). This causes
        the HTTP GET request for the video to be rejected by the service provider. 
        https://bugs.webkit.org/show_bug.cgi?id=53973.

        The bug is fixed by constructing QUrl from the encoded URL.

        New test function tst_QWebPage::loadHtml5Video() is added in 
        Source/WebKit/qt/tests/qwebpage/tst_qwebpage.cpp

        * platform/graphics/qt/MediaPlayerPrivateQt.cpp:
        (WebCore::MediaPlayerPrivateQt::commitLoad):

2011-02-17  Andreas Kling  <kling@webkit.org>

        Reviewed by Antti Koivisto.

        [Qt] Crash when calling QWebFrame::setUrl() while a previous load has pending requests
        https://bugs.webkit.org/show_bug.cgi?id=49216

        CachedResourceRequest::didFail() will protect the CachedResourceLoader's
        document() while it runs, but if we're being called from the Document destructor,
        the protecting RefPtr<Document> will cause a double-delete instead.

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::~CachedResourceLoader): Clear the m_document
        pointer so CachedResourceRequest::didFail() won't try to protect it.
        (WebCore::CachedResourceLoader::frame): Add null-check for m_document.

2011-02-17  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Pavel Feldman.

        Web Inspector: [Text editor] Add updateHighlight method to the highlighter
        https://bugs.webkit.org/show_bug.cgi?id=54448

        * inspector/front-end/SourceTokenizer.js:
        * inspector/front-end/TextEditorHighlighter.js:
        (WebInspector.TextEditorHighlighter.prototype.set mimeType):
        (WebInspector.TextEditorHighlighter.prototype.reset):
        (WebInspector.TextEditorHighlighter.prototype.updateHighlight):
        (WebInspector.TextEditorHighlighter.prototype._highlightInChunks):
        (WebInspector.TextEditorHighlighter.prototype._highlightLines):

2011-02-16  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: show all inlined scripts from single document in the same source frame.
        https://bugs.webkit.org/show_bug.cgi?id=54544

        Currently when debugging synchronously executed inlined scripts each script is shown in it's own source frame ("example.html:24").
        We should show such scripts in the same source frame "example.html" with <script></script> framing.

        Test: inspector/debugger/debug-inlined-scripts.html

        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._scriptSourceChanged):
        (WebInspector.ScriptsPanel.prototype._addScript):
        (WebInspector.ScriptsPanel.prototype._resourceForURL):
        (WebInspector.ScriptsPanel.prototype._resourceLoadingFinished):
        (WebInspector.ScriptsPanel.prototype.addConsoleMessage):
        (WebInspector.ScriptsPanel.prototype.clearConsoleMessages):
        (WebInspector.ScriptsPanel.prototype.reset):
        (WebInspector.ScriptsPanel.prototype._sourceFrameForResource):
        (WebInspector.ScriptsPanel.prototype._sourceFrameForScript):
        (WebInspector.ScriptsPanel.prototype._recreateSourceFrame):
        (WebInspector.ScriptsPanel.prototype._showScriptOrResource):
        (WebInspector.ScriptsPanel.prototype._addScriptToFilesMenu.optionCompare):
        (WebInspector.ScriptsPanel.prototype._addScriptToFilesMenu):
        (WebInspector.SourceFrameContentProviderForScript.prototype.requestContent):
        (WebInspector.SourceFrameContentProviderForScript.prototype._buildSource):

2011-02-17  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        svg/batik/paints/patternRegions-positioned-objects.svg fails on Windows
        https://bugs.webkit.org/show_bug.cgi?id=44484

        Pattern of pattern defined with objectBoundingBox does not render correctly
        https://bugs.webkit.org/show_bug.cgi?id=53463

        Fix <pattern> + patternContentUnits="objectBoundingBox" support.
        We were incorrrectly translating the tile image transform, by the target objects bbox.x()/y().
        RenderSVGResourceMask/Clipper don't have this error.
        
        Fix nesting <patterns> in objectBoundingBox mode, propagate the tileImageTransform as new user-space
        when drawing the pattern children. <mask> + <clipPath> don't have the problem.

        Test: svg/custom/nested-pattern-boundingBoxModeContent.svg

        * rendering/svg/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::buildTileImageTransform):
        (WebCore::RenderSVGResourcePattern::createTileImage):

2011-02-17  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed.

        [Qt][V8] Buildfix after r78752.

        * CodeGenerators.pri: Add missing IDL files.

2011-02-17  Benjamin Kalman  <kalman@chromium.org>

        Reviewed by Ryosuke Niwa.

        RTL lineboundary left/right is reversed when cursor is at start of RTL container
        https://bugs.webkit.org/show_bug.cgi?id=54534

        Test: editing/selection/extend-left-right-by-lineboundary.html

        Add missing cases for extending left/right by lineboundary.

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::modifyExtendingRight):
        (WebCore::SelectionController::modifyExtendingLeft):

2011-02-16  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] libsoup critical warnings
        https://bugs.webkit.org/show_bug.cgi?id=54557

        Avoid pausing a soup message for already downloaded resources.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandle::platformSetDefersLoading):

2011-02-16  Brian Ryner  <bryner@chromium.org>

        Reviewed by Darin Fisher.

        Split the socket address field into separate IP address and port fields.
        This will make the field less error-prone to parse, for example when
        dealing with IPv6 literals.
        https://bugs.webkit.org/show_bug.cgi?id=54607

        No new tests required.

        * platform/network/chromium/ResourceResponse.cpp:
        (WebCore::ResourceResponse::doPlatformCopyData):
        (WebCore::ResourceResponse::doPlatformAdopt):
        * platform/network/chromium/ResourceResponse.h:
        (WebCore::ResourceResponse::ResourceResponse):
        (WebCore::ResourceResponse::remoteIPAddress):
        (WebCore::ResourceResponse::setRemoteIPAddress):
        (WebCore::ResourceResponse::remotePort):
        (WebCore::ResourceResponse::setRemotePort):

2011-02-16  Dominic Mazzoni  <dmazzoni@google.com>

        Reviewed by Chris Fleizach.

        Add support for canvas fallback content.
        https://bugs.webkit.org/show_bug.cgi?id=50126

        Test: accessibility/canvas-fallback-content.html

        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):
        (WebCore::AccessibilityRenderObject::canHaveChildren):
        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (atkRole):
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::isFocusable):
        * rendering/RenderHTMLCanvas.cpp:
        (WebCore::RenderHTMLCanvas::recursiveSetNoNeedsLayout):
        (WebCore::RenderHTMLCanvas::layout):
        (WebCore::RenderHTMLCanvas::nodeAtPoint):
        * rendering/RenderHTMLCanvas.h:
        (WebCore::RenderHTMLCanvas::children):
        (WebCore::RenderHTMLCanvas::canHaveChildren):
        (WebCore::RenderHTMLCanvas::virtualChildren):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::repaint):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::write):

2011-02-16  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Simon Fraser.

        Allow acceleratesDrawing for WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=54511

        Plumb through preference for accelerated drawing.
        
        When accelerated drawing is enabled, set a flag on new GraphicsLayers.

        Not testable via Layout Tests

        * WebCore.exp.in:
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setAcceleratedDrawingEnabled):
        * page/Settings.h:
        (WebCore::Settings::acceleratedDrawingEnabled):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateBacking):

2011-02-16  Victoria Kirst  <vrk@google.com>

        Reviewed by Kenneth Russell.

        [chromium] Fix green pixels at edge of certain GPU-accelerated videos
        https://bugs.webkit.org/show_bug.cgi?id=54559

        Adds logic to properly resize the range of YUV textures to only
        select legitimate values.

        * platform/graphics/chromium/VideoFrameChromium.h:
        * platform/graphics/chromium/VideoLayerChromium.cpp:
        (WebCore::VideoLayerChromium::SharedValues::SharedValues):
        (WebCore::VideoLayerChromium::allocateTexturesIfNeeded):
        (WebCore::VideoLayerChromium::drawYUV):
        * platform/graphics/chromium/VideoLayerChromium.h:
        (WebCore::VideoLayerChromium::SharedValues::yWidthScaleFactorLocation):
        (WebCore::VideoLayerChromium::SharedValues::uvWidthScaleFactorLocation):

2011-02-16  Bill Budge  <bbudge@chromium.org>

        Reviewed by David Levin.

        Need didReceiveCachedMetadata, and finishTime for didFinishLoading exposed in ThreadableLoaderClient
        https://bugs.webkit.org/show_bug.cgi?id=54313

        No tests needed, exposes no new functionality

        * fileapi/FileReaderLoader.cpp:
        (WebCore::FileReaderLoader::didFinishLoading):
        * fileapi/FileReaderLoader.h:
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::setDefersLoading):
        (WebCore::DocumentThreadableLoader::didReceiveCachedMetadata):
        (WebCore::DocumentThreadableLoader::didFinishLoading):
        (WebCore::DocumentThreadableLoader::loadRequest):
        * loader/DocumentThreadableLoader.h:
        * loader/ThreadableLoaderClient.h:
        (WebCore::ThreadableLoaderClient::didReceiveData):
        (WebCore::ThreadableLoaderClient::didReceiveCachedMetadata):
        (WebCore::ThreadableLoaderClient::didFinishLoading):
        * loader/ThreadableLoaderClientWrapper.h:
        (WebCore::ThreadableLoaderClientWrapper::didReceiveData):
        (WebCore::ThreadableLoaderClientWrapper::didReceiveCachedMetadata):
        (WebCore::ThreadableLoaderClientWrapper::didFinishLoading):
        * loader/WorkerThreadableLoader.cpp:
        (WebCore::workerContextDidReceiveCachedMetadata):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didReceiveCachedMetadata):
        (WebCore::workerContextDidFinishLoading):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didFinishLoading):
        * loader/WorkerThreadableLoader.h:
        * notifications/Notification.cpp:
        (WebCore::Notification::didFinishLoading):
        * notifications/Notification.h:
        * page/EventSource.cpp:
        (WebCore::EventSource::didFinishLoading):
        * page/EventSource.h:
        * workers/WorkerScriptLoader.cpp:
        (WebCore::WorkerScriptLoader::didFinishLoading):
        * workers/WorkerScriptLoader.h:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::didFinishLoading):
        * xml/XMLHttpRequest.h:

2011-02-16  Jeremy Orlow  <jorlow@chromium.org>

        Fix uninitialized memory error.

        * storage/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::close):

2011-02-16  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Fix xssAuditor/form-action.html
        https://bugs.webkit.org/show_bug.cgi?id=54590

        We should block form actions.  Although this technically can't be used
        to run script, it's a pretty easy vector for stealing passwords.

        * html/parser/XSSFilter.cpp:
        (WebCore::XSSFilter::filterTokenInitial):
        (WebCore::XSSFilter::filterFormToken):
        * html/parser/XSSFilter.h:

2011-02-16  Abhishek Arya  <inferno@chromium.org>

        Reviewed by James Robinson.

        Remove the early bail added in r75823 since we can run into anonymous
        blocks when traversing the parents chain for clearing floats.
        https://bugs.webkit.org/show_bug.cgi?id=54601

        removeFloatingOrPositionedChildFromBlockLists tries to find the topmost
        parent containing "this" block and then tries to remove it from its floats
        list and mark all descendants blocks for layout. I added a bailout condition
        in r75823 because we thought that if one of the parent render block does not 
        contain "this" float, then it is safe to assume that none of the grand parents
        will have it. This is a wrong assumption since anonymous blocks do not have
        float objects and we need to go higher in the chain to find the top most parent
        containing this float. Instead of breaking out of the loop, it is ok to keep
        traversing the chain till we find that parent. Otherwise, we will leave deleted
        floats in the grand parents floats list.

        Test: fast/block/float/floats-not-cleared-from-grand-parents.html

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

2011-02-16  Andreas Kling  <kling@webkit.org>

        Reviewed by Ryosuke Niwa.

        Editing styles should not emit #RRGGBBAA colors
        https://bugs.webkit.org/show_bug.cgi?id=54540

        * editing/ApplyStyleCommand.cpp:
        (WebCore::StyleChange::extractTextStyles): Use Color::serialized()
        instead of Color::nameForRenderTreeAsText().

2011-02-16  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Kent Tamura.

        Improve showTree of Range, Position, and VisiblePosition
        https://bugs.webkit.org/show_bug.cgi?id=54536

        Enhanced showTree of Range, Position, and VisiblePosition.

        * dom/Position.cpp:
        (WebCore::Position::showAnchorTypeAndOffset): Added; dumps "legacy" if the position
        is a legacy position and also dumps anchor type.
        (WebCore::Position::showTreeForThis): Calls showAnchorTypeAndOffset.
        * dom/Position.h:
        * dom/Range.cpp:
        (showTree): No longer calls deprecatedEditingOffset.
        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::debugPosition): No longer included in release build.
        Calls Position::showAnchorTypeAndOffset instead of manually calling deprecatedEditingOffset.
        * editing/VisiblePosition.h:
        * editing/VisibleSelection.cpp:
        (WebCore::VisibleSelection::debugPosition): Ditto.
        (WebCore::VisibleSelection::showTreeForThis): Ditto.
        * editing/VisibleSelection.h:
        * page/EventHandler.cpp:

2011-02-16  David Grogan  <dgrogan@chromium.org>

        Reviewed by Jeremy Orlow.

        fix compile error introduced in 78752
        https://bugs.webkit.org/show_bug.cgi?id=54604

        * storage/IDBRequest.h:

2011-02-16  Jeremy Orlow  <jorlow@chromium.org>

        Back out IndexedDB change thats no longer necessary
        https://bugs.webkit.org/show_bug.cgi?id=54603

        Backing out 78645 as it turns out that it's not necessary.

        * storage/IDBFactoryBackendImpl.cpp:
        (WebCore::IDBFactoryBackendImpl::open):
        * storage/IDBFactoryBackendImpl.h:
        * storage/IDBFactoryBackendInterface.h:

2011-02-16  Brian Salomon  <bsalomon@google.com>

        Reviewed by James Robinson.

        Skia's gpu backed just needs the correct context bound before drawing. It will bind the correct FBO itself and doing so externally confuses it unless resetContext is called.

        No new tests required.

        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::syncSoftwareCanvas):

2011-02-16  Mike Reed  <reed@google.com>

        Reviewed by Kenneth Russell.

        Use non-asserting pack function for decoding images, since webgl may want
        a non-premultiplied version of the image.
        https://bugs.webkit.org/show_bug.cgi?id=54023

        No new tests.
        fast/canvas/webgl/gl-teximage.html
        fast/canvas/webgl/tex-image-with-format-and-type.html
        fast/canvas/webgl/texture-transparent-pixels-initialized.html

        * platform/image-decoders/ImageDecoder.h:
        (WebCore::ImageFrame::setRGBA):

2011-02-16  David Grogan  <dgrogan@chromium.org>

        Reviewed by Jeremy Orlow.

        indexeddb: make setVersion fire blocked event if other connections are open
        https://bugs.webkit.org/show_bug.cgi?id=53728

        Tests: storage/indexeddb/set_version_blocked.html
               storage/indexeddb/set_version_queue.html

        * WebCore.gypi:
        * bindings/js/JSEventCustom.cpp:
        (WebCore::toJS):
        * bindings/v8/custom/V8EventCustom.cpp:
        (WebCore::toV8):
        * dom/Event.cpp:
        (WebCore::Event::isIDBVersionChangeEvent):
        * dom/Event.h:
        * dom/EventNames.h:
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::toIDBVersionChangeRequest):
        * dom/EventTarget.h:
        * storage/IDBCallbacks.h:
        * storage/IDBDatabase.cpp:
        (WebCore::IDBDatabase::setVersion):
        (WebCore::IDBDatabase::close):
        * storage/IDBDatabase.h:
        * storage/IDBDatabase.idl:
        * storage/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::PendingSetVersionCall::create):
        (WebCore::IDBDatabaseBackendImpl::PendingSetVersionCall::version):
        (WebCore::IDBDatabaseBackendImpl::PendingSetVersionCall::callbacks):
        (WebCore::IDBDatabaseBackendImpl::PendingSetVersionCall::PendingSetVersionCall):
        (WebCore::IDBDatabaseBackendImpl::IDBDatabaseBackendImpl):
        (WebCore::IDBDatabaseBackendImpl::setVersion):
        (WebCore::IDBDatabaseBackendImpl::open):
        (WebCore::IDBDatabaseBackendImpl::close):
        * storage/IDBDatabaseBackendImpl.h:
        * storage/IDBDatabaseBackendInterface.h:
        * storage/IDBFactoryBackendImpl.cpp:
        (WebCore::IDBFactoryBackendImpl::open):
        * storage/IDBRequest.cpp:
        (WebCore::IDBRequest::onBlocked):
        (WebCore::IDBRequest::dispatchEvent):
        (WebCore::IDBRequest::source):
        * storage/IDBRequest.h:
        * storage/IDBVersionChangeEvent.cpp: Copied from Source/WebKit/chromium/src/WebIDBCallbacksImpl.h.
        (WebCore::IDBVersionChangeEvent::create):
        (WebCore::IDBVersionChangeEvent::IDBVersionChangeEvent):
        (WebCore::IDBVersionChangeEvent::~IDBVersionChangeEvent):
        (WebCore::IDBVersionChangeEvent::version):
        * storage/IDBVersionChangeEvent.h: Copied from Source/WebKit/chromium/src/WebIDBCallbacksImpl.h.
        (WebCore::IDBVersionChangeEvent::isIDBVersionChangeEvent):
        * storage/IDBVersionChangeEvent.idl: Added.
        * storage/IDBVersionChangeRequest.cpp: Copied from Source/WebKit/chromium/src/WebIDBCallbacksImpl.h.
        (WebCore::IDBVersionChangeRequest::create):
        (WebCore::IDBVersionChangeRequest::IDBVersionChangeRequest):
        (WebCore::IDBVersionChangeRequest::~IDBVersionChangeRequest):
        (WebCore::IDBVersionChangeRequest::onBlocked):
        * storage/IDBVersionChangeRequest.h: Copied from Source/WebKit/chromium/src/WebIDBCallbacksImpl.h.
        * storage/IDBVersionChangeRequest.idl: Copied from Source/WebKit/chromium/src/WebIDBCallbacksImpl.h.

2011-02-16  Robin Cao  <robin.cao@torchmobile.com.cn>

        Reviewed by James Robinson.

        PlatformContextSkia::applyAntiAliasedClipPaths does not work for paths which have evenOdd property
        https://bugs.webkit.org/show_bug.cgi?id=54336

        We need to take fill type of paths into account when drawing them.

        No new tests, covered by svg/W3C-SVG-1.1/masking-path-05-f.svg.

        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::applyAntiAliasedClipPaths):

2011-02-16  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        REGRESSION (r61234): washingtonpost.com top bar looks wrong, doesn't animate
        https://bugs.webkit.org/show_bug.cgi?id=53717

        Test: http/tests/local/absolute-url-strip-whitespace.html

        This was theoretically tested already in fast/url, however the
        tests were disabled due to lack of any clean way to test absolute
        url parsing in JavaScript.  I added a test which mimics the sites
        behavior using our local http server.  There seems to be no other
        way to test this at the moment.

        * platform/KURL.cpp:
        (WebCore::shouldTrimFromURL):
         - Any char 0-20 should be removed (matches google-url and other browsers).
        (WebCore::KURL::init):

2011-02-16  Abhishek Arya  <inferno@chromium.org>

        Reviewed by James Robinson.

        Traverse the next sibling tree to find the text fragment for a first letter.
        https://bugs.webkit.org/show_bug.cgi?id=54568

        We cannot assume that the next sibling to the first letter will a text fragment
        since there can be intermediatary Apple-style-span inline elements wrapping the
        text fragment. So, we traverse the next sibling tree to find it.
        Test: fast/css/first-letter-text-fragment-crash.html

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

2011-02-16  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] r78718 introduced some assertion failures in some HTTP tests
        https://bugs.webkit.org/show_bug.cgi?id=54592

        No new tests. This fix is covered by tests that are currently failing.

        * platform/network/soup/ResourceRequestSoup.cpp:
        (WebCore::ResourceRequest::updateFromSoupMessage): Instead of setting the existing
        headers and then selectively removing ones that do not exist in the updated soup
        message, just remove all headers from the map first.

2011-02-16  Jian Li  <jianli@chromium.org>

        Reviewed by Kenneth Russell.

        [V8] DataView constructor can be applied as a regular method
        https://bugs.webkit.org/show_bug.cgi?id=54563

        Tested by adding a new test case to fast/canvas/webgl/data-view-test.html.

        * bindings/v8/custom/V8DataViewCustom.cpp:
        (WebCore::V8DataView::constructorCallback):

== Rolled over to ChangeLog-2011-02-16 ==
